<?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>43600</bug_id>
          
          <creation_ts>2010-08-05 18:09:54 -0700</creation_ts>
          <short_desc>Add the support to register the blob data.</short_desc>
          <delta_ts>2010-08-10 17:54:19 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261005</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-05 18:09:54 -0700</bug_when>
    <thetext>This is the first step towards adding Blob URL support. The blob will have an internal URL (used by FileReader) and public URLs (for blob URL, to be added later). The URL and its associated data are managed by the BlobRegistry interface.

This patch does not change the existing infrastructure of using BlobItem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261014</commentid>
    <comment_count>1</comment_count>
      <attachid>63675</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-05 18:29:11 -0700</bug_when>
    <thetext>Created attachment 63675
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261016</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-05 18:30:38 -0700</bug_when>
    <thetext>Attachment 63675 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/html/BlobStorageData.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebCore/platform/BlobData.cpp:55:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bindings/js/SerializedScriptValue.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/html/BlobURL.cpp:62:  More than one command on the same line  [whitespace/newline] [4]
WebCore/html/Blob.cpp:70:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bindings/js/SerializedScriptValue.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 113 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261045</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-05 19:36:36 -0700</bug_when>
    <thetext>Attachment 63675 did not build on chromium:
Build output: http://queues.webkit.org/results/3637378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261427</commentid>
    <comment_count>4</comment_count>
      <attachid>63756</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-06 13:38:27 -0700</bug_when>
    <thetext>Created attachment 63756
Proposed Patch

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262261</commentid>
    <comment_count>5</comment_count>
      <attachid>63756</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-09 12:18:47 -0700</bug_when>
    <thetext>Comment on attachment 63756
Proposed Patch

The biggest concern is the threadsafety issues mentioned below.


&gt; diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj

There are a lot of changes in here unrelated to blobs. it would be nice to get rid of those.

&gt; diff --git a/WebCore/bindings/js/SerializedScriptValue.cpp b/WebCore/bindings/js/SerializedScriptValue.cpp

&gt; +    SerializedBlob(const Blob* blob)
&gt; +    {
&gt; +        m_url = blob-&gt;url().copy();
&gt; +        m_type = blob-&gt;type().crossThreadString();
&gt; +        m_size = blob-&gt;size();

Ideally these would be initialized using the m_url() format.


&gt; +    SerializedFile(const File* file)
&gt; +    {
&gt; +        m_path = file-&gt;path().crossThreadString();
&gt; +        m_url = file-&gt;url().copy();
&gt; +        m_type = file-&gt;type().crossThreadString();

Ditto.


&gt; diff --git a/WebCore/bindings/v8/SerializedScriptValue.cpp b/WebCore/bindings/v8/SerializedScriptValue.cpp
&gt; +        PassRefPtr&lt;Blob&gt; blob = Blob::create(getScriptExecutionContext(), KURL(ParsedURLString, url), type, size);

Use RefPtr for local variables.

&gt; +        PassRefPtr&lt;File&gt; file = File::create(getScriptExecutionContext(), path, KURL(ParsedURLString, url), type);

Ditto.



&gt; diff --git a/WebCore/html/BlobRegistryImpl.cpp b/WebCore/html/BlobRegistryImpl.cpp


&gt; +BlobRegistry&amp; BlobRegistry::instance()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(BlobRegistryImpl, instance, ());

Doesn&apos;t this initialization need to be thread-safe?

If so, use AtomicallyInitializedStatic.


Actually none of these methods appears thread safe, so how does it function with workers?


&gt; +
&gt; +void BlobRegistryImpl::appendStorageItems(BlobStorageData* blobStorageData, const BlobStorageDataItemList&amp; items, long long offset, long long length)
&gt; +{

Why not change length = -1 to MAX LONG LONG and then get rid of the special casing of it throughout. (Is all of the code OK with a blob that has a size of MAX LONG LONG.)


&gt; +    for (; iter != items.end() &amp;&amp; (length == -1 || length &gt; 0); ++iter) {
&gt; +        long long remainingLength = iter-&gt;length - offset;

I think &quot;currentLength&quot; reads better than remainingLength. (remainingLength indicates the length remaining to append but that is &quot;length&quot; in this code.)

&gt; +        long long newLength = (remainingLength &gt; length &amp;&amp; length != -1) ? length : remainingLength;
&gt; +        if (iter-&gt;type == BlobStorageDataItem::Data)
&gt; +            blobStorageData-&gt;appendData(iter-&gt;data, iter-&gt;offset + offset, newLength);
&gt; +        else {
&gt; +            ASSERT(iter-&gt;type == BlobStorageDataItem::File);
&gt; +            blobStorageData-&gt;appendFile(iter-&gt;path, iter-&gt;offset + offset, newLength, iter-&gt;expectedModificationTime);
&gt; +        }
&gt; +        if (length != -1)
&gt; +            length -= newLength;
&gt; +        offset = 0;
&gt; +    }
&gt; +}
&gt; +
&gt; +void BlobRegistryImpl::registerBlobURL(const KURL&amp; url, PassOwnPtr&lt;BlobData&gt; blobData)

&gt; +            break;
&gt; +        } default:

It is preferred not to have &quot;default&quot; when switching on an enum to allow the compiler to detect the unhandled enum.

&gt; +            ASSERT_NOT_REACHED();
&gt; +        }
&gt; +    }
&gt; +
&gt; +
&gt; +    m_blobs.set(url.string(), blobStorageData);
&gt; +}



&gt; diff --git a/WebCore/html/BlobRegistryImpl.h b/WebCore/html/BlobRegistryImpl.h
&gt; +    virtual void registerBlobURL(const KURL&amp; url, const KURL&amp; srcURL);

&quot;url&quot; param name not needed here.

&gt; diff --git a/WebCore/html/BlobURL.cpp b/WebCore/html/BlobURL.cpp

&gt; +KURL BlobURL::getOrigin(const KURL&amp; url)
&gt; +{
&gt; +    ASSERT(url.protocolIs(&quot;blob&quot;));
&gt; +
&gt; +    unsigned s = url.pathStart();;
&gt; +    unsigned e = url.pathAfterLastSlash();

Prefer whole words. Perhaps startIndex, afterEndIndex?

&gt; +    String origin = url.string().substring(s, e - s);
&gt; +    return KURL(ParsedURLString, decodeURLEscapeSequences(origin));


&gt; diff --git a/WebCore/platform/BlobData.h b/WebCore/platform/BlobData.h

&gt; +    void appendBlob(const KURL&amp; url, long long offset, long long length);

Param name &quot;url&quot; not needed.

&gt; diff --git a/WebCore/platform/BlobRegistry.h b/WebCore/platform/BlobRegistry.h
&gt; +    virtual void registerBlobURL(const KURL&amp;, PassOwnPtr&lt;BlobData&gt;) = 0;
&gt; +    virtual void registerBlobURL(const KURL&amp; url, const KURL&amp; srcURL) = 0;

No need for &quot;url&quot; parameter name here (1st parameter name).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262356</commentid>
    <comment_count>6</comment_count>
      <attachid>63944</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-09 15:35:38 -0700</bug_when>
    <thetext>Created attachment 63944
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262358</commentid>
    <comment_count>7</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-09 15:40:23 -0700</bug_when>
    <thetext>All fixed except the one commented inline.

(In reply to comment #5)
&gt; (From update of attachment 63756 [details])
&gt; The biggest concern is the threadsafety issues mentioned below.
&gt; 
&gt; 
&gt; &gt; diff --git a/WebCore/html/BlobRegistryImpl.cpp b/WebCore/html/BlobRegistryImpl.cpp
&gt; 
&gt; 
&gt; &gt; +BlobRegistry&amp; BlobRegistry::instance()
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(BlobRegistryImpl, instance, ());
&gt; 
&gt; Doesn&apos;t this initialization need to be thread-safe?
&gt; 
&gt; If so, use AtomicallyInitializedStatic.
&gt; 
&gt; 
&gt; Actually none of these methods appears thread safe, so how does it function with workers?

The thread-safe support for worker thread is not hooked yet. I am going to introduce a separate proxy class to handle all BlobRegistry calls in the main thread. For now, since we have not switched to using blob data code path yet, I think we can keep the current patent. I added comments in BlobRegistry.h and all the calls of BlobRegistry methods to explain this.
&gt; 
&gt; 
&gt; &gt; +
&gt; &gt; +void BlobRegistryImpl::appendStorageItems(BlobStorageData* blobStorageData, const BlobStorageDataItemList&amp; items, long long offset, long long length)
&gt; &gt; +{
&gt; 
&gt; Why not change length = -1 to MAX LONG LONG and then get rid of the special casing of it throughout. (Is all of the code OK with a blob that has a size of MAX LONG LONG.)
&gt; 
&gt; 
Unfortunately we have been using &quot;-1&quot; to mean to end of file for quite some time. There&apos;re other codes that assume this.

For better readability, I introduced constants in BlobData.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262360</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-09 15:41:31 -0700</bug_when>
    <thetext>Attachment 63944 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/html/BlobStorageData.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebCore/html/BlobURL.cpp:62:  More than one command on the same line  [whitespace/newline] [4]
WebCore/bindings/js/SerializedScriptValue.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 110 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262373</commentid>
    <comment_count>9</comment_count>
      <attachid>63944</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-09 15:53:35 -0700</bug_when>
    <thetext>Comment on attachment 63944
Proposed Patch

Just a few things to consider...

&gt; diff --git a/WebCore/html/BlobRegistryImpl.cpp b/WebCore/html/BlobRegistryImpl.cpp
&gt; +void BlobRegistryImpl::appendStorageItems(BlobStorageData* blobStorageData, const BlobStorageDataItemList&amp; items, long long offset, long long length)
&gt; +{

Convert length == BlobDataItem::toEndOfFile to MAX LONG LONG here using an if statement?

&gt; +    BlobStorageDataItemList::const_iterator iter = items.begin();
&gt; +    if (offset) {
&gt; +        for (; iter != items.end(); ++iter) {
&gt; +            ASSERT(iter-&gt;length != BlobDataItem::toEndOfFile);
&gt; +            if (offset &gt;= iter-&gt;length)
&gt; +                offset -= iter-&gt;length;
&gt; +            else
&gt; +                break;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    for (; iter != items.end() &amp;&amp; (length == BlobDataItem::toEndOfFile || length &gt; 0); ++iter) {
&gt; +        long long currentLength = iter-&gt;length - offset;
&gt; +        long long newLength = (currentLength &gt; length &amp;&amp; length != BlobDataItem::toEndOfFile) ? length : currentLength;
&gt; +        if (iter-&gt;type == BlobStorageDataItem::Data)
&gt; +            blobStorageData-&gt;appendData(iter-&gt;data, iter-&gt;offset + offset, newLength);
&gt; +        else {
&gt; +            ASSERT(iter-&gt;type == BlobStorageDataItem::File);
&gt; +            blobStorageData-&gt;appendFile(iter-&gt;path, iter-&gt;offset + offset, newLength, iter-&gt;expectedModificationTime);
&gt; +        }
&gt; +        if (length != BlobDataItem::toEndOfFile)
&gt; +            length -= newLength;
&gt; +        offset = 0;
&gt; +    }
&gt; +}


&gt; diff --git a/WebCore/html/BlobRegistryImpl.h b/WebCore/html/BlobRegistryImpl.h
&gt; +#if ENABLE(BLOB)
&gt; +
&gt; +#include &quot;BlobData.h&quot;
&gt; +#include &quot;BlobRegistry.h&quot;
&gt; +#include &quot;BlobStorageData.h&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +#include &lt;wtf/HashMap.h&gt;
&gt; +#include &lt;wtf/RefCounted.h&gt;

RefCounted doesn&apos;t seem to be used in this header (but PassOwnPtr and RefPtr are.)


&gt; diff --git a/WebCore/html/BlobStorageData.h b/WebCore/html/BlobStorageData.h

&gt; +    typedef enum { Data, File } BlobStoreDataItemType;

Why not just

 enum BlobStoreDataItemType { 
    Data, 
    File 
 };

without the typedef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262914</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-10 17:13:13 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65102 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262925</commentid>
    <comment_count>11</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-10 17:54:19 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65102.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63675</attachid>
            <date>2010-08-05 18:29:11 -0700</date>
            <delta_ts>2010-08-06 13:38:27 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43600</filename>
            <type>text/plain</type>
            <size>71605</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGFjMDk4YjcuLmE4MjAwZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTI2LDYgKzkyNiw4IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0FzeW5jSW1hZ2VSZXNpemVyLmNwcAogICAgIGh0
bWwvQmxvYi5jcHAKICAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcAorICAgIGh0bWwvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKKyAgICBodG1sL0Jsb2JVUkwuY3BwCiAgICAgaHRtbC9Db2xsZWN0aW9uQ2Fj
aGUuY3BwCiAgICAgaHRtbC9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL0RPTURhdGFH
cmlkRGF0YVNvdXJjZS5jcHAKQEAgLTExODcsNiArMTE4OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAgIHBsYXRm
b3JtL0FyZW5hLmNwcAorICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRmb3JtL0Js
b2JJdGVtLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZmRjNzU4Li5lNzQ1OGI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEwLTA4LTA1
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIHN1cHBvcnQgdG8gcmVnaXN0ZXIgdGhl
IGJsb2IgZGF0YS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQzNjAwCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGFkZGlu
ZyBCbG9iIFVSTCBzdXBwb3J0LiBUaGUgYmxvYiBoYXMKKyAgICAgICAgYW4gaW50ZXJuYWwgVVJM
ICh1c2VkIGJ5IEZpbGVSZWFkZXIpIGFuZCBwdWJsaWMgVVJMcyAodXNlZCBieSBCbG9iLnVybCku
CisgICAgICAgIFRoZSBVUkwgYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgYXJlIG1hbmFnZWQgYnkg
QmxvYlJlZ2lzdHJ5IGludGVyZmFjZS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHJl
bW92ZSB0aGUgdXNhZ2Ugb2YgQmxvYkl0ZW0uIEl0IHdpbGwgYmUgcmVtb3ZlZAorICAgICAgICB3
aGVuIGFsbCB0aGUgYmxvYiBkYXRhIHN1cHBvcnQgaXMgaG9va2VkIHVwIGFuZCB0aGUgbmV3IHRl
c3RzIHdpbGwgYmUKKyAgICAgICAgYWRkZWQgdGhlbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZEJsb2I6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6U2VyaWFsaXplZEJsb2IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZEZpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
RmlsZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkRmlsZTo6dXJsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRGaWxlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZWRGaWxlOjpTZXJpYWxpemVkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkRmlsZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZEZpbGVM
aXN0OjpTZXJpYWxpemVkRmlsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZFNlcmlhbGl6ZWREYXRhOjphc0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXpp
bmdUcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNl
cmlhbGl6aW5nVHJlZVdhbGtlcjo6Y29udmVydElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVhcmRvd25UcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGE6OmFzRmlsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6V3JpdGVyOjp3cml0ZUJs
b2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpXcml0ZXI6OndyaXRlRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6d3JpdGVGaWxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6ZG9Xcml0ZVVpbnRIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFn
OjpTZXJpYWxpemVyOjp3cml0ZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpTZXJp
YWxpemVyOjp3cml0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJl
YWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGVMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50SGVscGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpSZWFkZXI6OmRvUmVhZFVpbnQ2NCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6dHJhY2tCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnJldm9rZUJsb2JVUkwpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0Lmg6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6fkJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKiBodG1sL0Jsb2Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjp1cmwpOgorICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L0Jsb2JTdG9yYWdlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9G
aWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAqIGh0bWwv
RmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9CbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JEYXRhLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKwogMjAx
MC0wOC0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDU4ZDZjMTkuLmNhYzE5YmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTMwMCw2ICsxMzAwLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1s
L0Jsb2IuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9odG1s
L0Jsb2JCdWlsZGVyLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBcCisJ
V2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaCBcCisJV2ViQ29yZS9odG1sL0Jsb2JTdG9y
YWdlRGF0YS5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgXAorCVdlYkNvcmUvaHRtbC9C
bG9iVVJMLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMu
aCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAogCVdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCkBAIC0xODU0LDggKzE4NTksMTEgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9vbC5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iRGF0YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9CbG9iSXRlbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9D
b250ZW50VHlwZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGJhZDEyM2UuLjViN2IyNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDIwLDYgKzE0MjAsMTEgQEAKICAgICAgICAgICAg
ICdodG1sL0Jsb2IuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iQnVpbGRlci5jcHAnLAogICAg
ICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iUmVn
aXN0cnlJbXBsLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvQmxvYlN0b3JhZ2VEYXRhLmgnLAorICAgICAgICAgICAgJ2h0bWwv
QmxvYlVSTC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYlVSTC5oJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlclZpZXcuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXIuY3BwJywKQEAgLTI5NzcsOCArMjk4MiwxMSBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0FyZW5hLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Js
b2JEYXRhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkRhdGEuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9i
SXRlbS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9D
b250ZW50VHlwZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggMjdjNzZmZS4uMWY1YmNlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02MTQsNiArNjE0LDggQEAgU09VUkNFUyArPSBcCiAg
ICAgaHRtbC9Bc3luY0ltYWdlUmVzaXplci5jcHAgXAogICAgIGh0bWwvQmxvYi5jcHAgXAogICAg
IGh0bWwvQmxvYkJ1aWxkZXIuY3BwIFwKKyAgICBodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwK
KyAgICBodG1sL0Jsb2JVUkwuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5j
cHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNQaXhlbEFycmF5LmNwcCBcCkBAIC04NTUsNiArODU3LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2Fu
aW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKKyAg
ICBwbGF0Zm9ybS9CbG9iRGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAg
ICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmNwcCBcCkBAIC0xMzc0LDYgKzEzNzcsOSBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0Fz
eW5jSW1hZ2VSZXNpemVyLmggXAogICAgIGh0bWwvQmxvYi5oIFwKICAgICBodG1sL0Jsb2JCdWls
ZGVyLmggXAorICAgIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wLmggXAorICAgIGh0bWwvQmxvYlN0b3Jh
Z2VEYXRhLmggXAorICAgIGh0bWwvQmxvYlVSTC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwv
Y2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCkBAIC0xNjIzLDcgKzE2MjksOSBAQCBIRUFERVJT
ICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAorICAg
IHBsYXRmb3JtL0Jsb2JEYXRhLmggXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmggXAorICAgIHBs
YXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKICAg
ICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGll
ci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDNiZWZhYjkuLjEx
NTUzMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjMxODUsNiAr
MjMxODUsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XEJsb2JJdGVtLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yMzE5Myw2ICsyMzIwMSwx
MCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxCbG9iUmVnaXN0cnkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkBAIC0zNjE1Myw2ICszNjE2NSwyNiBAQAogCQkJCT4NCiAJCQk8L0Zp
bGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JSZWdpc3RyeUlt
cGwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxCbG9iUmVnaXN0cnlJbXBsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JTdG9yYWdlRGF0YS5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxC
bG9iVVJMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcQmxvYlVSTC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggOGM3MWY4Mi4uYjdhY2FlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNyw2ICs3MDcsMTQgQEAKIAkJMkVDRjdBRTIxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50Lmgg
Ki87IH07CiAJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlCQTExNDVC
MDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovOyB9OwogCQkyRUQ2MDlCRDExNDVCMDcx
MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5o
ICovOyB9OworCQkyRUVENTY1NzEyMEI5MjdBMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY1
MjEyMEI5MjdBMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87IH07CisJCTJFRUQ1
NjU4MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY1MzEyMEI5MjdBMDA3NjU2QkIg
LyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OworCQkyRUVENTY1OTEyMEI5MjdBMDA3NjU2QkIg
LyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUVENTY1NDEyMEI5MjdBMDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmgg
Ki87IH07CisJCTJFRUQ1NjVBMTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NjU1MTIwQjkyN0Ew
MDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLzsgfTsKKwkJMkVFRDU2NUIxMjBCOTI3QTAwNzY1NkJC
IC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFRUQ1NjU2MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iVVJMLmggKi87IH07CisJCTJFRUQ1
NjVGMTIwQjkyQTcwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY1QzEyMEI5MkE3MDA3NjU2QkIgLyogQmxv
YkRhdGEuY3BwICovOyB9OworCQkyRUVENTY2MDEyMEI5MkE3MDA3NjU2QkIgLyogQmxvYkRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NjVE
MTIwQjkyQTcwMDc2NTZCQiAvKiBCbG9iRGF0YS5oICovOyB9OworCQkyRUVENTY2MTEyMEI5MkE3
MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY1RTEyMEI5MkE3MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5
LmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87
IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTZG
MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJMzEy
ODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAwRTMwMDVE
NjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAtNjQyMCw2
ICs2NDI4LDE0IEBACiAJCTJFQ0Y3QUUwMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJvckV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUZvcm1EYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkIxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUZvcm1E
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NjUyMTIwQjkyN0EwMDc2
NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJsb2JSZWdpc3RyeUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyRUVENTY1MzEyMEI5MjdBMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVnaXN0cnlJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NjU0MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iU3Rv
cmFnZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlN0b3JhZ2VE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NjU1MTIwQjkyN0EwMDc2
NTZCQiAvKiBCbG9iVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJsb2JVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTY1NjEyMEI5
MjdBMDA3NjU2QkIgLyogQmxvYlVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCbG9iVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NjVDMTIwQjky
QTcwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCbG9iRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1
NjVEMTIwQjkyQTcwMDc2NTZCQiAvKiBCbG9iRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCbG9iRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVE
NTY1RTEyMEI5MkE3MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJsb2JSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTI4OEU2RTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1l
UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4RTZGMEUzMDA1RDYw
MDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxMjg4RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tl
eWZyYW1lc1J1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM3NTIsNiAr
MTM3NjgsMTEgQEAKIAkJCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIu
Y3BwICovLAogCQkJCTg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5oICov
LAogCQkJCTg5Q0QwMjc5MTFDODU5QTgwMDcwQjc5MSAvKiBCbG9iQnVpbGRlci5pZGwgKi8sCisJ
CQkJMkVFRDU2NTIxMjBCOTI3QTAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwICovLAor
CQkJCTJFRUQ1NjUzMTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggKi8sCisJ
CQkJMkVFRDU2NTQxMjBCOTI3QTAwNzY1NkJCIC8qIEJsb2JTdG9yYWdlRGF0YS5oICovLAorCQkJ
CTJFRUQ1NjU1MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLywKKwkJCQkyRUVENTY1
NjEyMEI5MjdBMDA3NjU2QkIgLyogQmxvYlVSTC5oICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEzQUUxMDBD
MUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2MzA3LDggKzE2MzI4LDExIEBACiAJ
CQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAqLywKIAkJCQlCQ0ZCMkY3
NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1MUUxRUNCMTBDOTFDNTU2MDBE
QzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJMkVFRDU2NUMxMjBCOTJBNzAwNzY1
NkJCIC8qIEJsb2JEYXRhLmNwcCAqLywKKwkJCQkyRUVENTY1RDEyMEI5MkE3MDA3NjU2QkIgLyog
QmxvYkRhdGEuaCAqLywKIAkJCQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0u
Y3BwICovLAogCQkJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAor
CQkJCTJFRUQ1NjVFMTIwQjkyQTcwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCAqLywKIAkJCQlC
Q0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAx
NUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1Qzgw
RjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCkBAIC0xOTk4Niw2ICsyMDAxMCwx
MSBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1v
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFRUQ1NjU4MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9i
UmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY1OTEyMEI5MjdBMDA3NjU2
QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY1QjEyMEI5
MjdBMDA3NjU2QkIgLyogQmxvYlVSTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVFRDU2NjAxMjBC
OTJBNzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY2MTEy
MEI5MkE3MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMDQ1
LDcgKzIwMDc0LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lv
biA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFz
U2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlz
aCwKQEAgLTIyMzkxLDYgKzIyNDE5LDkgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRE
NkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QkNGRDA1
MTIwQTA0NjEwMEI1RjEyMiAvKiBTVkdQYXRoU2VnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJF
RUQ1NjU3MTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTJFRUQ1NjVBMTIwQjkyN0EwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTJFRUQ1NjVGMTIwQjkyQTcwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAppbmRleCA2ZDZmYTIxLi4wNzk2YzJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAorI2luY2x1ZGUg
IkJsb2IuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1
ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxpc3Qu
aCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgpAQCAtMTQ3LDI2ICsxNDksODYgQEAgcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKK2NsYXNzIFNlcmlhbGl6ZWRCbG9iIDog
cHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkQmxvYj4gY3JlYXRlKGNvbnN0IEJsb2IqIGJsb2IpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRCbG9iKGJsb2IpKTsKKyAgICB9CisK
KyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAg
U2VyaWFsaXplZEJsb2IoY29uc3QgQmxvYiogYmxvYikKKyAgICB7CisgICAgICAgIG1fdXJsID0g
YmxvYi0+dXJsKCkuY29weSgpOworICAgICAgICBtX3R5cGUgPSBibG9iLT50eXBlKCkuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKKyAgICAgICAgbV9zaXplID0gYmxvYi0+c2l6ZSgpOworICAgIH0KKwor
ICAgIEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbV9zaXplOworfTsKKworY2xhc3MgU2VyaWFsaXplZEZpbGUgOiBwdWJsaWMgU2hhcmVkU2Vy
aWFsaXplZERhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRG
aWxlPiBjcmVhdGUoY29uc3QgRmlsZSogZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2VyaWFsaXplZEZpbGUoZmlsZSkpOworICAgIH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisKK3ByaXZhdGU6CisgICAgU2VyaWFsaXplZEZpbGUoY29uc3Qg
RmlsZSogZmlsZSkKKyAgICB7CisgICAgICAgIG1fcGF0aCA9IGZpbGUtPnBhdGgoKS5jcm9zc1Ro
cmVhZFN0cmluZygpOworICAgICAgICBtX3VybCA9IGZpbGUtPnVybCgpLmNvcHkoKTsKKyAgICAg
ICAgbV90eXBlID0gZmlsZS0+dHlwZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgfQorCisg
ICAgU3RyaW5nIG1fcGF0aDsKKyAgICBLVVJMIG1fdXJsOworICAgIFN0cmluZyBtX3R5cGU7Cit9
OworCiBjbGFzcyBTZXJpYWxpemVkRmlsZUxpc3QgOiBwdWJsaWMgU2hhcmVkU2VyaWFsaXplZERh
dGEgewogcHVibGljOgorICAgIHN0cnVjdCBGaWxlRGF0YSB7CisgICAgICAgIFN0cmluZyBwYXRo
OworICAgICAgICBLVVJMIHVybDsKKyAgICAgICAgU3RyaW5nIHR5cGU7CisgICAgfTsKKwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRGaWxlTGlzdD4gY3JlYXRlKGNvbnN0IEZpbGVM
aXN0KiBsaXN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVk
RmlsZUxpc3QobGlzdCkpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBpdGVtKHVuc2lnbmVk
IGlkeCkgeyByZXR1cm4gbV9maWxlc1tpZHhdOyB9CisgICAgY29uc3QgRmlsZURhdGEmIGl0ZW0o
dW5zaWduZWQgaWR4KSB7IHJldHVybiBtX2ZpbGVzW2lkeF07IH0KIAogcHJpdmF0ZToKICAgICBT
ZXJpYWxpemVkRmlsZUxpc3QoY29uc3QgRmlsZUxpc3QqIGxpc3QpCiAgICAgewogICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBsaXN0LT5sZW5ndGgoKTsKICAgICAgICAgbV9maWxlcy5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQotICAgICAgICAgICAgbV9maWxlcy5hcHBlbmQobGlzdC0+aXRlbShpKS0+cGF0aCgp
LmNyb3NzVGhyZWFkU3RyaW5nKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEZpbGUqIGZpbGUgPSBsaXN0LT5pdGVtKGkpOwor
ICAgICAgICAgICAgRmlsZURhdGEgZmlsZURhdGE7CisgICAgICAgICAgICBmaWxlRGF0YS5wYXRo
ID0gZmlsZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBmaWxlRGF0
YS51cmwgPSBmaWxlLT51cmwoKS5jb3B5KCk7CisgICAgICAgICAgICBmaWxlRGF0YS50eXBlID0g
ZmlsZS0+dHlwZSgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBtX2ZpbGVzLmFw
cGVuZChmaWxlRGF0YSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBt
X2ZpbGVzOworICAgIFZlY3RvcjxGaWxlRGF0YT4gbV9maWxlczsKIH07CiAKIGNsYXNzIFNlcmlh
bGl6ZWRJbWFnZURhdGEgOiBwdWJsaWMgU2hhcmVkU2VyaWFsaXplZERhdGEgewpAQCAtMjE3LDkg
KzI3OSwxNSBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWVEYXRhKGNvbnN0IEltYWdlRGF0YSogaW1hZ2VEYXRhKQogewogfQogCitTZXJpYWxpemVkU2Ny
aXB0VmFsdWVEYXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEJsb2IqIGJsb2Ip
CisgICAgOiBtX3R5cGUoQmxvYlR5cGUpCisgICAgLCBtX3NoYXJlZERhdGEoU2VyaWFsaXplZEJs
b2I6OmNyZWF0ZShibG9iKSkKK3sKK30KKwogU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBGaWxlKiBmaWxlKQogICAgIDogbV90eXBlKEZp
bGVUeXBlKQotICAgICwgbV9zdHJpbmcoZmlsZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCkp
CisgICAgLCBtX3NoYXJlZERhdGEoU2VyaWFsaXplZEZpbGU6OmNyZWF0ZShmaWxlKSkKIHsKIH0K
IApAQCAtMjMzLDYgKzMwMSwxNiBAQCBTZXJpYWxpemVkT2JqZWN0KiBTaGFyZWRTZXJpYWxpemVk
RGF0YTo6YXNPYmplY3QoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZXJpYWxpemVkT2JqZWN0
Kj4odGhpcyk7CiB9CiAKK1NlcmlhbGl6ZWRCbG9iKiBTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNC
bG9iKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2VyaWFsaXplZEJsb2IqPih0aGlzKTsK
K30KKworU2VyaWFsaXplZEZpbGUqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc0ZpbGUoKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZXJpYWxpemVkRmlsZSo+KHRoaXMpOworfQorCiBTZXJp
YWxpemVkRmlsZUxpc3QqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc0ZpbGVMaXN0KCkKIHsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U2VyaWFsaXplZEZpbGVMaXN0Kj4odGhpcyk7CkBAIC01NzAs
NiArNjQ4LDggQEAgc3RydWN0IFNlcmlhbGl6aW5nVHJlZVdhbGtlciA6IHB1YmxpYyBCYXNlV2Fs
a2VyIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdCh2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAob2JqLT5pbmhlcml0cygmSlNGaWxlOjpzX2luZm8pKQogICAgICAgICAgICAg
ICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKHRvRmlsZShvYmopKTsKKyAgICAg
ICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodG9CbG9iKG9iaikpOwogICAgICAg
ICAgICAgaWYgKG9iai0+aW5oZXJpdHMoJkpTRmlsZUxpc3Q6OnNfaW5mbykpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEodG9GaWxlTGlzdChvYmopKTsK
ICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKCZKU0ltYWdlRGF0YTo6c19pbmZvKSkKQEAg
LTczNiwxMiArODE2LDIxIEBAIHN0cnVjdCBEZXNlcmlhbGl6aW5nVHJlZVdhbGtlciA6IHB1Ymxp
YyBCYXNlV2Fsa2VyIHsKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIobV9leGVjLCB2
YWx1ZS5hc0RvdWJsZSgpKTsKICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVl
RGF0YTo6RGF0ZVR5cGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9leGVjKSBEYXRl
SW5zdGFuY2UobV9leGVjLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZS5h
c0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6
QmxvYlR5cGU6IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgICAgICAgICBTZXJp
YWxpemVkQmxvYiogc2VyaWFsaXplZEJsb2IgPSB2YWx1ZS5hc0Jsb2IoKTsKKyAgICAgICAgICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMobV9leGVj
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgQmxvYjo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHNlcmlhbGl6ZWRCbG9iLT51cmwoKSwgc2Vy
aWFsaXplZEJsb2ItPnR5cGUoKSwgc2VyaWFsaXplZEJsb2ItPnNpemUoKSkpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpGaWxlVHlw
ZTogewogICAgICAgICAgICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgICAgIFNlcmlhbGl6ZWRG
aWxlKiBzZXJpYWxpemVkRmlsZSA9IHZhbHVlLmFzRmlsZSgpOwogICAgICAgICAgICAgICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRp
Y19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBGaWxlOjpjcmVhdGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdmFsdWUuYXNTdHJpbmcoKS5jcm9zc1RocmVhZFN0cmlu
ZygpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgRmlsZTo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIHNlcmlhbGl6ZWRGaWxlLT5wYXRoKCksIHNlcmlhbGl6ZWRGaWxlLT51
cmwoKSwgc2VyaWFsaXplZEZpbGUtPnR5cGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpGaWxlTGlzdFR5cGU6IHsKICAgICAg
ICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCkBAIC03NTEsOCArODQwLDEwIEBA
IHN0cnVjdCBEZXNlcmlhbGl6aW5nVHJlZVdhbGtlciA6IHB1YmxpYyBCYXNlV2Fsa2VyIHsKICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzZXJpYWxpemVkRmlsZUxpc3QtPmxlbmd0
aCgpOwogICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBzZXJp
YWxpemVkRmlsZUxpc3QtPml0ZW0oaSkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU2Vy
aWFsaXplZEZpbGVMaXN0OjpGaWxlRGF0YSYgZmlsZURhdGEgPSBzZXJpYWxpemVkRmlsZUxpc3Qt
Pml0ZW0oaSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKEZpbGU6OmNyZWF0
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlRGF0YS5wYXRoLCBmaWxlRGF0YS51cmwsIGZp
bGVEYXRhLnR5cGUpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2Jq
ZWN0KSwgcmVzdWx0LmdldCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6SW1hZ2VEYXRhVHlwZTogewpAQCAtOTIwLDYgKzEwMTEs
NyBAQCBzdHJ1Y3QgVGVhcmRvd25UcmVlV2Fsa2VyIHsKICAgICAgICAgICAgIGNhc2UgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6TnVtYmVyVHlwZToKICAgICAgICAgICAgIGNhc2UgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YTo6RGF0ZVR5cGU6CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZURhdGE6OkVtcHR5VHlwZToKKyAgICAgICAgICAgIGNhc2UgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YTo6QmxvYlR5cGU6CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OkZpbGVUeXBlOgogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWVEYXRhOjpGaWxlTGlzdFR5cGU6CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OkltYWdlRGF0YVR5cGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA5M2JkMGRlLi5jMTY1ODEwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTMzLDEwICszMywxMyBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBCbG9iOwogICAgIGNsYXNzIEZpbGU7CiAgICAgY2xhc3MgRmls
ZUxpc3Q7CiAgICAgY2xhc3MgSW1hZ2VEYXRhOwogICAgIGNsYXNzIFNlcmlhbGl6ZWRBcnJheTsK
KyAgICBjbGFzcyBTZXJpYWxpemVkQmxvYjsKKyAgICBjbGFzcyBTZXJpYWxpemVkRmlsZTsKICAg
ICBjbGFzcyBTZXJpYWxpemVkRmlsZUxpc3Q7CiAgICAgY2xhc3MgU2VyaWFsaXplZEltYWdlRGF0
YTsKICAgICBjbGFzcyBTZXJpYWxpemVkT2JqZWN0OwpAQCAtNDYsNiArNDksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNoYXJlZFNlcmlhbGl6ZWREYXRhKCkgeyB9
CiAgICAgICAgIFNlcmlhbGl6ZWRBcnJheSogYXNBcnJheSgpOwogICAgICAgICBTZXJpYWxpemVk
T2JqZWN0KiBhc09iamVjdCgpOworICAgICAgICBTZXJpYWxpemVkQmxvYiogYXNCbG9iKCk7Cisg
ICAgICAgIFNlcmlhbGl6ZWRGaWxlKiBhc0ZpbGUoKTsKICAgICAgICAgU2VyaWFsaXplZEZpbGVM
aXN0KiBhc0ZpbGVMaXN0KCk7CiAgICAgICAgIFNlcmlhbGl6ZWRJbWFnZURhdGEqIGFzSW1hZ2VE
YXRhKCk7CiAgICAgfTsKQEAgLTYyLDYgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgT2JqZWN0VHlwZSwKICAgICAgICAgICAgIEFycmF5VHlwZSwKICAgICAgICAgICAg
IFN0cmluZ1R5cGUsCisgICAgICAgICAgICBCbG9iVHlwZSwKICAgICAgICAgICAgIEZpbGVUeXBl
LAogICAgICAgICAgICAgRmlsZUxpc3RUeXBlLAogICAgICAgICAgICAgSW1hZ2VEYXRhVHlwZQpA
QCAtODcsNyArOTMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fc3Ry
aW5nKHN0cmluZy5jcm9zc1RocmVhZFN0cmluZygpKSAvLyBGSVhNRTogU2hvdWxkIGJlIGFibGUg
dG8ganVzdCBzaGFyZSB0aGUgUmVwCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKKwor
ICAgICAgICBleHBsaWNpdCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEJsb2IqKTsK
ICAgICAgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBGaWxlKik7
CiAgICAgICAgIGV4cGxpY2l0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZUxp
c3QqKTsKICAgICAgICAgZXhwbGljaXQgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBJ
bWFnZURhdGEqKTsKQEAgLTEyMiw3ICsxMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgU3RyaW5nIGFzU3RyaW5nKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlIHx8IG1fdHlwZSA9PSBGaWxlVHlwZSk7CisgICAgICAg
ICAgICBBU1NFUlQobV90eXBlID09IFN0cmluZ1R5cGUpOwogICAgICAgICAgICAgcmV0dXJuIG1f
c3RyaW5nOwogICAgICAgICB9CiAKQEAgLTE0MCw2ICsxNDcsMjAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNBcnJheSgpOwogICAgICAg
ICB9CiAKKyAgICAgICAgU2VyaWFsaXplZEJsb2IqIGFzQmxvYigpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQmxvYlR5cGUpOworICAgICAgICAgICAgQVNT
RVJUKG1fc2hhcmVkRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaGFyZWREYXRhLT5hc0Js
b2IoKTsKKyAgICAgICAgfQorCisgICAgICAgIFNlcmlhbGl6ZWRGaWxlKiBhc0ZpbGUoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEZpbGVUeXBlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX3NoYXJlZERhdGEpOworICAgICAgICAgICAgcmV0dXJuIG1fc2hh
cmVkRGF0YS0+YXNGaWxlKCk7CisgICAgICAgIH0KKwogICAgICAgICBTZXJpYWxpemVkRmlsZUxp
c3QqIGFzRmlsZUxpc3QoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV90
eXBlID09IEZpbGVMaXN0VHlwZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggOWRjNGQwZi4uNDI0MjRiNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTgzLDE2ICsxODMsMjAgQEAg
cHVibGljOgogICAgICAgICBkb1dyaXRlTnVtYmVyKG51bWJlcik7CiAgICAgfQogCi0gICAgdm9p
ZCB3cml0ZUJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIHZvaWQgd3JpdGVCbG9iKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KQogICAgIHsKICAgICAgICAgYXBwZW5kKEJsb2JUYWcpOwotICAgICAgICBkb1dyaXRlV2ViQ29y
ZVN0cmluZyhwYXRoKTsKKyAgICAgICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcodXJsKTsKKyAgICAg
ICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcodHlwZSk7CisgICAgICAgIGRvV3JpdGVVaW50NjQoc2l6
ZSk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAg
IHZvaWQgd3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgdHlwZSkKICAgICB7CiAgICAgICAgIGFwcGVuZChGaWxlVGFnKTsKICAgICAg
ICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcocGF0aCk7CisgICAgICAgIGRvV3JpdGVXZWJDb3JlU3Ry
aW5nKHVybCk7CisgICAgICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5nKHR5cGUpOwogICAgIH0KIAog
ICAgIHZvaWQgd3JpdGVGaWxlTGlzdChjb25zdCBGaWxlTGlzdCYgZmlsZUxpc3QpCkBAIC0yMDAs
OCArMjA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kKEZpbGVMaXN0VGFnKTsKICAgICAg
ICAgdWludDMyX3QgbGVuZ3RoID0gZmlsZUxpc3QubGVuZ3RoKCk7CiAgICAgICAgIGRvV3JpdGVV
aW50MzIobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5nKGZpbGVMaXN0Lml0ZW0oaSktPnBhdGgoKSk7
CisgICAgICAgICAgICBkb1dyaXRlV2ViQ29yZVN0cmluZyhmaWxlTGlzdC5pdGVtKGkpLT51cmwo
KS5zdHJpbmcoKSk7CisgICAgICAgICAgICBkb1dyaXRlV2ViQ29yZVN0cmluZyhmaWxlTGlzdC5p
dGVtKGkpLT50eXBlKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZUltYWdl
RGF0YSh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBjb25zdCB1aW50OF90KiBwaXhl
bERhdGEsIHVpbnQzMl90IHBpeGVsRGF0YUxlbmd0aCkKQEAgLTI1MSw3ICsyNTgsOCBAQCBwcml2
YXRlOgogICAgICAgICBkb1dyaXRlU3RyaW5nKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUo
KSk7CiAgICAgfQogCi0gICAgdm9pZCBkb1dyaXRlVWludDMyKHVpbnQzMl90IHZhbHVlKQorICAg
IHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgdm9pZCBkb1dyaXRlVWludEhlbHBlcihUIHZhbHVlKQog
ICAgIHsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIHVpbnQ4X3QgYiA9ICh2
YWx1ZSAmIHZhckludE1hc2spOwpAQCAtMjY0LDYgKzI3MiwxNiBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCBkb1dyaXRlVWludDMyKHVpbnQzMl90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgZG9Xcml0ZVVpbnRIZWxwZXIodmFsdWUpOworICAgIH0KKworICAgIHZvaWQg
ZG9Xcml0ZVVpbnQ2NCh1aW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRvV3JpdGVVaW50
SGVscGVyKHZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGRvV3JpdGVOdW1iZXIoZG91YmxlIG51
bWJlcikKICAgICB7CiAgICAgICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
bnVtYmVyKSwgc2l6ZW9mKG51bWJlcikpOwpAQCAtNTYwLDcgKzU3OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+
KCkpOwogICAgICAgICBpZiAoIWJsb2IpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1f
d3JpdGVyLndyaXRlQmxvYihibG9iLT5wYXRoKCkpOworICAgICAgICBtX3dyaXRlci53cml0ZUJs
b2IoYmxvYi0+dXJsKCkuc3RyaW5nKCksIGJsb2ItPnR5cGUoKSwgYmxvYi0+c2l6ZSgpKTsKICAg
ICB9CiAKICAgICB2b2lkIHdyaXRlRmlsZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCkBA
IC01NjgsNyArNTg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRmlsZSogZmlsZSA9IFY4RmlsZTo6
dG9OYXRpdmUodmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlmICghZmlsZSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93cml0ZXIud3JpdGVGaWxlKGZpbGUtPnBhdGgo
KSk7CisgICAgICAgIG1fd3JpdGVyLndyaXRlRmlsZShmaWxlLT5wYXRoKCksIGZpbGUtPnVybCgp
LnN0cmluZygpLCBmaWxlLT50eXBlKCkpOwogICAgIH0KIAogICAgIHZvaWQgd3JpdGVGaWxlTGlz
dCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCkBAIC04NTIsMTAgKzg3MCwxNiBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCByZWFkQmxvYih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJp
bmcoJnBhdGgpKQorICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBTdHJpbmcgdHlwZTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIGlmICghcmVhZFdlYkNvcmVT
dHJpbmcoJnVybCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHBhdGgpOworICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ0eXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkb1JlYWRVaW50NjQoJnNpemUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBC
bG9iOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgdXJsKSwgdHlwZSwgc2l6ZSk7CiAgICAgICAgICp2YWx1ZSA9IHRvVjgoYmxvYik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTg2Myw5ICs4ODcsMTUgQEAgcHJpdmF0ZToK
ICAgICBib29sIHJlYWRGaWxlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCiAgICAgewog
ICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAgU3RyaW5n
IHR5cGU7CiAgICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUgPSBGaWxlOjpj
cmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoKTsKKyAgICAgICAgaWYgKCFy
ZWFkV2ViQ29yZVN0cmluZygmdXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShnZXRTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0
eXBlKTsKICAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtODc4LDE1ICs5MDgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0
cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nIHBh
dGg7CisgICAgICAgICAgICBTdHJpbmcgdXJsU3RyaW5nOworICAgICAgICAgICAgU3RyaW5nIHR5
cGU7CiAgICAgICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZwYXRoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6
OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGgpKTsKKyAgICAgICAgICAg
IGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnVybFN0cmluZykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVu
ZChGaWxlOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoLCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKSwgdHlwZSkpOwogICAgICAgICB9CiAgICAgICAgICp2
YWx1ZSA9IHRvVjgoZmlsZUxpc3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIGRvUmVhZFVpbnQzMih1aW50MzJfdCogdmFsdWUpCisgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KKyAgICBib29sIGRvUmVhZFVpbnRIZWxwZXIoVCogdmFsdWUpCiAgICAgewogICAgICAgICAq
dmFsdWUgPSAwOwogICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlOwpAQCAtOTAxLDYgKzkzOCwx
NiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIGRv
UmVhZFVpbnQzMih1aW50MzJfdCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gZG9SZWFk
VWludEhlbHBlcih2YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBkb1JlYWRVaW50NjQodWludDY0
X3QqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRvUmVhZFVpbnRIZWxwZXIodmFsdWUp
OworICAgIH0KKwogICAgIGJvb2wgZG9SZWFkTnVtYmVyKGRvdWJsZSogbnVtYmVyKQogICAgIHsK
ICAgICAgICAgaWYgKG1fcG9zaXRpb24gKyBzaXplb2YoZG91YmxlKSA+IG1fbGVuZ3RoKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCBmN2FjNjAzLi45NmY0Yjk4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMjgsMTIgKzI4LDExIEBA
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVh
ZC5oIgotI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCiAjaW5jbHVkZSAi
RmlsZVRocmVhZC5oIgotI2VuZGlmCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTkyLDYg
KzkxLDExIEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5TY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkKICAgICAgICAgbV9maWxlVGhyZWFkID0gMDsKICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUo
QkxPQikKKyAgICBIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGJsb2JVUkxzRW5kID0gbV9ibG9i
VVJMcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXRlciA9IG1f
YmxvYlVSTHMuYmVnaW4oKTsgaXRlciAhPSBibG9iVVJMc0VuZDsgKytpdGVyKQorICAgICAgICBC
bG9iUmVnaXN0cnk6Omluc3RhbmNlKCkudW5yZWdpc3RlckJsb2JVUkwoS1VSTChQYXJzZWRVUkxT
dHJpbmcsICppdGVyKSk7CisjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKQEAgLTI0
MSw2ICsyNDUsMjEgQEAgRE9NVGltZXIqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZpbmRUaW1l
b3V0KGludCB0aW1lb3V0SWQpCiAgICAgcmV0dXJuIG1fdGltZW91dHMuZ2V0KHRpbWVvdXRJZCk7
CiB9CiAKKyNpZiBFTkFCTEUoQkxPQikKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dHJh
Y2tCbG9iVVJMKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fYmxvYlVSTHMuYWRkKHVybCk7
Cit9CisKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmV2b2tlQmxvYlVSTChjb25zdCBT
dHJpbmcmIHVybCkKK3sKKyAgICBpZiAobV9ibG9iVVJMcy5jb250YWlucyh1cmwpKSB7CisgICAg
ICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS51bnJlZ2lzdGVyQmxvYlVSTChLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKSk7CisgICAgICAgIG1fYmxvYlVSTHMucmVtb3ZlKHVybCk7CisgICAg
fQorfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfV1JJVEVSKQog
RmlsZVRocmVhZCogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmlsZVRocmVhZCgpCiB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggZDJkYTMwNy4uZmRmM2MyZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xMjUsNiArMTI2LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogICAgICAg
ICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKKyNpZiBFTkFCTEUoQkxP
QikKKyAgICAgICAgdm9pZCB0cmFja0Jsb2JVUkwoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZv
aWQgcmV2b2tlQmxvYlVSTChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCiAjaWYgVVNFKEpTQykK
ICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKTsKICNlbmRpZgpAQCAtMTUy
LDYgKzE1OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSGFzaE1hcDxpbnQs
IERPTVRpbWVyKj4gbV90aW1lb3V0czsKIAorI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBIYXNo
U2V0PFN0cmluZz4gbV9ibG9iVVJMczsKKyNlbmRpZgorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQmxvYi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggOTc3ZmZhNi4uMjU0ODMx
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMzEsMjkgKzMxLDY1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJCbG9iSXRlbS5o
IgorI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ug
c3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKQogICAg
IDogbV90eXBlKHR5cGUpCisgICAgLCBtX3NpemUoMCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKQogICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tp
XSk7CiB9CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5n
IEJsb2JEYXRhLgogQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUGFz
c1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCisgICAgOiBtX3NpemUoMCkKIHsKICAgICBtX2l0ZW1z
LmFwcGVuZChpdGVtKTsKIH0KIAorLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0
Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiBCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3NpemUoMCkKIHsKICAgICAvLyBOb3RlOiB0
aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KICAgICBt
X2l0ZW1zLmFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9CiAKK0Jsb2I6OkJs
b2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093
blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQorICAgIDogbV90eXBlKGJs
b2JEYXRhLT5jb250ZW50VHlwZSgpKQorICAgICwgbV9zaXplKHNpemUpCisgeworICAgIEFTU0VS
VChibG9iRGF0YS5nZXQoKSAmJiAhYmxvYkRhdGEtPml0ZW1zKCkuaXNFbXB0eSgpKTsKKworICAg
IC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIHBy
b3ZpZGVkIGJsb2IgZGF0YS4KKyAgICBtX3VybCA9IEJsb2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKKyAgICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkucmVnaXN0ZXJC
bG9iVVJMKG1fdXJsLCBibG9iRGF0YSk7Cit9CisKK0Jsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25z
dCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIDogbV90eXBlKHR5cGUpCisgICAg
LCBtX3NpemUoc2l6ZSkKK3sKKyAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCBy
ZWdpc3RlciBpdCB3aXRoIHRoZSBzYW1lIGJsb2IgZGF0YSBhcyB0aGUgc291cmNlIFVSTC4KKyAg
ICBtX3VybCA9IEJsb2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAg
ICBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkucmVnaXN0ZXJCbG9iVVJMKG1fdXJsLCBzcmNVUkwp
OworfQorCitCbG9iOjp+QmxvYigpCit7CisgICAgLy8gVGhlIGludGVybmFsIFVSTCBpcyBvbmx5
IHVzZWQgdG8gcmVmZXIgdG8gdGhlIEJsb2Igb2JqZWN0LiBTbyB3ZSBuZWVkIHRvIHVucmVnaXN0
ZXIgdGhlIFVSTCB3aGVuIHRoZSBvYmplY3QgaXMgR0MtZWQuCisgICAgQmxvYlJlZ2lzdHJ5Ojpp
bnN0YW5jZSgpLnVucmVnaXN0ZXJCbG9iVVJMKG1fdXJsKTsKK30KKwogdW5zaWduZWQgbG9uZyBs
b25nIEJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5v
dCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVk
IHRvCkBAIC02NCw2ICsxMDAsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNv
bnN0CiAgICAgcmV0dXJuIHNpemU7CiB9CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4g
d2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9pdGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50
b0ZpbGVCbG9iSXRlbSgpKTsKQEAgLTk5LDQgKzEzNiwxNiBAQCBQYXNzUmVmUHRyPEJsb2I+IEJs
b2I6OnNsaWNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGxvbgogfQogI2VuZGlmIC8vIEVOQUJMRShCTE9CKQogCitLVVJMIEJsb2I6OmNyZWF0ZVB1Ymxp
Y1VSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KSBjb25z
dAoreworICAgIEtVUkwgdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOworCisgICAgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpLnJlZ2lzdGVyQmxvYlVSTCh1
cmwsIG1fdXJsKTsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIG5ldyBVUkwgaW4gdGhlIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgc28gdGhhdCBpdCB3aWxsIGdldCB1bnJlZ2lzdGVyZWQgd2hl
biB0aGUgY29udGV4dCBpcyBnb25lLgorICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnRyYWNr
QmxvYlVSTCh1cmwuc3RyaW5nKCkpOworCisgICAgcmV0dXJuIHVybDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUv
aHRtbC9CbG9iLmgKaW5kZXggN2FmYzdhMC4uYTcyOTI5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMiw1NCArMzIsNzEgQEAK
ICNkZWZpbmUgQmxvYl9oCiAKICNpbmNsdWRlICJCbG9iSXRlbS5oIgorI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBCbG9iRGF0YTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIEJs
b2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6CisgICAgLy8gRklYTUU6IFRv
IGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCB0eXBlLCBpdGVtcykpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBEZXBy
ZWNhdGVkIG1ldGhvZC4gIFRoaXMgaXMgY2FsbGVkIG9ubHkgZnJvbQotICAgIC8vIGJpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYW5kIHRoZSB1c2FnZSBpbiBpdCB3aWxsIGJl
Y29tZSBpbnZhbGlkIG9uY2UKLSAgICAvLyBCbG9iQnVpbGRlciBpcyBpbnRyb2R1Y2VkLgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgLy8gRm9yIGRl
c2VyaWFsaXphdGlvbi4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYgc3Jj
VVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IHNyY1VSTCwgdHlwZSwgc2l6ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0K
KyAgICB2aXJ0dWFsIH5CbG9iKCk7CiAKKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CiAgICAg
Y29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBGSVhNRTog
RGVwcmVjYXRlZCBtZXRob2QuCisgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBz
d2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7
CiAKKyAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBC
bG9iRGF0YS4KICAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVtczsgfQogCiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGlj
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0OworCisgICAg
S1VSTCBjcmVhdGVQdWJsaWNVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OwogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKKyAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3
aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KICAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOwogICAgIEJsb2IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+Jik7Ci0KLSAg
ICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBhbHNvIHRoZSBjb21tZW50
IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCiAgICAgQmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAorICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxvbmcgc2l6ZSk7CisKKyAgICAvLyBGb3Ig
ZGVzZXJpYWxpemF0aW9uLgorICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CisKKyAg
ICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0
YS4KICAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKKworICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJu
YWwgVVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9i
amVjdC4KKyAgICAvLyBJdCBpcyBvbmx5IHVzZWQgYnkgRmlsZVJlYWRlciB0byByZWFkIHRoZSBi
bG9iIGRhdGEgdmlhIGxvYWRpbmcgZnJvbSB0aGUgYmxvYiBVUkwgcmVzb3VyY2UuCisgICAgS1VS
TCBtX3VybDsKKwogICAgIFN0cmluZyBtX3R5cGU7CisgICAgbG9uZyBsb25nIG1fc2l6ZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9i
UmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY0NmMyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iUmVn
aXN0cnlJbXBsLmgiCisKKyNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCisjaW5jbHVkZSAiRmlsZVN0
cmVhbVByb3h5LmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEJsb2JSZWdpc3RyeUltcGw6OnNob3VsZExvYWRSZXNvdXJjZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHJl
c291cmNlIGlzIG5vdCBmZXRjaGVkIHVzaW5nIHRoZSBHRVQgbWV0aG9kLCBiYWlsIG91dC4KKyAg
ICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCAiR0VUIikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBCbG9iUmVnaXN0cnlJbXBsOjpjcmVhdGVSZXNvdXJjZUhhbmRsZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KikKK3sK
KyAgICBpZiAoIXNob3VsZExvYWRSZXNvdXJjZShyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+JikKK3sKKyAgICBpZiAoIXNob3VsZExvYWRSZXNvdXJjZShyZXF1ZXN0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmICFQTEFURk9STShDSFJPTUlVTSkKK0Js
b2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0
YW5jZTsKK30KKyNlbmRpZgorCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJ
dGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwgY29uc3QgQmxvYlN0b3JhZ2VE
YXRhSXRlbUxpc3QmIGl0ZW1zLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQor
eworICAgIEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gaXRl
bXMuYmVnaW4oKTsKKyAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGl0
ZW1zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyLT5sZW5ndGggIT0g
LTEpOworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBpdGVyLT5sZW5ndGgpCisgICAgICAgICAg
ICAgICAgb2Zmc2V0IC09IGl0ZXItPmxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoOyBpdGVyICE9IGl0
ZW1zLmVuZCgpICYmIChsZW5ndGggPT0gLTEgfHwgbGVuZ3RoID4gMCk7ICsraXRlcikgeworICAg
ICAgICBsb25nIGxvbmcgcmVtYWluaW5nTGVuZ3RoID0gaXRlci0+bGVuZ3RoIC0gb2Zmc2V0Owor
ICAgICAgICBsb25nIGxvbmcgbmV3TGVuZ3RoID0gKHJlbWFpbmluZ0xlbmd0aCA+IGxlbmd0aCAm
JiBsZW5ndGggIT0gLTEpID8gbGVuZ3RoIDogcmVtYWluaW5nTGVuZ3RoOworICAgICAgICBpZiAo
aXRlci0+dHlwZSA9PSBCbG9iU3RvcmFnZURhdGFJdGVtOjpEYXRhKQorICAgICAgICAgICAgYmxv
YlN0b3JhZ2VEYXRhLT5hcHBlbmREYXRhKGl0ZXItPmRhdGEsIGl0ZXItPm9mZnNldCArIG9mZnNl
dCwgbmV3TGVuZ3RoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXRlci0+
dHlwZSA9PSBCbG9iU3RvcmFnZURhdGFJdGVtOjpGaWxlKTsKKyAgICAgICAgICAgIGJsb2JTdG9y
YWdlRGF0YS0+YXBwZW5kRmlsZShpdGVyLT5wYXRoLCBpdGVyLT5vZmZzZXQgKyBvZmZzZXQsIG5l
d0xlbmd0aCwgaXRlci0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgbGVuZ3RoIC09IG5ld0xlbmd0aDsK
KyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxv
YkRhdGEpCit7CisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0b3JhZ2VEYXRhID0g
QmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iU3RvcmFnZURhdGEtPnNldENvbnRl
bnRUeXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKTsKKyAgICBibG9iU3RvcmFnZURhdGEtPnNl
dENvbnRlbnREaXNwb3NpdGlvbihibG9iRGF0YS0+Y29udGVudERpc3Bvc2l0aW9uKCkpOworCisg
ICAgZm9yIChCbG9iRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYmxvYkRhdGEt
Pml0ZW1zKCkuYmVnaW4oKTsgaXRlciAhPSBibG9iRGF0YS0+aXRlbXMoKS5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgIHN3aXRjaCAoaXRlci0+dHlwZSkgeworICAgICAgICBjYXNlIEJsb2JEYXRh
SXRlbTo6RGF0YToKKyAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0YS0+YXBwZW5kRGF0YShpdGVy
LT5kYXRhLCAwLCBpdGVyLT5kYXRhLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0
YS0+YXBwZW5kRmlsZShpdGVyLT5wYXRoLCBpdGVyLT5vZmZzZXQsIGl0ZXItPmxlbmd0aCwgaXRl
ci0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjogeworICAgICAgICAgICAgaWYgKG1fYmxvYnMuY29u
dGFpbnMoaXRlci0+dXJsKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRTdG9yYWdlSXRlbXMoYmxv
YlN0b3JhZ2VEYXRhLmdldCgpLCBtX2Jsb2JzLmdldChpdGVyLT51cmwpLT5pdGVtcygpLCBpdGVy
LT5vZmZzZXQsIGl0ZXItPmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKworICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgYmxvYlN0b3JhZ2VEYXRhKTsK
K30KKwordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4g
c3JjID0gbV9ibG9icy5nZXQoc3JjVVJMKTsKKyAgICBBU1NFUlQoc3JjKTsKKyAgICBpZiAoIXNy
YykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0
b3JhZ2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iU3RvcmFnZURh
dGEtPnNldENvbnRlbnRUeXBlKHNyYy0+Y29udGVudFR5cGUoKSk7CisgICAgYmxvYlN0b3JhZ2VE
YXRhLT5zZXRDb250ZW50RGlzcG9zaXRpb24oc3JjLT5jb250ZW50RGlzcG9zaXRpb24oKSk7Cisg
ICAgYXBwZW5kU3RvcmFnZUl0ZW1zKGJsb2JTdG9yYWdlRGF0YS5nZXQoKSwgc3JjLT5pdGVtcygp
LCAwLCAtMSk7CisgICAgCisgICAgbV9ibG9icy5zZXQodXJsLnN0cmluZygpLCBibG9iU3RvcmFn
ZURhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnVucmVnaXN0ZXJCbG9iVVJMKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX2Jsb2JzLnJlbW92ZSh1cmwuc3RyaW5nKCkpOworfQor
CitQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRh
dGFGcm9tVVJMKGNvbnN0IEtVUkwmIHVybCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ibG9icy5n
ZXQodXJsLnN0cmluZygpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1w
bC5oIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jNmQ2ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1s
L0Jsb2JSZWdpc3RyeUltcGwuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iUmVnaXN0cnlJ
bXBsX2gKKyNkZWZpbmUgQmxvYlJlZ2lzdHJ5SW1wbF9oCisKKyNpZiBFTkFCTEUoQkxPQikKKwor
I2luY2x1ZGUgIkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSAiQmxvYlN0b3JhZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBLVVJMOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNz
IFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7CitjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjbGFzcyBCbG9iUmVnaXN0
cnlJbXBsIDogcHVibGljIEJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Qmxv
YlJlZ2lzdHJ5SW1wbCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChj
b25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpOworICAgIHZp
cnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOworICAgIHZpcnR1YWwgYm9vbCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKworICAgIFBh
c3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgS1VSTCYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgc2hvdWxkTG9hZFJlc291cmNlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3Q7CisgICAgdm9pZCBhcHBlbmRTdG9yYWdlSXRl
bXMoQmxvYlN0b3JhZ2VEYXRhKiwgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmLCBsb25n
IGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiA+IG1fYmxvYnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIEJsb2JSZWdpc3Ry
eUltcGxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JTdG9yYWdlRGF0YS5oIGIvV2Vi
Q29yZS9odG1sL0Jsb2JTdG9yYWdlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjFhY2JhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYlN0b3Jh
Z2VEYXRhLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisj
aWZuZGVmIEJsb2JTdG9yYWdlRGF0YV9oDQorI2RlZmluZSBCbG9iU3RvcmFnZURhdGFfaA0KKw0K
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
Pg0KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+DQorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorc3RydWN0IEJsb2JTdG9yYWdlRGF0YUl0
ZW0gew0KKyAgICB0eXBlZGVmIGVudW0geyBEYXRhLCBGaWxlIH0gQmxvYlN0b3JlRGF0YUl0ZW1U
eXBlOw0KKyAgICBCbG9iU3RvcmVEYXRhSXRlbVR5cGUgdHlwZTsNCisgICAgbG9uZyBsb25nIG9m
ZnNldDsNCisgICAgbG9uZyBsb25nIGxlbmd0aDsNCisNCisgICAgLy8gRm9yIHN0cmluZyBkYXRh
Lg0KKyAgICBDU3RyaW5nIGRhdGE7DQorDQorICAgIC8vIEZvciBmaWxlIGRhdGEuDQorICAgIFN0
cmluZyBwYXRoOw0KKyAgICBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOw0KKw0KKyAg
ICBCbG9iU3RvcmFnZURhdGFJdGVtKGNvbnN0IENTdHJpbmcmIGRhdGEsIGxvbmcgbG9uZyBvZmZz
ZXQsIGxvbmcgbG9uZyBsZW5ndGgpDQorICAgICAgICA6IHR5cGUoRGF0YSkNCisgICAgICAgICwg
b2Zmc2V0KG9mZnNldCkNCisgICAgICAgICwgbGVuZ3RoKGxlbmd0aCkNCisgICAgICAgICwgZGF0
YShkYXRhKQ0KKyAgICAgICAgLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUoMCkNCisgICAgew0K
KyAgICB9DQorDQorICAgIEJsb2JTdG9yYWdlRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKQ0KKyAgICAgICAgOiB0eXBlKEZpbGUpDQorICAgICAgICAsIG9mZnNldChvZmZz
ZXQpDQorICAgICAgICAsIGxlbmd0aChsZW5ndGgpDQorICAgICAgICAsIHBhdGgocGF0aCkNCisg
ICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSkNCisgICAgew0KKyAgICB9DQorfTsNCisNCit0eXBlZGVmIFZlY3RvcjxCbG9iU3RvcmFnZURh
dGFJdGVtPiBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdDsNCisNCitjbGFzcyBCbG9iU3RvcmFnZURh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iU3RvcmFnZURhdGE+IHsNCitwdWJsaWM6DQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gY3JlYXRlKCkNCisgICAgew0KKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iU3RvcmFnZURhdGEoKSk7DQorICAgIH0NCisN
CisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dFR5cGU7IH0NCisgICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKSB7IG1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsgfQ0KKw0KKyAgICBjb25zdCBTdHJp
bmcmIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudERpc3Bvc2l0
aW9uOyB9DQorICAgIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29u
dGVudERpc3Bvc2l0aW9uKSB7IG1fY29udGVudERpc3Bvc2l0aW9uID0gY29udGVudERpc3Bvc2l0
aW9uOyB9DQorICAgIA0KKyAgICBjb25zdCBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdCYgaXRlbXMo
KSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9DQorDQorICAgIHZvaWQgYXBwZW5kRGF0YShjb25z
dCBDU3RyaW5nJiBkYXRhLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQ0KKyAg
ICB7DQorICAgICAgICBtX2l0ZW1zLmFwcGVuZChCbG9iU3RvcmFnZURhdGFJdGVtKGRhdGEsIG9m
ZnNldCwgbGVuZ3RoKSk7DQorICAgIH0NCisNCisgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkNCisgICAgew0KKyAgICAgICAgbV9pdGVtcy5hcHBlbmQo
QmxvYlN0b3JhZ2VEYXRhSXRlbShwYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKSk7DQorICAgIH0NCisNCitwcml2YXRlOg0KKyAgICBTdHJpbmcgbV9jb250ZW50
VHlwZTsNCisgICAgU3RyaW5nIG1fY29udGVudERpc3Bvc2l0aW9uOw0KKyAgICBCbG9iU3RvcmFn
ZURhdGFJdGVtTGlzdCBtX2l0ZW1zOw0KK307DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0K
Kw0KKyNlbmRpZiAvLyBCbG9iU3RvcmFnZURhdGFfaA0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9CbG9iVVJMLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iVVJMLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hNTllMTczCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9o
dG1sL0Jsb2JVUkwuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JVUkwuaCIKKworI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVVSUQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLVVJMIEJsb2JVUkw6OmNyZWF0ZVVSTChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworICAgIC8vIENy
ZWF0ZSB0aGUgYmxvYiBVUkwgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgICAgLy8gICAgIGJs
b2I6JWVzY2FwZWRfb3JpZ2luJS8lVVVJRCUKKyAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBob3N0
IHBhZ2UgaXMgZW5jb2RlZCBpbiB0aGUgVVJMIHZhbHVlIHRvIGFsbG93IGVhc3kgbG9va3VwIG9m
IHRoZSBvcmlnaW4gd2hlbiB0aGUgc2VjdXJpdHkgY2hlY2sgbmVlZHMKKyAgICAvLyB0byBiZSBw
ZXJmb3JtZWQuCisgICAgU3RyaW5nIHVybFN0cmluZyA9ICJibG9iOiI7CisgICAgdXJsU3RyaW5n
ICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgdXJsU3RyaW5nICs9ICIvIjsKKyAg
ICB1cmxTdHJpbmcgKz0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIHJldHVybiBL
VVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKK30KKworS1VSTCBCbG9iVVJMOjpnZXRP
cmlnaW4oY29uc3QgS1VSTCYgdXJsKQoreworICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygiYmxv
YiIpKTsKKworICAgIHVuc2lnbmVkIHMgPSB1cmwucGF0aFN0YXJ0KCk7OworICAgIHVuc2lnbmVk
IGUgPSB1cmwucGF0aEFmdGVyTGFzdFNsYXNoKCk7CisgICAgU3RyaW5nIG9yaWdpbiA9IHVybC5z
dHJpbmcoKS5zdWJzdHJpbmcocywgZSAtIHMpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0
cmluZywgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG9yaWdpbikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CbG9iVVJMLmggYi9XZWJDb3JlL2h0bWwvQmxvYlVSTC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzljOTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2h0bWwvQmxvYlVSTC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JVUkxfaAorI2RlZmlu
ZSBCbG9iVVJMX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiS1VSTC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2Ns
YXNzIEJsb2JVUkwgeworcHVibGljOgorICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVVSTChTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIEtVUkwgZ2V0T3JpZ2luKGNvbnN0IEtVUkwm
KTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlVS
TF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAgYi9XZWJDb3JlL2h0bWwvRmls
ZS5jcHAKaW5kZXggMTA5ZTBkMy4uNDRlMmViOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zp
bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcApAQCAtMzcsNiArMzcsMTEgQEAgRmls
ZTo6RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBj
b25zdCBTdHJpbmcmIHBhdGgpCiAgICAgSW5pdCgpOwogfQogCitGaWxlOjpGaWxlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIDogQmxvYihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCB1cmwsIHR5cGUsIC0xKQoreworfQorCiAjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCiBGaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKQogICAgIDogQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGaWxlQmxvYkl0ZW06
OmNyZWF0ZShmaWxlUGF0aCwgcmVsYXRpdmVQYXRoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4IGMwYWVjYzguLjA2YTczYzUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuaApA
QCAtMzksNiArMzksMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZp
bGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcGF0aCkpOwogICAgIH0KIAorICAgIC8vIEZvciBk
ZXNlcmlhbGl6YXRpb24uCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcGF0aCwg
dXJsLCB0eXBlKSk7CisgICAgfQorCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBT
dHJpbmcmIHBhdGgpCiAgICAgewpAQCAtNjAsMTEgKzY2LDE1IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgp
OwotICAgIHZvaWQgSW5pdCgpOworCisgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KKyAgICBG
aWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQp
CiAgICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiByZWxhdGl2
ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAjZW5kaWYKKworICAgIHZvaWQgSW5pdCgpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM2OThhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgQmxvYkRhdGFJdGVtOjpjb3B5KGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAgICB0
eXBlID0gaXRlbS50eXBlOworICAgIGRhdGEgPSBpdGVtLmRhdGE7IC8vIFRoaXMgaXMgT0sgYmVj
YXVzZSB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGlzIFZlY3RvcjxjaGFyPi4KKyAgICBwYXRoID0g
aXRlbS5wYXRoLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgdXJsID0gaXRlbS51cmwuY29weSgp
OworICAgIG9mZnNldCA9IGl0ZW0ub2Zmc2V0OworICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoOwor
ICAgIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lOworfQorCitQYXNzT3duUHRyPEJsb2JEYXRhPiBCbG9iRGF0YTo6Y29weSgpIGNvbnN0Cit7
CisgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IGFkb3B0UHRyKG5ldyBCbG9iRGF0YSgp
KTsKKyAgICBibG9iRGF0YS0+bV9jb250ZW50VHlwZSA9IG1fY29udGVudFR5cGUuY3Jvc3NUaHJl
YWRTdHJpbmcoKTsKKyAgICBibG9iRGF0YS0+bV9jb250ZW50RGlzcG9zaXRpb24gPSBtX2NvbnRl
bnREaXNwb3NpdGlvbi5jcm9zc1RocmVhZFN0cmluZygpOworICAgIGJsb2JEYXRhLT5tX2l0ZW1z
LnJlc2l6ZShtX2l0ZW1zLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0
ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1zLmF0KGkpLmNvcHko
bV9pdGVtcy5hdChpKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJsb2JEYXRhLnJlbGVhc2UoKTsK
K30KKwordm9pZCBCbG9iRGF0YTo6YXBwZW5kRGF0YShjb25zdCBDU3RyaW5nJiBkYXRhKQorewor
ICAgIG1faXRlbXMuYXBwZW5kKEJsb2JEYXRhSXRlbShkYXRhKSk7Cit9CisKK3ZvaWQgQmxvYkRh
dGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1faXRlbXMuYXBwZW5k
KEJsb2JEYXRhSXRlbShwYXRoKSk7Cit9CisKK3ZvaWQgQmxvYkRhdGE6OmFwcGVuZEZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQoreworICAgIG1faXRlbXMuYXBwZW5kKEJsb2JE
YXRhSXRlbShwYXRoLCBvZmZzZXQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7
Cit9CisKK3ZvaWQgQmxvYkRhdGE6OmFwcGVuZEJsb2IoY29uc3QgS1VSTCYgdXJsLCBsb25nIGxv
bmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIG1faXRlbXMuYXBwZW5kKEJsb2JE
YXRhSXRlbSh1cmwsIG9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3ZvaWQgQmxvYkRhdGE6OnN3YXBJ
dGVtcyhCbG9iRGF0YUl0ZW1MaXN0JiBpdGVtcykKK3sKKyAgICBtX2l0ZW1zLnN3YXAoaXRlbXMp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL0Jsb2JEYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1NThlMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vQmxvYkRhdGEuaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYkRhdGFf
aAorI2RlZmluZSBCbG9iRGF0YV9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IEJsb2JEYXRhSXRlbSB7CisgICAgLy8gRGVmYXVsdCBjb25zdHJ1
Y3Rvci4KKyAgICBCbG9iRGF0YUl0ZW0oKQorICAgICAgICA6IG9mZnNldCgwKQorICAgICAgICAs
IGxlbmd0aCgtMSkKKyAgICAgICAgLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUoMCkKKyAgICB7
CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0b3IgZm9yIFN0cmluZyB0eXBlLgorICAgIEJsb2JE
YXRhSXRlbShjb25zdCBDU3RyaW5nJiBkYXRhKQorICAgICAgICA6IHR5cGUoRGF0YSkKKyAgICAg
ICAgLCBkYXRhKGRhdGEpCisgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAgICwgbGVuZ3RoKC0x
KQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSgwKQorICAgIHsKKyAgICB9CisK
KyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgRmlsZSB0eXBlIChjb21wbGV0ZSBmaWxlKS4KKyAgICBC
bG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQorICAgICAgICA6IHR5cGUoRmlsZSkKKyAg
ICAgICAgLCBwYXRoKHBhdGgpCisgICAgICAgICwgb2Zmc2V0KDApCisgICAgICAgICwgbGVuZ3Ro
KC0xKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSgwKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgRmlsZSB0eXBlIChwYXJ0aWFsIGZpbGUpLgorICAg
IEJsb2JEYXRhSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcg
bG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCisgICAgICAgIDog
dHlwZShGaWxlKQorICAgICAgICAsIHBhdGgocGF0aCkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0
KQorICAgICAgICAsIGxlbmd0aChsZW5ndGgpCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lKGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IC8vIENvbnN0cnVjdG9yIGZvciBCbG9iIHR5cGUuCisgICAgQmxvYkRhdGFJdGVtKGNvbnN0IEtV
UkwmIHVybCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICAgICAgOiB0
eXBlKEJsb2IpCisgICAgICAgICwgdXJsKHVybCkKKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQor
ICAgICAgICAsIGxlbmd0aChsZW5ndGgpCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lKDApCisgICAgeworICAgIH0KKworICAgIC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRhIHN1
aXRhYmxlIGZvciBwYXNzaW5nIHRvIGFub3RoZXIgdGhyZWFkLgorICAgIHZvaWQgY29weShjb25z
dCBCbG9iRGF0YUl0ZW0mKTsKKworICAgIGVudW0geyBEYXRhLCBGaWxlLCBCbG9iIH0gdHlwZTsK
KyAgICAKKyAgICAvLyBGb3IgRGF0YSB0eXBlLgorICAgIENTdHJpbmcgZGF0YTsKKworICAgIC8v
IEZvciBGaWxlIHR5cGUuCisgICAgU3RyaW5nIHBhdGg7CisKKyAgICAvLyBGb3IgQmxvYiB0eXBl
LgorICAgIEtVUkwgdXJsOworCisgICAgLy8gRm9yIEZpbGUgYW5kIEJsb2IgdHlwZS4KKyAgICBs
b25nIGxvbmcgb2Zmc2V0OworICAgIGxvbmcgbG9uZyBsZW5ndGg7CisKKyAgICAvLyBGb3IgRmls
ZSB0eXBlIG9ubHkuCisgICAgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKK307CisK
K3R5cGVkZWYgVmVjdG9yPEJsb2JEYXRhSXRlbT4gQmxvYkRhdGFJdGVtTGlzdDsKKworY2xhc3Mg
QmxvYkRhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCbG9iRGF0YSgpKTsKKyAg
ICB9CisKKyAgICAvLyBHZXRzIGEgY29weSBvZiB0aGUgZGF0YSBzdWl0YWJsZSBmb3IgcGFzc2lu
ZyB0byBhbm90aGVyIHRocmVhZC4KKyAgICBQYXNzT3duUHRyPEJsb2JEYXRhPiBjb3B5KCkgY29u
c3Q7CisKKyAgICBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50VHlwZTsgfQorICAgIHZvaWQgc2V0Q29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSkgeyBtX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGU7IH0KKworICAgIGNvbnN0IFN0
cmluZyYgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50RGlzcG9z
aXRpb247IH0KKyAgICB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBTdHJpbmcmIGNv
bnRlbnREaXNwb3NpdGlvbikgeyBtX2NvbnRlbnREaXNwb3NpdGlvbiA9IGNvbnRlbnREaXNwb3Np
dGlvbjsgfQorCisgICAgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJl
dHVybiBtX2l0ZW1zOyB9CisgICAgdm9pZCBzd2FwSXRlbXMoQmxvYkRhdGFJdGVtTGlzdCYpOwor
ICAgIAorICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBDU3RyaW5nJik7CisgICAgdm9pZCBhcHBl
bmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IEtVUkwm
IHVybCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CisKK3ByaXZhdGU6Cisg
ICAgQmxvYkRhdGEoKSB7IH0KKworICAgIFN0cmluZyBtX2NvbnRlbnRUeXBlOworICAgIFN0cmlu
ZyBtX2NvbnRlbnREaXNwb3NpdGlvbjsKKyAgICBCbG9iRGF0YUl0ZW1MaXN0IG1faXRlbXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCbG9iRGF0YV9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIx
MjUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iUmVnaXN0cnlfaAorI2RlZmluZSBCbG9iUmVnaXN0
cnlfaAorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2JEYXRhOworY2xhc3MgS1VSTDsKK2NsYXNz
IFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZUhhbmRsZTsKK2NsYXNzIFJlc291cmNlSGFu
ZGxlQ2xpZW50OworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKKworY2xhc3MgQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQmxvYlJlZ2lz
dHJ5JiBpbnN0YW5jZSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25z
dCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0
YSkgPSAwOworCisgICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5KCkgeyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIEJs
b2JSZWdpc3RyeV9oCg==
</data>
<flag name="commit-queue"
          id="52072"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63756</attachid>
            <date>2010-08-06 13:38:27 -0700</date>
            <delta_ts>2010-08-09 15:35:38 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43600_2</filename>
            <type>text/plain</type>
            <size>78950</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDA0MTYxYmMuLjhmYzA3YWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTMzLDYgKzkzMyw4IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0FzeW5jSW1hZ2VSZXNpemVyLmNwcAogICAgIGh0
bWwvQmxvYi5jcHAKICAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcAorICAgIGh0bWwvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKKyAgICBodG1sL0Jsb2JVUkwuY3BwCiAgICAgaHRtbC9Db2xsZWN0aW9uQ2Fj
aGUuY3BwCiAgICAgaHRtbC9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL0RPTURhdGFH
cmlkRGF0YVNvdXJjZS5jcHAKQEAgLTExOTUsNiArMTE5Nyw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAgIHBsYXRm
b3JtL0FyZW5hLmNwcAorICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRmb3JtL0Js
b2JJdGVtLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjOWI2ZTM2Li4yZGQ0MzI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEwLTA4LTA2
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIHN1cHBvcnQgdG8gcmVnaXN0ZXIgdGhl
IGJsb2IgZGF0YS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQzNjAwCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGFkZGlu
ZyBCbG9iIFVSTCBzdXBwb3J0LiBUaGUgYmxvYiBoYXMKKyAgICAgICAgYW4gaW50ZXJuYWwgVVJM
ICh1c2VkIGJ5IEZpbGVSZWFkZXIpIGFuZCBwdWJsaWMgVVJMcyAodXNlZCBieSBCbG9iLnVybCku
CisgICAgICAgIFRoZSBVUkwgYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgYXJlIG1hbmFnZWQgYnkg
QmxvYlJlZ2lzdHJ5IGludGVyZmFjZS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHJl
bW92ZSB0aGUgdXNhZ2Ugb2YgQmxvYkl0ZW0uIEl0IHdpbGwgYmUgcmVtb3ZlZAorICAgICAgICB3
aGVuIGFsbCB0aGUgYmxvYiBkYXRhIHN1cHBvcnQgaXMgaG9va2VkIHVwIGFuZCB0aGUgbmV3IHRl
c3RzIHdpbGwgYmUKKyAgICAgICAgYWRkZWQgdGhlbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZEJsb2I6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6U2VyaWFsaXplZEJsb2IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZEZpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
RmlsZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkRmlsZTo6dXJsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRGaWxlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZWRGaWxlOjpTZXJpYWxpemVkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkRmlsZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZEZpbGVM
aXN0OjpTZXJpYWxpemVkRmlsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZFNlcmlhbGl6ZWREYXRhOjphc0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXpp
bmdUcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNl
cmlhbGl6aW5nVHJlZVdhbGtlcjo6Y29udmVydElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVhcmRvd25UcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGE6OmFzRmlsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6V3JpdGVyOjp3cml0ZUJs
b2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpXcml0ZXI6OndyaXRlRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6d3JpdGVGaWxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6ZG9Xcml0ZVVpbnRIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFn
OjpTZXJpYWxpemVyOjp3cml0ZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpTZXJp
YWxpemVyOjp3cml0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJl
YWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGVMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50SGVscGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpSZWFkZXI6OmRvUmVhZFVpbnQ2NCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6dHJhY2tCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnJldm9rZUJsb2JVUkwpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0Lmg6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6fkJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKiBodG1sL0Jsb2Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjp1cmwpOgorICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L0Jsb2JTdG9yYWdlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9G
aWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAqIGh0bWwv
RmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9CbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JEYXRhLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKwogMjAx
MC0wOC0wNCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDRhZTU5YWMuLjI2Mzc0ZTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTMxMiw2ICsxMzEyLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1s
L0Jsb2IuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9odG1s
L0Jsb2JCdWlsZGVyLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBcCisJ
V2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaCBcCisJV2ViQ29yZS9odG1sL0Jsb2JTdG9y
YWdlRGF0YS5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgXAorCVdlYkNvcmUvaHRtbC9C
bG9iVVJMLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMu
aCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAogCVdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCkBAIC0xODY4LDggKzE4NzMsMTEgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9vbC5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iRGF0YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9CbG9iSXRlbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9D
b250ZW50VHlwZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDk2ODRjNjIuLjFmYmIwODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDM0LDYgKzE0MzQsMTEgQEAKICAgICAgICAgICAg
ICdodG1sL0Jsb2IuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iQnVpbGRlci5jcHAnLAogICAg
ICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iUmVn
aXN0cnlJbXBsLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvQmxvYlN0b3JhZ2VEYXRhLmgnLAorICAgICAgICAgICAgJ2h0bWwv
QmxvYlVSTC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYlVSTC5oJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlclZpZXcuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXIuY3BwJywKQEAgLTI5OTMsOCArMjk5OCwxMSBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0FyZW5hLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Js
b2JEYXRhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkRhdGEuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9i
SXRlbS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9D
b250ZW50VHlwZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5k
ZXggN2FkZGZhMS4uMTU3ZGUzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02MTksNiArNjE5LDggQEAgU09VUkNFUyArPSBcCiAg
ICAgaHRtbC9Bc3luY0ltYWdlUmVzaXplci5jcHAgXAogICAgIGh0bWwvQmxvYi5jcHAgXAogICAg
IGh0bWwvQmxvYkJ1aWxkZXIuY3BwIFwKKyAgICBodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIFwK
KyAgICBodG1sL0Jsb2JVUkwuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5j
cHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNQaXhlbEFycmF5LmNwcCBcCkBAIC04NjEsNiArODYzLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2Fu
aW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKKyAg
ICBwbGF0Zm9ybS9CbG9iRGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAg
ICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmNwcCBcCkBAIC0xMzg0LDYgKzEzODcsOSBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0Fz
eW5jSW1hZ2VSZXNpemVyLmggXAogICAgIGh0bWwvQmxvYi5oIFwKICAgICBodG1sL0Jsb2JCdWls
ZGVyLmggXAorICAgIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wLmggXAorICAgIGh0bWwvQmxvYlN0b3Jh
Z2VEYXRhLmggXAorICAgIGh0bWwvQmxvYlVSTC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwv
Y2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCkBAIC0xNjM0LDcgKzE2NDAsOSBAQCBIRUFERVJT
ICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAorICAg
IHBsYXRmb3JtL0Jsb2JEYXRhLmggXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmggXAorICAgIHBs
YXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKICAg
ICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGll
ci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGJiOWEyYzkuLjQ4
ZTMyOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjMyNDEsNiAr
MjMyNDEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XEJsb2JJdGVtLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yMzI0OSw2ICsyMzI1Nywx
MCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxCbG9iUmVnaXN0cnkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkBAIC0zNjI0NSw2ICszNjI1NywyNiBAQAogCQkJCT4NCiAJCQk8L0Zp
bGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JSZWdpc3RyeUlt
cGwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxCbG9iUmVnaXN0cnlJbXBsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JTdG9yYWdlRGF0YS5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxC
bG9iVVJMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcQmxvYlVSTC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDM3ZjcxMy4uYzc5MzAzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNyw2ICs3MDcsMTQgQEAKIAkJMkVDRjdBRTIxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50Lmgg
Ki87IH07CiAJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlCQTExNDVC
MDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovOyB9OwogCQkyRUQ2MDlCRDExNDVCMDcx
MDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5o
ICovOyB9OworCQkyRUVENTY4ODEyMEM5MDNBMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY4
MzEyMEM5MDNBMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87IH07CisJCTJFRUQ1
Njg5MTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY4NDEyMEM5MDNBMDA3NjU2QkIg
LyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OworCQkyRUVENTY4QTEyMEM5MDNBMDA3NjU2QkIg
LyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRUVENTY4NTEyMEM5MDNBMDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmgg
Ki87IH07CisJCTJFRUQ1NjhCMTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1Njg2MTIwQzkwM0Ew
MDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLzsgfTsKKwkJMkVFRDU2OEMxMjBDOTAzQTAwNzY1NkJC
IC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFRUQ1Njg3MTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9iVVJMLmggKi87IH07CisJCTJFRUQ1
NjkwMTIwQzkwNEYwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY4RDEyMEM5MDRGMDA3NjU2QkIgLyogQmxv
YkRhdGEuY3BwICovOyB9OworCQkyRUVENTY5MTEyMEM5MDRGMDA3NjU2QkIgLyogQmxvYkRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NjhF
MTIwQzkwNEYwMDc2NTZCQiAvKiBCbG9iRGF0YS5oICovOyB9OworCQkyRUVENTY5MjEyMEM5MDRG
MDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRUVENTY4RjEyMEM5MDRGMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5
LmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87
IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTZG
MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJMzEy
ODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAwRTMwMDVE
NjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAtMTQyMywx
MSArMTQzMSw5IEBACiAJCTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9u
dGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FF
RDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi87IH07CiAJCTdB
RkQ0QThCMTEzMUMyNzYwMDM1Qjg4MyAvKiBTY3JpcHRCcmVha3BvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZENEE4QTExMzFDMjc2MDAzNUI4
ODMgLyogU2NyaXB0QnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdBRkQ0RkY0MTEzMjc3QjYwMDM1Qjg4MyAvKiBTY3JpcHREZWJ1
Z0xpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUZENEZGMzExMzI3N0I2MDAzNUI4ODMgLyogU2NyaXB0RGVidWdMaXN0ZW5lci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTgxQkUyMDk4MTFG
NEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTMxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNv
ci5jcHAgKi87IH07CiAJCTgxQkUyMDk3MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDkyMTFG
NEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3IuaCAqLzsgfTsKIAkJODFCRTIwOTgxMUY0QUI4RDAw
OTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMDkzMTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAv
KiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tl
bmRJbXBsLmggKi87IH07Ci0JCTgxQkUyMDlCMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MUJFMjA5NjExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZS5oICovOyB9OworCQk4MUJFMjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCAqLzsgfTsKIAkJODFCRTIwRDIxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE3
MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi87IH07CiAJCTgxQkUyMEQzMTFG
NEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vy
c29yLmggKi87IH07CiAJCTgyQjY1ODk4MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NT
dG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJC
NjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY0NDUsNiArNjQ1MSwxNCBA
QAogCQkyRUNGN0FFMDEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gRXJyb3JFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJFRDYwOUJBMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01Gb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Gb3JtRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTY4MzEyMEM5MDNBMDA3NjU2QkIgLyogQmxv
YlJlZ2lzdHJ5SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
bG9iUmVnaXN0cnlJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVFRDU2
ODQxMjBDOTAzQTAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmxvYlJlZ2lzdHJ5SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRUVENTY4NTEyMEM5MDNBMDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JTdG9yYWdlRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTY4NjEyMEM5MDNBMDA3NjU2QkIgLyogQmxv
YlVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iVVJMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVFRDU2ODcxMjBDOTAzQTAwNzY1NkJC
IC8qIEJsb2JVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlVSTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTY4RDEyMEM5MDRGMDA3NjU2QkIg
LyogQmxvYkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxv
YkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTY4RTEyMEM5MDRG
MDA3NjU2QkIgLyogQmxvYkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkVFRDU2OEYxMjBDOTA0
RjAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyODhF
NkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyNDcsNyArNzI2MSw2IEBACiAJ
CTdBRkQ0RkYzMTEzMjc3QjYwMDM1Qjg4MyAvKiBTY3JpcHREZWJ1Z0xpc3RlbmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdERlYnVnTGlzdGVuZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwOTIxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1
cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwOTMxMUY0QUI4RDAwOTE1REZBIC8qIElE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmRJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODFCRTIwOUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gSURCQ3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODFCRTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDczLDggKzEwMDg2LDggQEAKIAkJQjY1NjYyNjgxMjBCMTE1
QTAwNkVBODVDIC8qIElEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2
NTY2MjY5MTIwQjExNUEwMDZFQTg1QyAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSURCVHJhbnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCNjU2NjI2RDEyMEIxMTZCMDA2RUE4NUMgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNjU2NjI2
RTEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU0lEQlRyYW5zYWN0aW9uLmg7IHBhdGggPSBKU0lEQlRyYW5zYWN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NTY2MjZGMTIwQjEyMjcwMDZF
QTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEpTSURCVHJhbnNhY3Rpb24uY3BwOyBwYXRoID0gSlNJREJUcmFuc2FjdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI2NTY2MjZFMTIwQjEyMjcwMDZFQTg1
QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSURCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjY1NjYy
NkYxMjBCMTIyNzAwNkVBODVDIC8qIEpTSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI3MzRCMTgwMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNj
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGb250VHJhbnNj
b2Rlci5jcHA7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODIxMTlCOTkxRDAwNjU4N0JEIC8qIEZvbnRUcmFu
c2NvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZvbnRUcmFuc2NvZGVy
Lmg7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQwNCw3ICsxMTQxNyw2IEBACiAJCTFBRTgyRUM5MENB
QUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKLQogCQkJCUI1QjVEQzY3MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERh
dGFiYXNlLmNwcCAqLywKIAkJCQlCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3RE
YXRhYmFzZS5oICovLAogCQkJCTUxNDE4NUVEMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJz
aW9uV3JhcHBlci5jcHAgKi8sCkBAIC0xMTQ0NSwxMiArMTE0NTcsMTEgQEAKIAkJCQlDNTg1QTY5
OTExRDRGQjNEMDA0QzNFNEIgLyogSURCQW55LmggKi8sCiAJCQkJQzU4NUE2OUExMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkFueS5pZGwgKi8sCiAJCQkJQzU4NUE2OUIxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkNhbGxiYWNrcy5oICovLAotCQkJCTgxQkUyMDkyMTFGNEFCOEQwMDkxNURGQSAvKiBJREJD
dXJzb3IuY3BwICovLAorCQkJCTgxQkUyMDkyMTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3Iu
aCAqLywKIAkJCQk4MUJFMjA5MjExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yLmggKi8sCiAJ
CQkJODFCRTIwOUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8sCiAJCQkJODFC
RTIwOTMxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLywKLQkJ
CQk4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLywK
LQkJCQk4MUJFMjA5NTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZS5oICovLAorCQkJCTgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmggKi8sCiAJCQkJQzU4NUE2QTMxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkRhdGFi
YXNlLmNwcCAqLywKIAkJCQlDNTg1QTZBNDExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2Uu
aCAqLywKIAkJCQlDNTg1QTZBNTExRDRGQjNEMDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaWRsICov
LApAQCAtMTM4MTgsNiArMTM4MjksMTEgQEAKIAkJCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIg
LyogQmxvYkJ1aWxkZXIuY3BwICovLAogCQkJCTg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBC
bG9iQnVpbGRlci5oICovLAogCQkJCTg5Q0QwMjc5MTFDODU5QTgwMDcwQjc5MSAvKiBCbG9iQnVp
bGRlci5pZGwgKi8sCisJCQkJMkVFRDU2ODMxMjBDOTAzQTAwNzY1NkJCIC8qIEJsb2JSZWdpc3Ry
eUltcGwuY3BwICovLAorCQkJCTJFRUQ1Njg0MTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9iUmVnaXN0
cnlJbXBsLmggKi8sCisJCQkJMkVFRDU2ODUxMjBDOTAzQTAwNzY1NkJCIC8qIEJsb2JTdG9yYWdl
RGF0YS5oICovLAorCQkJCTJFRUQ1Njg2MTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAq
LywKKwkJCQkyRUVENTY4NzEyMEM5MDNBMDA3NjU2QkIgLyogQmxvYlVSTC5oICovLAogCQkJCTkz
QzQ0MUVEMEY4MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkz
QzQ0MUVFMEY4MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0
NDFGRjBGODEzQUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2MzgwLDgg
KzE2Mzk2LDExIEBACiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAq
LywKIAkJCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1MUUx
RUNCMTBDOTFDNTU2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJMkVFRDU2
OEQxMjBDOTA0RjAwNzY1NkJCIC8qIEJsb2JEYXRhLmNwcCAqLywKKwkJCQkyRUVENTY4RTEyMEM5
MDRGMDA3NjU2QkIgLyogQmxvYkRhdGEuaCAqLywKIAkJCQk4OTg4RTEwQzExQTM1MDhCMDBEQjcz
MkUgLyogQmxvYkl0ZW0uY3BwICovLAogCQkJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBC
bG9iSXRlbS5oICovLAorCQkJCTJFRUQ1NjhGMTIwQzkwNEYwMDc2NTZCQiAvKiBCbG9iUmVnaXN0
cnkuaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJm
ICovLAogCQkJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8s
CiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCkBAIC0x
ODY3NSw4ICsxODY5NCw3IEBACiAJCQkJQzU4NUE2NjMxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJp
bmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNkNGMTFENEZCM0QwMDRD
M0U0QiAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQkUyMDk3MTFGNEFC
OEQwMDkxNURGQSAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTgxQkUyMDk5MTFG
NEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJODFCRTIwOUIxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTZEODExRDRGQjNE
MDA0QzNFNEIgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2MTc2MjYyMTIw
MzQ5MDgwMEVGOTExNCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCNjE3NjI1NDEyMDMzNzRGMDBFRjkxMTQgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTIwMDgyLDYgKzIwMTAwLDExIEBACiAJCQkJMzFGQjFB
NUQxMjBBNUQwNjAwREMwMkEwIC8qIERldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUZCMUE2NjEyMEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOEE3Q0M5NkIxMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdTY3Jp
cHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFRUQ1Njg5MTIwQzkwM0EwMDc2NTZCQiAvKiBCbG9i
UmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY4QTEyMEM5MDNBMDA3NjU2
QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY4QzEyMEM5
MDNBMDA3NjU2QkIgLyogQmxvYlVSTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVFRDU2OTExMjBD
OTA0RjAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTY5MjEy
MEM5MDRGMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxMTE5
LDcgKzIxMTQyLDcgQEAKIAkJCQk1MUUxRUNDMDBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29y
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTZDQzExRDRGQjNEMDA0QzNFNEIgLyogSURC
QW55LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJ
REJCaW5kaW5nVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTgxQkUyMDk4MTFGNEFC
OEQwMDkxNURGQSAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODFCRTIwOTgx
MUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgxQkUyMDk4MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCNjkxQzFGOTEyMDZENEEwMDAyNUQ5ODAgLyogSURCRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2RDUxMUQ0RkIzRDAwNEMzRTRCIC8q
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjQ5OCw2ICsy
MjUyMSw5IEBACiAJCQkJMzFGQjFBNjUxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFGQjFBNkMxMjBBNUQ2OTAwREMwMkEwIC8q
IEpTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOEE3Q0M5
NzAxMjA3NkY4QTAwMUQ0NTg4IC8qIFBlbmRpbmdTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkVFRDU2ODgxMjBDOTAzQTAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMkVFRDU2OEIxMjBDOTAzQTAwNzY1NkJCIC8qIEJsb2JVUkwuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMkVFRDU2OTAxMjBDOTA0RjAwNzY1NkJCIC8qIEJsb2JEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCmluZGV4IDZkNmZhMjEuLjAyNmI4OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTI3LDkgKzI3LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKKyNpbmNs
dWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVM
aXN0LmgiCkBAIC0xNDcsMjYgKzE0OSw4NiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwogfTsKIAorY2xhc3MgU2VyaWFsaXplZEJsb2IgOiBwdWJsaWMgU2hhcmVkU2VyaWFsaXpl
ZERhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRCbG9iPiBj
cmVhdGUoY29uc3QgQmxvYiogYmxvYikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2VyaWFsaXplZEJsb2IoYmxvYikpOworICAgIH0KKworICAgIGNvbnN0IEtVUkwmIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBTZXJpYWxpemVkQmxvYihjb25zdCBC
bG9iKiBibG9iKQorICAgIHsKKyAgICAgICAgbV91cmwgPSBibG9iLT51cmwoKS5jb3B5KCk7Cisg
ICAgICAgIG1fdHlwZSA9IGJsb2ItPnR5cGUoKS5jcm9zc1RocmVhZFN0cmluZygpOworICAgICAg
ICBtX3NpemUgPSBibG9iLT5zaXplKCk7CisgICAgfQorCisgICAgS1VSTCBtX3VybDsKKyAgICBT
dHJpbmcgbV90eXBlOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3NpemU7Cit9OworCitjbGFz
cyBTZXJpYWxpemVkRmlsZSA6IHB1YmxpYyBTaGFyZWRTZXJpYWxpemVkRGF0YSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZEZpbGU+IGNyZWF0ZShjb25zdCBGaWxl
KiBmaWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkRmls
ZShmaWxlKSk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7
IH0KKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
cHJpdmF0ZToKKyAgICBTZXJpYWxpemVkRmlsZShjb25zdCBGaWxlKiBmaWxlKQorICAgIHsKKyAg
ICAgICAgbV9wYXRoID0gZmlsZS0+cGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisgICAgICAg
IG1fdXJsID0gZmlsZS0+dXJsKCkuY29weSgpOworICAgICAgICBtX3R5cGUgPSBmaWxlLT50eXBl
KCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAg
IEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fdHlwZTsKK307CisKIGNsYXNzIFNlcmlhbGl6ZWRG
aWxlTGlzdCA6IHB1YmxpYyBTaGFyZWRTZXJpYWxpemVkRGF0YSB7CiBwdWJsaWM6CisgICAgc3Ry
dWN0IEZpbGVEYXRhIHsKKyAgICAgICAgU3RyaW5nIHBhdGg7CisgICAgICAgIEtVUkwgdXJsOwor
ICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICB9OworCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZEZpbGVMaXN0PiBjcmVhdGUoY29uc3QgRmlsZUxpc3QqIGxpc3QpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRGaWxlTGlzdChsaXN0KSk7CiAgICAg
fQogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9maWxlcy5zaXplKCk7
IH0KLSAgICBjb25zdCBTdHJpbmcmIGl0ZW0odW5zaWduZWQgaWR4KSB7IHJldHVybiBtX2ZpbGVz
W2lkeF07IH0KKyAgICBjb25zdCBGaWxlRGF0YSYgaXRlbSh1bnNpZ25lZCBpZHgpIHsgcmV0dXJu
IG1fZmlsZXNbaWR4XTsgfQogCiBwcml2YXRlOgogICAgIFNlcmlhbGl6ZWRGaWxlTGlzdChjb25z
dCBGaWxlTGlzdCogbGlzdCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3Qt
Pmxlbmd0aCgpOwogICAgICAgICBtX2ZpbGVzLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBt
X2ZpbGVzLmFwcGVuZChsaXN0LT5pdGVtKGkpLT5wYXRoKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgRmlsZSogZmlsZSA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBGaWxlRGF0YSBm
aWxlRGF0YTsKKyAgICAgICAgICAgIGZpbGVEYXRhLnBhdGggPSBmaWxlLT5wYXRoKCkuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIGZpbGVEYXRhLnVybCA9IGZpbGUtPnVybCgpLmNv
cHkoKTsKKyAgICAgICAgICAgIGZpbGVEYXRhLnR5cGUgPSBmaWxlLT50eXBlKCkuY3Jvc3NUaHJl
YWRTdHJpbmcoKTsKKyAgICAgICAgICAgIG1fZmlsZXMuYXBwZW5kKGZpbGVEYXRhKTsKKyAgICAg
ICAgfQogICAgIH0KIAotICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZXM7CisgICAgVmVjdG9yPEZp
bGVEYXRhPiBtX2ZpbGVzOwogfTsKIAogY2xhc3MgU2VyaWFsaXplZEltYWdlRGF0YSA6IHB1Ymxp
YyBTaGFyZWRTZXJpYWxpemVkRGF0YSB7CkBAIC0yMTcsOSArMjc5LDE1IEBAIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgSW1hZ2VEYXRh
KiBpbWFnZURhdGEpCiB7CiB9CiAKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgQmxvYiogYmxvYikKKyAgICA6IG1fdHlwZShCbG9iVHlw
ZSkKKyAgICAsIG1fc2hhcmVkRGF0YShTZXJpYWxpemVkQmxvYjo6Y3JlYXRlKGJsb2IpKQorewor
fQorCiBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
KGNvbnN0IEZpbGUqIGZpbGUpCiAgICAgOiBtX3R5cGUoRmlsZVR5cGUpCi0gICAgLCBtX3N0cmlu
ZyhmaWxlLT5wYXRoKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fc2hhcmVkRGF0YShT
ZXJpYWxpemVkRmlsZTo6Y3JlYXRlKGZpbGUpKQogewogfQogCkBAIC0yMzMsNiArMzAxLDE2IEBA
IFNlcmlhbGl6ZWRPYmplY3QqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc09iamVjdCgpCiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRPYmplY3QqPih0aGlzKTsKIH0KIAorU2VyaWFs
aXplZEJsb2IqIFNoYXJlZFNlcmlhbGl6ZWREYXRhOjphc0Jsb2IoKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTZXJpYWxpemVkQmxvYio+KHRoaXMpOworfQorCitTZXJpYWxpemVkRmlsZSog
U2hhcmVkU2VyaWFsaXplZERhdGE6OmFzRmlsZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNlcmlhbGl6ZWRGaWxlKj4odGhpcyk7Cit9CisKIFNlcmlhbGl6ZWRGaWxlTGlzdCogU2hhcmVk
U2VyaWFsaXplZERhdGE6OmFzRmlsZUxpc3QoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
ZXJpYWxpemVkRmlsZUxpc3QqPih0aGlzKTsKQEAgLTU3MCw2ICs2NDgsOCBAQCBzdHJ1Y3QgU2Vy
aWFsaXppbmdUcmVlV2Fsa2VyIDogcHVibGljIEJhc2VXYWxrZXIgewogICAgICAgICAgICAgSlNP
YmplY3QqIG9iaiA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmotPmluaGVy
aXRzKCZKU0ZpbGU6OnNfaW5mbykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZURhdGEodG9GaWxlKG9iaikpOworICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJp
dHMoJkpTQmxvYjo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YSh0b0Jsb2Iob2JqKSk7CiAgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0
cygmSlNGaWxlTGlzdDo6c19pbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YSh0b0ZpbGVMaXN0KG9iaikpOwogICAgICAgICAgICAgaWYgKG9iai0+
aW5oZXJpdHMoJkpTSW1hZ2VEYXRhOjpzX2luZm8pKQpAQCAtNzM2LDEyICs4MTYsMjEgQEAgc3Ry
dWN0IERlc2VyaWFsaXppbmdUcmVlV2Fsa2VyIDogcHVibGljIEJhc2VXYWxrZXIgewogICAgICAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2V4ZWMsIHZhbHVlLmFzRG91YmxlKCkpOwogICAg
ICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpEYXRlVHlwZToKICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIERhdGVJbnN0YW5jZShtX2V4ZWMsIG1fZ2xv
YmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlLmFzRG91YmxlKCkpOworICAgICAgICAg
ICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpCbG9iVHlwZTogeworICAgICAgICAg
ICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOworICAgICAgICAgICAgICAgIFNlcmlhbGl6ZWRCbG9iKiBzZXJpYWxpemVk
QmxvYiA9IHZhbHVlLmFzQmxvYigpOworICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgc2VyaWFsaXplZEJsb2ItPnVybCgpLCBzZXJpYWxpemVkQmxvYi0+dHlwZSgpLCBz
ZXJpYWxpemVkQmxvYi0+c2l6ZSgpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkZpbGVUeXBlOiB7CiAgICAgICAgICAgICAgICAg
aWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CisgICAgICAgICAgICAgICAgU2VyaWFsaXplZEZpbGUqIHNlcmlhbGl6ZWRGaWxlID0g
dmFsdWUuYXNGaWxlKCk7CiAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihtX2dsb2JhbE9iamVjdCksIEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCB2YWx1ZS5hc1N0cmluZygpLmNyb3NzVGhyZWFkU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9n
bG9iYWxPYmplY3QpLCBGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc2VyaWFs
aXplZEZpbGUtPnBhdGgoKSwgc2VyaWFsaXplZEZpbGUtPnVybCgpLCBzZXJpYWxpemVkRmlsZS0+
dHlwZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGE6OkZpbGVMaXN0VHlwZTogewogICAgICAgICAgICAgICAgIGlmICghbV9pc0RP
TUdsb2JhbE9iamVjdCkKQEAgLTc1MSw4ICs4NDAsMTAgQEAgc3RydWN0IERlc2VyaWFsaXppbmdU
cmVlV2Fsa2VyIDogcHVibGljIEJhc2VXYWxrZXIgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHNlcmlhbGl6ZWRGaWxlTGlzdC0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoRmlsZTo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHNlcmlhbGl6ZWRGaWxlTGlzdC0+aXRlbShp
KSkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBTZXJpYWxpemVkRmlsZUxpc3Q6OkZpbGVE
YXRhJiBmaWxlRGF0YSA9IHNlcmlhbGl6ZWRGaWxlTGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGZpbGVEYXRhLnBhdGgsIGZpbGVEYXRhLnVybCwgZmlsZURhdGEudHlwZSkpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCByZXN1bHQuZ2V0KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRh
OjpJbWFnZURhdGFUeXBlOiB7CkBAIC05MjAsNiArMTAxMSw3IEBAIHN0cnVjdCBUZWFyZG93blRy
ZWVXYWxrZXIgewogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpO
dW1iZXJUeXBlOgogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpE
YXRlVHlwZToKICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6RW1w
dHlUeXBlOgorICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpCbG9i
VHlwZToKICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6RmlsZVR5
cGU6CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkZpbGVMaXN0
VHlwZToKICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6SW1hZ2VE
YXRhVHlwZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmlu
ZGV4IDkzYmQwZGUuLmMxNjU4MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaApAQCAtMzMsMTAgKzMzLDEzIEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
SlNWYWx1ZSogSlNWYWx1ZVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEJs
b2I7CiAgICAgY2xhc3MgRmlsZTsKICAgICBjbGFzcyBGaWxlTGlzdDsKICAgICBjbGFzcyBJbWFn
ZURhdGE7CiAgICAgY2xhc3MgU2VyaWFsaXplZEFycmF5OworICAgIGNsYXNzIFNlcmlhbGl6ZWRC
bG9iOworICAgIGNsYXNzIFNlcmlhbGl6ZWRGaWxlOwogICAgIGNsYXNzIFNlcmlhbGl6ZWRGaWxl
TGlzdDsKICAgICBjbGFzcyBTZXJpYWxpemVkSW1hZ2VEYXRhOwogICAgIGNsYXNzIFNlcmlhbGl6
ZWRPYmplY3Q7CkBAIC00Niw2ICs0OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB+U2hhcmVkU2VyaWFsaXplZERhdGEoKSB7IH0KICAgICAgICAgU2VyaWFsaXplZEFy
cmF5KiBhc0FycmF5KCk7CiAgICAgICAgIFNlcmlhbGl6ZWRPYmplY3QqIGFzT2JqZWN0KCk7Cisg
ICAgICAgIFNlcmlhbGl6ZWRCbG9iKiBhc0Jsb2IoKTsKKyAgICAgICAgU2VyaWFsaXplZEZpbGUq
IGFzRmlsZSgpOwogICAgICAgICBTZXJpYWxpemVkRmlsZUxpc3QqIGFzRmlsZUxpc3QoKTsKICAg
ICAgICAgU2VyaWFsaXplZEltYWdlRGF0YSogYXNJbWFnZURhdGEoKTsKICAgICB9OwpAQCAtNjIs
NiArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBPYmplY3RUeXBlLAog
ICAgICAgICAgICAgQXJyYXlUeXBlLAogICAgICAgICAgICAgU3RyaW5nVHlwZSwKKyAgICAgICAg
ICAgIEJsb2JUeXBlLAogICAgICAgICAgICAgRmlsZVR5cGUsCiAgICAgICAgICAgICBGaWxlTGlz
dFR5cGUsCiAgICAgICAgICAgICBJbWFnZURhdGFUeXBlCkBAIC04Nyw3ICs5Myw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9zdHJpbmcoc3RyaW5nLmNyb3NzVGhyZWFk
U3RyaW5nKCkpIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBqdXN0IHNoYXJlIHRoZSBSZXAK
ICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIGV4cGxpY2l0IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgQmxvYiopOwogICAgICAgICBleHBsaWNpdCBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEZpbGUqKTsKICAgICAgICAgZXhwbGljaXQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBGaWxlTGlzdCopOwogICAgICAgICBleHBsaWNp
dCBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEltYWdlRGF0YSopOwpAQCAtMTIyLDcg
KzEyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgYXNTdHJpbmco
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IFN0cmluZ1R5
cGUgfHwgbV90eXBlID09IEZpbGVUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0g
U3RyaW5nVHlwZSk7CiAgICAgICAgICAgICByZXR1cm4gbV9zdHJpbmc7CiAgICAgICAgIH0KIApA
QCAtMTQwLDYgKzE0NywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1
cm4gbV9zaGFyZWREYXRhLT5hc0FycmF5KCk7CiAgICAgICAgIH0KIAorICAgICAgICBTZXJpYWxp
emVkQmxvYiogYXNCbG9iKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBCbG9iVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQobV9zaGFyZWREYXRhKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3NoYXJlZERhdGEtPmFzQmxvYigpOworICAgICAgICB9CisKKyAg
ICAgICAgU2VyaWFsaXplZEZpbGUqIGFzRmlsZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gRmlsZVR5cGUpOworICAgICAgICAgICAgQVNTRVJUKG1fc2hh
cmVkRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaGFyZWREYXRhLT5hc0ZpbGUoKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIFNlcmlhbGl6ZWRGaWxlTGlzdCogYXNGaWxlTGlzdCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gRmlsZUxpc3RUeXBlKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5
ZGM0ZDBmLi40MjQyNGI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xODMsMTYgKzE4MywyMCBAQCBwdWJsaWM6CiAgICAgICAgIGRvV3Jp
dGVOdW1iZXIobnVtYmVyKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlQmxvYihjb25zdCBTdHJp
bmcmIHBhdGgpCisgICAgdm9pZCB3cml0ZUJsb2IoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUpCiAgICAgewogICAgICAgICBhcHBl
bmQoQmxvYlRhZyk7Ci0gICAgICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5nKHBhdGgpOworICAgICAg
ICBkb1dyaXRlV2ViQ29yZVN0cmluZyh1cmwpOworICAgICAgICBkb1dyaXRlV2ViQ29yZVN0cmlu
Zyh0eXBlKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQ2NChzaXplKTsKICAgICB9CiAKLSAgICB2b2lk
IHdyaXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgdm9pZCB3cml0ZUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAg
IHsKICAgICAgICAgYXBwZW5kKEZpbGVUYWcpOwogICAgICAgICBkb1dyaXRlV2ViQ29yZVN0cmlu
ZyhwYXRoKTsKKyAgICAgICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcodXJsKTsKKyAgICAgICAgZG9X
cml0ZVdlYkNvcmVTdHJpbmcodHlwZSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZUZpbGVMaXN0
KGNvbnN0IEZpbGVMaXN0JiBmaWxlTGlzdCkKQEAgLTIwMCw4ICsyMDQsMTEgQEAgcHVibGljOgog
ICAgICAgICBhcHBlbmQoRmlsZUxpc3RUYWcpOwogICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBm
aWxlTGlzdC5sZW5ndGgoKTsKICAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgZG9Xcml0ZVdlYkNv
cmVTdHJpbmcoZmlsZUxpc3QuaXRlbShpKS0+cGF0aCgpKTsKKyAgICAgICAgICAgIGRvV3JpdGVX
ZWJDb3JlU3RyaW5nKGZpbGVMaXN0Lml0ZW0oaSktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAg
ICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5nKGZpbGVMaXN0Lml0ZW0oaSktPnR5cGUoKSk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICB2b2lkIHdyaXRlSW1hZ2VEYXRhKHVpbnQzMl90IHdpZHRoLCB1
aW50MzJfdCBoZWlnaHQsIGNvbnN0IHVpbnQ4X3QqIHBpeGVsRGF0YSwgdWludDMyX3QgcGl4ZWxE
YXRhTGVuZ3RoKQpAQCAtMjUxLDcgKzI1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGRvV3JpdGVT
dHJpbmcoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKICAgICB9CiAKLSAgICB2b2lk
IGRvV3JpdGVVaW50MzIodWludDMyX3QgdmFsdWUpCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAg
ICB2b2lkIGRvV3JpdGVVaW50SGVscGVyKFQgdmFsdWUpCiAgICAgewogICAgICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICAgICAgdWludDhfdCBiID0gKHZhbHVlICYgdmFySW50TWFzayk7CkBA
IC0yNjQsNiArMjcyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IGRvV3JpdGVVaW50MzIodWludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBkb1dyaXRlVWlu
dEhlbHBlcih2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBkb1dyaXRlVWludDY0KHVpbnQ2NF90
IHZhbHVlKQorICAgIHsKKyAgICAgICAgZG9Xcml0ZVVpbnRIZWxwZXIodmFsdWUpOworICAgIH0K
KwogICAgIHZvaWQgZG9Xcml0ZU51bWJlcihkb3VibGUgbnVtYmVyKQogICAgIHsKICAgICAgICAg
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZudW1iZXIpLCBzaXplb2YobnVtYmVy
KSk7CkBAIC01NjAsNyArNTc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQmxvYiogYmxvYiA9IFY4
QmxvYjo6dG9OYXRpdmUodmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CiAgICAgICAgIGlmICghYmxv
YikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93cml0ZXIud3JpdGVCbG9iKGJsb2It
PnBhdGgoKSk7CisgICAgICAgIG1fd3JpdGVyLndyaXRlQmxvYihibG9iLT51cmwoKS5zdHJpbmco
KSwgYmxvYi0+dHlwZSgpLCBibG9iLT5zaXplKCkpOwogICAgIH0KIAogICAgIHZvaWQgd3JpdGVG
aWxlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKQEAgLTU2OCw3ICs1ODYsNyBAQCBwcml2
YXRlOgogICAgICAgICBGaWxlKiBmaWxlID0gVjhGaWxlOjp0b05hdGl2ZSh2YWx1ZS5Bczx2ODo6
T2JqZWN0PigpKTsKICAgICAgICAgaWYgKCFmaWxlKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBtX3dyaXRlci53cml0ZUZpbGUoZmlsZS0+cGF0aCgpKTsKKyAgICAgICAgbV93cml0ZXIu
d3JpdGVGaWxlKGZpbGUtPnBhdGgoKSwgZmlsZS0+dXJsKCkuc3RyaW5nKCksIGZpbGUtPnR5cGUo
KSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZUZpbGVMaXN0KHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKQEAgLTg1MiwxMCArODcwLDE2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHJlYWRC
bG9iKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCiAgICAgewotICAgICAgICBTdHJpbmcg
cGF0aDsKLSAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmcGF0aCkpCisgICAgICAgIFN0
cmluZyB1cmw7CisgICAgICAgIFN0cmluZyB0eXBlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZTsKKyAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdXJsKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6
Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcGF0aCk7CisgICAgICAgIGlmICgh
cmVhZFdlYkNvcmVTdHJpbmcoJnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWRvUmVhZFVpbnQ2NCgmc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0eXBlLCBzaXpl
KTsKICAgICAgICAgKnZhbHVlID0gdG9WOChibG9iKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtODYzLDkgKzg4NywxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVhZEZpbGUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKICAgICB7CiAgICAgICAgIFN0cmluZyBwYXRoOwor
ICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgaWYgKCFy
ZWFkV2ViQ29yZVN0cmluZygmcGF0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHBhdGgpOworICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ1cmwp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3Ry
aW5nKCZ0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUGFzc1JlZlB0
cjxGaWxlPiBmaWxlID0gRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
cGF0aCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUpOwogICAgICAgICAqdmFsdWUg
PSB0b1Y4KGZpbGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC04NzgsMTUgKzkw
OCwyMiBAQCBwcml2YXRlOgogICAgICAgICBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9
IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgICAgIFN0cmlu
ZyB1cmxTdHJpbmc7CisgICAgICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgICAgIGlmICgh
cmVhZFdlYkNvcmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgcGF0aCkpOworICAgICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmlu
ZygmdXJsU3RyaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShnZXRTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJp
bmcpLCB0eXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlTGlzdCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZG9SZWFkVWludDMyKHVp
bnQzMl90KiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIGJvb2wgZG9SZWFkVWlu
dEhlbHBlcihUKiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp2YWx1ZSA9IDA7CiAgICAgICAgIHVp
bnQ4X3QgY3VycmVudEJ5dGU7CkBAIC05MDEsNiArOTM4LDE2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGJvb2wgZG9SZWFkVWludDMyKHVpbnQzMl90KiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBkb1JlYWRVaW50SGVscGVyKHZhbHVlKTsKKyAg
ICB9CisKKyAgICBib29sIGRvUmVhZFVpbnQ2NCh1aW50NjRfdCogdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gZG9SZWFkVWludEhlbHBlcih2YWx1ZSk7CisgICAgfQorCiAgICAgYm9vbCBk
b1JlYWROdW1iZXIoZG91YmxlKiBudW1iZXIpCiAgICAgewogICAgICAgICBpZiAobV9wb3NpdGlv
biArIHNpemVvZihkb3VibGUpID4gbV9sZW5ndGgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwCmluZGV4IGY3YWM2MDMuLjk2ZjRiOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCkBAIC0yOCwxMiArMjgsMTEgQEAKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaWYgRU5BQkxFKEJMT0Ip
IHx8IEVOQUJMRShGSUxFX1dSSVRFUikKICNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCi0jZW5kaWYK
ICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtOTIsNiArOTEsMTEgQEAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogICAgICAgICBtX2ZpbGVUaHJl
YWQgPSAwOwogICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShCTE9CKQorICAgIEhhc2hTZXQ8U3Ry
aW5nPjo6aXRlcmF0b3IgYmxvYlVSTHNFbmQgPSBtX2Jsb2JVUkxzLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gbV9ibG9iVVJMcy5iZWdpbigpOyBpdGVy
ICE9IGJsb2JVUkxzRW5kOyArK2l0ZXIpCisgICAgICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2Uo
KS51bnJlZ2lzdGVyQmxvYlVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0ZXIpKTsKKyNlbmRp
ZgogfQogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtMjQxLDYgKzI0NSwyMSBAQCBET01UaW1l
ciogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCkKICAg
ICByZXR1cm4gbV90aW1lb3V0cy5nZXQodGltZW91dElkKTsKIH0KIAorI2lmIEVOQUJMRShCTE9C
KQordm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp0cmFja0Jsb2JVUkwoY29uc3QgU3RyaW5n
JiB1cmwpCit7CisgICAgbV9ibG9iVVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpyZXZva2VCbG9iVVJMKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlm
IChtX2Jsb2JVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAgQmxvYlJlZ2lzdHJ5OjppbnN0
YW5jZSgpLnVucmVnaXN0ZXJCbG9iVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKKyAg
ICAgICAgbV9ibG9iVVJMcy5yZW1vdmUodXJsKTsKKyAgICB9Cit9CisjZW5kaWYKKwogI2lmIEVO
QUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCiBGaWxlVGhyZWFkKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpmaWxlVGhyZWFkKCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaAppbmRleCBkMmRhMzA3Li5mZGYzYzJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
QEAgLTEyNSw2ICsxMjYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJl
bW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAgICAgICAgIERPTVRpbWVyKiBmaW5kVGltZW91
dChpbnQgdGltZW91dElkKTsKIAorI2lmIEVOQUJMRShCTE9CKQorICAgICAgICB2b2lkIHRyYWNr
QmxvYlVSTChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9pZCByZXZva2VCbG9iVVJMKGNvbnN0
IFN0cmluZyYpOworI2VuZGlmCisKICNpZiBVU0UoSlNDKQogICAgICAgICBKU0M6OkpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSgpOwogI2VuZGlmCkBAIC0xNTIsNiArMTU4LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBIYXNoTWFwPGludCwgRE9NVGltZXIqPiBtX3RpbWVvdXRz
OwogCisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Jsb2JVUkxz
OworI2VuZGlmCisKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUv
aHRtbC9CbG9iLmNwcAppbmRleCA5NzdmZmE2Li4wYWU3YTRhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvQmxvYi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zMSwyOSArMzEs
NjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCbG9iLmgiCiAKKyNpbmNsdWRl
ICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisjaW5jbHVkZSAiQmxvYlJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRh
dGEuCiBCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCiAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAs
IG1fc2l6ZSgwKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zW2ldKTsKIH0KIAorLy8gRklYTUU6IFRv
IGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiBCbG9iOjpCbG9i
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYgaXRl
bSkKKyAgICA6IG1fc2l6ZSgwKQogewogICAgIG1faXRlbXMuYXBwZW5kKGl0ZW0pOwogfQogCisv
LyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4K
IEJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICA6IG1fc2l6ZSgwKQogewogICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXpl
IHRoZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgpLgogICAgIG1faXRlbXMuYXBwZW5kKEZpbGVCbG9i
SXRlbTo6Y3JlYXRlKHBhdGgpKTsKIH0KIAorQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0
YSwgbG9uZyBsb25nIHNpemUpCisgICAgOiBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkp
CisgICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAgICBBU1NFUlQoYmxvYkRhdGEuZ2V0KCkgJiYgIWJs
b2JEYXRhLT5pdGVtcygpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJu
YWwgVVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBwcm92aWRlZCBibG9iIGRhdGEuCisgICAg
bV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpLnJlZ2lzdGVyQmxvYlVSTChtX3VybCwgYmxvYkRhdGEp
OworfQorCitCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxv
bmcgc2l6ZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9zaXplKHNpemUpCit7CisgICAg
Ly8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2Ft
ZSBibG9iIGRhdGEgYXMgdGhlIHNvdXJjZSBVUkwuCisgICAgbV91cmwgPSBCbG9iVVJMOjpjcmVh
dGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgQmxvYlJlZ2lzdHJ5OjppbnN0YW5j
ZSgpLnJlZ2lzdGVyQmxvYlVSTChtX3VybCwgc3JjVVJMKTsKK30KKworQmxvYjo6fkJsb2IoKQor
eworICAgIC8vIFRoZSBpbnRlcm5hbCBVUkwgaXMgb25seSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBC
bG9iIG9iamVjdC4gU28gd2UgbmVlZCB0byB1bnJlZ2lzdGVyIHRoZSBVUkwgd2hlbiB0aGUgb2Jq
ZWN0IGlzIEdDLWVkLgorICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS51bnJlZ2lzdGVyQmxv
YlVSTChtX3VybCk7Cit9CisKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxh
cmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwpAQCAtNjQsNiArMTAwLDcgQEAg
dW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBzaXplOwog
fQogCisvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9i
RGF0YS4KIGNvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1f
aXRlbXMuc2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CkBAIC05
OSw0ICsxMzYsMTYgQEAgUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBsb24KIH0KICNlbmRpZiAvLyBFTkFC
TEUoQkxPQikKIAorS1VSTCBCbG9iOjpjcmVhdGVQdWJsaWNVUkwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgY29uc3QKK3sKKyAgICBLVVJMIHVybCA9IEJs
b2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKworICAgIEJsb2JSZWdp
c3RyeTo6aW5zdGFuY2UoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBtX3VybCk7CisKKyAgICAvLyBL
ZWVwIHRyYWNrIG9mIHRoZSBuZXcgVVJMIGluIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNv
IHRoYXQgaXQgd2lsbCBnZXQgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGNvbnRleHQgaXMgZ29uZS4K
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT50cmFja0Jsb2JVUkwodXJsLnN0cmluZygpKTsK
KworICAgIHJldHVybiB1cmw7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IDdhZmM3
YTAuLmE3MjkyOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2IuaApAQCAtMzIsNTQgKzMyLDcxIEBACiAjZGVmaW5lIEJsb2JfaAogCiAjaW5j
bHVkZSAiQmxvYkl0ZW0uaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8
QmxvYj4gewogcHVibGljOgorICAgIC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dp
dGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSwgaXRl
bXMpKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlzIGlz
IGNhbGxlZCBvbmx5IGZyb20KLSAgICAvLyBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBiZWNvbWUgaW52YWxpZCBvbmNlCi0gICAg
Ly8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9i
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y29uc3QgU3RyaW5nJiBwYXRoKQorICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBl
LCBsb25nIGxvbmcgc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxv
YihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBzcmNVUkwsIHR5cGUsIHNpemUpKTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CisgICAgdmlydHVhbCB+QmxvYigpOwog
CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLgorICAg
IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRh
LgogICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OwogCisgICAgLy8gRklYTUU6IFRvIGJl
IHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgY29uc3QgQmxv
Ykl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KIAogI2lmIEVOQUJM
RShCTE9CKQogICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSA9IFN0cmluZygpKSBjb25zdDsKKworICAgIEtVUkwgY3JlYXRlUHVibGljVVJMKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CisgICAg
Ly8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEu
CiAgICAgQmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBCbG9iSXRlbUxpc3QmKTsKICAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiYpOwotCi0gICAgLy8gRklYTUU6IERlcHJlY2F0ZWQg
Y29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgp
LgogICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCk7
CiAKKyAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRyPEJsb2JEYXRh
PiwgbG9uZyBsb25nIHNpemUpOworCisgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KKyAgICBC
bG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpOworCisgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92
ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgQmxvYkl0ZW1MaXN0IG1f
aXRlbXM7CisKKyAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhl
IGJsb2IgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCisgICAgLy8gSXQgaXMgb25s
eSB1c2VkIGJ5IEZpbGVSZWFkZXIgdG8gcmVhZCB0aGUgYmxvYiBkYXRhIHZpYSBsb2FkaW5nIGZy
b20gdGhlIGJsb2IgVVJMIHJlc291cmNlLgorICAgIEtVUkwgbV91cmw7CisKICAgICBTdHJpbmcg
bV90eXBlOworICAgIGxvbmcgbG9uZyBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjlmZTIxZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iUmVn
aXN0cnlJbXBsLmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgorCisjaW5jbHVk
ZSAiRmlsZVN0cmVhbS5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgorI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBCbG9i
UmVnaXN0cnlJbXBsOjpzaG91bGRMb2FkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KSBjb25zdAoreworICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgZmV0Y2hlZCB1
c2luZyB0aGUgR0VUIG1ldGhvZCwgYmFpbCBvdXQuCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2Fz
ZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdFVCIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJl
Z2lzdHJ5SW1wbDo6Y3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCopCit7CisgICAgaWYgKCFzaG91bGRMb2FkUmVz
b3VyY2UocmVxdWVzdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFRvIGJl
IGltcGxlbWVudGVkLgorICAgIHJldHVybiAwOworfQorCitib29sIEJsb2JSZWdpc3RyeUltcGw6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCit7Cisg
ICAgaWYgKCFzaG91bGRMb2FkUmVzb3VyY2UocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK0Jsb2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOworICAgIHJl
dHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdl
SXRlbXMoQmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdl
RGF0YUl0ZW1MaXN0JiBpdGVtcywgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkK
K3sKKyAgICBCbG9iU3RvcmFnZURhdGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0
ZW1zLmJlZ2luKCk7CisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBmb3IgKDsgaXRlciAhPSBp
dGVtcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBBU1NFUlQoaXRlci0+bGVuZ3RoICE9
IC0xKTsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gaXRlci0+bGVuZ3RoKQorICAgICAgICAg
ICAgICAgIG9mZnNldCAtPSBpdGVyLT5sZW5ndGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKDsgaXRlciAhPSBp
dGVtcy5lbmQoKSAmJiAobGVuZ3RoID09IC0xIHx8IGxlbmd0aCA+IDApOyArK2l0ZXIpIHsKKyAg
ICAgICAgbG9uZyBsb25nIHJlbWFpbmluZ0xlbmd0aCA9IGl0ZXItPmxlbmd0aCAtIG9mZnNldDsK
KyAgICAgICAgbG9uZyBsb25nIG5ld0xlbmd0aCA9IChyZW1haW5pbmdMZW5ndGggPiBsZW5ndGgg
JiYgbGVuZ3RoICE9IC0xKSA/IGxlbmd0aCA6IHJlbWFpbmluZ0xlbmd0aDsKKyAgICAgICAgaWYg
KGl0ZXItPnR5cGUgPT0gQmxvYlN0b3JhZ2VEYXRhSXRlbTo6RGF0YSkKKyAgICAgICAgICAgIGJs
b2JTdG9yYWdlRGF0YS0+YXBwZW5kRGF0YShpdGVyLT5kYXRhLCBpdGVyLT5vZmZzZXQgKyBvZmZz
ZXQsIG5ld0xlbmd0aCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGl0ZXIt
PnR5cGUgPT0gQmxvYlN0b3JhZ2VEYXRhSXRlbTo6RmlsZSk7CisgICAgICAgICAgICBibG9iU3Rv
cmFnZURhdGEtPmFwcGVuZEZpbGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0ICsgb2Zmc2V0LCBu
ZXdMZW5ndGgsIGl0ZXItPmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGxlbmd0aCAhPSAtMSkKKyAgICAgICAgICAgIGxlbmd0aCAtPSBuZXdMZW5ndGg7
CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfQorfQorCit2b2lkIEJsb2JSZWdpc3RyeUltcGw6
OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJs
b2JEYXRhKQoreworICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JTdG9yYWdlRGF0YSA9
IEJsb2JTdG9yYWdlRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYlN0b3JhZ2VEYXRhLT5zZXRDb250
ZW50VHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSk7CisgICAgYmxvYlN0b3JhZ2VEYXRhLT5z
ZXRDb250ZW50RGlzcG9zaXRpb24oYmxvYkRhdGEtPmNvbnRlbnREaXNwb3NpdGlvbigpKTsKKwor
ICAgIGZvciAoQmxvYkRhdGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGJsb2JEYXRh
LT5pdGVtcygpLmJlZ2luKCk7IGl0ZXIgIT0gYmxvYkRhdGEtPml0ZW1zKCkuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBzd2l0Y2ggKGl0ZXItPnR5cGUpIHsKKyAgICAgICAgY2FzZSBCbG9iRGF0
YUl0ZW06OkRhdGE6CisgICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPmFwcGVuZERhdGEoaXRl
ci0+ZGF0YSwgMCwgaXRlci0+ZGF0YS5sZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgICAgICBibG9iU3RvcmFnZURh
dGEtPmFwcGVuZEZpbGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0LCBpdGVyLT5sZW5ndGgsIGl0
ZXItPmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6IHsKKyAgICAgICAgICAgIGlmIChtX2Jsb2JzLmNv
bnRhaW5zKGl0ZXItPnVybCkpCisgICAgICAgICAgICAgICAgYXBwZW5kU3RvcmFnZUl0ZW1zKGJs
b2JTdG9yYWdlRGF0YS5nZXQoKSwgbV9ibG9icy5nZXQoaXRlci0+dXJsKS0+aXRlbXMoKSwgaXRl
ci0+b2Zmc2V0LCBpdGVyLT5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0g
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfQorCisKKyAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJsb2JTdG9yYWdlRGF0YSk7
Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQoreworICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+
IHNyYyA9IG1fYmxvYnMuZ2V0KHNyY1VSTCk7CisgICAgQVNTRVJUKHNyYyk7CisgICAgaWYgKCFz
cmMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGJsb2JT
dG9yYWdlRGF0YSA9IEJsb2JTdG9yYWdlRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYlN0b3JhZ2VE
YXRhLT5zZXRDb250ZW50VHlwZShzcmMtPmNvbnRlbnRUeXBlKCkpOworICAgIGJsb2JTdG9yYWdl
RGF0YS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKHNyYy0+Y29udGVudERpc3Bvc2l0aW9uKCkpOwor
ICAgIGFwcGVuZFN0b3JhZ2VJdGVtcyhibG9iU3RvcmFnZURhdGEuZ2V0KCksIHNyYy0+aXRlbXMo
KSwgMCwgLTEpOworICAgIAorICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgYmxvYlN0b3Jh
Z2VEYXRhKTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp1bnJlZ2lzdGVyQmxvYlVSTChj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgbV9ibG9icy5yZW1vdmUodXJsLnN0cmluZygpKTsKK30K
KworUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IEJsb2JSZWdpc3RyeUltcGw6OmdldEJsb2JE
YXRhRnJvbVVSTChjb25zdCBLVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmxvYnMu
Z2V0KHVybC5zdHJpbmcoKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUlt
cGwuaCBiL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzZkNmZiNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iUmVnaXN0cnlJbXBsLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYlJlZ2lzdHJ5
SW1wbF9oCisjZGVmaW5lIEJsb2JSZWdpc3RyeUltcGxfaAorCisjaWYgRU5BQkxFKEJMT0IpCisK
KyNpbmNsdWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorI2luY2x1
ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFz
cyBSZXNvdXJjZUhhbmRsZTsKK2NsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworY2xhc3MgQmxvYlJlZ2lz
dHJ5SW1wbCA6IHB1YmxpYyBCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkJs
b2JSZWdpc3RyeUltcGwoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJj
ZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisKKyAgICBQ
YXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gZ2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IEtVUkwm
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIHNob3VsZExvYWRSZXNvdXJjZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kU3RvcmFnZUl0
ZW1zKEJsb2JTdG9yYWdlRGF0YSosIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0JiwgbG9u
ZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gPiBtX2Jsb2JzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0
cnlJbXBsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iU3RvcmFnZURhdGEuaCBiL1dl
YkNvcmUvaHRtbC9CbG9iU3RvcmFnZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xYWNiYWQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JTdG9y
YWdlRGF0YS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4N
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQor
I2lmbmRlZiBCbG9iU3RvcmFnZURhdGFfaA0KKyNkZWZpbmUgQmxvYlN0b3JhZ2VEYXRhX2gNCisN
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCINCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4NCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPg0KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0KK3N0cnVjdCBCbG9iU3RvcmFnZURhdGFJ
dGVtIHsNCisgICAgdHlwZWRlZiBlbnVtIHsgRGF0YSwgRmlsZSB9IEJsb2JTdG9yZURhdGFJdGVt
VHlwZTsNCisgICAgQmxvYlN0b3JlRGF0YUl0ZW1UeXBlIHR5cGU7DQorICAgIGxvbmcgbG9uZyBv
ZmZzZXQ7DQorICAgIGxvbmcgbG9uZyBsZW5ndGg7DQorDQorICAgIC8vIEZvciBzdHJpbmcgZGF0
YS4NCisgICAgQ1N0cmluZyBkYXRhOw0KKw0KKyAgICAvLyBGb3IgZmlsZSBkYXRhLg0KKyAgICBT
dHJpbmcgcGF0aDsNCisgICAgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsNCisNCisg
ICAgQmxvYlN0b3JhZ2VEYXRhSXRlbShjb25zdCBDU3RyaW5nJiBkYXRhLCBsb25nIGxvbmcgb2Zm
c2V0LCBsb25nIGxvbmcgbGVuZ3RoKQ0KKyAgICAgICAgOiB0eXBlKERhdGEpDQorICAgICAgICAs
IG9mZnNldChvZmZzZXQpDQorICAgICAgICAsIGxlbmd0aChsZW5ndGgpDQorICAgICAgICAsIGRh
dGEoZGF0YSkNCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKDApDQorICAgIHsN
CisgICAgfQ0KKw0KKyAgICBCbG9iU3RvcmFnZURhdGFJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwg
bG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZSkNCisgICAgICAgIDogdHlwZShGaWxlKQ0KKyAgICAgICAgLCBvZmZzZXQob2Zm
c2V0KQ0KKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQ0KKyAgICAgICAgLCBwYXRoKHBhdGgpDQor
ICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShleHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUpDQorICAgIHsNCisgICAgfQ0KK307DQorDQordHlwZWRlZiBWZWN0b3I8QmxvYlN0b3JhZ2VE
YXRhSXRlbT4gQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3Q7DQorDQorY2xhc3MgQmxvYlN0b3JhZ2VE
YXRhIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYlN0b3JhZ2VEYXRhPiB7DQorcHVibGljOg0KKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+IGNyZWF0ZSgpDQorICAgIHsNCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYlN0b3JhZ2VEYXRhKCkpOw0KKyAgICB9DQor
DQorICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRUeXBlOyB9DQorICAgIHZvaWQgc2V0Q29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSkgeyBtX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGU7IH0NCisNCisgICAgY29uc3QgU3Ry
aW5nJiBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnREaXNwb3Np
dGlvbjsgfQ0KKyAgICB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBTdHJpbmcmIGNv
bnRlbnREaXNwb3NpdGlvbikgeyBtX2NvbnRlbnREaXNwb3NpdGlvbiA9IGNvbnRlbnREaXNwb3Np
dGlvbjsgfQ0KKyAgICANCisgICAgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1z
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQ0KKw0KKyAgICB2b2lkIGFwcGVuZERhdGEoY29u
c3QgQ1N0cmluZyYgZGF0YSwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkNCisg
ICAgew0KKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxvYlN0b3JhZ2VEYXRhSXRlbShkYXRhLCBv
ZmZzZXQsIGxlbmd0aCkpOw0KKyAgICB9DQorDQorICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpDQorICAgIHsNCisgICAgICAgIG1faXRlbXMuYXBwZW5k
KEJsb2JTdG9yYWdlRGF0YUl0ZW0ocGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZSkpOw0KKyAgICB9DQorDQorcHJpdmF0ZToNCisgICAgU3RyaW5nIG1fY29udGVu
dFR5cGU7DQorICAgIFN0cmluZyBtX2NvbnRlbnREaXNwb3NpdGlvbjsNCisgICAgQmxvYlN0b3Jh
Z2VEYXRhSXRlbUxpc3QgbV9pdGVtczsNCit9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUN
CisNCisjZW5kaWYgLy8gQmxvYlN0b3JhZ2VEYXRhX2gNCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQmxvYlVSTC5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5ZTE3MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
aHRtbC9CbG9iVVJMLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJVVUlE
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworS1VSTCBCbG9iVVJMOjpjcmVhdGVVUkwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK3sKKyAgICAvLyBD
cmVhdGUgdGhlIGJsb2IgVVJMIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICAgIC8vICAgICBi
bG9iOiVlc2NhcGVkX29yaWdpbiUvJVVVSUQlCisgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgaG9z
dCBwYWdlIGlzIGVuY29kZWQgaW4gdGhlIFVSTCB2YWx1ZSB0byBhbGxvdyBlYXN5IGxvb2t1cCBv
ZiB0aGUgb3JpZ2luIHdoZW4gdGhlIHNlY3VyaXR5IGNoZWNrIG5lZWRzCisgICAgLy8gdG8gYmUg
cGVyZm9ybWVkLgorICAgIFN0cmluZyB1cmxTdHJpbmcgPSAiYmxvYjoiOworICAgIHVybFN0cmlu
ZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHVybFN0cmluZyArPSAiLyI7Cisg
ICAgdXJsU3RyaW5nICs9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICByZXR1cm4g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7Cit9CisKK0tVUkwgQmxvYlVSTDo6Z2V0
T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoImJs
b2IiKSk7CisKKyAgICB1bnNpZ25lZCBzID0gdXJsLnBhdGhTdGFydCgpOzsKKyAgICB1bnNpZ25l
ZCBlID0gdXJsLnBhdGhBZnRlckxhc3RTbGFzaCgpOworICAgIFN0cmluZyBvcmlnaW4gPSB1cmwu
c3RyaW5nKCkuc3Vic3RyaW5nKHMsIGUgLSBzKTsKKyAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxT
dHJpbmcsIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhvcmlnaW4pKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQmxvYlVSTC5oIGIvV2ViQ29yZS9odG1sL0Jsb2JVUkwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzc5Yzk5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2JVUkwuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iVVJMX2gKKyNkZWZp
bmUgQmxvYlVSTF9oCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIktVUkwuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBCbG9iVVJMIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVVUkwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBLVVJMIGdldE9yaWdpbihjb25zdCBLVVJM
Jik7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIEJsb2JV
UkxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0Zp
bGUuY3BwCmluZGV4IDEwOWUwZDMuLjQ0ZTJlYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9G
aWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAgLTM3LDYgKzM3LDExIEBAIEZp
bGU6OkZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIEluaXQoKTsKIH0KIAorRmlsZTo6RmlsZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6IEJsb2Ioc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgdXJsLCB0eXBlLCAtMSkKK3sKK30KKwogI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQogRmlsZTo6RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCkKICAgICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRmlsZUJsb2JJdGVt
OjpjcmVhdGUoZmlsZVBhdGgsIHJlbGF0aXZlUGF0aCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCBjMGFlY2M4Li4wNmE3M2M1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgK
QEAgLTM5LDYgKzM5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
aWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgpKTsKICAgICB9CiAKKyAgICAvLyBGb3Ig
ZGVzZXJpYWxpemF0aW9uLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgs
IHVybCwgdHlwZSkpOworICAgIH0KKwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3Qg
U3RyaW5nJiBwYXRoKQogICAgIHsKQEAgLTYwLDExICs2NiwxNSBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBwYXRo
KTsKLSAgICB2b2lkIEluaXQoKTsKKworICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCisgICAg
RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FE
KQogICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogI2VuZGlmCisKKyAgICB2b2lkIEluaXQoKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vQmxvYkRhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYWQxOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIEJsb2JEYXRhSXRlbTo6Y29weShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAg
dHlwZSA9IGl0ZW0udHlwZTsKKyAgICBkYXRhID0gaXRlbS5kYXRhOyAvLyBUaGlzIGlzIE9LIGJl
Y2F1c2UgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBWZWN0b3I8Y2hhcj4uCisgICAgcGF0aCA9
IGl0ZW0ucGF0aC5jcm9zc1RocmVhZFN0cmluZygpOworICAgIHVybCA9IGl0ZW0udXJsLmNvcHko
KTsKKyAgICBvZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICBsZW5ndGggPSBpdGVtLmxlbmd0aDsK
KyAgICBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZTsKK30KKworUGFzc093blB0cjxCbG9iRGF0YT4gQmxvYkRhdGE6OmNvcHkoKSBjb25zdAor
eworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBhZG9wdFB0cihuZXcgQmxvYkRhdGEo
KSk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudFR5cGUgPSBtX2NvbnRlbnRUeXBlLmNyb3NzVGhy
ZWFkU3RyaW5nKCk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudERpc3Bvc2l0aW9uID0gbV9jb250
ZW50RGlzcG9zaXRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBibG9iRGF0YS0+bV9pdGVt
cy5yZXNpemUobV9pdGVtcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
dGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXQoaSkuY29weSht
X2l0ZW1zLmF0KGkpKTsKKworICAgIHJldHVybiBibG9iRGF0YS5yZWxlYXNlKCk7Cit9CisKK3Zv
aWQgQmxvYkRhdGE6OmFwcGVuZERhdGEoY29uc3QgQ1N0cmluZyYgZGF0YSkKK3sKKyAgICBtX2l0
ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oZGF0YSkpOworfQorCit2b2lkIEJsb2JEYXRhOjphcHBl
bmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0
YUl0ZW0ocGF0aCkpOworfQorCit2b2lkIEJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0o
cGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOworfQorCit2
b2lkIEJsb2JEYXRhOjphcHBlbmRCbG9iKGNvbnN0IEtVUkwmIHVybCwgbG9uZyBsb25nIG9mZnNl
dCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0o
dXJsLCBvZmZzZXQsIGxlbmd0aCkpOworfQorCit2b2lkIEJsb2JEYXRhOjpzd2FwSXRlbXMoQmxv
YkRhdGFJdGVtTGlzdCYgaXRlbXMpCit7CisgICAgbV9pdGVtcy5zd2FwKGl0ZW1zKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9i
RGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjZlNTU4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL0Jsb2JEYXRhLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JEYXRhX2gKKyNkZWZp
bmUgQmxvYkRhdGFfaAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBCbG9iRGF0YUl0ZW0geworICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisg
ICAgQmxvYkRhdGFJdGVtKCkKKyAgICAgICAgOiBvZmZzZXQoMCkKKyAgICAgICAgLCBsZW5ndGgo
LTEpCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKDApCisgICAgeworICAgIH0K
KworICAgIC8vIENvbnN0cnVjdG9yIGZvciBTdHJpbmcgdHlwZS4KKyAgICBCbG9iRGF0YUl0ZW0o
Y29uc3QgQ1N0cmluZyYgZGF0YSkKKyAgICAgICAgOiB0eXBlKERhdGEpCisgICAgICAgICwgZGF0
YShkYXRhKQorICAgICAgICAsIG9mZnNldCgwKQorICAgICAgICAsIGxlbmd0aCgtMSkKKyAgICAg
ICAgLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUoMCkKKyAgICB7CisgICAgfQorCisgICAgLy8g
Q29uc3RydWN0b3IgZm9yIEZpbGUgdHlwZSAoY29tcGxldGUgZmlsZSkuCisgICAgQmxvYkRhdGFJ
dGVtKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICAgICAgOiB0eXBlKEZpbGUpCisgICAgICAgICwg
cGF0aChwYXRoKQorICAgICAgICAsIG9mZnNldCgwKQorICAgICAgICAsIGxlbmd0aCgtMSkKKyAg
ICAgICAgLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUoMCkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gQ29uc3RydWN0b3IgZm9yIEZpbGUgdHlwZSAocGFydGlhbCBmaWxlKS4KKyAgICBCbG9iRGF0
YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICA6IHR5cGUoRmls
ZSkKKyAgICAgICAgLCBwYXRoKHBhdGgpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAg
ICAgLCBsZW5ndGgobGVuZ3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZShl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICAvLyBDb25z
dHJ1Y3RvciBmb3IgQmxvYiB0eXBlLgorICAgIEJsb2JEYXRhSXRlbShjb25zdCBLVVJMJiB1cmws
IGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgICAgIDogdHlwZShCbG9i
KQorICAgICAgICAsIHVybCh1cmwpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAg
LCBsZW5ndGgobGVuZ3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSgwKQor
ICAgIHsKKyAgICB9CisKKyAgICAvLyBHZXRzIGEgY29weSBvZiB0aGUgZGF0YSBzdWl0YWJsZSBm
b3IgcGFzc2luZyB0byBhbm90aGVyIHRocmVhZC4KKyAgICB2b2lkIGNvcHkoY29uc3QgQmxvYkRh
dGFJdGVtJik7CisKKyAgICBlbnVtIHsgRGF0YSwgRmlsZSwgQmxvYiB9IHR5cGU7CisgICAgCisg
ICAgLy8gRm9yIERhdGEgdHlwZS4KKyAgICBDU3RyaW5nIGRhdGE7CisKKyAgICAvLyBGb3IgRmls
ZSB0eXBlLgorICAgIFN0cmluZyBwYXRoOworCisgICAgLy8gRm9yIEJsb2IgdHlwZS4KKyAgICBL
VVJMIHVybDsKKworICAgIC8vIEZvciBGaWxlIGFuZCBCbG9iIHR5cGUuCisgICAgbG9uZyBsb25n
IG9mZnNldDsKKyAgICBsb25nIGxvbmcgbGVuZ3RoOworCisgICAgLy8gRm9yIEZpbGUgdHlwZSBv
bmx5LgorICAgIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7Cit9OworCit0eXBlZGVm
IFZlY3RvcjxCbG9iRGF0YUl0ZW0+IEJsb2JEYXRhSXRlbUxpc3Q7CisKK2NsYXNzIEJsb2JEYXRh
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmxvYkRhdGEoKSk7CisgICAgfQorCisg
ICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYW5v
dGhlciB0aHJlYWQuCisgICAgUGFzc093blB0cjxCbG9iRGF0YT4gY29weSgpIGNvbnN0OworCisg
ICAgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFR5
cGU7IH0KKyAgICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
IHsgbV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGNv
bnRlbnREaXNwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudERpc3Bvc2l0aW9uOyB9
CisgICAgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb250ZW50RGlz
cG9zaXRpb24pIHsgbV9jb250ZW50RGlzcG9zaXRpb24gPSBjb250ZW50RGlzcG9zaXRpb247IH0K
KworICAgIGNvbnN0IEJsb2JEYXRhSXRlbUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVtczsgfQorICAgIHZvaWQgc3dhcEl0ZW1zKEJsb2JEYXRhSXRlbUxpc3QmKTsKKyAgICAKKyAg
ICB2b2lkIGFwcGVuZERhdGEoY29uc3QgQ1N0cmluZyYpOworICAgIHZvaWQgYXBwZW5kRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUpOworICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBLVVJMJiB1cmwsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworCitwcml2YXRlOgorICAgIEJsb2JE
YXRhKCkgeyB9CisKKyAgICBTdHJpbmcgbV9jb250ZW50VHlwZTsKKyAgICBTdHJpbmcgbV9jb250
ZW50RGlzcG9zaXRpb247CisgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkRhdGFfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYlJl
Z2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMTI1MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQmxvYlJlZ2lzdHJ5X2gKKyNkZWZpbmUgQmxvYlJlZ2lzdHJ5X2gKKwor
I2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBCbG9iRGF0YTsKK2NsYXNzIEtVUkw7CitjbGFzcyBSZXNvdXJj
ZUVycm9yOworY2xhc3MgUmVzb3VyY2VIYW5kbGU7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVu
dDsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKK2Ns
YXNzIEJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgc3RhdGljIEJsb2JSZWdpc3RyeSYgaW5z
dGFuY2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYs
IFBhc3NPd25QdHI8QmxvYkRhdGE+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVz
b3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsK
KworICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0
cnlfaAo=
</data>
<flag name="review"
          id="52168"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52169"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63944</attachid>
            <date>2010-08-09 15:35:38 -0700</date>
            <delta_ts>2010-08-09 15:53:35 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43600_3</filename>
            <type>text/plain</type>
            <size>72666</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDY0ZDEyZWQuLjE2NDdjMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTM0LDYgKzkzNCw4IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0FzeW5jSW1hZ2VSZXNpemVyLmNwcAogICAgIGh0
bWwvQmxvYi5jcHAKICAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcAorICAgIGh0bWwvQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAKKyAgICBodG1sL0Jsb2JVUkwuY3BwCiAgICAgaHRtbC9Db2xsZWN0aW9uQ2Fj
aGUuY3BwCiAgICAgaHRtbC9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL0RPTURhdGFH
cmlkRGF0YVNvdXJjZS5jcHAKQEAgLTExOTcsNiArMTE5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAgIHBsYXRm
b3JtL0FyZW5hLmNwcAorICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmNwcAogICAgIHBsYXRmb3JtL0Js
b2JJdGVtLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgIHBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OGUxYjcyLi43NGJlMDRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEwLTA4LTA5
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIHN1cHBvcnQgdG8gcmVnaXN0ZXIgdGhl
IGJsb2IgZGF0YS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQzNjAwCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGFkZGlu
ZyBCbG9iIFVSTCBzdXBwb3J0LiBUaGUgYmxvYiBoYXMKKyAgICAgICAgYW4gaW50ZXJuYWwgVVJM
ICh1c2VkIGJ5IEZpbGVSZWFkZXIpIGFuZCBwdWJsaWMgVVJMcyAodXNlZCBieSBCbG9iLnVybCku
CisgICAgICAgIFRoZSBVUkwgYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgYXJlIG1hbmFnZWQgYnkg
QmxvYlJlZ2lzdHJ5IGludGVyZmFjZS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IHJl
bW92ZSB0aGUgdXNhZ2Ugb2YgQmxvYkl0ZW0uIEl0IHdpbGwgYmUgcmVtb3ZlZAorICAgICAgICB3
aGVuIGFsbCB0aGUgYmxvYiBkYXRhIHN1cHBvcnQgaXMgaG9va2VkIHVwIGFuZCB0aGUgbmV3IHRl
c3RzIHdpbGwgYmUKKyAgICAgICAgYWRkZWQgdGhlbi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZEJsb2I6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkQmxvYjo6U2VyaWFsaXplZEJsb2IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZEZpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
RmlsZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkRmlsZTo6dXJsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRGaWxlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZWRGaWxlOjpTZXJpYWxpemVkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkRmlsZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZEZpbGVM
aXN0OjpTZXJpYWxpemVkRmlsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTZXJpYWxpemVkRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZFNlcmlhbGl6ZWREYXRhOjphc0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXpp
bmdUcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNl
cmlhbGl6aW5nVHJlZVdhbGtlcjo6Y29udmVydElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVhcmRvd25UcmVlV2Fsa2VyOjpjb252ZXJ0SWZUZXJtaW5hbCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6YXNCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZURhdGE6OmFzRmlsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6V3JpdGVyOjp3cml0ZUJs
b2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpXcml0ZXI6OndyaXRlRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6d3JpdGVGaWxlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpaaWdaYWc6OldyaXRlcjo6ZG9Xcml0ZVVpbnRIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpXcml0ZXI6OmRvV3JpdGVVaW50NjQpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFn
OjpTZXJpYWxpemVyOjp3cml0ZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpTZXJp
YWxpemVyOjp3cml0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJl
YWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGVMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50SGVscGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlppZ1phZzo6UmVhZGVyOjpkb1JlYWRVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6
WmlnWmFnOjpSZWFkZXI6OmRvUmVhZFVpbnQ2NCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6dHJhY2tCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnJldm9rZUJsb2JVUkwpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0Lmg6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6fkJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlUHVibGljVVJMKToKKyAgICAgICAgKiBodG1sL0Jsb2Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjp1cmwpOgorICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L0Jsb2JTdG9yYWdlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0Jsb2JVUkwuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9G
aWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAqIGh0bWwv
RmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9CbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JEYXRhLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKwogMjAx
MC0wOC0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGFiYTBmZjEuLjNlMzQ1ZWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTMxNCw2ICsxMzE0LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9odG1sL0Jsb2IuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAJV2ViQ29y
ZS9odG1sL0Jsb2JCdWlsZGVyLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNw
cCBcCisJV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuaCBcCisJV2ViQ29yZS9odG1sL0Js
b2JTdG9yYWdlRGF0YS5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgXAorCVdlYkNvcmUv
aHRtbC9CbG9iVVJMLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQ29udGV4dEF0dHJp
YnV0ZXMuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAogCVdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCkBAIC0xODcwLDggKzE4NzUsMTEg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JEYXRhLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iRGF0YS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JSZWdpc3Ry
eS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZW50VHlwZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGI5ODE0YjcuLmZhNzE0ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNDM2LDYgKzE0MzYsMTEgQEAKICAgICAg
ICAgICAgICdodG1sL0Jsb2IuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iQnVpbGRlci5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9C
bG9iUmVnaXN0cnlJbXBsLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iUmVnaXN0cnlJbXBs
LmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYlN0b3JhZ2VEYXRhLmgnLAorICAgICAgICAgICAg
J2h0bWwvQmxvYlVSTC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYlVSTC5oJywKICAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwJywKQEAgLTI5OTUsOCArMzAwMCwxMSBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL0FyZW5hLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL0Jsb2JEYXRhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkRhdGEuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9CbG9iSXRlbS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9Db250ZW50VHlwZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5j
cHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggMzU0NDU3OS4uMWZjNTZhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02MjAsNiArNjIwLDggQEAgU09VUkNFUyAr
PSBcCiAgICAgaHRtbC9Bc3luY0ltYWdlUmVzaXplci5jcHAgXAogICAgIGh0bWwvQmxvYi5jcHAg
XAogICAgIGh0bWwvQmxvYkJ1aWxkZXIuY3BwIFwKKyAgICBodG1sL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwIFwKKyAgICBodG1sL0Jsb2JVUkwuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNwcCBcCkBAIC04NjIsNiArODY0LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRm
b3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9CbG9iRGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNw
cCBcCiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmNwcCBcCkBAIC0xMzg1LDYgKzEzODgsOSBAQCBIRUFERVJTICs9IFwKICAgICBo
dG1sL0FzeW5jSW1hZ2VSZXNpemVyLmggXAogICAgIGh0bWwvQmxvYi5oIFwKICAgICBodG1sL0Js
b2JCdWlsZGVyLmggXAorICAgIGh0bWwvQmxvYlJlZ2lzdHJ5SW1wLmggXAorICAgIGh0bWwvQmxv
YlN0b3JhZ2VEYXRhLmggXAorICAgIGh0bWwvQmxvYlVSTC5oIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAg
IGh0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCkBAIC0xNjM2LDcgKzE2NDIsOSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBs
YXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmgg
XAorICAgIHBsYXRmb3JtL0Jsb2JEYXRhLmggXAogICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmggXAor
ICAgIHBsYXRmb3JtL0Jsb2JSZWdpc3RyeS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5o
IFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGNhOTBk
ZjQuLmFhMDdlZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjMy
NDEsNiArMjMyNDEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkRhdGEuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXEJsb2JJdGVtLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yMzI0OSw2ICsy
MzI1NywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxCbG9iUmVnaXN0cnkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0zNjI1Myw2ICszNjI2NSwyNiBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JSZWdp
c3RyeUltcGwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxCbG9iUmVnaXN0cnlJbXBsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JTdG9yYWdlRGF0YS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxCbG9iVVJMLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYlVSTC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQu
Y3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggY2M2N2I2ZC4uYjE3YjdiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcwOSw2ICs3MDksMTQgQEAKIAkJMkVDRjdBRTIx
MDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2
ZW50LmggKi87IH07CiAJCTJFRDYwOUJDMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3JtRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUQ2MDlC
QTExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwICovOyB9OwogCQkyRUQ2MDlCRDEx
NDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJCMTE0NUIwNzEwMEM4Njg0RSAvKiBET01Gb3Jt
RGF0YS5oICovOyB9OworCQkyRUVENTc1MjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RUVENTc0RDEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87IH07CisJ
CTJFRUQ1NzUzMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc0RTEyMTA5RUQwMDA3
NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OworCQkyRUVENTc1NDEyMTA5RUQwMDA3
NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRUVENTc0RjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VE
YXRhLmggKi87IH07CisJCTJFRUQ1NzU1MTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzUwMTIx
MDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLzsgfTsKKwkJMkVFRDU3NTYxMjEwOUVEMDAw
NzY1NkJCIC8qIEJsb2JVUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFRUQ1NzUxMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmggKi87IH07CisJ
CTJFRUQ1NzU4MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRUQ1NzU3MTIxMDlFRTQwMDc2NTZC
QiAvKiBCbG9iUmVnaXN0cnkuaCAqLzsgfTsKKwkJMkVFRDU3NUIxMjEwOUVGMzAwNzY1NkJCIC8q
IEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFRUQ1NzU5MTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgKi87IH07CisJCTJF
RUQ1NzVDMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVFRDU3NUExMjEwOUVGMzAwNzY1NkJCIC8qIEJs
b2JEYXRhLmggKi87IH07CiAJCTMxMjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEyODhFNkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5j
cHAgKi87IH07CiAJCTMxMjg4RTczMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
Mjg4RTZGMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsK
IAkJMzEyODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyODhFNzAw
RTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovOyB9OwpAQCAt
NjQ2Myw2ICs2NDcxLDE0IEBACiAJCTJFQ0Y3QUUwMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFcnJvckV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1E
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUZvcm1EYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVENjA5QkIxMTQ1QjA3MTAwQzg2
ODRFIC8qIERPTUZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NzREMTIxMDlF
RDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJsb2JSZWdpc3RyeUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRUVENTc0RTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVnaXN0cnlJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NzRGMTIxMDlFRDAwMDc2NTZCQiAvKiBC
bG9iU3RvcmFnZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlN0
b3JhZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NzUwMTIxMDlF
RDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJsb2JVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUVENTc1
MTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCbG9iVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFRUQ1NzU3
MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFRUQ1NzU5MTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJFRUQ1NzVBMTIxMDlFRjMwMDc2NTZCQiAvKiBCbG9iRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTI4OEU2RTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMjg4RTZGMEUz
MDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxMjg4RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM4
NTAsNiArMTM4NjYsMTEgQEAKIAkJCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1
aWxkZXIuY3BwICovLAogCQkJCTg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRl
ci5oICovLAogCQkJCTg5Q0QwMjc5MTFDODU5QTgwMDcwQjc5MSAvKiBCbG9iQnVpbGRlci5pZGwg
Ki8sCisJCQkJMkVFRDU3NEQxMjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeUltcGwuY3Bw
ICovLAorCQkJCTJFRUQ1NzRFMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnlJbXBsLmgg
Ki8sCisJCQkJMkVFRDU3NEYxMjEwOUVEMDAwNzY1NkJCIC8qIEJsb2JTdG9yYWdlRGF0YS5oICov
LAorCQkJCTJFRUQ1NzUwMTIxMDlFRDAwMDc2NTZCQiAvKiBCbG9iVVJMLmNwcCAqLywKKwkJCQky
RUVENTc1MTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVSTC5oICovLAogCQkJCTkzQzQ0MUVEMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEz
QUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NDI0LDggKzE2NDQ1LDEx
IEBACiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAqLywKIAkJCQlC
Q0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1MUUxRUNCMTBDOTFD
NTU2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJMkVFRDU3NTkxMjEwOUVG
MzAwNzY1NkJCIC8qIEJsb2JEYXRhLmNwcCAqLywKKwkJCQkyRUVENTc1QTEyMTA5RUYzMDA3NjU2
QkIgLyogQmxvYkRhdGEuaCAqLywKIAkJCQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxv
Ykl0ZW0uY3BwICovLAogCQkJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5o
ICovLAorCQkJCTJFRUQ1NzU3MTIxMDlFRTQwMDc2NTZCQiAvKiBCbG9iUmVnaXN0cnkuaCAqLywK
IAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJ
CTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFE
MDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCkBAIC0yMDEzOSw2ICsy
MDE2MywxMSBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNv
cnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyog
Wm9vbU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFRUQ1NzUzMTIxMDlFRDAwMDc2NTZCQiAv
KiBCbG9iUmVnaXN0cnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTc1NDEyMTA5RUQw
MDA3NjU2QkIgLyogQmxvYlN0b3JhZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRUVENTc1
NjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVSTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkVFRDU3
NTgxMjEwOUVFNDAwNzY1NkJCIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MkVFRDU3NUMxMjEwOUVGMzAwNzY1NkJCIC8qIEJsb2JEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTIyNTYyLDYgKzIyNTkxLDkgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RE
NEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyRUVENTc1MjEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyRUVENTc1NTEyMTA5RUQwMDA3NjU2QkIgLyogQmxvYlVSTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkyRUVENTc1QjEyMTA5RUYzMDA3NjU2QkIgLyogQmxvYkRhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKaW5kZXggNmQ2ZmEyMS4uMDBlYzI1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjcsOSArMjcsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAorI2luY2x1
ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxp
c3QuaCIKQEAgLTE0NywyNiArMTQ5LDg2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZW5n
dGg7CiB9OwogCitjbGFzcyBTZXJpYWxpemVkQmxvYiA6IHB1YmxpYyBTaGFyZWRTZXJpYWxpemVk
RGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZEJsb2I+IGNy
ZWF0ZShjb25zdCBCbG9iKiBibG9iKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZXJpYWxpemVkQmxvYihibG9iKSk7CisgICAgfQorCisgICAgY29uc3QgS1VSTCYgdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIFNlcmlhbGl6ZWRCbG9iKGNvbnN0IEJs
b2IqIGJsb2IpCisgICAgICAgIDogbV91cmwoYmxvYi0+dXJsKCkuY29weSgpKQorICAgICAgICAs
IG1fdHlwZShibG9iLT50eXBlKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAgICAgLCBtX3Np
emUoYmxvYi0+c2l6ZSgpKQorICAgIHsKKyAgICB9CisKKyAgICBLVVJMIG1fdXJsOworICAgIFN0
cmluZyBtX3R5cGU7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fc2l6ZTsKK307CisKK2NsYXNz
IFNlcmlhbGl6ZWRGaWxlIDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkRmlsZT4gY3JlYXRlKGNvbnN0IEZpbGUq
IGZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRGaWxl
KGZpbGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQorICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCitw
cml2YXRlOgorICAgIFNlcmlhbGl6ZWRGaWxlKGNvbnN0IEZpbGUqIGZpbGUpCisgICAgICAgIDog
bV9wYXRoKGZpbGUtPnBhdGgoKS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICAgICAsIG1fdXJs
KGZpbGUtPnVybCgpLmNvcHkoKSkKKyAgICAgICAgLCBtX3R5cGUoZmlsZS0+dHlwZSgpLmNyb3Nz
VGhyZWFkU3RyaW5nKCkpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX3BhdGg7CisgICAg
S1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV90eXBlOworfTsKKwogY2xhc3MgU2VyaWFsaXplZEZp
bGVMaXN0IDogcHVibGljIFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKIHB1YmxpYzoKKyAgICBzdHJ1
Y3QgRmlsZURhdGEgeworICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgS1VSTCB1cmw7Cisg
ICAgICAgIFN0cmluZyB0eXBlOworICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJp
YWxpemVkRmlsZUxpc3Q+IGNyZWF0ZShjb25zdCBGaWxlTGlzdCogbGlzdCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZEZpbGVMaXN0KGxpc3QpKTsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVzLnNpemUoKTsg
fQotICAgIGNvbnN0IFN0cmluZyYgaXRlbSh1bnNpZ25lZCBpZHgpIHsgcmV0dXJuIG1fZmlsZXNb
aWR4XTsgfQorICAgIGNvbnN0IEZpbGVEYXRhJiBpdGVtKHVuc2lnbmVkIGlkeCkgeyByZXR1cm4g
bV9maWxlc1tpZHhdOyB9CiAKIHByaXZhdGU6CiAgICAgU2VyaWFsaXplZEZpbGVMaXN0KGNvbnN0
IEZpbGVMaXN0KiBsaXN0KQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdC0+
bGVuZ3RoKCk7CiAgICAgICAgIG1fZmlsZXMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgICAgIG1f
ZmlsZXMuYXBwZW5kKGxpc3QtPml0ZW0oaSktPnBhdGgoKS5jcm9zc1RocmVhZFN0cmluZygpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBGaWxlKiBmaWxlID0gbGlzdC0+aXRlbShpKTsKKyAgICAgICAgICAgIEZpbGVEYXRhIGZp
bGVEYXRhOworICAgICAgICAgICAgZmlsZURhdGEucGF0aCA9IGZpbGUtPnBhdGgoKS5jcm9zc1Ro
cmVhZFN0cmluZygpOworICAgICAgICAgICAgZmlsZURhdGEudXJsID0gZmlsZS0+dXJsKCkuY29w
eSgpOworICAgICAgICAgICAgZmlsZURhdGEudHlwZSA9IGZpbGUtPnR5cGUoKS5jcm9zc1RocmVh
ZFN0cmluZygpOworICAgICAgICAgICAgbV9maWxlcy5hcHBlbmQoZmlsZURhdGEpOworICAgICAg
ICB9CiAgICAgfQogCi0gICAgVmVjdG9yPFN0cmluZz4gbV9maWxlczsKKyAgICBWZWN0b3I8Rmls
ZURhdGE+IG1fZmlsZXM7CiB9OwogCiBjbGFzcyBTZXJpYWxpemVkSW1hZ2VEYXRhIDogcHVibGlj
IFNoYXJlZFNlcmlhbGl6ZWREYXRhIHsKQEAgLTIxNyw5ICsyNzksMTUgQEAgU2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBJbWFnZURhdGEq
IGltYWdlRGF0YSkKIHsKIH0KIAorU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlRGF0YShjb25zdCBCbG9iKiBibG9iKQorICAgIDogbV90eXBlKEJsb2JUeXBl
KQorICAgICwgbV9zaGFyZWREYXRhKFNlcmlhbGl6ZWRCbG9iOjpjcmVhdGUoYmxvYikpCit7Cit9
CisKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEo
Y29uc3QgRmlsZSogZmlsZSkKICAgICA6IG1fdHlwZShGaWxlVHlwZSkKLSAgICAsIG1fc3RyaW5n
KGZpbGUtPnBhdGgoKS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9zaGFyZWREYXRhKFNl
cmlhbGl6ZWRGaWxlOjpjcmVhdGUoZmlsZSkpCiB7CiB9CiAKQEAgLTIzMyw2ICszMDEsMTYgQEAg
U2VyaWFsaXplZE9iamVjdCogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzT2JqZWN0KCkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U2VyaWFsaXplZE9iamVjdCo+KHRoaXMpOwogfQogCitTZXJpYWxp
emVkQmxvYiogU2hhcmVkU2VyaWFsaXplZERhdGE6OmFzQmxvYigpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRCbG9iKj4odGhpcyk7Cit9CisKK1NlcmlhbGl6ZWRGaWxlKiBT
aGFyZWRTZXJpYWxpemVkRGF0YTo6YXNGaWxlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U2VyaWFsaXplZEZpbGUqPih0aGlzKTsKK30KKwogU2VyaWFsaXplZEZpbGVMaXN0KiBTaGFyZWRT
ZXJpYWxpemVkRGF0YTo6YXNGaWxlTGlzdCgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNl
cmlhbGl6ZWRGaWxlTGlzdCo+KHRoaXMpOwpAQCAtNTcwLDYgKzY0OCw4IEBAIHN0cnVjdCBTZXJp
YWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgQmFzZVdhbGtlciB7CiAgICAgICAgICAgICBKU09i
amVjdCogb2JqID0gYXNPYmplY3QodmFsdWUpOwogICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJp
dHMoJkpTRmlsZTo6c19pbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlRGF0YSh0b0ZpbGUob2JqKSk7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0
cygmSlNCbG9iOjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWVEYXRhKHRvQmxvYihvYmopKTsKICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRz
KCZKU0ZpbGVMaXN0OjpzX2luZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemVk
U2NyaXB0VmFsdWVEYXRhKHRvRmlsZUxpc3Qob2JqKSk7CiAgICAgICAgICAgICBpZiAob2JqLT5p
bmhlcml0cygmSlNJbWFnZURhdGE6OnNfaW5mbykpCkBAIC03MzYsMTIgKzgxNiwyMSBAQCBzdHJ1
Y3QgRGVzZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgQmFzZVdhbGtlciB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fZXhlYywgdmFsdWUuYXNEb3VibGUoKSk7CiAgICAg
ICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkRhdGVUeXBlOgogICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykgRGF0ZUluc3RhbmNlKG1fZXhlYywgbV9nbG9i
YWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUuYXNEb3VibGUoKSk7CisgICAgICAgICAg
ICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkJsb2JUeXBlOiB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgICAgICAgICAgICAgU2VyaWFsaXplZEJsb2IqIHNlcmlhbGl6ZWRC
bG9iID0gdmFsdWUuYXNCbG9iKCk7CisgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBzZXJpYWxpemVkQmxvYi0+dXJsKCksIHNlcmlhbGl6ZWRCbG9iLT50eXBlKCksIHNl
cmlhbGl6ZWRCbG9iLT5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
U2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6RmlsZVR5cGU6IHsKICAgICAgICAgICAgICAgICBp
ZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051
bGwoKTsKKyAgICAgICAgICAgICAgICBTZXJpYWxpemVkRmlsZSogc2VyaWFsaXplZEZpbGUgPSB2
YWx1ZS5hc0ZpbGUoKTsKICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPiht
X2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KG1fZ2xvYmFsT2JqZWN0KSwgRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IHZhbHVlLmFzU3RyaW5nKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKSkpOworICAgICAgICAgICAgICAg
IHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2ds
b2JhbE9iamVjdCksIEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBzZXJpYWxp
emVkRmlsZS0+cGF0aCgpLCBzZXJpYWxpemVkRmlsZS0+dXJsKCksIHNlcmlhbGl6ZWRGaWxlLT50
eXBlKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YTo6RmlsZUxpc3RUeXBlOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzRE9N
R2xvYmFsT2JqZWN0KQpAQCAtNzUxLDggKzg0MCwxMCBAQCBzdHJ1Y3QgRGVzZXJpYWxpemluZ1Ry
ZWVXYWxrZXIgOiBwdWJsaWMgQmFzZVdhbGtlciB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc2VyaWFsaXplZEZpbGVMaXN0LT5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChGaWxlOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc2VyaWFsaXplZEZpbGVMaXN0LT5pdGVtKGkp
KSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNlcmlhbGl6ZWRGaWxlTGlzdDo6RmlsZURh
dGEmIGZpbGVEYXRhID0gc2VyaWFsaXplZEZpbGVMaXN0LT5pdGVtKGkpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgZmlsZURhdGEucGF0aCwgZmlsZURhdGEudXJsLCBmaWxlRGF0YS50eXBlKSk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIHJlc3VsdC5nZXQoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6
OkltYWdlRGF0YVR5cGU6IHsKQEAgLTkyMCw2ICsxMDExLDcgQEAgc3RydWN0IFRlYXJkb3duVHJl
ZVdhbGtlciB7CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6Ok51
bWJlclR5cGU6CiAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkRh
dGVUeXBlOgogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpFbXB0
eVR5cGU6CisgICAgICAgICAgICBjYXNlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGE6OkJsb2JU
eXBlOgogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpGaWxlVHlw
ZToKICAgICAgICAgICAgIGNhc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6RmlsZUxpc3RU
eXBlOgogICAgICAgICAgICAgY2FzZSBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhOjpJbWFnZURh
dGFUeXBlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5k
ZXggOTNiZDBkZS4uYzE2NTgxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oCkBAIC0zMywxMCArMzMsMTMgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU1ZhbHVlUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQmxv
YjsKICAgICBjbGFzcyBGaWxlOwogICAgIGNsYXNzIEZpbGVMaXN0OwogICAgIGNsYXNzIEltYWdl
RGF0YTsKICAgICBjbGFzcyBTZXJpYWxpemVkQXJyYXk7CisgICAgY2xhc3MgU2VyaWFsaXplZEJs
b2I7CisgICAgY2xhc3MgU2VyaWFsaXplZEZpbGU7CiAgICAgY2xhc3MgU2VyaWFsaXplZEZpbGVM
aXN0OwogICAgIGNsYXNzIFNlcmlhbGl6ZWRJbWFnZURhdGE7CiAgICAgY2xhc3MgU2VyaWFsaXpl
ZE9iamVjdDsKQEAgLTQ2LDYgKzQ5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIH5TaGFyZWRTZXJpYWxpemVkRGF0YSgpIHsgfQogICAgICAgICBTZXJpYWxpemVkQXJy
YXkqIGFzQXJyYXkoKTsKICAgICAgICAgU2VyaWFsaXplZE9iamVjdCogYXNPYmplY3QoKTsKKyAg
ICAgICAgU2VyaWFsaXplZEJsb2IqIGFzQmxvYigpOworICAgICAgICBTZXJpYWxpemVkRmlsZSog
YXNGaWxlKCk7CiAgICAgICAgIFNlcmlhbGl6ZWRGaWxlTGlzdCogYXNGaWxlTGlzdCgpOwogICAg
ICAgICBTZXJpYWxpemVkSW1hZ2VEYXRhKiBhc0ltYWdlRGF0YSgpOwogICAgIH07CkBAIC02Miw2
ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE9iamVjdFR5cGUsCiAg
ICAgICAgICAgICBBcnJheVR5cGUsCiAgICAgICAgICAgICBTdHJpbmdUeXBlLAorICAgICAgICAg
ICAgQmxvYlR5cGUsCiAgICAgICAgICAgICBGaWxlVHlwZSwKICAgICAgICAgICAgIEZpbGVMaXN0
VHlwZSwKICAgICAgICAgICAgIEltYWdlRGF0YVR5cGUKQEAgLTg3LDcgKzkzLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3N0cmluZyhzdHJpbmcuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIGp1c3Qgc2hhcmUgdGhlIFJlcAog
ICAgICAgICB7CiAgICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgZXhwbGljaXQgU2VyaWFs
aXplZFNjcmlwdFZhbHVlRGF0YShjb25zdCBCbG9iKik7CiAgICAgICAgIGV4cGxpY2l0IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgRmlsZSopOwogICAgICAgICBleHBsaWNpdCBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKGNvbnN0IEZpbGVMaXN0Kik7CiAgICAgICAgIGV4cGxpY2l0
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZURhdGEoY29uc3QgSW1hZ2VEYXRhKik7CkBAIC0xMjIsNyAr
MTI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBhc1N0cmluZygp
IGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlw
ZSB8fCBtX3R5cGUgPT0gRmlsZVR5cGUpOworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBT
dHJpbmdUeXBlKTsKICAgICAgICAgICAgIHJldHVybiBtX3N0cmluZzsKICAgICAgICAgfQogCkBA
IC0xNDAsNiArMTQ3LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVy
biBtX3NoYXJlZERhdGEtPmFzQXJyYXkoKTsKICAgICAgICAgfQogCisgICAgICAgIFNlcmlhbGl6
ZWRCbG9iKiBhc0Jsb2IoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV90
eXBlID09IEJsb2JUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3NoYXJlZERhdGEpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc2hhcmVkRGF0YS0+YXNCbG9iKCk7CisgICAgICAgIH0KKworICAg
ICAgICBTZXJpYWxpemVkRmlsZSogYXNGaWxlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBGaWxlVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQobV9zaGFy
ZWREYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NoYXJlZERhdGEtPmFzRmlsZSgpOworICAg
ICAgICB9CisKICAgICAgICAgU2VyaWFsaXplZEZpbGVMaXN0KiBhc0ZpbGVMaXN0KCkgY29uc3QK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBGaWxlTGlzdFR5cGUpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDlk
YzRkMGYuLjBjYWNiNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKQEAgLTE4MywxNiArMTgzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgZG9Xcml0
ZU51bWJlcihudW1iZXIpOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVCbG9iKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKKyAgICB2b2lkIHdyaXRlQmxvYihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKICAgICB7CiAgICAgICAgIGFwcGVu
ZChCbG9iVGFnKTsKLSAgICAgICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcocGF0aCk7CisgICAgICAg
IGRvV3JpdGVXZWJDb3JlU3RyaW5nKHVybCk7CisgICAgICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5n
KHR5cGUpOworICAgICAgICBkb1dyaXRlVWludDY0KHNpemUpOwogICAgIH0KIAotICAgIHZvaWQg
d3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICB2b2lkIHdyaXRlRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAg
ewogICAgICAgICBhcHBlbmQoRmlsZVRhZyk7CiAgICAgICAgIGRvV3JpdGVXZWJDb3JlU3RyaW5n
KHBhdGgpOworICAgICAgICBkb1dyaXRlV2ViQ29yZVN0cmluZyh1cmwpOworICAgICAgICBkb1dy
aXRlV2ViQ29yZVN0cmluZyh0eXBlKTsKICAgICB9CiAKICAgICB2b2lkIHdyaXRlRmlsZUxpc3Qo
Y29uc3QgRmlsZUxpc3QmIGZpbGVMaXN0KQpAQCAtMjAwLDggKzIwNCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIGFwcGVuZChGaWxlTGlzdFRhZyk7CiAgICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IGZp
bGVMaXN0Lmxlbmd0aCgpOwogICAgICAgICBkb1dyaXRlVWludDMyKGxlbmd0aCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBkb1dyaXRlV2ViQ29y
ZVN0cmluZyhmaWxlTGlzdC5pdGVtKGkpLT5wYXRoKCkpOworICAgICAgICAgICAgZG9Xcml0ZVdl
YkNvcmVTdHJpbmcoZmlsZUxpc3QuaXRlbShpKS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICAg
ICAgZG9Xcml0ZVdlYkNvcmVTdHJpbmcoZmlsZUxpc3QuaXRlbShpKS0+dHlwZSgpKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHZvaWQgd3JpdGVJbWFnZURhdGEodWludDMyX3Qgd2lkdGgsIHVp
bnQzMl90IGhlaWdodCwgY29uc3QgdWludDhfdCogcGl4ZWxEYXRhLCB1aW50MzJfdCBwaXhlbERh
dGFMZW5ndGgpCkBAIC0yNTEsNyArMjU4LDggQEAgcHJpdmF0ZToKICAgICAgICAgZG9Xcml0ZVN0
cmluZyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogICAgIH0KIAotICAgIHZvaWQg
ZG9Xcml0ZVVpbnQzMih1aW50MzJfdCB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAg
IHZvaWQgZG9Xcml0ZVVpbnRIZWxwZXIoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgICAgICB1aW50OF90IGIgPSAodmFsdWUgJiB2YXJJbnRNYXNrKTsKQEAg
LTI2NCw2ICsyNzIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQg
ZG9Xcml0ZVVpbnQzMih1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRvV3JpdGVVaW50
SGVscGVyKHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGRvV3JpdGVVaW50NjQodWludDY0X3Qg
dmFsdWUpCisgICAgeworICAgICAgICBkb1dyaXRlVWludEhlbHBlcih2YWx1ZSk7CisgICAgfQor
CiAgICAgdm9pZCBkb1dyaXRlTnVtYmVyKGRvdWJsZSBudW1iZXIpCiAgICAgewogICAgICAgICBh
cHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJm51bWJlciksIHNpemVvZihudW1iZXIp
KTsKQEAgLTU2MCw3ICs1NzgsNyBAQCBwcml2YXRlOgogICAgICAgICBCbG9iKiBibG9iID0gVjhC
bG9iOjp0b05hdGl2ZSh2YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKICAgICAgICAgaWYgKCFibG9i
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3dyaXRlci53cml0ZUJsb2IoYmxvYi0+
cGF0aCgpKTsKKyAgICAgICAgbV93cml0ZXIud3JpdGVCbG9iKGJsb2ItPnVybCgpLnN0cmluZygp
LCBibG9iLT50eXBlKCksIGJsb2ItPnNpemUoKSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZUZp
bGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtNTY4LDcgKzU4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEZpbGUqIGZpbGUgPSBWOEZpbGU6OnRvTmF0aXZlKHZhbHVlLkFzPHY4OjpP
YmplY3Q+KCkpOwogICAgICAgICBpZiAoIWZpbGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fd3JpdGVyLndyaXRlRmlsZShmaWxlLT5wYXRoKCkpOworICAgICAgICBtX3dyaXRlci53
cml0ZUZpbGUoZmlsZS0+cGF0aCgpLCBmaWxlLT51cmwoKS5zdHJpbmcoKSwgZmlsZS0+dHlwZSgp
KTsKICAgICB9CiAKICAgICB2b2lkIHdyaXRlRmlsZUxpc3Qodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQpAQCAtODUyLDEwICs4NzAsMTYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcmVhZEJs
b2Iodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFN0cmluZyBw
YXRoOwotICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZwYXRoKSkKKyAgICAgICAgU3Ry
aW5nIHVybDsKKyAgICAgICAgU3RyaW5nIHR5cGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaXplOworICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ1cmwpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpj
cmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoKTsKKyAgICAgICAgaWYgKCFy
ZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghZG9SZWFkVWludDY0KCZzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSwgc2l6ZSk7CiAg
ICAgICAgICp2YWx1ZSA9IHRvVjgoYmxvYik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTg2Myw5ICs4ODcsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIHJlYWRGaWxlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiogdmFsdWUpCiAgICAgewogICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAg
ICAgU3RyaW5nIHVybDsKKyAgICAgICAgU3RyaW5nIHR5cGU7CiAgICAgICAgIGlmICghcmVhZFdl
YkNvcmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQ
YXNzUmVmUHRyPEZpbGU+IGZpbGUgPSBGaWxlOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBwYXRoKTsKKyAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdXJsKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygm
dHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFJlZlB0cjxGaWxlPiBm
aWxlID0gRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcGF0aCwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGZp
bGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC04NzgsMTUgKzkwOCwyMiBAQCBw
cml2YXRlOgogICAgICAgICBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0
OjpjcmVhdGUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgICAgIFN0cmluZyB1cmxTdHJp
bmc7CisgICAgICAgICAgICBTdHJpbmcgdHlwZTsKICAgICAgICAgICAgIGlmICghcmVhZFdlYkNv
cmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgcGF0aCkpOworICAgICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdXJsU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIXJl
YWRXZWJDb3JlU3RyaW5nKCZ0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpLCB0eXBl
KSk7CiAgICAgICAgIH0KICAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlTGlzdCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgZG9SZWFkVWludDMyKHVpbnQzMl90KiB2
YWx1ZSkKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIGJvb2wgZG9SZWFkVWludEhlbHBlcihU
KiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp2YWx1ZSA9IDA7CiAgICAgICAgIHVpbnQ4X3QgY3Vy
cmVudEJ5dGU7CkBAIC05MDEsNiArOTM4LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAorICAgIGJvb2wgZG9SZWFkVWludDMyKHVpbnQzMl90KiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBkb1JlYWRVaW50SGVscGVyKHZhbHVlKTsKKyAgICB9CisKKyAg
ICBib29sIGRvUmVhZFVpbnQ2NCh1aW50NjRfdCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gZG9SZWFkVWludEhlbHBlcih2YWx1ZSk7CisgICAgfQorCiAgICAgYm9vbCBkb1JlYWROdW1i
ZXIoZG91YmxlKiBudW1iZXIpCiAgICAgewogICAgICAgICBpZiAobV9wb3NpdGlvbiArIHNpemVv
Zihkb3VibGUpID4gbV9sZW5ndGgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
CmluZGV4IGY3YWM2MDMuLjA5NWZiZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCkBAIC0yOCwxMiArMjgsMTEgQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJCbG9iUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJM
RShGSUxFX1dSSVRFUikKICNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCi0jZW5kaWYKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
V29ya2VyQ29udGV4dC5oIgpAQCAtOTIsNiArOTEsMTIgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogICAgICAgICBtX2ZpbGVUaHJlYWQgPSAwOwog
ICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShCTE9CKQorICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRl
cmF0b3IgYmxvYlVSTHNFbmQgPSBtX2Jsb2JVUkxzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxT
dHJpbmc+OjppdGVyYXRvciBpdGVyID0gbV9ibG9iVVJMcy5iZWdpbigpOyBpdGVyICE9IGJsb2JV
UkxzRW5kOyArK2l0ZXIpCisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhyZWFkLXNhZmUg
cHJveHkgdG8gbWFrZSBpdCB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgQmxvYlJlZ2lzdHJ5
OjppbnN0YW5jZSgpLnVucmVnaXN0ZXJCbG9iVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXRl
cikpOworI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC0yNDEsNiArMjQ2LDIy
IEBAIERPTVRpbWVyKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpmaW5kVGltZW91dChpbnQgdGlt
ZW91dElkKQogICAgIHJldHVybiBtX3RpbWVvdXRzLmdldCh0aW1lb3V0SWQpOwogfQogCisjaWYg
RU5BQkxFKEJMT0IpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnRyYWNrQmxvYlVSTChj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Jsb2JVUkxzLmFkZCh1cmwpOworfQorCit2b2lk
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJldm9rZUJsb2JVUkwoY29uc3QgU3RyaW5nJiB1cmwp
Cit7CisgICAgaWYgKG1fYmxvYlVSTHMuY29udGFpbnModXJsKSkgeworICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IHRocmVhZC1zYWZlIHByb3h5IHRvIG1ha2UgaXQgd29yayB3aXRoIHdvcmtl
cnMuCisgICAgICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS51bnJlZ2lzdGVyQmxvYlVSTChL
VVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSk7CisgICAgICAgIG1fYmxvYlVSTHMucmVtb3ZlKHVy
bCk7CisgICAgfQorfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVf
V1JJVEVSKQogRmlsZVRocmVhZCogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmlsZVRocmVhZCgp
CiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggMmVjOThhZS4uNTA5NWM4
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBi
L1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMjUsNiArMTI2LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0
SWQpOwogICAgICAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKKyNp
ZiBFTkFCTEUoQkxPQikKKyAgICAgICAgdm9pZCB0cmFja0Jsb2JVUkwoY29uc3QgU3RyaW5nJik7
CisgICAgICAgIHZvaWQgcmV2b2tlQmxvYlVSTChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCiAj
aWYgVVNFKEpTQykKICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKTsKICNl
bmRpZgpAQCAtMTUyLDYgKzE1OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
SGFzaE1hcDxpbnQsIERPTVRpbWVyKj4gbV90aW1lb3V0czsKIAorI2lmIEVOQUJMRShCTE9CKQor
ICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9ibG9iVVJMczsKKyNlbmRpZgorCiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgPSAwOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggOTc3
ZmZhNi4uYmIwNGUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9CbG9iLmNwcApAQCAtMzEsMjkgKzMxLDcyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRl
ICJCbG9iSXRlbS5oIgorI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkJsb2JV
UkwuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1v
dmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogQmxvYjo6QmxvYihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRlbUxpc3Qm
IGl0ZW1zKQogICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3NpemUoMCkKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKQogICAgICAgICBtX2l0ZW1zLmFw
cGVuZChpdGVtc1tpXSk7CiB9CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dp
dGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgUGFzc1JlZlB0cjxCbG9iSXRlbT4mIGl0ZW0pCisgICAgOiBtX3NpemUoMCkKIHsK
ICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtKTsKIH0KIAorLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQg
d2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiBCbG9iOjpCbG9iKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3NpemUoMCkKIHsKICAg
ICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShw
YXRoKS4KICAgICBtX2l0ZW1zLmFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9
CiAKK0Jsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQorICAg
IDogbV90eXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQorICAgICwgbV9zaXplKHNpemUpCit7
CisgICAgQVNTRVJUKGJsb2JEYXRhLmdldCgpICYmICFibG9iRGF0YS0+aXRlbXMoKS5pc0VtcHR5
KCkpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQg
d2l0aCB0aGUgcHJvdmlkZWQgYmxvYiBkYXRhLgorICAgIG1fdXJsID0gQmxvYlVSTDo6Y3JlYXRl
VVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhy
ZWFkLXNhZmUgcHJveHkgdG8gbWFrZSBpdCB3b3JrIHdpdGggd29ya2Vycy4KKyAgICBCbG9iUmVn
aXN0cnk6Omluc3RhbmNlKCkucmVnaXN0ZXJCbG9iVVJMKG1fdXJsLCBibG9iRGF0YSk7Cit9CisK
K0Jsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXpl
KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAgICAvLyBGSVhN
RTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KKyAgICBp
ZiAoc3JjVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEg
bmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRhdGEg
YXMgdGhlIHNvdXJjZSBVUkwuCisgICAgbV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBw
cm94eSB0byBtYWtlIGl0IHdvcmsgd2l0aCB3b3JrZXJzLgorICAgIEJsb2JSZWdpc3RyeTo6aW5z
dGFuY2UoKS5yZWdpc3RlckJsb2JVUkwobV91cmwsIHNyY1VSTCk7Cit9CisKK0Jsb2I6On5CbG9i
KCkKK3sKKyAgICAvLyBUaGUgaW50ZXJuYWwgVVJMIGlzIG9ubHkgdXNlZCB0byByZWZlciB0byB0
aGUgQmxvYiBvYmplY3QuIFNvIHdlIG5lZWQgdG8gdW5yZWdpc3RlciB0aGUgVVJMIHdoZW4gdGhl
IG9iamVjdCBpcyBHQy1lZC4KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRocmVhZC1zYWZlIHBy
b3h5IHRvIG1ha2UgaXQgd29yayB3aXRoIHdvcmtlcnMuCisgICAgQmxvYlJlZ2lzdHJ5OjppbnN0
YW5jZSgpLnVucmVnaXN0ZXJCbG9iVVJMKG1fdXJsKTsKK30KKwogdW5zaWduZWQgbG9uZyBsb25n
IEJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCBy
ZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRv
CkBAIC02NCw2ICsxMDcsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIHNpemU7CiB9CiAKKy8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ug
c3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9pdGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50b0Zp
bGVCbG9iSXRlbSgpKTsKQEAgLTk5LDQgKzE0MywxNyBAQCBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6
OnNsaWNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGxv
bgogfQogI2VuZGlmIC8vIEVOQUJMRShCTE9CKQogCitLVVJMIEJsb2I6OmNyZWF0ZVB1YmxpY1VS
TChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KSBjb25zdAor
eworICAgIEtVUkwgdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOworCisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aHJlYWQtc2FmZSBwcm94eSB0byBtYWtl
IGl0IHdvcmsgd2l0aCB3b3JrZXJzLgorICAgIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKS5yZWdp
c3RlckJsb2JVUkwodXJsLCBtX3VybCk7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBuZXcg
VVJMIGluIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvIHRoYXQgaXQgd2lsbCBnZXQgdW5y
ZWdpc3RlcmVkIHdoZW4gdGhlIGNvbnRleHQgaXMgZ29uZS4KKyAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT50cmFja0Jsb2JVUkwodXJsLnN0cmluZygpKTsKKworICAgIHJldHVybiB1cmw7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9i
LmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IDdhZmM3YTAuLmE3MjkyOWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzIs
NTQgKzMyLDcxIEBACiAjZGVmaW5lIEJsb2JfaAogCiAjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKKyNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgorICAg
IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRh
LgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJs
b2JJdGVtTGlzdCYgaXRlbXMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJs
b2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSwgaXRlbXMpKTsKICAgICB9CiAKLSAgICAv
LyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlzIGlzIGNhbGxlZCBvbmx5IGZyb20KLSAg
ICAvLyBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2Ug
aW4gaXQgd2lsbCBiZWNvbWUgaW52YWxpZCBvbmNlCi0gICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50
cm9kdWNlZC4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoKQor
ICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBwYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBzcmNVUkwsIHR5cGUsIHNpemUpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFs
IH5CbG9iKCkgeyB9CisgICAgdmlydHVhbCB+QmxvYigpOwogCisgICAgY29uc3QgS1VSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgp
IGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLgorICAgIC8vIEZJWE1FOiBUbyBiZSByZW1v
dmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgogICAgIGNvbnN0IFN0cmluZyYg
cGF0aCgpIGNvbnN0OwogCisgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0
Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KIAogI2lmIEVOQUJMRShCTE9CKQogICAgIFBhc3NSZWZQ
dHI8QmxvYj4gc2xpY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygpKSBj
b25zdDsKKworICAgIEtVUkwgY3JlYXRlUHVibGljVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KSBjb25zdDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CisgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92
ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCiAgICAgQmxvYihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRlbUxpc3QmKTsK
ICAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBQYXNzUmVmUHRyPEJsb2JJ
dGVtPiYpOwotCi0gICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgY29uc3RydWN0b3IuICBTZWUgYWxz
byB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgogICAgIEJsb2IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKKyAgICBCbG9iKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRyPEJsb2JEYXRhPiwgbG9uZyBsb25nIHNpemUpOwor
CisgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KKyAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25n
IHNpemUpOworCisgICAgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8g
dXNpbmcgQmxvYkRhdGEuCiAgICAgQmxvYkl0ZW1MaXN0IG1faXRlbXM7CisKKyAgICAvLyBUaGlz
IGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBhc3NvY2lhdGVk
IHdpdGggdGhpcyBvYmplY3QuCisgICAgLy8gSXQgaXMgb25seSB1c2VkIGJ5IEZpbGVSZWFkZXIg
dG8gcmVhZCB0aGUgYmxvYiBkYXRhIHZpYSBsb2FkaW5nIGZyb20gdGhlIGJsb2IgVVJMIHJlc291
cmNlLgorICAgIEtVUkwgbV91cmw7CisKICAgICBTdHJpbmcgbV90eXBlOworICAgIGxvbmcgbG9u
ZyBtX3NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiNTBkNQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMCww
ICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5j
bHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgorCisjaW5jbHVkZSAiRmlsZVN0cmVhbS5oIgorI2lu
Y2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjpzaG91bGRM
b2FkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdAoreworICAg
IC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgZmV0Y2hlZCB1c2luZyB0aGUgR0VUIG1ldGhvZCwg
YmFpbCBvdXQuCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2Qo
KSwgIkdFVCIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gQmxvYlJlZ2lzdHJ5SW1wbDo6Y3JlYXRlUmVz
b3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRs
ZUNsaWVudCopCit7CisgICAgaWYgKCFzaG91bGRMb2FkUmVzb3VyY2UocmVxdWVzdCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgorICAgIHJl
dHVybiAwOworfQorCitib29sIEJsb2JSZWdpc3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCit7CisgICAgaWYgKCFzaG91bGRMb2FkUmVz
b3VyY2UocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBU
byBiZSBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Jsb2JSZWdpc3RyeSYg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9i
UmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwor
dm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMoQmxvYlN0b3JhZ2VEYXRh
KiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0ZW1MaXN0JiBpdGVtcywg
bG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBCbG9iU3RvcmFnZURh
dGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZW1zLmJlZ2luKCk7CisgICAgaWYg
KG9mZnNldCkgeworICAgICAgICBmb3IgKDsgaXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgICAgICBBU1NFUlQoaXRlci0+bGVuZ3RoICE9IEJsb2JEYXRhSXRlbTo6dG9FbmRP
ZkZpbGUpOworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBpdGVyLT5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgb2Zmc2V0IC09IGl0ZXItPmxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoOyBpdGVyICE9
IGl0ZW1zLmVuZCgpICYmIChsZW5ndGggPT0gQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSB8fCBs
ZW5ndGggPiAwKTsgKytpdGVyKSB7CisgICAgICAgIGxvbmcgbG9uZyBjdXJyZW50TGVuZ3RoID0g
aXRlci0+bGVuZ3RoIC0gb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbmV3TGVuZ3RoID0gKGN1
cnJlbnRMZW5ndGggPiBsZW5ndGggJiYgbGVuZ3RoICE9IEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZp
bGUpID8gbGVuZ3RoIDogY3VycmVudExlbmd0aDsKKyAgICAgICAgaWYgKGl0ZXItPnR5cGUgPT0g
QmxvYlN0b3JhZ2VEYXRhSXRlbTo6RGF0YSkKKyAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0YS0+
YXBwZW5kRGF0YShpdGVyLT5kYXRhLCBpdGVyLT5vZmZzZXQgKyBvZmZzZXQsIG5ld0xlbmd0aCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnR5cGUgPT0gQmxvYlN0
b3JhZ2VEYXRhSXRlbTo6RmlsZSk7CisgICAgICAgICAgICBibG9iU3RvcmFnZURhdGEtPmFwcGVu
ZEZpbGUoaXRlci0+cGF0aCwgaXRlci0+b2Zmc2V0ICsgb2Zmc2V0LCBuZXdMZW5ndGgsIGl0ZXIt
PmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlbmd0
aCAhPSBCbG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKQorICAgICAgICAgICAgbGVuZ3RoIC09IG5l
d0xlbmd0aDsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQmxvYlJlZ2lz
dHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9i
RGF0YT4gYmxvYkRhdGEpCit7CisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0b3Jh
Z2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iU3RvcmFnZURhdGEt
PnNldENvbnRlbnRUeXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKTsKKyAgICBibG9iU3RvcmFn
ZURhdGEtPnNldENvbnRlbnREaXNwb3NpdGlvbihibG9iRGF0YS0+Y29udGVudERpc3Bvc2l0aW9u
KCkpOworCisgICAgZm9yIChCbG9iRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
YmxvYkRhdGEtPml0ZW1zKCkuYmVnaW4oKTsgaXRlciAhPSBibG9iRGF0YS0+aXRlbXMoKS5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIHN3aXRjaCAoaXRlci0+dHlwZSkgeworICAgICAgICBjYXNl
IEJsb2JEYXRhSXRlbTo6RGF0YToKKyAgICAgICAgICAgIGJsb2JTdG9yYWdlRGF0YS0+YXBwZW5k
RGF0YShpdGVyLT5kYXRhLCAwLCBpdGVyLT5kYXRhLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgICAgIGJsb2JT
dG9yYWdlRGF0YS0+YXBwZW5kRmlsZShpdGVyLT5wYXRoLCBpdGVyLT5vZmZzZXQsIGl0ZXItPmxl
bmd0aCwgaXRlci0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjoKKyAgICAgICAgICAgIGlmIChtX2Js
b2JzLmNvbnRhaW5zKGl0ZXItPnVybC5zdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgYXBwZW5k
U3RvcmFnZUl0ZW1zKGJsb2JTdG9yYWdlRGF0YS5nZXQoKSwgbV9ibG9icy5nZXQoaXRlci0+dXJs
LnN0cmluZygpKS0+aXRlbXMoKSwgaXRlci0+b2Zmc2V0LCBpdGVyLT5sZW5ndGgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIG1fYmxvYnMuc2V0KHVybC5z
dHJpbmcoKSwgYmxvYlN0b3JhZ2VEYXRhKTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpy
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7Cisg
ICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gc3JjID0gbV9ibG9icy5nZXQoc3JjVVJMLnN0cmlu
ZygpKTsKKyAgICBBU1NFUlQoc3JjKTsKKyAgICBpZiAoIXNyYykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gYmxvYlN0b3JhZ2VEYXRhID0gQmxvYlN0b3Jh
Z2VEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iU3RvcmFnZURhdGEtPnNldENvbnRlbnRUeXBlKHNy
Yy0+Y29udGVudFR5cGUoKSk7CisgICAgYmxvYlN0b3JhZ2VEYXRhLT5zZXRDb250ZW50RGlzcG9z
aXRpb24oc3JjLT5jb250ZW50RGlzcG9zaXRpb24oKSk7CisgICAgYXBwZW5kU3RvcmFnZUl0ZW1z
KGJsb2JTdG9yYWdlRGF0YS5nZXQoKSwgc3JjLT5pdGVtcygpLCAwLCBCbG9iRGF0YUl0ZW06OnRv
RW5kT2ZGaWxlKTsKKyAgICAKKyAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJsb2JTdG9y
YWdlRGF0YSk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYgdXJsKQoreworICAgIG1fYmxvYnMucmVtb3ZlKHVybC5zdHJpbmcoKSk7Cit9
CisKK1Bhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9i
RGF0YUZyb21VUkwoY29uc3QgS1VSTCYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBtX2Jsb2Jz
LmdldCh1cmwuc3RyaW5nKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJ
bXBsLmggYi9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk3YzU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JSZWdpc3Ry
eUltcGxfaAorI2RlZmluZSBCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShCTE9CKQor
CisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJCbG9iU3RvcmFnZURhdGEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtVUkw7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xh
c3MgUmVzb3VyY2VIYW5kbGU7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKK2NsYXNzIFJl
c291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKKy8vIEJsb2JSZWdpc3Ry
eUltcGwgaXMgbm90IHRocmVhZC1zYWZlLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBt
YWluIHRocmVhZC4KK2NsYXNzIEJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnlJbXBsKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JE
YXRhPik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29u
c3QgS1VSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29u
c3QgS1VSTCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRl
UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGll
bnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSk7CisKKyAgICBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gZ2V0Qmxv
YkRhdGFGcm9tVVJMKGNvbnN0IEtVUkwmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIHNo
b3VsZExvYWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0Owor
ICAgIHZvaWQgYXBwZW5kU3RvcmFnZUl0ZW1zKEJsb2JTdG9yYWdlRGF0YSosIGNvbnN0IEJsb2JT
dG9yYWdlRGF0YUl0ZW1MaXN0JiwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7
CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gPiBtX2Jsb2Jz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0Ip
CisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0cnlJbXBsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9CbG9iU3RvcmFnZURhdGEuaCBiL1dlYkNvcmUvaHRtbC9CbG9iU3RvcmFnZURhdGEuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNiYWQzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9odG1sL0Jsb2JTdG9yYWdlRGF0YS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKg0K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K
KyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAq
DQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
DQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuDQorICovDQorDQorI2lmbmRlZiBCbG9iU3RvcmFnZURhdGFfaA0KKyNkZWZp
bmUgQmxvYlN0b3JhZ2VEYXRhX2gNCisNCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCINCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4NCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPg0KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KKw0K
K3N0cnVjdCBCbG9iU3RvcmFnZURhdGFJdGVtIHsNCisgICAgdHlwZWRlZiBlbnVtIHsgRGF0YSwg
RmlsZSB9IEJsb2JTdG9yZURhdGFJdGVtVHlwZTsNCisgICAgQmxvYlN0b3JlRGF0YUl0ZW1UeXBl
IHR5cGU7DQorICAgIGxvbmcgbG9uZyBvZmZzZXQ7DQorICAgIGxvbmcgbG9uZyBsZW5ndGg7DQor
DQorICAgIC8vIEZvciBzdHJpbmcgZGF0YS4NCisgICAgQ1N0cmluZyBkYXRhOw0KKw0KKyAgICAv
LyBGb3IgZmlsZSBkYXRhLg0KKyAgICBTdHJpbmcgcGF0aDsNCisgICAgZG91YmxlIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZTsNCisNCisgICAgQmxvYlN0b3JhZ2VEYXRhSXRlbShjb25zdCBDU3Ry
aW5nJiBkYXRhLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQ0KKyAgICAgICAg
OiB0eXBlKERhdGEpDQorICAgICAgICAsIG9mZnNldChvZmZzZXQpDQorICAgICAgICAsIGxlbmd0
aChsZW5ndGgpDQorICAgICAgICAsIGRhdGEoZGF0YSkNCisgICAgICAgICwgZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lKDApDQorICAgIHsNCisgICAgfQ0KKw0KKyAgICBCbG9iU3RvcmFnZURhdGFJ
dGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0
aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkNCisgICAgICAgIDogdHlwZShGaWxl
KQ0KKyAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQ0KKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQ0K
KyAgICAgICAgLCBwYXRoKHBhdGgpDQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZShleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpDQorICAgIHsNCisgICAgfQ0KK307DQorDQordHlw
ZWRlZiBWZWN0b3I8QmxvYlN0b3JhZ2VEYXRhSXRlbT4gQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3Q7
DQorDQorY2xhc3MgQmxvYlN0b3JhZ2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYlN0b3Jh
Z2VEYXRhPiB7DQorcHVibGljOg0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURh
dGE+IGNyZWF0ZSgpDQorICAgIHsNCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYlN0
b3JhZ2VEYXRhKCkpOw0KKyAgICB9DQorDQorICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRUeXBlOyB9DQorICAgIHZvaWQgc2V0Q29udGVudFR5
cGUoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgeyBtX2NvbnRlbnRUeXBlID0gY29udGVudFR5
cGU7IH0NCisNCisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnREaXNwb3NpdGlvbjsgfQ0KKyAgICB2b2lkIHNldENvbnRlbnREaXNw
b3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbnRlbnREaXNwb3NpdGlvbikgeyBtX2NvbnRlbnREaXNw
b3NpdGlvbiA9IGNvbnRlbnREaXNwb3NpdGlvbjsgfQ0KKyAgICANCisgICAgY29uc3QgQmxvYlN0
b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQ0KKw0K
KyAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgQ1N0cmluZyYgZGF0YSwgbG9uZyBsb25nIG9mZnNl
dCwgbG9uZyBsb25nIGxlbmd0aCkNCisgICAgew0KKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoQmxv
YlN0b3JhZ2VEYXRhSXRlbShkYXRhLCBvZmZzZXQsIGxlbmd0aCkpOw0KKyAgICB9DQorDQorICAg
IHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxv
bmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpDQorICAgIHsN
CisgICAgICAgIG1faXRlbXMuYXBwZW5kKEJsb2JTdG9yYWdlRGF0YUl0ZW0ocGF0aCwgb2Zmc2V0
LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOw0KKyAgICB9DQorDQorcHJpdmF0
ZToNCisgICAgU3RyaW5nIG1fY29udGVudFR5cGU7DQorICAgIFN0cmluZyBtX2NvbnRlbnREaXNw
b3NpdGlvbjsNCisgICAgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QgbV9pdGVtczsNCit9Ow0KKw0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYgLy8gQmxvYlN0b3JhZ2VEYXRhX2gN
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlVSTC5jcHAgYi9XZWJDb3JlL2h0bWwvQmxv
YlVSTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4ZjcxMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iVVJMLmNwcApAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9i
VVJMLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlICJVVUlELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworS1VS
TCBCbG9iVVJMOjpjcmVhdGVVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIGJsb2IgVVJMIGluIHRoZSBmb2xsb3dp
bmcgZm9ybWF0OgorICAgIC8vICAgICBibG9iOiVlc2NhcGVkX29yaWdpbiUvJVVVSUQlCisgICAg
Ly8gVGhlIG9yaWdpbiBvZiB0aGUgaG9zdCBwYWdlIGlzIGVuY29kZWQgaW4gdGhlIFVSTCB2YWx1
ZSB0byBhbGxvdyBlYXN5IGxvb2t1cCBvZiB0aGUgb3JpZ2luIHdoZW4gdGhlIHNlY3VyaXR5IGNo
ZWNrIG5lZWRzCisgICAgLy8gdG8gYmUgcGVyZm9ybWVkLgorICAgIFN0cmluZyB1cmxTdHJpbmcg
PSAiYmxvYjoiOworICAgIHVybFN0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwor
ICAgIHVybFN0cmluZyArPSAiLyI7CisgICAgdXJsU3RyaW5nICs9IGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKTsKKyAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7
Cit9CisKK0tVUkwgQmxvYlVSTDo6Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBB
U1NFUlQodXJsLnByb3RvY29sSXMoImJsb2IiKSk7CisKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4
ID0gdXJsLnBhdGhTdGFydCgpOzsKKyAgICB1bnNpZ25lZCBhZnRlckVuZEluZGV4ID0gdXJsLnBh
dGhBZnRlckxhc3RTbGFzaCgpOworICAgIFN0cmluZyBvcmlnaW4gPSB1cmwuc3RyaW5nKCkuc3Vi
c3RyaW5nKHN0YXJ0SW5kZXgsIGFmdGVyRW5kSW5kZXggLSBzdGFydEluZGV4KTsKKyAgICByZXR1
cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhvcmlnaW4p
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0Ip
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYlVSTC5oIGIvV2ViQ29yZS9odG1sL0Jsb2JV
UkwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzc5Yzk5Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JVUkwuaApAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBCbG9iVVJMX2gKKyNkZWZpbmUgQmxvYlVSTF9oCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2lu
Y2x1ZGUgIktVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworCitjbGFzcyBCbG9iVVJMIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgS1VS
TCBjcmVhdGVVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBLVVJMIGdl
dE9yaWdpbihjb25zdCBLVVJMJik7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikK
KworI2VuZGlmIC8vIEJsb2JVUkxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3Bw
IGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4IDEwOWUwZDMuLmM4MDRmMzQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAK
KyNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAKQEAgLTM3LDYgKzM4LDEzIEBAIEZpbGU6OkZpbGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5n
JiBwYXRoKQogICAgIEluaXQoKTsKIH0KIAorRmlsZTo6RmlsZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIDogQmxvYihzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCB1cmwsIHR5cGUsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpCit7CisgICAgLy8g
RklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCisg
ICAgIG1faXRlbXMuYXBwZW5kKEZpbGVCbG9iSXRlbTo6Y3JlYXRlKHBhdGgpKTsKK30KKwogI2lm
IEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQogRmlsZTo6RmlsZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZVBhdGgsIHJlbGF0aXZlUGF0aCkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCBjMGFl
Y2M4Li4wNmE3M2M1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlLmgKQEAgLTM5LDYgKzM5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgpKTsKICAgICB9
CiAKKyAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZp
bGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIHBhdGgsIHVybCwgdHlwZSkpOworICAgIH0KKwogI2lmIEVOQUJMRShESVJFQ1RP
UllfVVBMT0FEKQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0
aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKQEAgLTYwLDExICs2NiwxNSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2b2lkIEluaXQoKTsKKworICAgIC8vIEZvciBkZXNlcmlh
bGl6YXRpb24uCisgICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogI2lmIEVOQUJMRShE
SVJFQ1RPUllfVVBMT0FEKQogICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogI2VuZGlmCisKKyAg
ICB2b2lkIEluaXQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyNTZkMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkRhdGEuY3BwCkBAIC0wLDAgKzEsODcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjb25zdCBsb25nIGxvbmcgQmxvYkRhdGFJdGVtOjp0b0VuZE9mRmlsZSA9
IC0xOworY29uc3QgZG91YmxlIEJsb2JEYXRhSXRlbTo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAw
OworCit2b2lkIEJsb2JEYXRhSXRlbTo6Y29weShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7
CisgICAgdHlwZSA9IGl0ZW0udHlwZTsKKyAgICBkYXRhID0gaXRlbS5kYXRhOyAvLyBUaGlzIGlz
IE9LIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBWZWN0b3I8Y2hhcj4uCisgICAg
cGF0aCA9IGl0ZW0ucGF0aC5jcm9zc1RocmVhZFN0cmluZygpOworICAgIHVybCA9IGl0ZW0udXJs
LmNvcHkoKTsKKyAgICBvZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICBsZW5ndGggPSBpdGVtLmxl
bmd0aDsKKyAgICBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZTsKK30KKworUGFzc093blB0cjxCbG9iRGF0YT4gQmxvYkRhdGE6OmNvcHkoKSBj
b25zdAoreworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBhZG9wdFB0cihuZXcgQmxv
YkRhdGEoKSk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudFR5cGUgPSBtX2NvbnRlbnRUeXBlLmNy
b3NzVGhyZWFkU3RyaW5nKCk7CisgICAgYmxvYkRhdGEtPm1fY29udGVudERpc3Bvc2l0aW9uID0g
bV9jb250ZW50RGlzcG9zaXRpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBibG9iRGF0YS0+
bV9pdGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXQoaSku
Y29weShtX2l0ZW1zLmF0KGkpKTsKKworICAgIHJldHVybiBibG9iRGF0YS5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgQmxvYkRhdGE6OmFwcGVuZERhdGEoY29uc3QgQ1N0cmluZyYgZGF0YSkKK3sKKyAg
ICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0YUl0ZW0oZGF0YSkpOworfQorCit2b2lkIEJsb2JEYXRh
OjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChC
bG9iRGF0YUl0ZW0ocGF0aCkpOworfQorCit2b2lkIEJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgZG91Ymxl
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0
YUl0ZW0ocGF0aCwgb2Zmc2V0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOwor
fQorCit2b2lkIEJsb2JEYXRhOjphcHBlbmRCbG9iKGNvbnN0IEtVUkwmIHVybCwgbG9uZyBsb25n
IG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCbG9iRGF0
YUl0ZW0odXJsLCBvZmZzZXQsIGxlbmd0aCkpOworfQorCit2b2lkIEJsb2JEYXRhOjpzd2FwSXRl
bXMoQmxvYkRhdGFJdGVtTGlzdCYgaXRlbXMpCit7CisgICAgbV9pdGVtcy5zd2FwKGl0ZW1zKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iRGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2RmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL0Jsb2JEYXRhLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JEYXRhX2gK
KyNkZWZpbmUgQmxvYkRhdGFfaAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBCbG9iRGF0YUl0ZW0geworICAgIHN0YXRpYyBjb25zdCBsb25nIGxv
bmcgdG9FbmRPZkZpbGU7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNo
YW5nZTsKKworICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgQmxvYkRhdGFJdGVtKCkK
KyAgICAgICAgOiBvZmZzZXQoMCkKKyAgICAgICAgLCBsZW5ndGgodG9FbmRPZkZpbGUpCisgICAg
ICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgU3RyaW5nIHR5cGUuCisgICAgQmxv
YkRhdGFJdGVtKGNvbnN0IENTdHJpbmcmIGRhdGEpCisgICAgICAgIDogdHlwZShEYXRhKQorICAg
ICAgICAsIGRhdGEoZGF0YSkKKyAgICAgICAgLCBvZmZzZXQoMCkKKyAgICAgICAgLCBsZW5ndGgo
dG9FbmRPZkZpbGUpCisgICAgICAgICwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hl
Y2tGaWxlQ2hhbmdlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgRmls
ZSB0eXBlIChjb21wbGV0ZSBmaWxlKS4KKyAgICBCbG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBw
YXRoKQorICAgICAgICA6IHR5cGUoRmlsZSkKKyAgICAgICAgLCBwYXRoKHBhdGgpCisgICAgICAg
ICwgb2Zmc2V0KDApCisgICAgICAgICwgbGVuZ3RoKHRvRW5kT2ZGaWxlKQorICAgICAgICAsIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKKyAgICB7CisgICAg
fQorCisgICAgLy8gQ29uc3RydWN0b3IgZm9yIEZpbGUgdHlwZSAocGFydGlhbCBmaWxlKS4KKyAg
ICBCbG9iRGF0YUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25n
IGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICA6
IHR5cGUoRmlsZSkKKyAgICAgICAgLCBwYXRoKHBhdGgpCisgICAgICAgICwgb2Zmc2V0KG9mZnNl
dCkKKyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZShleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICAvLyBDb25zdHJ1Y3RvciBmb3IgQmxvYiB0eXBlLgorICAgIEJsb2JEYXRhSXRlbShjb25zdCBL
VVJMJiB1cmwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgICAgIDog
dHlwZShCbG9iKQorICAgICAgICAsIHVybCh1cmwpCisgICAgICAgICwgb2Zmc2V0KG9mZnNldCkK
KyAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQorICAgICAgICAsIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gR2V0cyBh
IGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQu
CisgICAgdm9pZCBjb3B5KGNvbnN0IEJsb2JEYXRhSXRlbSYpOworCisgICAgZW51bSB7IERhdGEs
IEZpbGUsIEJsb2IgfSB0eXBlOworICAgIAorICAgIC8vIEZvciBEYXRhIHR5cGUuCisgICAgQ1N0
cmluZyBkYXRhOworCisgICAgLy8gRm9yIEZpbGUgdHlwZS4KKyAgICBTdHJpbmcgcGF0aDsKKwor
ICAgIC8vIEZvciBCbG9iIHR5cGUuCisgICAgS1VSTCB1cmw7CisKKyAgICAvLyBGb3IgRmlsZSBh
bmQgQmxvYiB0eXBlLgorICAgIGxvbmcgbG9uZyBvZmZzZXQ7CisgICAgbG9uZyBsb25nIGxlbmd0
aDsKKworICAgIC8vIEZvciBGaWxlIHR5cGUgb25seS4KKyAgICBkb3VibGUgZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lOworfTsKKwordHlwZWRlZiBWZWN0b3I8QmxvYkRhdGFJdGVtPiBCbG9iRGF0
YUl0ZW1MaXN0OworCitjbGFzcyBCbG9iRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8QmxvYkRhdGE+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEJsb2JEYXRhKCkpOworICAgIH0KKworICAgIC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRh
IHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGFub3RoZXIgdGhyZWFkLgorICAgIFBhc3NPd25QdHI8
QmxvYkRhdGE+IGNvcHkoKSBjb25zdDsKKworICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRUeXBlOyB9CisgICAgdm9pZCBzZXRDb250ZW50VHlw
ZShjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSB7IG1fY29udGVudFR5cGUgPSBjb250ZW50VHlw
ZTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnREaXNwb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0Q29udGVudERpc3Bvc2l0
aW9uKGNvbnN0IFN0cmluZyYgY29udGVudERpc3Bvc2l0aW9uKSB7IG1fY29udGVudERpc3Bvc2l0
aW9uID0gY29udGVudERpc3Bvc2l0aW9uOyB9CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0
JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KKyAgICB2b2lkIHN3YXBJdGVtcyhC
bG9iRGF0YUl0ZW1MaXN0Jik7CisgICAgCisgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IENTdHJp
bmcmKTsKKyAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lk
IGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxv
bmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICB2b2lkIGFw
cGVuZEJsb2IoY29uc3QgS1VSTCYsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgp
OworCitwcml2YXRlOgorICAgIEJsb2JEYXRhKCkgeyB9CisKKyAgICBTdHJpbmcgbV9jb250ZW50
VHlwZTsKKyAgICBTdHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247CisgICAgQmxvYkRhdGFJdGVt
TGlzdCBtX2l0ZW1zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
QmxvYkRhdGFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iUmVnaXN0cnkuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vQmxvYlJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZmQzM2JhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
QmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYlJlZ2lzdHJ5X2gKKyNk
ZWZpbmUgQmxvYlJlZ2lzdHJ5X2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iRGF0YTsKK2Ns
YXNzIEtVUkw7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VIYW5kbGU7Citj
bGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2U7CisKKy8vIEJsb2JSZWdpc3RyeSBpcyBub3QgdGhyZWFkLXNhZmUu
IEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgorY2xhc3MgQmxvYlJl
Z2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQmxvYlJlZ2lzdHJ5JiBpbnN0YW5jZSgpOwor
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0
cjxCbG9iRGF0YT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlSGFuZGxlQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFs
IH5CbG9iUmVnaXN0cnkoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5X2gK
</data>
<flag name="review"
          id="52390"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52391"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>