<?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>234194</bug_id>
          
          <creation_ts>2021-12-10 22:27:30 -0800</creation_ts>
          <short_desc>Add PushDatabase</short_desc>
          <delta_ts>2022-03-17 01:30:41 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>235857</blocked>
    
    <blocked>238010</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Nham">nham</reporter>
          <assigned_to name="Ben Nham">nham</assigned_to>
          <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>nham</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1823167</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-10 22:27:30 -0800</bug_when>
    <thetext>Add PushDatabase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823168</commentid>
    <comment_count>1</comment_count>
      <attachid>446862</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-10 22:31:21 -0800</bug_when>
    <thetext>Created attachment 446862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823169</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-10 22:32:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/86353439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823170</commentid>
    <comment_count>3</comment_count>
      <attachid>446863</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-10 22:34:27 -0800</bug_when>
    <thetext>Created attachment 446863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823171</commentid>
    <comment_count>4</comment_count>
      <attachid>446864</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-10 22:53:02 -0800</bug_when>
    <thetext>Created attachment 446864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823244</commentid>
    <comment_count>5</comment_count>
      <attachid>446896</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-11 12:28:56 -0800</bug_when>
    <thetext>Created attachment 446896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824195</commentid>
    <comment_count>6</comment_count>
      <attachid>447185</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-12-14 17:44:24 -0800</bug_when>
    <thetext>Created attachment 447185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835251</commentid>
    <comment_count>7</comment_count>
      <attachid>450314</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-28 22:31:23 -0800</bug_when>
    <thetext>Created attachment 450314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835252</commentid>
    <comment_count>8</comment_count>
      <attachid>450315</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-28 22:32:56 -0800</bug_when>
    <thetext>Created attachment 450315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835429</commentid>
    <comment_count>9</comment_count>
      <attachid>450379</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-30 22:00:00 -0800</bug_when>
    <thetext>Created attachment 450379
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836342</commentid>
    <comment_count>10</comment_count>
      <attachid>450379</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-01 23:19:11 -0800</bug_when>
    <thetext>Comment on attachment 450379
rebase

Some nits here and there.
LGTM overall but it may be good to have a closer SQL-dedicated look.

Question: in service worker we encode the schema ID in the filename, here it is added in the database itself.
Any reason why we are not using a single model?

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

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:2
&gt; + * Copyright (C) 2021 Apple Inc. All rights reserved.

2022

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:131
&gt; +                failOnMainQueue(WTFMove(completionHandler));

Shouldn&apos;t we call createFreshPushDatabase?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:152
&gt; +                    failOnMainQueue(WTFMove(completionHandler));

Shouldn&apos;t we call createFreshPushDatabase here as well?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:216
&gt; +static void completeOnMainQueue(CompletionHandler&lt;void(T)&gt;&amp;&amp; completionHandler, const U&amp; result)

s/const U&amp;/U&amp;&amp;/

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:218
&gt; +    WorkQueue::main().dispatch([completionHandler = WTFMove(completionHandler), result = crossThreadCopy(result)]() mutable {

s/result/WTFMove(result) to get the potential optimization of reusing what can be reused (one ref strings, vectors...)

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:468
&gt; +        Vector&lt;Vector&lt;String&gt;&gt; topicsByWakeState(numberOfWakeStates); // used because HashMap::isolatedCopy doesn&apos;t exist

Can it be a Vector&lt;Vector&lt;String&gt;, PushWakeState::NumberOfStates&gt;?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:490
&gt; +        WorkQueue::main().dispatch([completionHandler = WTFMove(completionHandler), topicsByWakeState = crossThreadCopy(topicsByWakeState)]() mutable {

WTFMove(topicsByWakeState) to optimise it.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:492
&gt; +            for (int i = 0; i &lt; static_cast&lt;int&gt;(PushWakeState::NumberOfStates); ++i)

Would uint8_t allow to remove the static_cast?

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:33
&gt; +#include &quot;SQLiteStatement.h&quot;

Needed?

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:37
&gt; +#include &lt;wtf/Function.h&gt;

Function probably not needed.

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:68
&gt; +    WEBCORE_EXPORT PushRecord isolatedCopy() const;

A WEBCORE_EXPORT PushRecord isolatedCopy() &amp;&amp; version might be useful to reuse all those Vectors and probably one-ref Strings.

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:88
&gt; +    explicit PushDatabase(Ref&lt;WorkQueue&gt;&amp;&amp;, std::unique_ptr&lt;WebCore::SQLiteDatabase&gt;&amp;&amp;);

s/explicit//

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:92
&gt; +    std::unique_ptr&lt;WebCore::SQLiteDatabase&gt; m_db;

I guess it could be a UniqueRef.

&gt; Tools/ChangeLog:17
&gt; +        (TestWebKitAPI::TEST_F):

Great tests!
Can we add another one that would do something like:
- Start an action on a database
- Synchronously destroy explicitly the database and make sure nothing crashes (dispatchSync probably ensures this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836513</commentid>
    <comment_count>11</comment_count>
      <attachid>450379</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-02-02 10:32:26 -0800</bug_when>
    <thetext>Comment on attachment 450379
rebase

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

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:69
&gt; +    &quot;PRAGMA user_version = 1&quot;_s

Do we want to ensure user_version is the same as currentPushDatabaseVersion, e.g. by creating this query from currentPushDatabaseVersion.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:134
&gt; +            version = sql-&gt;columnInt(0);

I think columnInt() runs step(); may just check if version is 0.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:137
&gt; +        if (version &gt; currentPushDatabaseVersion) {

Why do we have different policies for incorrect versions if there is only one valid version in current code? We may just create a new database if version does not match, and add code to migrate data when different versions are possible.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:140
&gt; +                createFreshPushDatabase(path, WTFMove(completionHandler));

Why do we need to dispatch back to main thread? It seems more efficient to just close the database, delete file, and open again here?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:174
&gt; +{

Can we assert this is main thread?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:177
&gt; +PushDatabase::~PushDatabase()

Can we avoid file I/O in destructor by adding a public PushDatabase::close() and assert database is closed here?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:178
&gt; +{

Can we assert this is main thread?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:179
&gt; +    m_queue-&gt;dispatchSync([db = WTFMove(m_db), statements = WTFMove(m_statements)]() mutable {

Is it safe to access m_db from both m_queue and main thread?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:186
&gt; +{

Can we assert this is non-main thread?

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:217
&gt; +{

Can we assert this is non-main thread.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:223
&gt; +void PushDatabase::insertRecord(const PushRecord&amp; record, CompletionHandler&lt;void(std::optional&lt;PushRecord&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)

If we are not changing the record, can we rely on call site to remember the record (e.g. in the completionHandler) and only return true/false for result? It seems we need to isolated copy again when passing record back to main thread.

&gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:404
&gt; +            &quot;CROSS JOIN SubscriptionSets ss &quot;

Do we want INNER JOIN instead? (https://www.sqlite.org/lang_select.html 2.2. Special handling of CROSS JOIN)

&gt; Source/WebCore/Modules/push-api/PushDatabase.h:2
&gt; + * Copyright (C) 2021 Apple Inc. All rights reserved.

2022

&gt; Source/WebCore/platform/sql/SQLiteDatabase.cpp:151
&gt; +    bool isInMemory = filename == &quot;:memory:&quot;_s;

Can we add a function SQLiteDatabase::openInMemory(OpenMode openMode) which calls open(&quot;:memory:&quot;, openMode), so the call sites don&apos;t need to know the special name.
In PushDatabase we can check empty string for in-memory database.

&gt; Tools/TestWebKitAPI/Tests/WebCore/PushDatabase.cpp:2
&gt; + * Copyright (C) 2020 Apple Inc. All rights reserved.

2022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836706</commentid>
    <comment_count>12</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-02 16:47:07 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #10)
&gt; Comment on attachment 450379 [details]

&gt; Question: in service worker we encode the schema ID in the filename, here it
&gt; is added in the database itself.
&gt; Any reason why we are not using a single model?

We will eventually need to support data migrations, so we need to store the schema version somewhere, and PRAGMA user_version is designed to do that. It is also protected by the same SQL transaction that migrates the schema, so we can be sure that the migration is atomic.

Changing a filename occurs outside of the context of a SQL transaction, so that seems more likely to be buggy. Why do we do that?

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:492
&gt; &gt; +            for (int i = 0; i &lt; static_cast&lt;int&gt;(PushWakeState::NumberOfStates); ++i)
&gt; 
&gt; Would uint8_t allow to remove the static_cast?

I don&apos;t think so, an enum class doesn&apos;t get implicitly converted to its underlying type.

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.h:33
&gt; &gt; +#include &quot;SQLiteStatement.h&quot;
&gt; 
&gt; Needed?

This one is actually needed or else I get a bunch of errors from clients of this class using an incomplete type (I think this is due to the way UniqueRef is implemented).

I think I&apos;ve addressed the rest of the comments in the latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836708</commentid>
    <comment_count>13</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-02 16:53:33 -0800</bug_when>
    <thetext>(In reply to Sihui Liu from comment #11)
&gt; Comment on attachment 450379 [details]

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:134
&gt; &gt; +            version = sql-&gt;columnInt(0);
&gt; 
&gt; I think columnInt() runs step(); may just check if version is 0.

Yeah, I just checked step() for SQLITE_ROW here anyway since technically I need to check the return result of prepareStatement.

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:140
&gt; &gt; +                createFreshPushDatabase(path, WTFMove(completionHandler));
&gt; 
&gt; Why do we need to dispatch back to main thread? It seems more efficient to
&gt; just close the database, delete file, and open again here?

I&apos;ve gotten rid of the thread hopping in the upcoming version of the patch.

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:179
&gt; &gt; +    m_queue-&gt;dispatchSync([db = WTFMove(m_db), statements = WTFMove(m_statements)]() mutable {
&gt; 
&gt; Is it safe to access m_db from both m_queue and main thread?

It should be safe in this limited case, as moving from those member variables is basically doing a bunch of pointer swaps, and the queue dispatch (dispatch_async) should emit a full memory barrier.

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:223
&gt; &gt; +void PushDatabase::insertRecord(const PushRecord&amp; record, CompletionHandler&lt;void(std::optional&lt;PushRecord&gt;&amp;&amp;)&gt;&amp;&amp; completionHandler)
&gt; 
&gt; If we are not changing the record, can we rely on call site to remember the
&gt; record (e.g. in the completionHandler) and only return true/false for
&gt; result? It seems we need to isolated copy again when passing record back to
&gt; main thread.

We are changing both the identifier and wakeState fields in the record on insertion. We could just pass back both of those fields, but it makes the calling code cleaner to just pass back the whole record. Creating a push subscription shouldn&apos;t happen very often, so I think it&apos;s probably okay to do that if it makes the code easier to reason about.

&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:404
&gt; &gt; +            &quot;CROSS JOIN SubscriptionSets ss &quot;
&gt; 
&gt; Do we want INNER JOIN instead? (https://www.sqlite.org/lang_select.html 2.2.
&gt; Special handling of CROSS JOIN)

Yeah, in the comment I am trying to mention that we are using CROSS JOIN on purpose to get a specific lookup ordering.

I think I&apos;ve addressed the other comments in the upcoming version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836723</commentid>
    <comment_count>14</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-02 17:30:22 -0800</bug_when>
    <thetext>I forgot to reply to one concern.

(In reply to Sihui Liu from comment #11)
&gt; &gt; Source/WebCore/Modules/push-api/PushDatabase.cpp:177
&gt; &gt; +PushDatabase::~PushDatabase()
&gt; 
&gt; Can we avoid file I/O in destructor by adding a public PushDatabase::close()
&gt; and assert database is closed here?

I would prefer to keep things simple here with the dispatchSync rather than making the object track additional state about whether it&apos;s closed. In reality this object is eventually pointed to by a NeverDestroyed&lt;WebPushDaemon&gt; singleton object so the destructor will never actually run anyway. So it seems better to just keep the destructor implementation simple-but-correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836771</commentid>
    <comment_count>15</comment_count>
      <attachid>450736</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-02 22:07:18 -0800</bug_when>
    <thetext>Created attachment 450736
patch feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837608</commentid>
    <comment_count>16</comment_count>
      <attachid>450736</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2022-02-04 15:00:44 -0800</bug_when>
    <thetext>Comment on attachment 450736
patch feedback

Based on the review back and forth already, and a glance at the patch, seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837614</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-04 15:22:47 -0800</bug_when>
    <thetext>Committed r289139 (246835@main): &lt;https://commits.webkit.org/246835@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450736.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852179</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-17 01:30:41 -0700</bug_when>
    <thetext>For me clean rebuilds are broken after this change, since PushSubscriptionIdentifier.h is present twice in the Xcode project file, which causes the &quot;copy phase&quot; to fail on clean builds.

I&apos;ve fixed this in r291394.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446862</attachid>
            <date>2021-12-10 22:31:21 -0800</date>
            <delta_ts>2021-12-10 22:51:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20211210223120.patch</filename>
            <type>text/plain</type>
            <size>38983</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg5NDJkODVhYjQ2YTE3
YTdmNTI3N2U1MjI1Y2E1ZTA2MTY0ZjU3Ny4uMzllODllOWIxMjFiNTJjNDVlMmZjYWE5MzkzYzU0
Y2M3ODlkMzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTEyLTEwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
cHVzaC1hcGkvUHVzaERhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKwogMjAyMS0x
Mi0xMCAgQWxleGV5IFNodmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0
dGluZyAib25zZWxlY3Rpb25jaGFuZ2UiIGNvbnRlbnQgYXR0cmlidXRlIHNob3VsZCBhZGQgYW4g
ZXZlbnQgbGlzdGVuZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGRhMjdhMmVjY2MwMGU1YmVjY2Vm
NDRiMDVhN2RhZjA5YTBlYTIzOTcuLmJiMzU1MTRmOTRhM2E1Mjk3YmJhMjA1NWUyOTVlNjc2MmQ0
MzAwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMjkwLDYgKzI5MCw3IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBNb2R1bGVzL3Blcm1pc3Npb25zL1Blcm1p
c3Npb25PYnNlcnZlci5oCiAgICAgTW9kdWxlcy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uU3RhdGUu
aAogCisgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAogICAgIE1vZHVsZXMvcHVz
aC1hcGkvUHVzaFBlcm1pc3Npb25TdGF0ZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vi
c2NyaXB0aW9uRGF0YS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkv
UHVzaERhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmRkOTEzMDA1Y2M5N2MzN2VhNzdlNGZjODMy
OTU3MzZlNzFiMDkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
dXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1c2hEYXRhYmFzZS5oIgorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0
ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgorCisjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikg
UkVMRUFTRV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19f
VkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpIFBV
U0hEQl9SRUxFQVNFX0xPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgYW5kIGJpbmQgc3RhdGVt
ZW50ICglZCk6ICVzIiwgbV9kYi0+bGFzdEVycm9yKCksIG1fZGItPmxhc3RFcnJvck1zZygpKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1cnJlbnRQdXNo
RGF0YWJhc2VWZXJzaW9uID0gMTsKKworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNoRGF0
YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKKyAgICAiUFJBR01BIGF1dG9fdmFjdXVtPUlO
Q1JFTUVOVEFMIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cygiCisgICAg
IiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgYnVuZGxlSUQgVEVYVCBOT1Qg
TlVMTCwiCisgICAgIiAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgd2Fr
ZVN0YXRlIElOVCBOT1QgTlVMTCwiCisgICAgIiAgVU5JUVVFKGJ1bmRsZUlELCBzZWN1cml0eU9y
aWdpbikpIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucygiCisgICAgIiAgY3Jl
YXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc3Vic2NyaXB0aW9uU2V0SUQgSU5UIE5P
VCBOVUxMLCIKKyAgICAiICBzY29wZSBURVhUIE5PVCBOVUxMLCIKKyAgICAiICBlbmRwb2ludCBU
RVhUIE5PVCBOVUxMLCIKKyAgICAiICBzZXJ2ZXJWQVBJRFB1YmxpY0tleSBCTE9CIE5PVCBOVUxM
LCIKKyAgICAiICBjbGllbnRQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAgY2xpZW50
UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAiICBzaGFyZWRBdXRoU2VjcmV0IEJMT0Ig
Tk9UIE5VTEwsIgorICAgICIgIGV4cGlyYXRpb25UaW1lIElOVCwiCisgICAgIiAgVU5JUVVFKHNj
b3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJDUkVBVEUgSU5ERVggU3Vic2NyaXB0
aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlv
blNldElEKSJfcywKKyAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9IDEiX3MKK307CisKK3N0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGggPT0gIjptZW1vcnk6Il9zIHx8ICFT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gUHVzaERhdGFiYXNlOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoICE9ICI6bWVtb3J5OiJfcyAmJiAhRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKSAmJiAhRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVz
KEZpbGVTeXN0ZW06OnBhcmVudFBhdGgocGF0aCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJDb3VsZG4ndCBjcmVhdGUgUHVzaERhdGFiYXNlIHBhcmVudCBkaXJlY3Rvcmll
cyBmb3IgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGF1dG8gZGIgPSBtYWtlVW5pcXVlUmVmPFNRTGl0ZURhdGFiYXNl
PigpOworICAgIGlmICghZGItPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IG9wZW4gZGF0YWJhc2UgZmlsZSBhdCBwYXRoICVzIiwgcGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaW50
IHZlcnNpb24gPSAwOworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBkYi0+cHJlcGFyZVN0YXRl
bWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJDb3VsZG4ndCBnZXQgZGF0YWJhc2UgdmVyc2lvbiBhdCBwYXRoICVzIiwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKKyAgICB9CisKKyAgICBpZiAodmVyc2lv
biA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJGb3VuZCBuZXdlciBkYXRhYmFzZSB2ZXJzaW9uIHRoYW4gZXhwZWN0ZWQsIHN0
YXJ0aW5nIGZyb20gc2NyYXRjaDogJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBk
Yi0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNlKHBhdGgp
OworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24p
IHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGIpOworICAgICAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogcHVz
aERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoIWRiLT5leGVj
dXRlQ29tbWFuZChzdGF0ZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBkYXRhYmFzZSBzY2hlbWEgZm9yIHN0YXRlbWVudCAl
cyBhdCBwYXRoICVzIiwgc3RhdGVtZW50LmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0KKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPihuZXcgUHVzaERhdGFiYXNlKFdURk1vdmUo
ZGIpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IFB1c2hEYXRhYmFzZTo6
Y3JlYXRlSW5NZW1vcnkoKQoreworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZSgiOm1l
bW9yeToiX3MpOworfQorCitQdXNoRGF0YWJhc2U6OlB1c2hEYXRhYmFzZShVbmlxdWVSZWY8U1FM
aXRlRGF0YWJhc2U+JiYgZGIpCisgICAgOiBtX2RiKFdURk1vdmUoZGIpKQoreworfQorCitQdXNo
RGF0YWJhc2U6On5QdXNoRGF0YWJhc2UoKSA9IGRlZmF1bHQ7CisKK1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIFB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKK3sKKyAgICBhdXRvIGl0ID0gbV9zdGF0ZW1lbnRzLmZpbmQocXVlcnkpOworICAgIGlm
IChpdCAhPSBtX3N0YXRlbWVudHMuZW5kKCkpCisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZShpdC0+dmFsdWUucHRyKCkpOworCisgICAgYXV0byByZXN1bHQgPSBt
X2RiLT5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKCJGYWlsZWQgd2l0aCAlZCBwcmVwYXJpbmcg
c3RhdGVtZW50OiAlIiBQVUJMSUNfTE9HX1NUUklORywgcmVzdWx0LmVycm9yKCksIHF1ZXJ5LmNo
YXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZShudWxscHRyKTsKKyAgICB9CisKKyAgICBhdXRvIHJlZiA9IFdURk1vdmUoKnJlc3VsdCk7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSByZWYucHRyKCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChxdWVy
eSwgV1RGTW92ZShyZWYpKTsKKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2Nv
cGUoc3RhdGVtZW50KTsKK30KKworc3RhdGljIFNRTFZhbHVlIHNxbFZhbHVlRnJvbVdhbGxUaW1l
KHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHdhbGxUaW1lKQoreworICAgIGlmICh3YWxsVGltZSkK
KyAgICAgICAgcmV0dXJuIHdhbGxUaW1lLT5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IHdhbGxUaW1lRnJvbVNRTFZhbHVlKFNRTFZhbHVlIHZhbHVlKQoreworICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gV2FsbFRpbWU6
OmZyb21SYXdTZWNvbmRzKHN0ZDo6Z2V0PGRvdWJsZT4odmFsdWUpKTsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IFB1c2hEYXRhYmFzZTo6
aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQmJiByZWNvcmQpCit7CisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYik7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIGlu
dDY0X3Qgc3Vic2NyaXB0aW9uU2V0SUQgPSAwOworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9
IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIHJvd2lkLCB3YWtlU3RhdGUgRlJPTSBTdWJzY3JpcHRp
b25TZXRzIFdIRVJFIGJ1bmRsZUlEID0gPyBBTkQgc2VjdXJpdHlPcmlnaW4gPSA/Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9S
RUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gc3FsLT5jb2x1bW5JbnQ2NCgwKTsK
KyAgICAgICAgICAgIHJlY29yZC53YWtlU3RhdGUgPSBzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRl
PihzcWwtPmNvbHVtbkludCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXN1YnNj
cmlwdGlvblNldElEKSB7CisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUyg/LCA/LCA/LCA/KSJfcyk7CisgICAgICAg
IGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0aW1lKG51bGxwdHIp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHJlY29yZC53YWtlU3RhdGUpKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IG1fZGItPmxhc3RJbnNlcnRSb3dJRCgp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKD8sID8sID8sID8sID8sID8sID8sID8sID8p
Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEs
IHRpbWUobnVsbHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
NjQoMiwgc3Vic2NyaXB0aW9uU2V0SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kVGV4dCgzLCByZWNvcmQuc2NvcGUpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5iaW5kVGV4dCg0LCByZWNvcmQuZW5kcG9pbnQpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYig1LCByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig2LCByZWNvcmQuY2xpZW50UHVi
bGljS2V5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoNywgcmVj
b3JkLmNsaWVudFByaXZhdGVLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5i
aW5kQmxvYig4LCByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRWYWx1ZSg5LCBzcWxWYWx1ZUZyb21XYWxsVGltZShyZWNvcmQuZXhw
aXJhdGlvblRpbWUpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNF
X0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICByZWNvcmQucm93SUQgPSBt
X2RiLT5sYXN0SW5zZXJ0Um93SUQoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK2Jvb2wgUHVzaERhdGFiYXNlOjpyZW1vdmVS
ZWNvcmQoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSkKK3sKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICB0cmFuc2FjdGlvbi5i
ZWdpbigpOworCisgICAgYm9vbCBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IGZhbHNlOworICAg
IGludDY0X3Qgc3Vic2NyaXB0aW9uSUQgPSAwOworICAgIGludDY0X3Qgc3Vic2NyaXB0aW9uU2V0
SUQgPSAwOworCisgICAgeworICAgICAgICAvLyBGaW5kIHRoZSBzdWJzY3JpcHRpb24gYW5kIHN1
YnNjcmlwdGlvbiBzZXQuCisgICAgICAgIC8vIEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBT
dWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBmaXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICAgICAiU0VMRUNUIHN1Yi5yb3dp
ZCwgc3Mucm93aWQiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiIKKyAgICAg
ICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAgICAgICAgICAiT04g
c3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQiCisgICAgICAgICAgICAiV0hFUkUgc3Vi
LnNjb3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8
fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgy
LCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9M
T0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3Vic2NyaXB0aW9uSUQgPSBzcWwtPmNvbHVtbkludDY0
KDApOworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICAvLyBEZWxldGUgdGhlIHN1YnNjcmlwdGlvbi4KKyAgICAg
ICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlvbnMg
V0hFUkUgcm93aWQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2
NCgxLCBzdWJzY3JpcHRpb25JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uIGluIHRoZSBzdWJzY3JpcHRpb24gc2V0
LgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIDEgRlJPTSBTdWJz
Y3JpcHRpb25zIFdIRVJFIHN1YnNjcmlwdGlvblNldElEID0gPyBMSU1JVCAxIl9zKTsKKworICAg
ICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJRCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJP
UigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaXNM
YXN0U3Vic2NyaXB0aW9uSW5TZXQgPSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpOworICAg
IH0KKworICAgIGlmIChpc0xhc3RTdWJzY3JpcHRpb25JblNldCkgeworICAgICAgICAvLyBEZWxl
dGUgdGhlIGVudGlyZSBzdWJzY3JpcHRpb24gc2V0IGlmIGl0IGlzIG5vIGxvbmdlciBhc3NvY2lh
dGVkIHdpdGggYW55IHN1YnNjcmlwdGlvbnMuCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25TZXRzIFdIRVJFIHJvd2lkID0gPyJfcyk7
CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHN1YnNjcmlwdGlvblNldElE
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJF
X0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBQdXNoRGF0YWJhc2U6OmdldFJlY29y
ZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIC8v
IEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBTdWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBm
aXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgKKyAg
ICAgICAgIlNFTEVDVCIKKyAgICAgICAgIiAgICBzdWIucm93SUQsIHNzLmJ1bmRsZUlELCBzcy5z
ZWN1cml0eU9yaWdpbiwgc3ViLnNjb3BlLCBzdWIuZW5kcG9pbnQsIgorICAgICAgICAiICAgIHN1
Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3ViLmNsaWVudFBy
aXZhdGVLZXksIgorICAgICAgICAiICAgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJh
dGlvblRpbWUsIHNzLndha2VTdGF0ZSIKKyAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIi
CisgICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAgICAgICJPTiBz
dWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCIKKyAgICAgICAgIldIRVJFIHN1Yi5zY29w
ZSA9ID8gQU5EIHNzLmJ1bmRsZUlEID0gPyJfcyk7CisKKyAgICBpZiAoIXNxbCB8fCBzcWwtPmJp
bmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgyLCBidW5kbGVJ
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJFX0VS
Uk9SKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICByZWNvcmQucm93SUQgPSBzcWwtPmNvbHVtbklu
dDY0KDApOworICAgIHJlY29yZC5idW5kbGVJRCA9IHNxbC0+Y29sdW1uVGV4dCgxKTsKKyAgICBy
ZWNvcmQuc2VjdXJpdHlPcmlnaW4gPSBzcWwtPmNvbHVtblRleHQoMik7CisgICAgcmVjb3JkLnNj
b3BlID0gc3FsLT5jb2x1bW5UZXh0KDMpOworICAgIHJlY29yZC5lbmRwb2ludCA9IHNxbC0+Y29s
dW1uVGV4dCg0KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBzcWwtPmNvbHVt
bkJsb2IoNSk7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IHNxbC0+Y29sdW1uQmxvYig2
KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+Y29sdW1uQmxvYig3KTsKKyAg
ICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1uQmxvYig4KTsKKyAgICByZWNv
cmQuZXhwaXJhdGlvblRpbWUgPSB3YWxsVGltZUZyb21TUUxWYWx1ZShzcWwtPmNvbHVtblZhbHVl
KDkpKTsKKyAgICByZWNvcmQud2FrZVN0YXRlID0gc3RhdGljX2Nhc3Q8UHVzaFdha2VTdGF0ZT4o
c3FsLT5jb2x1bW5JbnQoMTApKTsKKyAgICByZXR1cm4gcmVjb3JkOworfQorCitIYXNoU2V0PGlu
dDY0X3Q+IFB1c2hEYXRhYmFzZTo6Z2V0Um93SURzKCkKK3sKKyAgICBIYXNoU2V0PGludDY0X3Q+
IHJlc3VsdDsKKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIHJvd2lkIEZS
T00gU3Vic2NyaXB0aW9ucyJfcyk7CisgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICByZXN1bHQuYWRkKHNxbC0+Y29sdW1uSW50NjQoMCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjplbnVtZXJhdGVXYWtlU3Rh
dGVzKFB1c2hXYWtlU3RhdGVzRW51bWVyYXRvciYmIGVudW1lcmF0b3IpCit7CisgICAgYXV0byBz
cWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1Qgc3MuYnVuZGxlSUQsIHN1Yi5z
Y29wZSwgc3Mud2FrZVN0YXRlIgorICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiIKKyAg
ICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyIKKyAgICAgICAgIk9OIHN1Yi5zdWJzY3Jp
cHRpb25TZXRJRCA9IHNzLnJvd2lkIl9zKTsKKworICAgIGlmICghc3FsKQorICAgICAgICByZXR1
cm47CisKKyAgICB3aGlsZSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIGJ1bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDApOworICAgICAgICBhdXRvIHNjb3BlID0g
c3FsLT5jb2x1bW5UZXh0KDEpOworICAgICAgICBhdXRvIHdha2VTdGF0ZSA9IHN0YXRpY19jYXN0
PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDIpKTsKKyAgICAgICAgZW51bWVyYXRvcihX
VEZNb3ZlKGJ1bmRsZUlEKSwgV1RGTW92ZShzY29wZSksIHdha2VTdGF0ZSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLdAorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzhkNzcxMWE2NzgwMjEwYTQ0YjQyOTQwODg2YjA3MjIwZjYyYzNmNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNl
LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnRBdXRvUmVz
ZXRTY29wZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
V2FrZSBzdGF0ZSB0aGF0IGFwcGxpZXMgZm9yIGRldmljZXMgdGhhdCByYWNlLXRvLXNsZWVwLgor
ZW51bSBjbGFzcyBQdXNoV2FrZVN0YXRlIDogdWludDhfdCB7CisgICAgV2FraW5nLCAvLyBBbGwg
cHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgT3Bwb3J0dW5pc3RpYywgLy8gTG93IHByaW9y
aXR5IHB1c2hlcyBtYXkgbm90IHdha2UgZGV2aWNlLgorICAgIE5vbldha2luZyAvLyBObyBwdXNo
ZXMgd2lsbCB3YWtlIGRldmljZS4KK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAgICBpbnQ2
NF90IHJvd0lEIHsgMCB9OworICAgIFN0cmluZyBidW5kbGVJRDsKKyAgICBTdHJpbmcgc2VjdXJp
dHlPcmlnaW47CisgICAgU3RyaW5nIHNjb3BlOworICAgIFN0cmluZyBlbmRwb2ludDsKKyAgICBW
ZWN0b3I8dWludDhfdD4gc2VydmVyVkFQSURQdWJsaWNLZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGNsaWVudFB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4gY2xpZW50UHJpdmF0ZUtleTsK
KyAgICBWZWN0b3I8dWludDhfdD4gc2hhcmVkQXV0aFNlY3JldDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFdhbGxUaW1lPiBleHBpcmF0aW9uVGltZSB7IH07CisgICAgUHVzaFdha2VTdGF0ZSB3YWtlU3Rh
dGUgeyBQdXNoV2FrZVN0YXRlOjpXYWtpbmcgfTsKK307CisKK2NsYXNzIFB1c2hEYXRhYmFzZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHBhdGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UHVz
aERhdGFiYXNlPiBjcmVhdGVJbk1lbW9yeSgpOworICAgIFdFQkNPUkVfRVhQT1JUIH5QdXNoRGF0
YWJhc2UoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4g
aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZW1v
dmVSZWNvcmQoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZWNvcmQoY29u
c3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSk7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBIYXNoU2V0PGludDY0X3Q+IGdldFJvd0lEcygpOworCisgICAgdXNpbmcgUHVzaFdh
a2VTdGF0ZXNFbnVtZXJhdG9yID0gRnVuY3Rpb248dm9pZChTdHJpbmcmJiBidW5kbGVJRCwgU3Ry
aW5nJiYgc2NvcGUsIFB1c2hXYWtlU3RhdGUpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
dW1lcmF0ZVdha2VTdGF0ZXMoUHVzaFdha2VTdGF0ZXNFbnVtZXJhdG9yJiYpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IFB1c2hEYXRhYmFzZShVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U+JiYgZGIpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
IGNhY2hlZFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworCisgICAgVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RiOworICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX3N0YXRlbWVudHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IGFiNTM0OWFhOGEyOGM2MmJlMDhhODA5ZWQyZjYwMmYzN2VhMTQ1
YTcuLmU3OTkzNzIxMjA3MTExMTgyNmY0N2NmZDQ4YmIzNDZiZTgyOTI0MWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yNTcsNiArMjU3LDcgQEAgTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0RvY3VtZW50
UGljdHVyZUluUGljdHVyZS5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9FbnRlclBpY3R1
cmVJblBpY3R1cmVFdmVudC5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9IVE1MVmlkZW9F
bGVtZW50UGljdHVyZUluUGljdHVyZS5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9QaWN0
dXJlSW5QaWN0dXJlV2luZG93LmNwcAorTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3Bw
CiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hFdmVudC5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVzaE1l
c3NhZ2VEYXRhLmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vic2NyaXB0aW9uLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGVkNWIwZmQ1MGMwYmQ4NGFkODExZTg5ZmQ3NTVlM2IyZDQzMzA5NjEuLmI1YWIyZmIwZDljNjMw
YTJhOTQ4Y2FhNDJkMjQxOTQ5ODhlNThkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0MzMsNiArNTQzMyw3IEBACiAJCUVC
MjhFRDQ0MjcxN0FDMTEwMDVGMDM5MyAvKiBQdXNoU3Vic2NyaXB0aW9uRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIyOEVENDEyNzE3QUJBOTAw
NUYwMzkzIC8qIFB1c2hTdWJzY3JpcHRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUIzQzI5QjYyNzI5QzM4ODAwRkI2NUI0IC8qIFB1
c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUIzQzI5QjQyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3Jp
cHRpb25DaGFuZ2VFdmVudC5oICovOyB9OwogCQlFQjNDMjlCNzI3MjlDMzhDMDBGQjY1QjQgLyog
UHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIzQzI5QjEyNzI5QzM2RDAwRkI2NUI0IC8qIFB1c2hT
dWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaCAqLzsgfTsKKwkJRUI5QUQ4Q0IyNzY0NkU5NDAw
RDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCQjk3
MzgxMjcxMDA2NzEwMDc3MzJFRiAvKiBQdXNoTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJCOTczODAyNzEwMDY1NDAwNzczMkVGIC8qIFB1
c2hNYW5hZ2VyLmggKi87IH07CiAJCUVCQjk3MzgyMjcxMDA2NzYwMDc3MzJFRiAvKiBQdXNoUGVy
bWlzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFQkI5NzM3ODI3MTAwNjUxMDA3NzMyRUYgLyogUHVzaFBlcm1pc3Npb25TdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCQjk3Mzgz
MjcxMDA2ODQwMDc3MzJFRiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVzaEFQSS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJCOTczN0EyNzEw
MDY1MjAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25QdXNoQVBJLmggKi87IH07
CkBAIC0xNzU2Miw2ICsxNzU2Myw4IEBACiAJCUVCM0MyOUIyMjcyOUMzNkUwMEZCNjVCNCAvKiBQ
dXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRUIzQzI5QjMyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25D
aGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNo
YW5nZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUIzQzI5QjQyNzI5
QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1
c2hEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoRGF0YWJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4Q0EyNzY0NkU5MTAwRDg5
M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkI5
NzM3ODI3MTAwNjUxMDA3NzMyRUYgLyogUHVzaFBlcm1pc3Npb25TdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXNoUGVybWlzc2lvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUVCQjk3MzdBMjcxMDA2NTIwMDc3MzJFRiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVz
aEFQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVzaEFQSS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkI5NzM3QjI3MTAwNjUyMDA3NzMyRUYg
LyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbitQdXNoQVBJLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbitQdXNoQVBJLmlkbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMTAxNiw2ICsyMTAxOSw4IEBACiAJCTQxOEZDQkI4MjcwNkU0QkQwMEY5NkVDQSAvKiBw
dXNoLWFwaSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RUI5QUQ4Q0EyNzY0NkU5MTAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8sCisJCQkJRUI5
QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oICovLAogCQkJCUVCMEZCNkZE
MjcwRDBBRTgwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaCAqLywKIAkJCQlFQjBG
QjcwMDI3MEQwQUVBMDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmlkbCAqLywKIAkJ
CQk0MThGQ0JCQjI3MDZFNEY2MDBGOTZFQ0EgLyogUHVzaEV2ZW50LmNwcCAqLywKQEAgLTM2MzY2
LDYgKzM2MzcxLDcgQEAKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAzNTU5NjUgLyogUHVibGljS2V5
Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwODFGRjAwMTZCMEEyRDMwMDhB
QUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIwODRCMTRFMTVD
N0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFQjlB
RDhDQjI3NjQ2RTk0MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFQjBGQjcwODI3MEQwQjEwMDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MThGQ0JDMTI3MDZFNEZCMDBGOTZFQ0EgLyogUHVzaEV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MThGQ0JDMjI3MDZFNTAxMDBGOTZFQ0EgLyogUHVzaEV2ZW50
SW5pdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggZGMw
ZjUwOThiODdmMTg0NTUyNWJlM2MwYmE0MWY3Njc1YjE0MDQ3Zi4uMDM0NmMzODdjMTJlMDUzNTBh
YTUxZDQ1NmQ5MjI4ZTgyNjU1Nzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
OTYsNiArOTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCkgXAogICAgIE0oUHJvY2VzcykgXAogICAgIE0oUHJvZ3Jlc3MpIFwKKyAgICBNKFB1
c2gpIFwKICAgICBNKFJlbW90ZUluc3BlY3RvcikgXAogICAgIE0oUmVxdWVzdEFuaW1hdGlvbkZy
YW1lKSBcCiAgICAgTShSZXNvdXJjZUxvYWRpbmcpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4IDUwMDMwYjUyYzE4M2IxNzNlNjlmZGEy
MTM2YWU2NjFlZmU0Y2EyZWYuLjFjMGZjZTYyODFlNjllNzNiNDdmODEzOGUxYjgwYjIzNDk3OTM0
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNw
cApAQCAtMTQ4LDE0ICsxNDgsMTcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVuTW9kZSkKICAgICAgICAgICAgIExPR19FUlJP
UigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQgdGVtcF9zdG9yZSB0byBtZW1vcnkiKTsK
ICAgICB9CiAKLSAgICBpZiAob3Blbk1vZGUgIT0gT3Blbk1vZGU6OlJlYWRPbmx5KQotICAgICAg
ICB1c2VXQUxKb3VybmFsTW9kZSgpOwotCi0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJp
bmcoZmlsZW5hbWUsICItc2htIl9zKTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhz
aG1GaWxlTmFtZSkpIHsKLSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1lbW9y
eU1hcEZvclBhdGgoc2htRmlsZU5hbWUpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVM
VChTUUxEYXRhYmFzZSwgIk9wZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEg
LXNobSBmaWxlLiBUaGlzIG1heSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0
aGUgZGV2aWNlLiAoJXMpIiwgc2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1l
KTsKKyAgICBib29sIGlzSW5NZW1vcnkgPSBmaWxlbmFtZSA9PSAiOm1lbW9yeToiX3M7CisgICAg
aWYgKCFpc0luTWVtb3J5KSB7CisgICAgICAgIGlmIChvcGVuTW9kZSAhPSBPcGVuTW9kZTo6UmVh
ZE9ubHkpCisgICAgICAgICAgICB1c2VXQUxKb3VybmFsTW9kZSgpOworCisgICAgICAgIGF1dG8g
c2htRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVuYW1lLCAiLXNobSJfcyk7CisgICAgICAgIGlm
IChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHNobUZpbGVOYW1lKSkgeworICAgICAgICAgICAgaWYg
KCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRkFVTFQoU1FMRGF0YWJhc2UsICJPcGVuZWQg
YW4gU1FMaXRlIGRhdGFiYXNlIHdpdGggYSBDbGFzcyBBIC1zaG0gZmlsZS4gVGhpcyBtYXkgdHJp
Z2dlciBhIGNyYXNoIHdoZW4gdGhlIHVzZXIgbG9ja3MgdGhlIGRldmljZS4gKCVzKSIsIHNobUZp
bGVOYW1lLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFr
ZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOTZhOGRiYjgzYjcyMjY0NGRjNmYwMmVhMzVmMjU5MDE3YWI5YzZiZi4u
ZjQwODhlZTkwNWE2NDM3N2IwNWI4MDUwNTgzYTA3NDgwZWMyNzQzZCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIx
LTEyLTEwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0
YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDIxLTEyLTEwICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gQWRkIG5ldyBzY3JlZW4gYW5kIHdp
bmRvdyBjYXB0dXJlIGJhY2tlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTc4YjMwOWM0
NWMzYTA2NGYyOGIwN2RiMGZhOTAwYjQ0ZDcxODI5YS4uZDYzNTFiOGI4NTI3ZjQ4Y2I3YWIwZjBk
NDFiNDcxNDgwN2RlZjAxZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk5Myw2ICs5OTMs
NyBAQAogCQlFNUFBNDJGMjI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBk
YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVB
QTQyRjEyNTkxMjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0ZS5tbSAqLzsg
fTsKIAkJRTVBQThEMUQyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQThEMUMyNTE1MUND
NjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tICovOyB9OwogCQlFQjIzMEQ0MTI0NUU4MTNG
MDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjMwRDNEMjQ1RTcyMkUwMEM2NkFEMSAv
KiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi87IH07CisJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNB
NCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAg
Ki87IH07CiAJCUVDQTY4MENFMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQ0E2ODBDRDFF
NjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovOyB9OwogCQlGNDAxMEI4MDI0
REEyNEFDMDBBODc2RTIgLyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAxMEI3RjI0REEyNEFDMDBBODc2RTIg
LyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gKi87IH07CiAJCUY0MDEwQjgzMjREQTI2N0YwMEE4
NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0MDEwQjgxMjREQTI2N0YwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSAq
LzsgfTsKQEAgLTI5MjIsNiArMjkyMyw3IEBACiAJCUU1QUE4RDFDMjUxNTFDQzYwMDUxQ0M0NSAv
KiBEYXRlSW5wdXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGVJbnB1dFRlc3Rz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRDI0NUU3MjJFMDBDNjZB
RDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
SURCQ2hlY2twb2ludFdBTC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIz
MEQzRTI0NUU3MjYzMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQkNoZWNrcG9pbnRXQUwubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0
YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFi
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUM3OUYxNjhCRTQ1NEU1NzlF
NDE3QjA1IC8qIE1hcmthYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmthYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUNBNjgwQ0Qx
RTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0cmluZ1V0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjNGQzNFRTIxMzY3OEI3MzAwMTI2QTY1IC8qIGxpYmd0ZXN0LmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFy
OyBwYXRoID0gbGliZ3Rlc3QuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTM3MTcsNiArMzcxOSw3IEBACiAJCQkJQUE5NkNBQjQyMUM3REI0MjAwRkQyRjk3IC8qIFBh
cnNlZENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyog
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwICovLAogCQkJCTA0MUExRTMzMjE2RkZEQkMwMDc4
OUUwQSAvKiBQdWJsaWNTdWZmaXguY3BwICovLAorCQkJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNB
NCAvKiBQdXNoRGF0YWJhc2UuY3BwICovLAogCQkJCTZCNEU4NjFCMjIyMEE1NTIwMDIyRjM4OSAv
KiBSZWdpc3RyYWJsZURvbWFpbi5jcHAgKi8sCiAJCQkJRjQxOEJFMTQxRjcxQjdEQzAwMTk3MEU2
IC8qIFJvdW5kZWRSZWN0VGVzdHMuY3BwICovLAogCQkJCTQxODFDNjJDMjU1QTg5MTEwMEFFQjBG
RiAvKiBSVENSdHBTRnJhbWVUcmFuc2Zvcm1lclRlc3RzLmNwcCAqLywKQEAgLTU2MTEsNiArNTYx
NCw3IEBACiAJCQkJNDY0N0IxMjYxRUJBM0I4NTAwNDFEN0VGIC8qIFByb2Nlc3NEaWRUZXJtaW5h
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVDMkE4NTYyNENFQjY1RjAwQURCQzM1IC8qIFBy
b3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNDFBMUUzNDIxNkZGREJDMDA3ODlF
MEEgLyogUHVibGljU3VmZml4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUVCOUFEOEM3Mjc2NDZF
NzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkI0RTg2
MUMyMjIwQTU1MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0ZXJDcmFzaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVy
ZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkODI5
MjU4Zjk0ZTEyOWU3MjlhMjdiYTVkNDdjN2Q2NjM5NDJmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcApAQCAtMCww
ICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2Uu
aD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgeworCitjbGFzcyBQdXNoRGF0YWJhc2VUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewor
cHVibGljOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGRiOworCisgICAgUHVz
aFJlY29yZCByZWNvcmQxIHsKKyAgICAgICAgMCwKKyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmki
X3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJodHRwczov
L3d3dy5hcHBsZS5jb20vbWFjIl9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQxIl9z
LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAxLCAyIH0sCisgICAgICAgIHsgMiwgMyB9
LAorICAgICAgICB7IDQsIDUgfSwKKyAgICAgICAgV2FsbFRpbWU6Om5vdygpLAorICAgICAgICBQ
dXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljCisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29y
ZDIgeworICAgICAgICAwLAorICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKKyAgICAgICAg
Imh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS9pcGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAg
IHsgNSwgNiB9LAorICAgICAgICB7IDYsIDcgfSwKKyAgICAgICAgeyA3LCA4IH0sCisgICAgICAg
IHsgOCwgOSB9CisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDMgeworICAgICAgICAwLAor
ICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxl
LmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCisgICAg
ICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAgICAgIHsgOSwgMTAgfSwKKyAgICAg
ICAgeyAxMCwgMTEgfSwKKyAgICAgICAgeyAxMSwgMTIgfSwKKyAgICAgICAgeyAxMiwgMTMgfQor
ICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDE7Cisg
ICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQyOworICAgIHN0ZDo6b3B0
aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKKworICAgIHZvaWQgU2V0VXAoKSBmaW5h
bAorICAgIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGIgPSBQdXNoRGF0YWJhc2U6OmNyZWF0ZUlu
TWVtb3J5KCkpOworICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQxID0gZGItPmluc2Vy
dFJlY29yZChQdXNoUmVjb3JkKHJlY29yZDEpKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2Vy
dFJlc3VsdDIgPSBkYi0+aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQocmVjb3JkMikpKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MyA9IGRiLT5pbnNlcnRSZWNvcmQoUHVzaFJlY29y
ZChyZWNvcmQzKSkpOworICAgIH0KK307CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UHVzaFJlY29yZCYgYSwgY29uc3QgUHVzaFJlY29yZCYgYikKK3sKKyAgICByZXR1cm4gYS5yb3dJ
RCA9PSBiLnJvd0lECisgICAgICAgICYmIGEuYnVuZGxlSUQgPT0gYi5idW5kbGVJRAorICAgICAg
ICAmJiBhLnNlY3VyaXR5T3JpZ2luID09IGIuc2VjdXJpdHlPcmlnaW4KKyAgICAgICAgJiYgYS5z
Y29wZSA9PSBiLnNjb3BlCisgICAgICAgICYmIGEuZW5kcG9pbnQgPT0gYi5lbmRwb2ludAorICAg
ICAgICAmJiBhLnNlcnZlclZBUElEUHVibGljS2V5ID09IGIuc2VydmVyVkFQSURQdWJsaWNLZXkK
KyAgICAgICAgJiYgYS5jbGllbnRQdWJsaWNLZXkgPT0gYi5jbGllbnRQdWJsaWNLZXkKKyAgICAg
ICAgJiYgYS5jbGllbnRQcml2YXRlS2V5ID09IGIuY2xpZW50UHJpdmF0ZUtleQorICAgICAgICAm
JiBhLnNoYXJlZEF1dGhTZWNyZXQgPT0gYi5zaGFyZWRBdXRoU2VjcmV0CisgICAgICAgICYmIGEu
ZXhwaXJhdGlvblRpbWUgPT0gYi5leHBpcmF0aW9uVGltZQorICAgICAgICAmJiBhLndha2VTdGF0
ZSA9PSBiLndha2VTdGF0ZTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEluc2VydFJl
Y29yZCkKK3sKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CisgICAgZXhwZWN0
ZWRSZWNvcmQxLnJvd0lEID0gMTsKKyAgICBFWFBFQ1RfVFJVRShleHBlY3RlZFJlY29yZDEgPT0g
Kmluc2VydFJlc3VsdDEpOworCisgICAgYXV0byBleHBlY3RlZFJlY29yZDIgPSByZWNvcmQyOwor
ICAgIGV4cGVjdGVkUmVjb3JkMi5yb3dJRCA9IDI7CisgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWRS
ZWNvcmQyID09ICppbnNlcnRSZXN1bHQyKTsKKworICAgIC8vIFNpbmNlIHJlY29yZDMgaXMgaW4g
dGhlIHNhbWUgU3Vic2NyaXB0aW9uU2V0IGFzIHJlY29yZDEsIGl0IHNob3VsZAorICAgIC8vIGlu
aGVyaXQgcmVjb3JkMSdzIHdha2Ugc3RhdGUuCisgICAgYXV0byBleHBlY3RlZFJlY29yZDMgPSBy
ZWNvcmQzOworICAgIGV4cGVjdGVkUmVjb3JkMy5yb3dJRCA9IDM7CisgICAgZXhwZWN0ZWRSZWNv
cmQzLndha2VTdGF0ZSA9IGV4cGVjdGVkUmVjb3JkMS53YWtlU3RhdGU7CisgICAgRVhQRUNUX1RS
VUUoZXhwZWN0ZWRSZWNvcmQzID09ICppbnNlcnRSZXN1bHQzKTsKKworICAgIC8vIEluc2VydGlu
ZyBhIHJlY29yZCB3aXRoIHRoZSBzYW1lIChidW5kbGVJRCwgc2NvcGUpIGFzIHJlY29yZCAxIHNo
b3VsZCBmYWlsLgorICAgIFB1c2hSZWNvcmQgcmVjb3JkNCA9IHJlY29yZDE7CisgICAgcmVjb3Jk
NC5lbmRwb2ludCA9ICJodHRwczovL3d3dy53ZWJraXQub3JnIl9zOworICAgIEVYUEVDVF9GQUxT
RShkYi0+aW5zZXJ0UmVjb3JkKFdURk1vdmUocmVjb3JkNCkpKTsKKworICAgIEVYUEVDVF9FUShk
Yi0+Z2V0Um93SURzKCksIChIYXNoU2V0PGludDY0X3Q+IHsgMSwgMiwgMyB9KSk7Cit9CisKK1RF
U1RfRihQdXNoRGF0YWJhc2VUZXN0LCBSZW1vdmVSZWNvcmQpCit7CisgICAgRVhQRUNUX1RSVUUo
ZGItPnJlbW92ZVJlY29yZChyZWNvcmQxLmJ1bmRsZUlELCByZWNvcmQxLnNjb3BlKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGRiLT5yZW1vdmVSZWNvcmQocmVjb3JkMS5idW5kbGVJRCwgcmVjb3JkMS5z
Y29wZSkpOworICAgIEVYUEVDVF9FUShkYi0+Z2V0Um93SURzKCksIChIYXNoU2V0PGludDY0X3Q+
IHsgMiwgMyB9KSk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBHZXRSZWNvcmQpCit7
CisgICAgYXV0byByZXN1bHQxID0gZGItPmdldFJlY29yZChyZWNvcmQxLmJ1bmRsZUlELCByZWNv
cmQxLnNjb3BlKTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHQxKTsKKyAgICBFWFBFQ1RfVFJVRSgq
cmVzdWx0MSA9PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIHJlc3VsdDIgPSBkYi0+Z2V0
UmVjb3JkKHJlY29yZDEuYnVuZGxlSUQsICJmb28iX3MpOworICAgIEVYUEVDVF9GQUxTRShyZXN1
bHQyKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEVudW1lcmF0ZVdha2VTdGF0ZXMp
Cit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGV4cGVjdGVkV2FrZVN0YXRl
cyB7CisgICAgICAgIHsgImNvbS5hcHBsZS5TYWZhcmk6aHR0cHM6Ly93d3cuYXBwbGUuY29tL21h
YyIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfSwKKyAgICAgICAgeyAiY29tLmFwcGxl
LndlYmFwcDpodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lIiwgUHVzaFdha2VTdGF0ZTo6V2Fr
aW5nIH0sCisgICAgICAgIHsgImNvbS5hcHBsZS5TYWZhcmk6aHR0cHM6Ly93d3cuYXBwbGUuY29t
L2lwaG9uZSIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfQorICAgIH07CisgICAgSGFz
aE1hcDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGFjdHVhbFdha2VTdGF0ZXM7CisKKyAgICBkYi0+
ZW51bWVyYXRlV2FrZVN0YXRlcyhbJmFjdHVhbFdha2VTdGF0ZXNdKFN0cmluZyYmIGJ1bmRsZUlE
LCBTdHJpbmcmJiBzY29wZSwgUHVzaFdha2VTdGF0ZSBzdGF0ZSkgeworICAgICAgICBhY3R1YWxX
YWtlU3RhdGVzLmFkZChidW5kbGVJRCArICI6Il9zICsgc2NvcGUsIHN0YXRlKTsKKyAgICB9KTsK
KworICAgIEVYUEVDVF9FUShleHBlY3RlZFdha2VTdGF0ZXMsIGFjdHVhbFdha2VTdGF0ZXMpOwor
fQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFk
ZSkKK3sKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOworICAgIGF1
dG8gcGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJQdXNoRGF0YWJhc2UiLCBo
YW5kbGUsICIuZGIiKTsKKyAgICBBU1NFUlRfVFJVRShGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlk
KGhhbmRsZSkpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOworCisgICAgewor
ICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRoKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAx
MDAwMDAiX3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlUmVzdWx0ID0g
UHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJl
c3VsdCk7CisgICAgfQorCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAg
ICAgZGIub3BlbihwYXRoKTsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHZlcnNpb24gPSAw
OworICAgICAgICAgICAgYXV0byBzcWwgPSBkYi5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNl
cl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlmIChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7Cisg
ICAgICAgICAgICBFWFBFQ1RfR1QodmVyc2lvbiwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfTFQo
dmVyc2lvbiwgMTAwMDAwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCg==
</data>
<flag name="commit-queue"
          id="472362"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446863</attachid>
            <date>2021-12-10 22:34:27 -0800</date>
            <delta_ts>2021-12-10 22:53:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20211210223426.patch</filename>
            <type>text/plain</type>
            <size>38985</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg5NDJkODVhYjQ2YTE3
YTdmNTI3N2U1MjI1Y2E1ZTA2MTY0ZjU3Ny4uMzllODllOWIxMjFiNTJjNDVlMmZjYWE5MzkzYzU0
Y2M3ODlkMzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTEyLTEwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
cHVzaC1hcGkvUHVzaERhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKwogMjAyMS0x
Mi0xMCAgQWxleGV5IFNodmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0
dGluZyAib25zZWxlY3Rpb25jaGFuZ2UiIGNvbnRlbnQgYXR0cmlidXRlIHNob3VsZCBhZGQgYW4g
ZXZlbnQgbGlzdGVuZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGRhMjdhMmVjY2MwMGU1YmVjY2Vm
NDRiMDVhN2RhZjA5YTBlYTIzOTcuLmJiMzU1MTRmOTRhM2E1Mjk3YmJhMjA1NWUyOTVlNjc2MmQ0
MzAwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMjkwLDYgKzI5MCw3IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBNb2R1bGVzL3Blcm1pc3Npb25zL1Blcm1p
c3Npb25PYnNlcnZlci5oCiAgICAgTW9kdWxlcy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uU3RhdGUu
aAogCisgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAogICAgIE1vZHVsZXMvcHVz
aC1hcGkvUHVzaFBlcm1pc3Npb25TdGF0ZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vi
c2NyaXB0aW9uRGF0YS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkv
UHVzaERhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzllMjdmNTY0YTJiOWNhNmYyNjdjYWNkNGE3
YjNiYjZiZmMwZDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
dXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1c2hEYXRhYmFzZS5oIgorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0
ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgorCisjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikg
UkVMRUFTRV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19f
VkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpIFBV
U0hEQl9SRUxFQVNFX0xPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgYW5kIGJpbmQgc3RhdGVt
ZW50ICglZCk6ICVzIiwgbV9kYi0+bGFzdEVycm9yKCksIG1fZGItPmxhc3RFcnJvck1zZygpKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1cnJlbnRQdXNo
RGF0YWJhc2VWZXJzaW9uID0gMTsKKworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNoRGF0
YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKKyAgICAiUFJBR01BIGF1dG9fdmFjdXVtPUlO
Q1JFTUVOVEFMIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cygiCisgICAg
IiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgYnVuZGxlSUQgVEVYVCBOT1Qg
TlVMTCwiCisgICAgIiAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgd2Fr
ZVN0YXRlIElOVCBOT1QgTlVMTCwiCisgICAgIiAgVU5JUVVFKGJ1bmRsZUlELCBzZWN1cml0eU9y
aWdpbikpIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucygiCisgICAgIiAgY3Jl
YXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc3Vic2NyaXB0aW9uU2V0SUQgSU5UIE5P
VCBOVUxMLCIKKyAgICAiICBzY29wZSBURVhUIE5PVCBOVUxMLCIKKyAgICAiICBlbmRwb2ludCBU
RVhUIE5PVCBOVUxMLCIKKyAgICAiICBzZXJ2ZXJWQVBJRFB1YmxpY0tleSBCTE9CIE5PVCBOVUxM
LCIKKyAgICAiICBjbGllbnRQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAgY2xpZW50
UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAiICBzaGFyZWRBdXRoU2VjcmV0IEJMT0Ig
Tk9UIE5VTEwsIgorICAgICIgIGV4cGlyYXRpb25UaW1lIElOVCwiCisgICAgIiAgVU5JUVVFKHNj
b3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJDUkVBVEUgSU5ERVggU3Vic2NyaXB0
aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlv
blNldElEKSJfcywKKyAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9IDEiX3MKK307CisKK3N0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGggPT0gIjptZW1vcnk6Il9zIHx8ICFT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gUHVzaERhdGFiYXNlOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoICE9ICI6bWVtb3J5OiJfcyAmJiAhRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKSAmJiAhRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVz
KEZpbGVTeXN0ZW06OnBhcmVudFBhdGgocGF0aCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJDb3VsZG4ndCBjcmVhdGUgUHVzaERhdGFiYXNlIHBhcmVudCBkaXJlY3Rvcmll
cyBmb3IgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGF1dG8gZGIgPSBtYWtlVW5pcXVlUmVmPFNRTGl0ZURhdGFiYXNl
PigpOworICAgIGlmICghZGItPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IG9wZW4gZGF0YWJhc2UgZmlsZSBhdCBwYXRoICVzIiwgcGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaW50
IHZlcnNpb24gPSAwOworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBkYi0+cHJlcGFyZVN0YXRl
bWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJDb3VsZG4ndCBnZXQgZGF0YWJhc2UgdmVyc2lvbiBhdCBwYXRoICVzIiwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKKyAgICB9CisKKyAgICBpZiAodmVyc2lv
biA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJGb3VuZCBuZXdlciBkYXRhYmFzZSB2ZXJzaW9uIHRoYW4gZXhwZWN0ZWQsIHN0
YXJ0aW5nIGZyb20gc2NyYXRjaDogJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBk
Yi0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNlKHBhdGgp
OworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24p
IHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGIpOworICAgICAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogcHVz
aERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoIWRiLT5leGVj
dXRlQ29tbWFuZChzdGF0ZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBkYXRhYmFzZSBzY2hlbWEgZm9yIHN0YXRlbWVudCAl
cyBhdCBwYXRoICVzIiwgc3RhdGVtZW50LmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0KKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPihuZXcgUHVzaERhdGFiYXNlKFdURk1vdmUo
ZGIpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IFB1c2hEYXRhYmFzZTo6
Y3JlYXRlSW5NZW1vcnkoKQoreworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZSgiOm1l
bW9yeToiX3MpOworfQorCitQdXNoRGF0YWJhc2U6OlB1c2hEYXRhYmFzZShVbmlxdWVSZWY8U1FM
aXRlRGF0YWJhc2U+JiYgZGIpCisgICAgOiBtX2RiKFdURk1vdmUoZGIpKQoreworfQorCitQdXNo
RGF0YWJhc2U6On5QdXNoRGF0YWJhc2UoKSA9IGRlZmF1bHQ7CisKK1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIFB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKK3sKKyAgICBhdXRvIGl0ID0gbV9zdGF0ZW1lbnRzLmZpbmQocXVlcnkpOworICAgIGlm
IChpdCAhPSBtX3N0YXRlbWVudHMuZW5kKCkpCisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZShpdC0+dmFsdWUucHRyKCkpOworCisgICAgYXV0byByZXN1bHQgPSBt
X2RiLT5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKCJGYWlsZWQgd2l0aCAlZCBwcmVwYXJpbmcg
c3RhdGVtZW50OiAlIiBQVUJMSUNfTE9HX1NUUklORywgcmVzdWx0LmVycm9yKCksIHF1ZXJ5LmNo
YXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZShudWxscHRyKTsKKyAgICB9CisKKyAgICBhdXRvIHJlZiA9IFdURk1vdmUoKnJlc3VsdCk7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSByZWYucHRyKCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChxdWVy
eSwgV1RGTW92ZShyZWYpKTsKKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2Nv
cGUoc3RhdGVtZW50KTsKK30KKworc3RhdGljIFNRTFZhbHVlIHNxbFZhbHVlRnJvbVdhbGxUaW1l
KHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHdhbGxUaW1lKQoreworICAgIGlmICh3YWxsVGltZSkK
KyAgICAgICAgcmV0dXJuIHdhbGxUaW1lLT5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IHdhbGxUaW1lRnJvbVNRTFZhbHVlKFNRTFZhbHVlIHZhbHVlKQoreworICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gV2FsbFRpbWU6
OmZyb21SYXdTZWNvbmRzKHN0ZDo6Z2V0PGRvdWJsZT4odmFsdWUpKTsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IFB1c2hEYXRhYmFzZTo6
aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQmJiByZWNvcmQpCit7CisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYik7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIGlu
dDY0X3Qgc3Vic2NyaXB0aW9uU2V0SUQgPSAwOworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9
IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIHJvd2lkLCB3YWtlU3RhdGUgRlJPTSBTdWJzY3JpcHRp
b25TZXRzIFdIRVJFIGJ1bmRsZUlEID0gPyBBTkQgc2VjdXJpdHlPcmlnaW4gPSA/Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9S
RUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gc3FsLT5jb2x1bW5JbnQ2NCgwKTsK
KyAgICAgICAgICAgIHJlY29yZC53YWtlU3RhdGUgPSBzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRl
PihzcWwtPmNvbHVtbkludCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXN1YnNj
cmlwdGlvblNldElEKSB7CisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUyg/LCA/LCA/LCA/KSJfcyk7CisgICAgICAg
IGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0aW1lKG51bGxwdHIp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHJlY29yZC53YWtlU3RhdGUpKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IG1fZGItPmxhc3RJbnNlcnRSb3dJRCgp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKD8sID8sID8sID8sID8sID8sID8sID8sID8p
Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEs
IHRpbWUobnVsbHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
NjQoMiwgc3Vic2NyaXB0aW9uU2V0SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kVGV4dCgzLCByZWNvcmQuc2NvcGUpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5iaW5kVGV4dCg0LCByZWNvcmQuZW5kcG9pbnQpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYig1LCByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig2LCByZWNvcmQuY2xpZW50UHVi
bGljS2V5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoNywgcmVj
b3JkLmNsaWVudFByaXZhdGVLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5i
aW5kQmxvYig4LCByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRWYWx1ZSg5LCBzcWxWYWx1ZUZyb21XYWxsVGltZShyZWNvcmQuZXhw
aXJhdGlvblRpbWUpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNF
X0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICByZWNvcmQucm93SUQgPSBt
X2RiLT5sYXN0SW5zZXJ0Um93SUQoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK2Jvb2wgUHVzaERhdGFiYXNlOjpyZW1vdmVS
ZWNvcmQoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSkKK3sKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICB0cmFuc2FjdGlvbi5i
ZWdpbigpOworCisgICAgYm9vbCBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IGZhbHNlOworICAg
IGludDY0X3Qgc3Vic2NyaXB0aW9uSUQgPSAwOworICAgIGludDY0X3Qgc3Vic2NyaXB0aW9uU2V0
SUQgPSAwOworCisgICAgeworICAgICAgICAvLyBGaW5kIHRoZSBzdWJzY3JpcHRpb24gYW5kIHN1
YnNjcmlwdGlvbiBzZXQuCisgICAgICAgIC8vIEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBT
dWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBmaXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICAgICAiU0VMRUNUIHN1Yi5yb3dp
ZCwgc3Mucm93aWQiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiIKKyAgICAg
ICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAgICAgICAgICAiT04g
c3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQiCisgICAgICAgICAgICAiV0hFUkUgc3Vi
LnNjb3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8
fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgy
LCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9M
T0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3Vic2NyaXB0aW9uSUQgPSBzcWwtPmNvbHVtbkludDY0
KDApOworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICAvLyBEZWxldGUgdGhlIHN1YnNjcmlwdGlvbi4KKyAgICAg
ICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlvbnMg
V0hFUkUgcm93aWQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2
NCgxLCBzdWJzY3JpcHRpb25JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uIGluIHRoZSBzdWJzY3JpcHRpb24gc2V0
LgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIDEgRlJPTSBTdWJz
Y3JpcHRpb25zIFdIRVJFIHN1YnNjcmlwdGlvblNldElEID0gPyBMSU1JVCAxIl9zKTsKKworICAg
ICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJRCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJP
UigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaXNM
YXN0U3Vic2NyaXB0aW9uSW5TZXQgPSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpOworICAg
IH0KKworICAgIGlmIChpc0xhc3RTdWJzY3JpcHRpb25JblNldCkgeworICAgICAgICAvLyBEZWxl
dGUgdGhlIGVudGlyZSBzdWJzY3JpcHRpb24gc2V0IGlmIGl0IGlzIG5vIGxvbmdlciBhc3NvY2lh
dGVkIHdpdGggYW55IHN1YnNjcmlwdGlvbnMuCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3Rh
dGVtZW50KCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25TZXRzIFdIRVJFIHJvd2lkID0gPyJfcyk7
CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHN1YnNjcmlwdGlvblNldElE
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJF
X0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBQdXNoRGF0YWJhc2U6OmdldFJlY29y
ZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIC8v
IEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBTdWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBm
aXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgKKyAg
ICAgICAgIlNFTEVDVCIKKyAgICAgICAgIiAgICBzdWIucm93SUQsIHNzLmJ1bmRsZUlELCBzcy5z
ZWN1cml0eU9yaWdpbiwgc3ViLnNjb3BlLCBzdWIuZW5kcG9pbnQsIgorICAgICAgICAiICAgIHN1
Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3ViLmNsaWVudFBy
aXZhdGVLZXksIgorICAgICAgICAiICAgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJh
dGlvblRpbWUsIHNzLndha2VTdGF0ZSIKKyAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIi
CisgICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAgICAgICJPTiBz
dWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCIKKyAgICAgICAgIldIRVJFIHN1Yi5zY29w
ZSA9ID8gQU5EIHNzLmJ1bmRsZUlEID0gPyJfcyk7CisKKyAgICBpZiAoIXNxbCB8fCBzcWwtPmJp
bmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgyLCBidW5kbGVJ
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJFX0VS
Uk9SKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICByZWNvcmQucm93SUQgPSBzcWwtPmNvbHVtbklu
dDY0KDApOworICAgIHJlY29yZC5idW5kbGVJRCA9IHNxbC0+Y29sdW1uVGV4dCgxKTsKKyAgICBy
ZWNvcmQuc2VjdXJpdHlPcmlnaW4gPSBzcWwtPmNvbHVtblRleHQoMik7CisgICAgcmVjb3JkLnNj
b3BlID0gc3FsLT5jb2x1bW5UZXh0KDMpOworICAgIHJlY29yZC5lbmRwb2ludCA9IHNxbC0+Y29s
dW1uVGV4dCg0KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBzcWwtPmNvbHVt
bkJsb2IoNSk7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IHNxbC0+Y29sdW1uQmxvYig2
KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+Y29sdW1uQmxvYig3KTsKKyAg
ICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1uQmxvYig4KTsKKyAgICByZWNv
cmQuZXhwaXJhdGlvblRpbWUgPSB3YWxsVGltZUZyb21TUUxWYWx1ZShzcWwtPmNvbHVtblZhbHVl
KDkpKTsKKyAgICByZWNvcmQud2FrZVN0YXRlID0gc3RhdGljX2Nhc3Q8UHVzaFdha2VTdGF0ZT4o
c3FsLT5jb2x1bW5JbnQoMTApKTsKKyAgICByZXR1cm4gcmVjb3JkOworfQorCitIYXNoU2V0PGlu
dDY0X3Q+IFB1c2hEYXRhYmFzZTo6Z2V0Um93SURzKCkKK3sKKyAgICBIYXNoU2V0PGludDY0X3Q+
IHJlc3VsdDsKKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIHJvd2lkIEZS
T00gU3Vic2NyaXB0aW9ucyJfcyk7CisgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICByZXN1bHQuYWRkKHNxbC0+Y29sdW1uSW50NjQoMCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjplbnVtZXJhdGVXYWtlU3Rh
dGVzKFB1c2hXYWtlU3RhdGVzRW51bWVyYXRvciYmIGVudW1lcmF0b3IpCit7CisgICAgYXV0byBz
cWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1Qgc3MuYnVuZGxlSUQsIHN1Yi5z
Y29wZSwgc3Mud2FrZVN0YXRlIgorICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiIKKyAg
ICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyIKKyAgICAgICAgIk9OIHN1Yi5zdWJzY3Jp
cHRpb25TZXRJRCA9IHNzLnJvd2lkIl9zKTsKKworICAgIGlmICghc3FsKQorICAgICAgICByZXR1
cm47CisKKyAgICB3aGlsZSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIGJ1bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDApOworICAgICAgICBhdXRvIHNjb3BlID0g
c3FsLT5jb2x1bW5UZXh0KDEpOworICAgICAgICBhdXRvIHdha2VTdGF0ZSA9IHN0YXRpY19jYXN0
PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDIpKTsKKyAgICAgICAgZW51bWVyYXRvcihX
VEZNb3ZlKGJ1bmRsZUlEKSwgV1RGTW92ZShzY29wZSksIHdha2VTdGF0ZSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRh
YmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zOGQ3NzExYTY3ODAyMTBhNDRiNDI5NDA4ODZiMDcyMjBmNjJjM2Y2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJh
c2UuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBXYWtlIHN0YXRlIHRoYXQgYXBwbGllcyBmb3IgZGV2aWNlcyB0aGF0IHJhY2UtdG8tc2xlZXAu
CitlbnVtIGNsYXNzIFB1c2hXYWtlU3RhdGUgOiB1aW50OF90IHsKKyAgICBXYWtpbmcsIC8vIEFs
bCBwdXNoZXMgd2lsbCB3YWtlIGRldmljZS4KKyAgICBPcHBvcnR1bmlzdGljLCAvLyBMb3cgcHJp
b3JpdHkgcHVzaGVzIG1heSBub3Qgd2FrZSBkZXZpY2UuCisgICAgTm9uV2FraW5nIC8vIE5vIHB1
c2hlcyB3aWxsIHdha2UgZGV2aWNlLgorfTsKKworc3RydWN0IFB1c2hSZWNvcmQgeworICAgIGlu
dDY0X3Qgcm93SUQgeyAwIH07CisgICAgU3RyaW5nIGJ1bmRsZUlEOworICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbjsKKyAgICBTdHJpbmcgc2NvcGU7CisgICAgU3RyaW5nIGVuZHBvaW50OworICAg
IFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJWQVBJRFB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhf
dD4gY2xpZW50UHVibGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQcml2YXRlS2V5
OworICAgIFZlY3Rvcjx1aW50OF90PiBzaGFyZWRBdXRoU2VjcmV0OworICAgIHN0ZDo6b3B0aW9u
YWw8V2FsbFRpbWU+IGV4cGlyYXRpb25UaW1lIHsgfTsKKyAgICBQdXNoV2FrZVN0YXRlIHdha2VT
dGF0ZSB7IFB1c2hXYWtlU3RhdGU6Oldha2luZyB9OworfTsKKworY2xhc3MgUHVzaERhdGFiYXNl
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+IGNyZWF0ZUluTWVtb3J5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgflB1c2hE
YXRhYmFzZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3Jk
PiBpbnNlcnRSZWNvcmQoUHVzaFJlY29yZCYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHJl
bW92ZVJlY29yZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZChj
b25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIEhhc2hTZXQ8aW50NjRfdD4gZ2V0Um93SURzKCk7CisKKyAgICB1c2luZyBQdXNo
V2FrZVN0YXRlc0VudW1lcmF0b3IgPSBGdW5jdGlvbjx2b2lkKFN0cmluZyYmIGJ1bmRsZUlELCBT
dHJpbmcmJiBzY29wZSwgUHVzaFdha2VTdGF0ZSk+OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW51bWVyYXRlV2FrZVN0YXRlcyhQdXNoV2FrZVN0YXRlc0VudW1lcmF0b3ImJik7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgUHVzaERhdGFiYXNlKFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZT4mJiBkYik7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2Nv
cGUgY2FjaGVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSk7CisKKyAgICBVbmlxdWVSZWY8
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fZGI7CisgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwg
VW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fc3RhdGVtZW50czsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggYWI1MzQ5YWE4YTI4YzYyYmUwOGE4MDllZDJmNjAyZjM3ZWEx
NDVhNy4uZTc5OTM3MjEyMDcxMTExODI2ZjQ3Y2ZkNDhiYjM0NmJlODI5MjQxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTI1Nyw2ICsyNTcsNyBAQCBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvRG9jdW1l
bnRQaWN0dXJlSW5QaWN0dXJlLmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0VudGVyUGlj
dHVyZUluUGljdHVyZUV2ZW50LmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0hUTUxWaWRl
b0VsZW1lbnRQaWN0dXJlSW5QaWN0dXJlLmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL1Bp
Y3R1cmVJblBpY3R1cmVXaW5kb3cuY3BwCitNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5j
cHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVzaEV2ZW50LmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNo
TWVzc2FnZURhdGEuY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hTdWJzY3JpcHRpb24uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZWQ1YjBmZDUwYzBiZDg0YWQ4MTFlODlmZDc1NWUzYjJkNDMzMDk2MS4uYjVhYjJmYjBkOWM2
MzBhMmE5NDhjYWE0MmQyNDE5NDk4OGU1OGQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTQzMyw2ICs1NDMzLDcgQEAKIAkJ
RUIyOEVENDQyNzE3QUMxMTAwNUYwMzkzIC8qIFB1c2hTdWJzY3JpcHRpb25EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjI4RUQ0MTI3MTdBQkE5
MDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQjNDMjlCNjI3MjlDMzg4MDBGQjY1QjQgLyog
UHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCNDI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNj
cmlwdGlvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCUVCM0MyOUI3MjcyOUMzOEMwMEZCNjVCNCAv
KiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCMTI3MjlDMzZEMDBGQjY1QjQgLyogUHVz
aFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oICovOyB9OworCQlFQjlBRDhDQjI3NjQ2RTk0
MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVzaERhdGFiYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUJC
OTczODEyNzEwMDY3MTAwNzczMkVGIC8qIFB1c2hNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkI5NzM4MDI3MTAwNjU0MDA3NzMyRUYgLyog
UHVzaE1hbmFnZXIuaCAqLzsgfTsKIAkJRUJCOTczODIyNzEwMDY3NjAwNzczMkVGIC8qIFB1c2hQ
ZXJtaXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVCQjk3Mzc4MjcxMDA2NTEwMDc3MzJFRiAvKiBQdXNoUGVybWlzc2lvblN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUJCOTcz
ODMyNzEwMDY4NDAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25QdXNoQVBJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkI5NzM3QTI3
MTAwNjUyMDA3NzMyRUYgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblB1c2hBUEkuaCAqLzsg
fTsKQEAgLTE3NTYyLDYgKzE3NTYzLDggQEAKIAkJRUIzQzI5QjIyNzI5QzM2RTAwRkI2NUI0IC8q
IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFQjNDMjlCMzI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlv
bkNoYW5nZUV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQdXNoU3Vic2NyaXB0aW9u
Q2hhbmdlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjNDMjlCNDI3
MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyog
UHVzaERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1c2hEYXRh
YmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjlBRDhDQTI3NjQ2RTkxMDBE
ODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFB1c2hEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVC
Qjk3Mzc4MjcxMDA2NTEwMDc3MzJFRiAvKiBQdXNoUGVybWlzc2lvblN0YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1c2hQZXJtaXNzaW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUJCOTczN0EyNzEwMDY1MjAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25Q
dXNoQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25QdXNoQVBJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCQjk3MzdCMjcxMDA2NTIwMDc3MzJF
RiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uK1B1c2hBUEkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uK1B1c2hBUEkuaWRsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxMDE2LDYgKzIxMDE5LDggQEAKIAkJNDE4RkNCQjgyNzA2RTRCRDAwRjk2RUNBIC8q
IHB1c2gtYXBpICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlFQjlBRDhDQTI3NjQ2RTkxMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLywKKwkJCQlF
QjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggKi8sCiAJCQkJRUIwRkI2
RkQyNzBEMEFFODAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5oICovLAogCQkJCUVC
MEZCNzAwMjcwRDBBRUEwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaWRsICovLAog
CQkJCTQxOEZDQkJCMjcwNkU0RjYwMEY5NkVDQSAvKiBQdXNoRXZlbnQuY3BwICovLApAQCAtMzYz
NjYsNiArMzYzNzEsNyBAQAogCQkJCTU3MzAzQkVCMjAwOTdGNDAwMDM1NTk2NSAvKiBQdWJsaWNL
ZXlDcmVkZW50aWFsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAw
OEFBQTdBIC8qIFB1YmxpY1N1ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUx
NUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUVC
OUFEOENCMjc2NDZFOTQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUVCMEZCNzA4MjcwRDBCMTAwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxOEZDQkMxMjcwNkU0RkIwMEY5NkVDQSAvKiBQdXNoRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEZDQkMyMjcwNkU1MDEwMEY5NkVDQSAvKiBQdXNoRXZl
bnRJbml0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCBk
YzBmNTA5OGI4N2YxODQ1NTI1YmUzYzBiYTQxZjc2NzViMTQwNDdmLi4wMzQ2YzM4N2MxMmUwNTM1
MGFhNTFkNDU2ZDkyMjhlODI2NTU3NzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCkBA
IC05Niw2ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKFByaXZhdGVDbGlja01l
YXN1cmVtZW50KSBcCiAgICAgTShQcm9jZXNzKSBcCiAgICAgTShQcm9ncmVzcykgXAorICAgIE0o
UHVzaCkgXAogICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAgTShSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUpIFwKICAgICBNKFJlc291cmNlTG9hZGluZykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggNTAwMzBiNTJjMTgzYjE3M2U2OWZk
YTIxMzZhZTY2MWVmZTRjYTJlZi4uMWMwZmNlNjI4MWU2OWU3M2I0N2Y4MTM4ZTFiODBiMjM0OTc5
MzRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
Y3BwCkBAIC0xNDgsMTQgKzE0OCwxNyBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlIG9wZW5Nb2RlKQogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQgbm90IHNldCB0ZW1wX3N0b3JlIHRvIG1lbW9yeSIp
OwogICAgIH0KIAotICAgIGlmIChvcGVuTW9kZSAhPSBPcGVuTW9kZTo6UmVhZE9ubHkpCi0gICAg
ICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7Ci0KLSAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0
cmluZyhmaWxlbmFtZSwgIi1zaG0iX3MpOwotICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KHNobUZpbGVOYW1lKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVt
b3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0ZB
VUxUKFNRTERhdGFiYXNlLCAiT3BlbmVkIGFuIFNRTGl0ZSBkYXRhYmFzZSB3aXRoIGEgQ2xhc3Mg
QSAtc2htIGZpbGUuIFRoaXMgbWF5IHRyaWdnZXIgYSBjcmFzaCB3aGVuIHRoZSB1c2VyIGxvY2tz
IHRoZSBkZXZpY2UuICglcykiLCBzaG1GaWxlTmFtZS5sYXRpbjEoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5h
bWUpOworICAgIGJvb2wgaXNJbk1lbW9yeSA9IGZpbGVuYW1lID09ICI6bWVtb3J5OiJfczsKKyAg
ICBpZiAoIWlzSW5NZW1vcnkpIHsKKyAgICAgICAgaWYgKG9wZW5Nb2RlICE9IE9wZW5Nb2RlOjpS
ZWFkT25seSkKKyAgICAgICAgICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7CisKKyAgICAgICAgYXV0
byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5hbWUsICItc2htIl9zKTsKKyAgICAgICAg
aWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpKSB7CisgICAgICAgICAgICBp
ZiAoIUZpbGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkp
IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChTUUxEYXRhYmFzZSwgIk9wZW5l
ZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEgLXNobSBmaWxlLiBUaGlzIG1heSB0
cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0aGUgZGV2aWNlLiAoJXMpIiwgc2ht
RmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpt
YWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA5NmE4ZGJiODNiNzIyNjQ0ZGM2ZjAyZWEzNWYyNTkwMTdhYjljNmJm
Li5mNDA4OGVlOTA1YTY0Mzc3YjA1YjgwNTA1ODNhMDc0ODBlYzI3NDNkIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjEtMTItMTAgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hE
YXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM0MTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjEtMTItMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMu
Y2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgbmV3IHNjcmVlbiBhbmQg
d2luZG93IGNhcHR1cmUgYmFja2VuZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNzhiMzA5
YzQ1YzNhMDY0ZjI4YjA3ZGIwZmE5MDBiNDRkNzE4MjlhLi5kNjM1MWI4Yjg1MjdmNDhjYjdhYjBm
MGQ0MWI0NzE0ODA3ZGVmMDFlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTkzLDYgKzk5
Myw3IEBACiAJCUU1QUE0MkYyMjU5MTI4QUUwMDQxMEEzRCAvKiBVc2VySW50ZXJmYWNlSWRpb21V
cGRhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NUFBNDJGMTI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBkYXRlLm1tICov
OyB9OwogCQlFNUFBOEQxRDI1MTUxQ0M2MDA1MUNDNDUgLyogRGF0ZUlucHV0VGVzdHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUFBOEQxQzI1MTUx
Q0M2MDA1MUNDNDUgLyogRGF0ZUlucHV0VGVzdHMubW0gKi87IH07CiAJCUVCMjMwRDQxMjQ1RTgx
M0YwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIyMzBEM0QyNDVFNzIyRTAwQzY2QUQx
IC8qIElEQkNoZWNrcG9pbnRXQUwuaHRtbCAqLzsgfTsKKwkJRUI5QUQ4QzcyNzY0NkU3NDAwRDg5
M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFQjlBRDhDNjI3NjQ2RTczMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNw
cCAqLzsgfTsKIAkJRUNBNjgwQ0UxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVDQTY4MENE
MUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi87IH07CiAJCUY0MDEwQjgw
MjREQTI0QUMwMEE4NzZFMiAvKiBOYXZpZ2F0aW9uU3dpcGVUZXN0cy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDEwQjdGMjREQTI0QUMwMEE4NzZF
MiAvKiBOYXZpZ2F0aW9uU3dpcGVUZXN0cy5tbSAqLzsgfTsKIAkJRjQwMTBCODMyNERBMjY3RjAw
QTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQwMTBCODEyNERBMjY3RjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1t
ICovOyB9OwpAQCAtMjkyMiw2ICsyOTIzLDcgQEAKIAkJRTVBQThEMUMyNTE1MUNDNjAwNTFDQzQ1
IC8qIERhdGVJbnB1dFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0ZUlucHV0VGVz
dHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMjMwRDNEMjQ1RTcyMkUwMEM2
NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSBJREJDaGVja3BvaW50V0FMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVC
MjMwRDNFMjQ1RTcyNjMwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSURCQ2hlY2twb2ludFdBTC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hE
YXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXNoRGF0
YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQzc5RjE2OEJFNDU0RTU3
OUU0MTdCMDUgLyogTWFya2FibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWFya2FibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQ0E2ODBD
RDFFNjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RyaW5nVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGM0ZDM0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGliZ3Rlc3QuYSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IHBhdGggPSBsaWJndGVzdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwpAQCAtMzcxNyw2ICszNzE5LDcgQEAKIAkJCQlBQTk2Q0FCNDIxQzdEQjQyMDBGRDJGOTcgLyog
UGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAv
KiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAgKi8sCiAJCQkJMDQxQTFFMzMyMTZGRkRCQzAw
Nzg5RTBBIC8qIFB1YmxpY1N1ZmZpeC5jcHAgKi8sCisJCQkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5
M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8sCiAJCQkJNkI0RTg2MUIyMjIwQTU1MjAwMjJGMzg5
IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCAqLywKIAkJCQlGNDE4QkUxNDFGNzFCN0RDMDAxOTcw
RTYgLyogUm91bmRlZFJlY3RUZXN0cy5jcHAgKi8sCiAJCQkJNDE4MUM2MkMyNTVBODkxMTAwQUVC
MEZGIC8qIFJUQ1J0cFNGcmFtZVRyYW5zZm9ybWVyVGVzdHMuY3BwICovLApAQCAtNTYxMSw2ICs1
NjE0LDcgQEAKIAkJCQk0NjQ3QjEyNjFFQkEzQjg1MDA0MUQ3RUYgLyogUHJvY2Vzc0RpZFRlcm1p
bmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUMyQTg1NjI0Q0VCNjVGMDBBREJDMzUgLyog
UHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA0MUExRTM0MjE2RkZEQkMwMDc4
OUUwQSAvKiBQdWJsaWNTdWZmaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRUI5QUQ4QzcyNzY0
NkU3NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2QjRF
ODYxQzIyMjBBNTUyMDAyMkYzODkgLyogUmVnaXN0cmFibGVEb21haW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdGMEQxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlbG9hZFBhZ2VBZnRlckNyYXNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUM5MUE0MTFBN0UwMDQ0N0M0QyAvKiBSZW5k
ZXJlZEltYWdlRnJvbURPTU5vZGUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q4
MjkyNThmOTRlMTI5ZTcyOWEyN2JhNWQ0N2M3ZDY2Mzk0MmZmZQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0w
LDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUHVzaERhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisKKyNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK2NsYXNzIFB1c2hEYXRhYmFzZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7
CitwdWJsaWM6CisgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gZGI7CisKKyAgICBQ
dXNoUmVjb3JkIHJlY29yZDEgeworICAgICAgICAwLAorICAgICAgICAiY29tLmFwcGxlLlNhZmFy
aSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBz
Oi8vd3d3LmFwcGxlLmNvbS9tYWMiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEi
X3MsCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDEsIDIgfSwKKyAgICAgICAgeyAyLCAz
IH0sCisgICAgICAgIHsgNCwgNSB9LAorICAgICAgICBXYWxsVGltZTo6bm93KCksCisgICAgICAg
IFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMKKyAgICB9OworICAgIFB1c2hSZWNvcmQgcmVj
b3JkMiB7CisgICAgICAgIDAsCisgICAgICAgICJjb20uYXBwbGUud2ViYXBwIl9zLAorICAgICAg
ICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUu
Y29tL2lwaG9uZSJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MiJfcywKKyAgICAg
ICAgeyA1LCA2IH0sCisgICAgICAgIHsgNiwgNyB9LAorICAgICAgICB7IDcsIDggfSwKKyAgICAg
ICAgeyA4LCA5IH0KKyAgICB9OworICAgIFB1c2hSZWNvcmQgcmVjb3JkMyB7CisgICAgICAgIDAs
CisgICAgICAgICJjb20uYXBwbGUuU2FmYXJpIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBw
bGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJfcywKKyAg
ICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MyJfcywKKyAgICAgICAgeyA5LCAxMCB9LAorICAg
ICAgICB7IDEwLCAxMSB9LAorICAgICAgICB7IDExLCAxMiB9LAorICAgICAgICB7IDEyLCAxMyB9
CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MTsK
KyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDI7CisgICAgc3RkOjpv
cHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQzOworCisgICAgdm9pZCBTZXRVcCgpIGZp
bmFsCisgICAgeworICAgICAgICBBU1NFUlRfVFJVRShkYiA9IFB1c2hEYXRhYmFzZTo6Y3JlYXRl
SW5NZW1vcnkoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDEgPSBkYi0+aW5z
ZXJ0UmVjb3JkKFB1c2hSZWNvcmQocmVjb3JkMSkpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoaW5z
ZXJ0UmVzdWx0MiA9IGRiLT5pbnNlcnRSZWNvcmQoUHVzaFJlY29yZChyZWNvcmQyKSkpOworICAg
ICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQzID0gZGItPmluc2VydFJlY29yZChQdXNoUmVj
b3JkKHJlY29yZDMpKSk7CisgICAgfQorfTsKKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQdXNoUmVjb3JkJiBhLCBjb25zdCBQdXNoUmVjb3JkJiBiKQoreworICAgIHJldHVybiBhLnJv
d0lEID09IGIucm93SUQKKyAgICAgICAgJiYgYS5idW5kbGVJRCA9PSBiLmJ1bmRsZUlECisgICAg
ICAgICYmIGEuc2VjdXJpdHlPcmlnaW4gPT0gYi5zZWN1cml0eU9yaWdpbgorICAgICAgICAmJiBh
LnNjb3BlID09IGIuc2NvcGUKKyAgICAgICAgJiYgYS5lbmRwb2ludCA9PSBiLmVuZHBvaW50Cisg
ICAgICAgICYmIGEuc2VydmVyVkFQSURQdWJsaWNLZXkgPT0gYi5zZXJ2ZXJWQVBJRFB1YmxpY0tl
eQorICAgICAgICAmJiBhLmNsaWVudFB1YmxpY0tleSA9PSBiLmNsaWVudFB1YmxpY0tleQorICAg
ICAgICAmJiBhLmNsaWVudFByaXZhdGVLZXkgPT0gYi5jbGllbnRQcml2YXRlS2V5CisgICAgICAg
ICYmIGEuc2hhcmVkQXV0aFNlY3JldCA9PSBiLnNoYXJlZEF1dGhTZWNyZXQKKyAgICAgICAgJiYg
YS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lCisgICAgICAgICYmIGEud2FrZVN0
YXRlID09IGIud2FrZVN0YXRlOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgSW5zZXJ0
UmVjb3JkKQoreworICAgIGF1dG8gZXhwZWN0ZWRSZWNvcmQxID0gcmVjb3JkMTsKKyAgICBleHBl
Y3RlZFJlY29yZDEucm93SUQgPSAxOworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkUmVjb3JkMSA9
PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMiA9IHJlY29yZDI7
CisgICAgZXhwZWN0ZWRSZWNvcmQyLnJvd0lEID0gMjsKKyAgICBFWFBFQ1RfVFJVRShleHBlY3Rl
ZFJlY29yZDIgPT0gKmluc2VydFJlc3VsdDIpOworCisgICAgLy8gU2luY2UgcmVjb3JkMyBpcyBp
biB0aGUgc2FtZSBTdWJzY3JpcHRpb25TZXQgYXMgcmVjb3JkMSwgaXQgc2hvdWxkCisgICAgLy8g
aW5oZXJpdCByZWNvcmQxJ3Mgd2FrZSBzdGF0ZS4KKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMyA9
IHJlY29yZDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLnJvd0lEID0gMzsKKyAgICBleHBlY3RlZFJl
Y29yZDMud2FrZVN0YXRlID0gZXhwZWN0ZWRSZWNvcmQxLndha2VTdGF0ZTsKKyAgICBFWFBFQ1Rf
VFJVRShleHBlY3RlZFJlY29yZDMgPT0gKmluc2VydFJlc3VsdDMpOworCisgICAgLy8gSW5zZXJ0
aW5nIGEgcmVjb3JkIHdpdGggdGhlIHNhbWUgKGJ1bmRsZUlELCBzY29wZSkgYXMgcmVjb3JkIDEg
c2hvdWxkIGZhaWwuCisgICAgUHVzaFJlY29yZCByZWNvcmQ0ID0gcmVjb3JkMTsKKyAgICByZWNv
cmQ0LmVuZHBvaW50ID0gImh0dHBzOi8vd3d3LndlYmtpdC5vcmciX3M7CisgICAgRVhQRUNUX0ZB
TFNFKGRiLT5pbnNlcnRSZWNvcmQoV1RGTW92ZShyZWNvcmQ0KSkpOworCisgICAgRVhQRUNUX0VR
KGRiLT5nZXRSb3dJRHMoKSwgKEhhc2hTZXQ8aW50NjRfdD4geyAxLCAyLCAzIH0pKTsKK30KKwor
VEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIFJlbW92ZVJlY29yZCkKK3sKKyAgICBFWFBFQ1RfVFJV
RShkYi0+cmVtb3ZlUmVjb3JkKHJlY29yZDEuYnVuZGxlSUQsIHJlY29yZDEuc2NvcGUpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoZGItPnJlbW92ZVJlY29yZChyZWNvcmQxLmJ1bmRsZUlELCByZWNvcmQx
LnNjb3BlKSk7CisgICAgRVhQRUNUX0VRKGRiLT5nZXRSb3dJRHMoKSwgKEhhc2hTZXQ8aW50NjRf
dD4geyAyLCAzIH0pKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFJlY29yZCkK
K3sKKyAgICBhdXRvIHJlc3VsdDEgPSBkYi0+Z2V0UmVjb3JkKHJlY29yZDEuYnVuZGxlSUQsIHJl
Y29yZDEuc2NvcGUpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdDEpOworICAgIEVYUEVDVF9UUlVF
KCpyZXN1bHQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8gcmVzdWx0MiA9IGRiLT5n
ZXRSZWNvcmQocmVjb3JkMS5idW5kbGVJRCwgImZvbyJfcyk7CisgICAgRVhQRUNUX0ZBTFNFKHJl
c3VsdDIpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgRW51bWVyYXRlV2FrZVN0YXRl
cykKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgUHVzaFdha2VTdGF0ZT4gZXhwZWN0ZWRXYWtlU3Rh
dGVzIHsKKyAgICAgICAgeyAiY29tLmFwcGxlLlNhZmFyaTpodHRwczovL3d3dy5hcHBsZS5jb20v
bWFjIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9LAorICAgICAgICB7ICJjb20uYXBw
bGUud2ViYXBwOmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiLCBQdXNoV2FrZVN0YXRlOjpX
YWtpbmcgfSwKKyAgICAgICAgeyAiY29tLmFwcGxlLlNhZmFyaTpodHRwczovL3d3dy5hcHBsZS5j
b20vaXBob25lIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9CisgICAgfTsKKyAgICBI
YXNoTWFwPFN0cmluZywgUHVzaFdha2VTdGF0ZT4gYWN0dWFsV2FrZVN0YXRlczsKKworICAgIGRi
LT5lbnVtZXJhdGVXYWtlU3RhdGVzKFsmYWN0dWFsV2FrZVN0YXRlc10oU3RyaW5nJiYgYnVuZGxl
SUQsIFN0cmluZyYmIHNjb3BlLCBQdXNoV2FrZVN0YXRlIHN0YXRlKSB7CisgICAgICAgIGFjdHVh
bFdha2VTdGF0ZXMuYWRkKGJ1bmRsZUlEICsgIjoiX3MgKyBzY29wZSwgc3RhdGUpOworICAgIH0p
OworCisgICAgRVhQRUNUX0VRKGV4cGVjdGVkV2FrZVN0YXRlcywgYWN0dWFsV2FrZVN0YXRlcyk7
Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBTdGFydHNGcm9tU2NyYXRjaE9uRG93bmdy
YWRlKQoreworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7CisgICAg
YXV0byBwYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoIlB1c2hEYXRhYmFzZSIs
IGhhbmRsZSwgIi5kYiIpOworICAgIEFTU0VSVF9UUlVFKEZpbGVTeXN0ZW06OmlzSGFuZGxlVmFs
aWQoaGFuZGxlKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICB7
CisgICAgICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAgICAgICBkYi5vcGVuKHBhdGgpOworICAg
ICAgICBBU1NFUlRfVFJVRShkYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIHVzZXJfdmVyc2lvbiA9
IDEwMDAwMCJfcykpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBjcmVhdGVSZXN1bHQg
PSBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY3JlYXRl
UmVzdWx0KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAg
ICAgICBkYi5vcGVuKHBhdGgpOworICAgICAgICB7CisgICAgICAgICAgICBpbnQgdmVyc2lvbiA9
IDA7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSB1
c2VyX3ZlcnNpb24iX3MpOworICAgICAgICAgICAgaWYgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsK
KyAgICAgICAgICAgIEVYUEVDVF9HVCh2ZXJzaW9uLCAwKTsKKyAgICAgICAgICAgIEVYUEVDVF9M
VCh2ZXJzaW9uLCAxMDAwMDApOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisK
</data>
<flag name="commit-queue"
          id="472363"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446864</attachid>
            <date>2021-12-10 22:53:02 -0800</date>
            <delta_ts>2021-12-11 12:28:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20211210225301.patch</filename>
            <type>text/plain</type>
            <size>38994</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg5NDJkODVhYjQ2YTE3
YTdmNTI3N2U1MjI1Y2E1ZTA2MTY0ZjU3Ny4uMzllODllOWIxMjFiNTJjNDVlMmZjYWE5MzkzYzU0
Y2M3ODlkMzYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTEyLTEwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
cHVzaC1hcGkvUHVzaERhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKwogMjAyMS0x
Mi0xMCAgQWxleGV5IFNodmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0
dGluZyAib25zZWxlY3Rpb25jaGFuZ2UiIGNvbnRlbnQgYXR0cmlidXRlIHNob3VsZCBhZGQgYW4g
ZXZlbnQgbGlzdGVuZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGRhMjdhMmVjY2MwMGU1YmVjY2Vm
NDRiMDVhN2RhZjA5YTBlYTIzOTcuLmJiMzU1MTRmOTRhM2E1Mjk3YmJhMjA1NWUyOTVlNjc2MmQ0
MzAwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMjkwLDYgKzI5MCw3IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBNb2R1bGVzL3Blcm1pc3Npb25zL1Blcm1p
c3Npb25PYnNlcnZlci5oCiAgICAgTW9kdWxlcy9wZXJtaXNzaW9ucy9QZXJtaXNzaW9uU3RhdGUu
aAogCisgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAogICAgIE1vZHVsZXMvcHVz
aC1hcGkvUHVzaFBlcm1pc3Npb25TdGF0ZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vi
c2NyaXB0aW9uRGF0YS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkv
UHVzaERhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjExZDM0NzBkZGNiMDNkZTVkYzQ2NDdlYjBm
ZGVlYjMyZDkzNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
dXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1c2hEYXRhYmFzZS5oIgorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0
ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgorCisjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPRyhmbXQsIC4uLikg
UkVMRUFTRV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIgZm10LCB0aGlzLCAjI19f
VkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpIFBV
U0hEQl9SRUxFQVNFX0xPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgYW5kIGJpbmQgc3RhdGVt
ZW50ICglZCk6ICVzIiwgbV9kYi0+bGFzdEVycm9yKCksIG1fZGItPmxhc3RFcnJvck1zZygpKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1cnJlbnRQdXNo
RGF0YWJhc2VWZXJzaW9uID0gMTsKKworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBwdXNoRGF0
YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKKyAgICAiUFJBR01BIGF1dG9fdmFjdXVtPUlO
Q1JFTUVOVEFMIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0cygiCisgICAg
IiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgYnVuZGxlSUQgVEVYVCBOT1Qg
TlVMTCwiCisgICAgIiAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgd2Fr
ZVN0YXRlIElOVCBOT1QgTlVMTCwiCisgICAgIiAgVU5JUVVFKGJ1bmRsZUlELCBzZWN1cml0eU9y
aWdpbikpIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucygiCisgICAgIiAgY3Jl
YXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc3Vic2NyaXB0aW9uU2V0SUQgSU5UIE5P
VCBOVUxMLCIKKyAgICAiICBzY29wZSBURVhUIE5PVCBOVUxMLCIKKyAgICAiICBlbmRwb2ludCBU
RVhUIE5PVCBOVUxMLCIKKyAgICAiICBzZXJ2ZXJWQVBJRFB1YmxpY0tleSBCTE9CIE5PVCBOVUxM
LCIKKyAgICAiICBjbGllbnRQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAgY2xpZW50
UHJpdmF0ZUtleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAiICBzaGFyZWRBdXRoU2VjcmV0IEJMT0Ig
Tk9UIE5VTEwsIgorICAgICIgIGV4cGlyYXRpb25UaW1lIElOVCwiCisgICAgIiAgVU5JUVVFKHNj
b3BlLCBzdWJzY3JpcHRpb25TZXRJRCkpIl9zLAorICAgICJDUkVBVEUgSU5ERVggU3Vic2NyaXB0
aW9uc19TdWJzY3JpcHRpb25TZXRJRF9JbmRleCBPTiBTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlv
blNldElEKSJfcywKKyAgICAiUFJBR01BIHVzZXJfdmVyc2lvbiA9IDEiX3MKK307CisKK3N0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGggPT0gIjptZW1vcnk6Il9zIHx8ICFT
UUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUocGF0aCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gUHVzaERhdGFiYXNlOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoICE9ICI6bWVtb3J5OiJfcyAmJiAhRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKSAmJiAhRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVz
KEZpbGVTeXN0ZW06OnBhcmVudFBhdGgocGF0aCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJDb3VsZG4ndCBjcmVhdGUgUHVzaERhdGFiYXNlIHBhcmVudCBkaXJlY3Rvcmll
cyBmb3IgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGF1dG8gZGIgPSBtYWtlVW5pcXVlUmVmPFNRTGl0ZURhdGFiYXNl
PigpOworICAgIGlmICghZGItPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IG9wZW4gZGF0YWJhc2UgZmlsZSBhdCBwYXRoICVzIiwgcGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaW50
IHZlcnNpb24gPSAwOworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBkYi0+cHJlcGFyZVN0YXRl
bWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1
c2gsICJDb3VsZG4ndCBnZXQgZGF0YWJhc2UgdmVyc2lvbiBhdCBwYXRoICVzIiwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIHZlcnNpb24gPSBzcWwtPmNvbHVtbkludCgwKTsKKyAgICB9CisKKyAgICBpZiAodmVyc2lv
biA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFB1c2gsICJGb3VuZCBuZXdlciBkYXRhYmFzZSB2ZXJzaW9uIHRoYW4gZXhwZWN0ZWQsIHN0
YXJ0aW5nIGZyb20gc2NyYXRjaDogJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBk
Yi0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNlKHBhdGgp
OworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24p
IHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oZGIpOworICAgICAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogcHVz
aERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICBpZiAoIWRiLT5leGVj
dXRlQ29tbWFuZChzdGF0ZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoUHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBkYXRhYmFzZSBzY2hlbWEgZm9yIHN0YXRlbWVudCAl
cyBhdCBwYXRoICVzIiwgc3RhdGVtZW50LmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0KKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPihuZXcgUHVzaERhdGFiYXNlKFdURk1vdmUo
ZGIpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IFB1c2hEYXRhYmFzZTo6
Y3JlYXRlSW5NZW1vcnkoKQoreworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZSgiOm1l
bW9yeToiX3MpOworfQorCitQdXNoRGF0YWJhc2U6OlB1c2hEYXRhYmFzZShVbmlxdWVSZWY8U1FM
aXRlRGF0YWJhc2U+JiYgZGIpCisgICAgOiBtX2RiKFdURk1vdmUoZGIpKQoreworfQorCitQdXNo
RGF0YWJhc2U6On5QdXNoRGF0YWJhc2UoKSA9IGRlZmF1bHQ7CisKK1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIFB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBx
dWVyeSkKK3sKKyAgICBhdXRvIGl0ID0gbV9zdGF0ZW1lbnRzLmZpbmQocXVlcnkpOworICAgIGlm
IChpdCAhPSBtX3N0YXRlbWVudHMuZW5kKCkpCisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZShpdC0+dmFsdWUucHRyKCkpOworCisgICAgYXV0byByZXN1bHQgPSBt
X2RiLT5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKCJGYWlsZWQgd2l0aCAlZCBwcmVwYXJpbmcg
c3RhdGVtZW50OiAlIiBQVUJMSUNfTE9HX1NUUklORywgcmVzdWx0LmVycm9yKCksIHF1ZXJ5LmNo
YXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZShudWxscHRyKTsKKyAgICB9CisKKyAgICBhdXRvIHJlZiA9IFdURk1vdmUoKnJlc3VsdCk7Cisg
ICAgYXV0byBzdGF0ZW1lbnQgPSByZWYucHRyKCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChxdWVy
eSwgV1RGTW92ZShyZWYpKTsKKyAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2Nv
cGUoc3RhdGVtZW50KTsKK30KKworc3RhdGljIFNRTFZhbHVlIHNxbFZhbHVlRnJvbVdhbGxUaW1l
KHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHdhbGxUaW1lKQoreworICAgIGlmICh3YWxsVGltZSkK
KyAgICAgICAgcmV0dXJuIHdhbGxUaW1lLT5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IHdhbGxUaW1lRnJvbVNRTFZhbHVlKFNRTFZhbHVlIHZhbHVlKQoreworICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFsdWUpKQorICAgICAgICByZXR1cm4gV2FsbFRpbWU6
OmZyb21SYXdTZWNvbmRzKHN0ZDo6Z2V0PGRvdWJsZT4odmFsdWUpKTsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IFB1c2hEYXRhYmFzZTo6
aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQmJiByZWNvcmQpCit7CisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYik7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIGlu
dDY0X3Qgc3Vic2NyaXB0aW9uU2V0SUQgPSAwOworCisgICAgeworICAgICAgICBhdXRvIHNxbCA9
IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIHJvd2lkLCB3YWtlU3RhdGUgRlJPTSBTdWJzY3JpcHRp
b25TZXRzIFdIRVJFIGJ1bmRsZUlEID0gPyBBTkQgc2VjdXJpdHlPcmlnaW4gPSA/Il9zKTsKKyAg
ICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9S
RUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gc3FsLT5jb2x1bW5JbnQ2NCgwKTsK
KyAgICAgICAgICAgIHJlY29yZC53YWtlU3RhdGUgPSBzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRl
PihzcWwtPmNvbHVtbkludCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXN1YnNj
cmlwdGlvblNldElEKSB7CisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50KCJJTlNF
UlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUyg/LCA/LCA/LCA/KSJfcyk7CisgICAgICAg
IGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0aW1lKG51bGxwdHIp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgcmVjb3JkLmJ1
bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHJlY29yZC53YWtlU3RhdGUpKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IG1fZGItPmxhc3RJbnNlcnRSb3dJRCgp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIklO
U0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKD8sID8sID8sID8sID8sID8sID8sID8sID8p
Il9zKTsKKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEs
IHRpbWUobnVsbHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
NjQoMiwgc3Vic2NyaXB0aW9uU2V0SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kVGV4dCgzLCByZWNvcmQuc2NvcGUpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3FsLT5iaW5kVGV4dCg0LCByZWNvcmQuZW5kcG9pbnQpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYig1LCByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig2LCByZWNvcmQuY2xpZW50UHVi
bGljS2V5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoNywgcmVj
b3JkLmNsaWVudFByaXZhdGVLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5i
aW5kQmxvYig4LCByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRWYWx1ZSg5LCBzcWxWYWx1ZUZyb21XYWxsVGltZShyZWNvcmQuZXhw
aXJhdGlvblRpbWUpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNF
X0xPR19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICByZWNvcmQucm93SUQgPSBt
X2RiLT5sYXN0SW5zZXJ0Um93SUQoKTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlY29yZCk7Cit9CisKK2Jvb2wgUHVzaERhdGFiYXNl
OjpyZW1vdmVSZWNvcmQoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29w
ZSkKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCisgICAgYm9vbCBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IGZh
bHNlOworICAgIGludDY0X3Qgc3Vic2NyaXB0aW9uSUQgPSAwOworICAgIGludDY0X3Qgc3Vic2Ny
aXB0aW9uU2V0SUQgPSAwOworCisgICAgeworICAgICAgICAvLyBGaW5kIHRoZSBzdWJzY3JpcHRp
b24gYW5kIHN1YnNjcmlwdGlvbiBzZXQuCisgICAgICAgIC8vIEZvcmNlIFNRTGl0ZSB0byBjb25z
dWx0IHRoZSBTdWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBmaXJzdCB2aWEgQ1JPU1MgSk9JTi4K
KyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICAgICAiU0VMRUNU
IHN1Yi5yb3dpZCwgc3Mucm93aWQiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1
YiIKKyAgICAgICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAgICAg
ICAgICAiT04gc3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQiCisgICAgICAgICAgICAi
V0hFUkUgc3ViLnNjb3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBp
ZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5i
aW5kVGV4dCgyLCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3Vic2NyaXB0aW9uSUQgPSBzcWwtPmNv
bHVtbkludDY0KDApOworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50
NjQoMSk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBEZWxldGUgdGhlIHN1YnNjcmlwdGlv
bi4KKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN1YnNj
cmlwdGlvbnMgV0hFUkUgcm93aWQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwt
PmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAg
ICBQVVNIREJfUkVMRUFTRV9MT0dfUFJFUEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9E
T05FKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uIGluIHRoZSBzdWJzY3Jp
cHRpb24gc2V0LgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIDEg
RlJPTSBTdWJzY3JpcHRpb25zIFdIRVJFIHN1YnNjcmlwdGlvblNldElEID0gPyBMSU1JVCAxIl9z
KTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25T
ZXRJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfUFJF
UEFSRV9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaXNMYXN0U3Vic2NyaXB0aW9uSW5TZXQgPSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX0RP
TkUpOworICAgIH0KKworICAgIGlmIChpc0xhc3RTdWJzY3JpcHRpb25JblNldCkgeworICAgICAg
ICAvLyBEZWxldGUgdGhlIGVudGlyZSBzdWJzY3JpcHRpb24gc2V0IGlmIGl0IGlzIG5vIGxvbmdl
ciBhc3NvY2lhdGVkIHdpdGggYW55IHN1YnNjcmlwdGlvbnMuCisgICAgICAgIGF1dG8gc3FsID0g
Y2FjaGVkU3RhdGVtZW50KCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25TZXRzIFdIRVJFIHJvd2lk
ID0gPyJfcyk7CisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHN1YnNjcmlw
dGlvblNldElEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xP
R19QUkVQQVJFX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBQdXNoRGF0YWJhc2U6
OmdldFJlY29yZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQor
eworICAgIC8vIEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBTdWJzY3JpcHRpb25zKHNjb3Bl
KSBpbmRleCBmaXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRl
bWVudCgKKyAgICAgICAgIlNFTEVDVCIKKyAgICAgICAgIiAgICBzdWIucm93SUQsIHNzLmJ1bmRs
ZUlELCBzcy5zZWN1cml0eU9yaWdpbiwgc3ViLnNjb3BlLCBzdWIuZW5kcG9pbnQsIgorICAgICAg
ICAiICAgIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3Vi
LmNsaWVudFByaXZhdGVLZXksIgorICAgICAgICAiICAgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBz
dWIuZXhwaXJhdGlvblRpbWUsIHNzLndha2VTdGF0ZSIKKyAgICAgICAgIkZST00gU3Vic2NyaXB0
aW9ucyBzdWIiCisgICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MiCisgICAg
ICAgICJPTiBzdWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCIKKyAgICAgICAgIldIRVJF
IHN1Yi5zY29wZSA9ID8gQU5EIHNzLmJ1bmRsZUlEID0gPyJfcyk7CisKKyAgICBpZiAoIXNxbCB8
fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgy
LCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19Q
UkVQQVJFX0VSUk9SKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICByZWNvcmQucm93SUQgPSBzcWwt
PmNvbHVtbkludDY0KDApOworICAgIHJlY29yZC5idW5kbGVJRCA9IHNxbC0+Y29sdW1uVGV4dCgx
KTsKKyAgICByZWNvcmQuc2VjdXJpdHlPcmlnaW4gPSBzcWwtPmNvbHVtblRleHQoMik7CisgICAg
cmVjb3JkLnNjb3BlID0gc3FsLT5jb2x1bW5UZXh0KDMpOworICAgIHJlY29yZC5lbmRwb2ludCA9
IHNxbC0+Y29sdW1uVGV4dCg0KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBz
cWwtPmNvbHVtbkJsb2IoNSk7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IHNxbC0+Y29s
dW1uQmxvYig2KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+Y29sdW1uQmxv
Yig3KTsKKyAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1uQmxvYig4KTsK
KyAgICByZWNvcmQuZXhwaXJhdGlvblRpbWUgPSB3YWxsVGltZUZyb21TUUxWYWx1ZShzcWwtPmNv
bHVtblZhbHVlKDkpKTsKKyAgICByZWNvcmQud2FrZVN0YXRlID0gc3RhdGljX2Nhc3Q8UHVzaFdh
a2VTdGF0ZT4oc3FsLT5jb2x1bW5JbnQoMTApKTsKKyAgICByZXR1cm4gcmVjb3JkOworfQorCitI
YXNoU2V0PGludDY0X3Q+IFB1c2hEYXRhYmFzZTo6Z2V0Um93SURzKCkKK3sKKyAgICBIYXNoU2V0
PGludDY0X3Q+IHJlc3VsdDsKKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNU
IHJvd2lkIEZST00gU3Vic2NyaXB0aW9ucyJfcyk7CisgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHQuYWRkKHNxbC0+Y29sdW1uSW50NjQo
MCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjplbnVtZXJh
dGVXYWtlU3RhdGVzKFB1c2hXYWtlU3RhdGVzRW51bWVyYXRvciYmIGVudW1lcmF0b3IpCit7Cisg
ICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1Qgc3MuYnVuZGxl
SUQsIHN1Yi5zY29wZSwgc3Mud2FrZVN0YXRlIgorICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25z
IHN1YiIKKyAgICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyIKKyAgICAgICAgIk9OIHN1
Yi5zdWJzY3JpcHRpb25TZXRJRCA9IHNzLnJvd2lkIl9zKTsKKworICAgIGlmICghc3FsKQorICAg
ICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewor
ICAgICAgICBhdXRvIGJ1bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDApOworICAgICAgICBhdXRv
IHNjb3BlID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgICAgICBhdXRvIHdha2VTdGF0ZSA9IHN0
YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDIpKTsKKyAgICAgICAgZW51
bWVyYXRvcihXVEZNb3ZlKGJ1bmRsZUlEKSwgV1RGTW92ZShzY29wZSksIHdha2VTdGF0ZSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0
YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zOGQ3NzExYTY3ODAyMTBhNDRiNDI5NDA4ODZiMDcyMjBmNjJj
M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9Q
dXNoRGF0YWJhc2UuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBXYWtlIHN0YXRlIHRoYXQgYXBwbGllcyBmb3IgZGV2aWNlcyB0aGF0IHJhY2Ut
dG8tc2xlZXAuCitlbnVtIGNsYXNzIFB1c2hXYWtlU3RhdGUgOiB1aW50OF90IHsKKyAgICBXYWtp
bmcsIC8vIEFsbCBwdXNoZXMgd2lsbCB3YWtlIGRldmljZS4KKyAgICBPcHBvcnR1bmlzdGljLCAv
LyBMb3cgcHJpb3JpdHkgcHVzaGVzIG1heSBub3Qgd2FrZSBkZXZpY2UuCisgICAgTm9uV2FraW5n
IC8vIE5vIHB1c2hlcyB3aWxsIHdha2UgZGV2aWNlLgorfTsKKworc3RydWN0IFB1c2hSZWNvcmQg
eworICAgIGludDY0X3Qgcm93SUQgeyAwIH07CisgICAgU3RyaW5nIGJ1bmRsZUlEOworICAgIFN0
cmluZyBzZWN1cml0eU9yaWdpbjsKKyAgICBTdHJpbmcgc2NvcGU7CisgICAgU3RyaW5nIGVuZHBv
aW50OworICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJWQVBJRFB1YmxpY0tleTsKKyAgICBWZWN0
b3I8dWludDhfdD4gY2xpZW50UHVibGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQ
cml2YXRlS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBzaGFyZWRBdXRoU2VjcmV0OworICAgIHN0
ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IGV4cGlyYXRpb25UaW1lIHsgfTsKKyAgICBQdXNoV2FrZVN0
YXRlIHdha2VTdGF0ZSB7IFB1c2hXYWtlU3RhdGU6Oldha2luZyB9OworfTsKKworY2xhc3MgUHVz
aERhdGFiYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZUluTWVtb3J5KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgflB1c2hEYXRhYmFzZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBpbnNlcnRSZWNvcmQoUHVzaFJlY29yZCYmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIHJlbW92ZVJlY29yZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcm
IHNjb3BlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdl
dFJlY29yZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8aW50NjRfdD4gZ2V0Um93SURzKCk7CisKKyAgICB1
c2luZyBQdXNoV2FrZVN0YXRlc0VudW1lcmF0b3IgPSBGdW5jdGlvbjx2b2lkKFN0cmluZyYmIGJ1
bmRsZUlELCBTdHJpbmcmJiBzY29wZSwgUHVzaFdha2VTdGF0ZSk+OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW51bWVyYXRlV2FrZVN0YXRlcyhQdXNoV2FrZVN0YXRlc0VudW1lcmF0b3ImJik7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUHVzaERhdGFiYXNlKFVuaXF1ZVJlZjxXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZT4mJiBkYik7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50KEFTQ0lJTGl0ZXJhbCBxdWVyeSk7CisKKyAgICBV
bmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fZGI7CisgICAgSGFzaE1hcDxjb25z
dCBjaGFyKiwgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fc3RhdGVtZW50
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYWI1MzQ5YWE4YTI4YzYyYmUwOGE4MDllZDJm
NjAyZjM3ZWExNDVhNy4uZTc5OTM3MjEyMDcxMTExODI2ZjQ3Y2ZkNDhiYjM0NmJlODI5MjQxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTI1Nyw2ICsyNTcsNyBAQCBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1
cmUvRG9jdW1lbnRQaWN0dXJlSW5QaWN0dXJlLmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJl
L0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJl
L0hUTUxWaWRlb0VsZW1lbnRQaWN0dXJlSW5QaWN0dXJlLmNwcAogTW9kdWxlcy9waWN0dXJlaW5w
aWN0dXJlL1BpY3R1cmVJblBpY3R1cmVXaW5kb3cuY3BwCitNb2R1bGVzL3B1c2gtYXBpL1B1c2hE
YXRhYmFzZS5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVzaEV2ZW50LmNwcAogTW9kdWxlcy9wdXNo
LWFwaS9QdXNoTWVzc2FnZURhdGEuY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hTdWJzY3JpcHRp
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZWQ1YjBmZDUwYzBiZDg0YWQ4MTFlODlmZDc1NWUzYjJkNDMzMDk2MS4uYjVh
YjJmYjBkOWM2MzBhMmE5NDhjYWE0MmQyNDE5NDk4OGU1OGQ0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTQzMyw2ICs1NDMz
LDcgQEAKIAkJRUIyOEVENDQyNzE3QUMxMTAwNUYwMzkzIC8qIFB1c2hTdWJzY3JpcHRpb25EYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjI4RUQ0
MTI3MTdBQkE5MDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQjNDMjlCNjI3MjlDMzg4MDBG
QjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCNDI3MjlDMzZFMDBGQjY1QjQgLyog
UHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCUVCM0MyOUI3MjcyOUMzOEMw
MEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCMTI3MjlDMzZEMDBGQjY1
QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oICovOyB9OworCQlFQjlBRDhD
QjI3NjQ2RTk0MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVz
aERhdGFiYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRUJCOTczODEyNzEwMDY3MTAwNzczMkVGIC8qIFB1c2hNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkI5NzM4MDI3MTAwNjU0MDA3
NzMyRUYgLyogUHVzaE1hbmFnZXIuaCAqLzsgfTsKIAkJRUJCOTczODIyNzEwMDY3NjAwNzczMkVG
IC8qIFB1c2hQZXJtaXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEVCQjk3Mzc4MjcxMDA2NTEwMDc3MzJFRiAvKiBQdXNoUGVybWlzc2lv
blN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRUJCOTczODMyNzEwMDY4NDAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25Q
dXNoQVBJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
QkI5NzM3QTI3MTAwNjUyMDA3NzMyRUYgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblB1c2hB
UEkuaCAqLzsgfTsKQEAgLTE3NTYyLDYgKzE3NTYzLDggQEAKIAkJRUIzQzI5QjIyNzI5QzM2RTAw
RkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFQjNDMjlCMzI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1
YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQdXNoU3Vi
c2NyaXB0aW9uQ2hhbmdlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
QjNDMjlCNDI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VF
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjlBRDhDODI3NjQ2RTkwMDBE
ODkzQTQgLyogUHVzaERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFB1c2hEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjlBRDhDQTI3
NjQ2RTkxMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFB1c2hEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUVCQjk3Mzc4MjcxMDA2NTEwMDc3MzJFRiAvKiBQdXNoUGVybWlzc2lvblN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFB1c2hQZXJtaXNzaW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRUJCOTczN0EyNzEwMDY1MjAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25QdXNoQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25QdXNoQVBJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCQjk3MzdCMjcxMDA2
NTIwMDc3MzJFRiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uK1B1c2hBUEkuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
ICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uK1B1c2hBUEkuaWRsIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIxMDE2LDYgKzIxMDE5LDggQEAKIAkJNDE4RkNCQjgyNzA2RTRCRDAw
Rjk2RUNBIC8qIHB1c2gtYXBpICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlFQjlBRDhDQTI3NjQ2RTkxMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCAq
LywKKwkJCQlFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggKi8sCiAJ
CQkJRUIwRkI2RkQyNzBEMEFFODAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5oICov
LAogCQkJCUVCMEZCNzAwMjcwRDBBRUEwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5hbWUu
aWRsICovLAogCQkJCTQxOEZDQkJCMjcwNkU0RjYwMEY5NkVDQSAvKiBQdXNoRXZlbnQuY3BwICov
LApAQCAtMzYzNjYsNiArMzYzNzEsNyBAQAogCQkJCTU3MzAzQkVCMjAwOTdGNDAwMDM1NTk2NSAv
KiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAx
NkIwQTJEMzAwOEFBQTdBIC8qIFB1YmxpY1N1ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBG
QjA4NEIxNEUxNUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCUVCOUFEOENCMjc2NDZFOTQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUVCMEZCNzA4MjcwRDBCMTAwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktl
eU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEZDQkMxMjcwNkU0RkIwMEY5NkVDQSAvKiBQ
dXNoRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEZDQkMyMjcwNkU1MDEwMEY5NkVDQSAv
KiBQdXNoRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcu
aAppbmRleCBkYzBmNTA5OGI4N2YxODQ1NTI1YmUzYzBiYTQxZjc2NzViMTQwNDdmLi4wMzQ2YzM4
N2MxMmUwNTM1MGFhNTFkNDU2ZDkyMjhlODI2NTU3NzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9n
Z2luZy5oCkBAIC05Niw2ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKFByaXZh
dGVDbGlja01lYXN1cmVtZW50KSBcCiAgICAgTShQcm9jZXNzKSBcCiAgICAgTShQcm9ncmVzcykg
XAorICAgIE0oUHVzaCkgXAogICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBcCiAgICAgTShSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUpIFwKICAgICBNKFJlc291cmNlTG9hZGluZykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5kZXggNTAwMzBiNTJjMTgz
YjE3M2U2OWZkYTIxMzZhZTY2MWVmZTRjYTJlZi4uMWMwZmNlNjI4MWU2OWU3M2I0N2Y4MTM4ZTFi
ODBiMjM0OTc5MzRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuY3BwCkBAIC0xNDgsMTQgKzE0OCwxNyBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjpv
cGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlIG9wZW5Nb2RlKQogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQgbm90IHNldCB0ZW1wX3N0b3JlIHRv
IG1lbW9yeSIpOwogICAgIH0KIAotICAgIGlmIChvcGVuTW9kZSAhPSBPcGVuTW9kZTo6UmVhZE9u
bHkpCi0gICAgICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7Ci0KLSAgICBhdXRvIHNobUZpbGVOYW1l
ID0gbWFrZVN0cmluZyhmaWxlbmFtZSwgIi1zaG0iX3MpOwotICAgIGlmIChGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHNobUZpbGVOYW1lKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzU2Fm
ZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0ZBVUxUKFNRTERhdGFiYXNlLCAiT3BlbmVkIGFuIFNRTGl0ZSBkYXRhYmFzZSB3aXRo
IGEgQ2xhc3MgQSAtc2htIGZpbGUuIFRoaXMgbWF5IHRyaWdnZXIgYSBjcmFzaCB3aGVuIHRoZSB1
c2VyIGxvY2tzIHRoZSBkZXZpY2UuICglcykiLCBzaG1GaWxlTmFtZS5sYXRpbjEoKS5kYXRhKCkp
OwotICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgo
c2htRmlsZU5hbWUpOworICAgIGJvb2wgaXNJbk1lbW9yeSA9IGZpbGVuYW1lID09ICI6bWVtb3J5
OiJfczsKKyAgICBpZiAoIWlzSW5NZW1vcnkpIHsKKyAgICAgICAgaWYgKG9wZW5Nb2RlICE9IE9w
ZW5Nb2RlOjpSZWFkT25seSkKKyAgICAgICAgICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7CisKKyAg
ICAgICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5hbWUsICItc2htIl9zKTsK
KyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpKSB7CisgICAg
ICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1G
aWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChTUUxEYXRhYmFz
ZSwgIk9wZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEgLXNobSBmaWxlLiBU
aGlzIG1heSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0aGUgZGV2aWNlLiAo
JXMpIiwgc2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBGaWxl
U3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NmE4ZGJiODNiNzIyNjQ0ZGM2ZjAyZWEzNWYyNTkw
MTdhYjljNmJmLi5mNDA4OGVlOTA1YTY0Mzc3YjA1YjgwNTA1ODNhMDc0ODBlYzI3NDNkIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjEtMTItMTAgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIFB1c2hEYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0MTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFi
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjEtMTItMTAgIEVyaWMgQ2FybHNv
biAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgbmV3IHNj
cmVlbiBhbmQgd2luZG93IGNhcHR1cmUgYmFja2VuZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAxNzhiMzA5YzQ1YzNhMDY0ZjI4YjA3ZGIwZmE5MDBiNDRkNzE4MjlhLi5kNjM1MWI4Yjg1Mjdm
NDhjYjdhYjBmMGQ0MWI0NzE0ODA3ZGVmMDFlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
OTkzLDYgKzk5Myw3IEBACiAJCUU1QUE0MkYyMjU5MTI4QUUwMDQxMEEzRCAvKiBVc2VySW50ZXJm
YWNlSWRpb21VcGRhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNUFBNDJGMTI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBk
YXRlLm1tICovOyB9OwogCQlFNUFBOEQxRDI1MTUxQ0M2MDA1MUNDNDUgLyogRGF0ZUlucHV0VGVz
dHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUFB
OEQxQzI1MTUxQ0M2MDA1MUNDNDUgLyogRGF0ZUlucHV0VGVzdHMubW0gKi87IH07CiAJCUVCMjMw
RDQxMjQ1RTgxM0YwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIyMzBEM0QyNDVFNzIy
RTAwQzY2QUQxIC8qIElEQkNoZWNrcG9pbnRXQUwuaHRtbCAqLzsgfTsKKwkJRUI5QUQ4QzcyNzY0
NkU3NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjlBRDhDNjI3NjQ2RTczMDBEODkzQTQgLyogUHVzaERh
dGFiYXNlLmNwcCAqLzsgfTsKIAkJRUNBNjgwQ0UxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0
aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi87IH07CiAJ
CUY0MDEwQjgwMjREQTI0QUMwMEE4NzZFMiAvKiBOYXZpZ2F0aW9uU3dpcGVUZXN0cy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDEwQjdGMjREQTI0
QUMwMEE4NzZFMiAvKiBOYXZpZ2F0aW9uU3dpcGVUZXN0cy5tbSAqLzsgfTsKIAkJRjQwMTBCODMy
NERBMjY3RjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwMTBCODEyNERBMjY3RjAwQTg3NkUyIC8qIFBvc2VB
c0NsYXNzLm1tICovOyB9OwpAQCAtMjkyMiw2ICsyOTIzLDcgQEAKIAkJRTVBQThEMUMyNTE1MUND
NjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0
ZUlucHV0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMjMwRDNEMjQ1
RTcyMkUwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSBJREJDaGVja3BvaW50V0FMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSURCQ2hlY2twb2ludFdBTC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0
IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQzc5RjE2
OEJFNDU0RTU3OUU0MTdCMDUgLyogTWFya2FibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWFya2FibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RyaW5nVXRpbGl0aWVzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZDM0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGli
Z3Rlc3QuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJndGVzdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwpAQCAtMzcxNyw2ICszNzE5LDcgQEAKIAkJCQlBQTk2Q0FCNDIxQzdEQjQyMDBG
RDJGOTcgLyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTZCMEEwN0Y2MjFGQTlDMkIw
MEQ1NzM5MSAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5jcHAgKi8sCiAJCQkJMDQxQTFFMzMy
MTZGRkRCQzAwNzg5RTBBIC8qIFB1YmxpY1N1ZmZpeC5jcHAgKi8sCisJCQkJRUI5QUQ4QzYyNzY0
NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8sCiAJCQkJNkI0RTg2MUIyMjIwQTU1
MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCAqLywKIAkJCQlGNDE4QkUxNDFGNzFC
N0RDMDAxOTcwRTYgLyogUm91bmRlZFJlY3RUZXN0cy5jcHAgKi8sCiAJCQkJNDE4MUM2MkMyNTVB
ODkxMTAwQUVCMEZGIC8qIFJUQ1J0cFNGcmFtZVRyYW5zZm9ybWVyVGVzdHMuY3BwICovLApAQCAt
NTYxMSw2ICs1NjE0LDcgQEAKIAkJCQk0NjQ3QjEyNjFFQkEzQjg1MDA0MUQ3RUYgLyogUHJvY2Vz
c0RpZFRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUMyQTg1NjI0Q0VCNjVGMDBB
REJDMzUgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA0MUExRTM0MjE2
RkZEQkMwMDc4OUUwQSAvKiBQdWJsaWNTdWZmaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRUI5
QUQ4QzcyNzY0NkU3NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2QjRFODYxQzIyMjBBNTUyMDAyMkYzODkgLyogUmVnaXN0cmFibGVEb21haW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEQxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlbG9hZFBhZ2VB
ZnRlckNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUM5MUE0MTFBN0UwMDQ0N0M0
QyAvKiBSZW5kZXJlZEltYWdlRnJvbURPTU5vZGUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2Q4MjkyNThmOTRlMTI5ZTcyOWEyN2JhNWQ0N2M3ZDY2Mzk0MmZmZQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2Uu
Y3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvUHVzaERhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisKKyNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIFB1c2hEYXRhYmFzZVRlc3QgOiBwdWJsaWMgdGVzdGlu
Zzo6VGVzdCB7CitwdWJsaWM6CisgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gZGI7
CisKKyAgICBQdXNoUmVjb3JkIHJlY29yZDEgeworICAgICAgICAwLAorICAgICAgICAiY29tLmFw
cGxlLlNhZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAg
ICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMiX3MsCisgICAgICAgICJodHRwczovL3B1c2hF
bmRwb2ludDEiX3MsCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDEsIDIgfSwKKyAgICAg
ICAgeyAyLCAzIH0sCisgICAgICAgIHsgNCwgNSB9LAorICAgICAgICBXYWxsVGltZTo6bm93KCks
CisgICAgICAgIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMKKyAgICB9OworICAgIFB1c2hS
ZWNvcmQgcmVjb3JkMiB7CisgICAgICAgIDAsCisgICAgICAgICJjb20uYXBwbGUud2ViYXBwIl9z
LAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6Ly93
d3cuYXBwbGUuY29tL2lwaG9uZSJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MiJf
cywKKyAgICAgICAgeyA1LCA2IH0sCisgICAgICAgIHsgNiwgNyB9LAorICAgICAgICB7IDcsIDgg
fSwKKyAgICAgICAgeyA4LCA5IH0KKyAgICB9OworICAgIFB1c2hSZWNvcmQgcmVjb3JkMyB7Cisg
ICAgICAgIDAsCisgICAgICAgICJjb20uYXBwbGUuU2FmYXJpIl9zLAorICAgICAgICAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9u
ZSJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MyJfcywKKyAgICAgICAgeyA5LCAx
MCB9LAorICAgICAgICB7IDEwLCAxMSB9LAorICAgICAgICB7IDExLCAxMiB9LAorICAgICAgICB7
IDEyLCAxMyB9CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0
UmVzdWx0MTsKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDI7Cisg
ICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQzOworCisgICAgdm9pZCBT
ZXRVcCgpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlRfVFJVRShkYiA9IFB1c2hEYXRhYmFz
ZTo6Y3JlYXRlSW5NZW1vcnkoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDEg
PSBkYi0+aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQocmVjb3JkMSkpKTsKKyAgICAgICAgQVNTRVJU
X1RSVUUoaW5zZXJ0UmVzdWx0MiA9IGRiLT5pbnNlcnRSZWNvcmQoUHVzaFJlY29yZChyZWNvcmQy
KSkpOworICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQzID0gZGItPmluc2VydFJlY29y
ZChQdXNoUmVjb3JkKHJlY29yZDMpKSk7CisgICAgfQorfTsKKworc3RhdGljIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBQdXNoUmVjb3JkJiBhLCBjb25zdCBQdXNoUmVjb3JkJiBiKQoreworICAgIHJl
dHVybiBhLnJvd0lEID09IGIucm93SUQKKyAgICAgICAgJiYgYS5idW5kbGVJRCA9PSBiLmJ1bmRs
ZUlECisgICAgICAgICYmIGEuc2VjdXJpdHlPcmlnaW4gPT0gYi5zZWN1cml0eU9yaWdpbgorICAg
ICAgICAmJiBhLnNjb3BlID09IGIuc2NvcGUKKyAgICAgICAgJiYgYS5lbmRwb2ludCA9PSBiLmVu
ZHBvaW50CisgICAgICAgICYmIGEuc2VydmVyVkFQSURQdWJsaWNLZXkgPT0gYi5zZXJ2ZXJWQVBJ
RFB1YmxpY0tleQorICAgICAgICAmJiBhLmNsaWVudFB1YmxpY0tleSA9PSBiLmNsaWVudFB1Ymxp
Y0tleQorICAgICAgICAmJiBhLmNsaWVudFByaXZhdGVLZXkgPT0gYi5jbGllbnRQcml2YXRlS2V5
CisgICAgICAgICYmIGEuc2hhcmVkQXV0aFNlY3JldCA9PSBiLnNoYXJlZEF1dGhTZWNyZXQKKyAg
ICAgICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25UaW1lCisgICAgICAgICYm
IGEud2FrZVN0YXRlID09IGIud2FrZVN0YXRlOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVz
dCwgSW5zZXJ0UmVjb3JkKQoreworICAgIGF1dG8gZXhwZWN0ZWRSZWNvcmQxID0gcmVjb3JkMTsK
KyAgICBleHBlY3RlZFJlY29yZDEucm93SUQgPSAxOworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVk
UmVjb3JkMSA9PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMiA9
IHJlY29yZDI7CisgICAgZXhwZWN0ZWRSZWNvcmQyLnJvd0lEID0gMjsKKyAgICBFWFBFQ1RfVFJV
RShleHBlY3RlZFJlY29yZDIgPT0gKmluc2VydFJlc3VsdDIpOworCisgICAgLy8gU2luY2UgcmVj
b3JkMyBpcyBpbiB0aGUgc2FtZSBTdWJzY3JpcHRpb25TZXQgYXMgcmVjb3JkMSwgaXQgc2hvdWxk
CisgICAgLy8gaW5oZXJpdCByZWNvcmQxJ3Mgd2FrZSBzdGF0ZS4KKyAgICBhdXRvIGV4cGVjdGVk
UmVjb3JkMyA9IHJlY29yZDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLnJvd0lEID0gMzsKKyAgICBl
eHBlY3RlZFJlY29yZDMud2FrZVN0YXRlID0gZXhwZWN0ZWRSZWNvcmQxLndha2VTdGF0ZTsKKyAg
ICBFWFBFQ1RfVFJVRShleHBlY3RlZFJlY29yZDMgPT0gKmluc2VydFJlc3VsdDMpOworCisgICAg
Ly8gSW5zZXJ0aW5nIGEgcmVjb3JkIHdpdGggdGhlIHNhbWUgKGJ1bmRsZUlELCBzY29wZSkgYXMg
cmVjb3JkIDEgc2hvdWxkIGZhaWwuCisgICAgUHVzaFJlY29yZCByZWNvcmQ0ID0gcmVjb3JkMTsK
KyAgICByZWNvcmQ0LmVuZHBvaW50ID0gImh0dHBzOi8vd3d3LndlYmtpdC5vcmciX3M7CisgICAg
RVhQRUNUX0ZBTFNFKGRiLT5pbnNlcnRSZWNvcmQoV1RGTW92ZShyZWNvcmQ0KSkpOworCisgICAg
RVhQRUNUX0VRKGRiLT5nZXRSb3dJRHMoKSwgKEhhc2hTZXQ8aW50NjRfdD4geyAxLCAyLCAzIH0p
KTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIFJlbW92ZVJlY29yZCkKK3sKKyAgICBF
WFBFQ1RfVFJVRShkYi0+cmVtb3ZlUmVjb3JkKHJlY29yZDEuYnVuZGxlSUQsIHJlY29yZDEuc2Nv
cGUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZGItPnJlbW92ZVJlY29yZChyZWNvcmQxLmJ1bmRsZUlE
LCByZWNvcmQxLnNjb3BlKSk7CisgICAgRVhQRUNUX0VRKGRiLT5nZXRSb3dJRHMoKSwgKEhhc2hT
ZXQ8aW50NjRfdD4geyAyLCAzIH0pKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdl
dFJlY29yZCkKK3sKKyAgICBhdXRvIHJlc3VsdDEgPSBkYi0+Z2V0UmVjb3JkKHJlY29yZDEuYnVu
ZGxlSUQsIHJlY29yZDEuc2NvcGUpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdDEpOworICAgIEVY
UEVDVF9UUlVFKCpyZXN1bHQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8gcmVzdWx0
MiA9IGRiLT5nZXRSZWNvcmQocmVjb3JkMS5idW5kbGVJRCwgImZvbyJfcyk7CisgICAgRVhQRUNU
X0ZBTFNFKHJlc3VsdDIpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgRW51bWVyYXRl
V2FrZVN0YXRlcykKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgUHVzaFdha2VTdGF0ZT4gZXhwZWN0
ZWRXYWtlU3RhdGVzIHsKKyAgICAgICAgeyAiY29tLmFwcGxlLlNhZmFyaTpodHRwczovL3d3dy5h
cHBsZS5jb20vbWFjIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9LAorICAgICAgICB7
ICJjb20uYXBwbGUud2ViYXBwOmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiLCBQdXNoV2Fr
ZVN0YXRlOjpXYWtpbmcgfSwKKyAgICAgICAgeyAiY29tLmFwcGxlLlNhZmFyaTpodHRwczovL3d3
dy5hcHBsZS5jb20vaXBob25lIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9CisgICAg
fTsKKyAgICBIYXNoTWFwPFN0cmluZywgUHVzaFdha2VTdGF0ZT4gYWN0dWFsV2FrZVN0YXRlczsK
KworICAgIGRiLT5lbnVtZXJhdGVXYWtlU3RhdGVzKFsmYWN0dWFsV2FrZVN0YXRlc10oU3RyaW5n
JiYgYnVuZGxlSUQsIFN0cmluZyYmIHNjb3BlLCBQdXNoV2FrZVN0YXRlIHN0YXRlKSB7CisgICAg
ICAgIGFjdHVhbFdha2VTdGF0ZXMuYWRkKGJ1bmRsZUlEICsgIjoiX3MgKyBzY29wZSwgc3RhdGUp
OworICAgIH0pOworCisgICAgRVhQRUNUX0VRKGV4cGVjdGVkV2FrZVN0YXRlcywgYWN0dWFsV2Fr
ZVN0YXRlcyk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBTdGFydHNGcm9tU2NyYXRj
aE9uRG93bmdyYWRlKQoreworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGU7CisgICAgYXV0byBwYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoIlB1c2hE
YXRhYmFzZSIsIGhhbmRsZSwgIi5kYiIpOworICAgIEFTU0VSVF9UUlVFKEZpbGVTeXN0ZW06Omlz
SGFuZGxlVmFsaWQoaGFuZGxlKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7
CisKKyAgICB7CisgICAgICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAgICAgICBkYi5vcGVuKHBh
dGgpOworICAgICAgICBBU1NFUlRfVFJVRShkYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIHVzZXJf
dmVyc2lvbiA9IDEwMDAwMCJfcykpOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBjcmVh
dGVSZXN1bHQgPSBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RS
VUUoY3JlYXRlUmVzdWx0KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZURhdGFiYXNl
IGRiOworICAgICAgICBkYi5vcGVuKHBhdGgpOworICAgICAgICB7CisgICAgICAgICAgICBpbnQg
dmVyc2lvbiA9IDA7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLnByZXBhcmVTdGF0ZW1lbnQo
IlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgICAgICAgICAgaWYgKHNxbCAmJiBzcWwtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBzcWwtPmNvbHVt
bkludCgwKTsKKyAgICAgICAgICAgIEVYUEVDVF9HVCh2ZXJzaW9uLCAwKTsKKyAgICAgICAgICAg
IEVYUEVDVF9MVCh2ZXJzaW9uLCAxMDAwMDApOworICAgICAgICB9CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446896</attachid>
            <date>2021-12-11 12:28:56 -0800</date>
            <delta_ts>2021-12-14 17:44:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20211211122855.patch</filename>
            <type>text/plain</type>
            <size>38911</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE4Mjc1Y2QwZjcyNDZm
YzE5NjgxZDU1YjQ1ZmNiZWQzMjBlOGM3OC4uOWQ2YjZjMDU4ZWJkYjM3ZDI1MDk1N2ZmMTVhNDU3
YWIwYTZiZGU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTEyLTEwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
cHVzaC1hcGkvUHVzaERhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKwogMjAyMS0x
Mi0xMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHJlZHVuZGFudCBTdHlsZVJ1bGU6OlR5cGUgZW51bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNzA0
YzQ4ZWY3ZDg3OTYxY2YyY2I3OWI4NDc0NmVmNTE4MjYxMTI3Yy4uMmE4NDZhZTI0YjhhN2VkNWYz
ZDdhNmY5NWY4ZTA2ZTU4YmFjNzM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0yOTAsNiArMjkw
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIE1vZHVsZXMv
cGVybWlzc2lvbnMvUGVybWlzc2lvbk9ic2VydmVyLmgKICAgICBNb2R1bGVzL3Blcm1pc3Npb25z
L1Blcm1pc3Npb25TdGF0ZS5oCiAKKyAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5o
CiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoUGVybWlzc2lvblN0YXRlLmgKICAgICBNb2R1bGVz
L3B1c2gtYXBpL1B1c2hTdWJzY3JpcHRpb25EYXRhLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzZWEyMGU3Njcz
NzRhMTU2OTgzYzNmNjkwMDFiNzRjMGFmN2Y5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwzNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHVzaERhdGFi
YXNlLmgiCisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisKKyNkZWZpbmUgUFVTSERCX1JFTEVB
U0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhQdXNoLCAiJXAgLSBQdXNoRGF0YWJhc2U6OiIg
Zm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0dfRVJS
T1IoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICIlcCAtIFB1c2hEYXRhYmFzZTo6
IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPR19C
SU5EX0VSUk9SKCkgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBzdGF0
ZW1lbnQgKCVkKTogJXMiLCBtX2RiLT5sYXN0RXJyb3IoKSwgbV9kYi0+bGFzdEVycm9yTXNnKCkp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQgY3VycmVudFB1
c2hEYXRhYmFzZVZlcnNpb24gPSAxOworCitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIHB1c2hE
YXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50c1tdID0geworICAgICJQUkFHTUEgYXV0b192YWN1dW09
SU5DUkVNRU5UQUwiX3MsCisgICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25TZXRzKCIKKyAg
ICAiICBjcmVhdGlvblRpbWUgSU5UIE5PVCBOVUxMLCIKKyAgICAiICBidW5kbGVJRCBURVhUIE5P
VCBOVUxMLCIKKyAgICAiICBzZWN1cml0eU9yaWdpbiBURVhUIE5PVCBOVUxMLCIKKyAgICAiICB3
YWtlU3RhdGUgSU5UIE5PVCBOVUxMLCIKKyAgICAiICBVTklRVUUoYnVuZGxlSUQsIHNlY3VyaXR5
T3JpZ2luKSkiX3MsCisgICAgIkNSRUFURSBUQUJMRSBTdWJzY3JpcHRpb25zKCIKKyAgICAiICBj
cmVhdGlvblRpbWUgSU5UIE5PVCBOVUxMLCIKKyAgICAiICBzdWJzY3JpcHRpb25TZXRJRCBJTlQg
Tk9UIE5VTEwsIgorICAgICIgIHNjb3BlIFRFWFQgTk9UIE5VTEwsIgorICAgICIgIGVuZHBvaW50
IFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHNlcnZlclZBUElEUHVibGljS2V5IEJMT0IgTk9UIE5V
TEwsIgorICAgICIgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAiICBjbGll
bnRQcml2YXRlS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIHNoYXJlZEF1dGhTZWNyZXQgQkxP
QiBOT1QgTlVMTCwiCisgICAgIiAgZXhwaXJhdGlvblRpbWUgSU5ULCIKKyAgICAiICBVTklRVUUo
c2NvcGUsIHN1YnNjcmlwdGlvblNldElEKSkiX3MsCisgICAgIkNSRUFURSBJTkRFWCBTdWJzY3Jp
cHRpb25zX1N1YnNjcmlwdGlvblNldElEX0luZGV4IE9OIFN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0
aW9uU2V0SUQpIl9zLAorICAgICJQUkFHTUEgdXNlcl92ZXJzaW9uID0gMSJfcworfTsKKworc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNl
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAocGF0aCA9PSAiOm1lbW9yeToiX3MgfHwg
IVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShwYXRoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBQdXNoRGF0YWJhc2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGggIT0gIjptZW1vcnk6Il9zICYmICFGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgpICYmICFGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3Jp
ZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChwYXRoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoUHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBQdXNoRGF0YWJhc2UgcGFyZW50IGRpcmVjdG9y
aWVzIGZvciBwYXRoICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgYXV0byBkYiA9IG1ha2VVbmlxdWVSZWY8U1FMaXRlRGF0YWJh
c2U+KCk7CisgICAgaWYgKCFkYi0+b3BlbihwYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihQdXNoLCAiQ291bGRuJ3Qgb3BlbiBkYXRhYmFzZSBmaWxlIGF0IHBhdGggJXMiLCBwYXRo
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
bnQgdmVyc2lvbiA9IDA7CisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGRiLT5wcmVwYXJlU3Rh
dGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgaWYgKCFzcWwgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
UHVzaCwgIkNvdWxkbid0IGdldCBkYXRhYmFzZSB2ZXJzaW9uIGF0IHBhdGggJXMiLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgdmVyc2lvbiA9IHNxbC0+Y29sdW1uSW50KDApOworICAgIH0KKworICAgIGlmICh2ZXJz
aW9uID4gY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoUHVzaCwgIkZvdW5kIG5ld2VyIGRhdGFiYXNlIHZlcnNpb24gdGhhbiBleHBlY3RlZCwg
c3RhcnRpbmcgZnJvbSBzY3JhdGNoOiAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IGRiLT5jbG9zZSgpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJlc2hQdXNoRGF0YWJhc2UocGF0
aCk7CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lv
bikgeworICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYik7CisgICAgICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBw
dXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHMpIHsKKyAgICAgICAgICAgIGlmICghZGItPmV4
ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihQdXNoLCAiQ291bGRuJ3QgY3JlYXRlIGRhdGFiYXNlIHNjaGVtYSBmb3Igc3RhdGVtZW50
ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgfQorCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+KG5ldyBQdXNoRGF0YWJhc2UoV1RGTW92
ZShkYikpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gUHVzaERhdGFiYXNl
OjpjcmVhdGVJbk1lbW9yeSgpCit7CisgICAgcmV0dXJuIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKCI6
bWVtb3J5OiJfcyk7Cit9CisKK1B1c2hEYXRhYmFzZTo6UHVzaERhdGFiYXNlKFVuaXF1ZVJlZjxT
UUxpdGVEYXRhYmFzZT4mJiBkYikKKyAgICA6IG1fZGIoV1RGTW92ZShkYikpCit7Cit9CisKK1B1
c2hEYXRhYmFzZTo6flB1c2hEYXRhYmFzZSgpID0gZGVmYXVsdDsKKworU1FMaXRlU3RhdGVtZW50
QXV0b1Jlc2V0U2NvcGUgUHVzaERhdGFiYXNlOjpjYWNoZWRTdGF0ZW1lbnQoQVNDSUlMaXRlcmFs
IHF1ZXJ5KQoreworICAgIGF1dG8gaXQgPSBtX3N0YXRlbWVudHMuZmluZChxdWVyeSk7CisgICAg
aWYgKGl0ICE9IG1fc3RhdGVtZW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlKGl0LT52YWx1ZS5wdHIoKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZGItPnByZXBhcmVIZWFwU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAoIXJlc3VsdCkgewor
ICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfRVJST1IoIkZhaWxlZCB3aXRoICVkIHByZXBhcmlu
ZyBzdGF0ZW1lbnQ6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCByZXN1bHQuZXJyb3IoKSwgcXVlcnku
Y2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlKG51bGxwdHIpOworICAgIH0KKworICAgIGF1dG8gcmVmID0gV1RGTW92ZSgqcmVzdWx0KTsK
KyAgICBhdXRvIHN0YXRlbWVudCA9IHJlZi5wdHIoKTsKKyAgICBtX3N0YXRlbWVudHMuYWRkKHF1
ZXJ5LCBXVEZNb3ZlKHJlZikpOworICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRT
Y29wZShzdGF0ZW1lbnQpOworfQorCitzdGF0aWMgU1FMVmFsdWUgc3FsVmFsdWVGcm9tV2FsbFRp
bWUoc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gd2FsbFRpbWUpCit7CisgICAgaWYgKHdhbGxUaW1l
KQorICAgICAgICByZXR1cm4gd2FsbFRpbWUtPnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXYWxsVGlt
ZT4gd2FsbFRpbWVGcm9tU1FMVmFsdWUoU1FMVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoc3RkOjpnZXQ8ZG91YmxlPih2YWx1ZSkpOworICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gUHVzaERhdGFiYXNl
OjppbnNlcnRSZWNvcmQoUHVzaFJlY29yZCYmIHJlY29yZCkKK3sKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAg
aW50NjRfdCBzdWJzY3JpcHRpb25TZXRJRCA9IDA7CisKKyAgICB7CisgICAgICAgIGF1dG8gc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KCJTRUxFQ1Qgcm93aWQsIHdha2VTdGF0ZSBGUk9NIFN1YnNjcmlw
dGlvblNldHMgV0hFUkUgYnVuZGxlSUQgPSA/IEFORCBzZWN1cml0eU9yaWdpbiA9ID8iX3MpOwor
ICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCByZWNvcmQu
YnVuZGxlSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCBy
ZWNvcmQuc2VjdXJpdHlPcmlnaW4pICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgUFVTSERC
X1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgc3Vic2NyaXB0aW9uU2V0SUQgPSBzcWwtPmNvbHVtbkludDY0KDApOwor
ICAgICAgICAgICAgcmVjb3JkLndha2VTdGF0ZSA9IHN0YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+
KHNxbC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc3Vic2Ny
aXB0aW9uU2V0SUQpIHsKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKD8sID8sID8sID8pIl9zKTsKKyAgICAgICAg
aWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIHRpbWUobnVsbHB0cikp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCByZWNvcmQuYnVu
ZGxlSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgzLCByZWNv
cmQuc2VjdXJpdHlPcmlnaW4pICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5k
SW50KDQsIHN0YXRpY19jYXN0PGludD4ocmVjb3JkLndha2VTdGF0ZSkpICE9IFNRTElURV9PSykg
eworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsLT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gbV9kYi0+bGFzdEluc2VydFJvd0lEKCk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiSU5TRVJU
IElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoPywgPywgPywgPywgPywgPywgPywgPywgPykiX3Mp
OworICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgdGlt
ZShudWxscHRyKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgy
LCBzdWJzY3JpcHRpb25TZXRJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPmJp
bmRUZXh0KDMsIHJlY29yZC5zY29wZSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwt
PmJpbmRUZXh0KDQsIHJlY29yZC5lbmRwb2ludCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwtPmJpbmRCbG9iKDUsIHJlY29yZC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDYsIHJlY29yZC5jbGllbnRQdWJsaWNL
ZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig3LCByZWNvcmQu
Y2xpZW50UHJpdmF0ZUtleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRC
bG9iKDgsIHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
IHx8IHNxbC0+YmluZFZhbHVlKDksIHNxbFZhbHVlRnJvbVdhbGxUaW1lKHJlY29yZC5leHBpcmF0
aW9uVGltZSkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9H
X0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHJlY29yZC5yb3dJRCA9IG1fZGItPmxh
c3RJbnNlcnRSb3dJRCgpOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCisg
ICAgcmV0dXJuIFdURk1vdmUocmVjb3JkKTsKK30KKworYm9vbCBQdXNoRGF0YWJhc2U6OnJlbW92
ZVJlY29yZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQorewor
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOworICAgIHRyYW5zYWN0aW9u
LmJlZ2luKCk7CisKKyAgICBib29sIGlzTGFzdFN1YnNjcmlwdGlvbkluU2V0ID0gZmFsc2U7Cisg
ICAgaW50NjRfdCBzdWJzY3JpcHRpb25JRCA9IDA7CisgICAgaW50NjRfdCBzdWJzY3JpcHRpb25T
ZXRJRCA9IDA7CisKKyAgICB7CisgICAgICAgIC8vIEZpbmQgdGhlIHN1YnNjcmlwdGlvbiBhbmQg
c3Vic2NyaXB0aW9uIHNldC4KKyAgICAgICAgLy8gRm9yY2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhl
IFN1YnNjcmlwdGlvbnMoc2NvcGUpIGluZGV4IGZpcnN0IHZpYSBDUk9TUyBKT0lOLgorICAgICAg
ICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgKKyAgICAgICAgICAgICJTRUxFQ1Qgc3ViLnJv
d2lkLCBzcy5yb3dpZCAiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAiCisg
ICAgICAgICAgICAiQ1JPU1MgSk9JTiBTdWJzY3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAgICAg
ICJPTiBzdWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICAgICAiV0hF
UkUgc3ViLnNjb3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBpZiAo
IXNxbCB8fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5k
VGV4dCgyLCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVM
RUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3Vic2NyaXB0aW9uSUQgPSBzcWwtPmNvbHVtbklu
dDY0KDApOworICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMSk7
CisgICAgfQorCisgICAgeworICAgICAgICAvLyBEZWxldGUgdGhlIHN1YnNjcmlwdGlvbi4KKyAg
ICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlv
bnMgV0hFUkUgcm93aWQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJ
bnQ2NCgxLCBzdWJzY3JpcHRpb25JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNI
REJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uIGluIHRoZSBzdWJzY3JpcHRpb24gc2V0
LgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgiU0VMRUNUIDEgRlJPTSBTdWJz
Y3JpcHRpb25zIFdIRVJFIHN1YnNjcmlwdGlvblNldElEID0gPyBMSU1JVCAxIl9zKTsKKworICAg
ICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJRCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaXNMYXN0
U3Vic2NyaXB0aW9uSW5TZXQgPSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpOworICAgIH0K
KworICAgIGlmIChpc0xhc3RTdWJzY3JpcHRpb25JblNldCkgeworICAgICAgICAvLyBEZWxldGUg
dGhlIGVudGlyZSBzdWJzY3JpcHRpb24gc2V0IGlmIGl0IGlzIG5vIGxvbmdlciBhc3NvY2lhdGVk
IHdpdGggYW55IHN1YnNjcmlwdGlvbnMuCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVt
ZW50KCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25TZXRzIFdIRVJFIHJvd2lkID0gPyJfcyk7Cisg
ICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHN1YnNjcmlwdGlvblNldElEKSAh
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9S
KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBQdXNoRGF0YWJhc2U6OmdldFJlY29yZChjb25z
dCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIC8vIEZvcmNl
IFNRTGl0ZSB0byBjb25zdWx0IHRoZSBTdWJzY3JpcHRpb25zKHNjb3BlKSBpbmRleCBmaXJzdCB2
aWEgQ1JPU1MgSk9JTi4KKyAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudCgKKyAgICAgICAg
IlNFTEVDVCAiCisgICAgICAgICIgICAgc3ViLnJvd0lELCBzcy5idW5kbGVJRCwgc3Muc2VjdXJp
dHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBvaW50LCAiCisgICAgICAgICIgICAgc3ViLnNl
cnZlclZBUElEUHVibGljS2V5LCBzdWIuY2xpZW50UHVibGljS2V5LCBzdWIuY2xpZW50UHJpdmF0
ZUtleSwgIgorICAgICAgICAiICAgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlv
blRpbWUsIHNzLndha2VTdGF0ZSAiCisgICAgICAgICJGUk9NIFN1YnNjcmlwdGlvbnMgc3ViICIK
KyAgICAgICAgIkNST1NTIEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICJPTiBz
dWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICJXSEVSRSBzdWIuc2Nv
cGUgPSA/IEFORCBzcy5idW5kbGVJRCA9ID8iX3MpOworCisgICAgaWYgKCFzcWwgfHwgc3FsLT5i
aW5kVGV4dCgxLCBzY29wZSkgIT0gU1FMSVRFX09LIHx8IHNxbC0+YmluZFRleHQoMiwgYnVuZGxl
SUQpICE9IFNRTElURV9PSykgeworICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJP
UigpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChzcWwt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgUHVzaFJlY29yZCByZWNvcmQ7CisgICAgcmVjb3JkLnJvd0lEID0gc3FsLT5jb2x1bW5JbnQ2
NCgwKTsKKyAgICByZWNvcmQuYnVuZGxlSUQgPSBzcWwtPmNvbHVtblRleHQoMSk7CisgICAgcmVj
b3JkLnNlY3VyaXR5T3JpZ2luID0gc3FsLT5jb2x1bW5UZXh0KDIpOworICAgIHJlY29yZC5zY29w
ZSA9IHNxbC0+Y29sdW1uVGV4dCgzKTsKKyAgICByZWNvcmQuZW5kcG9pbnQgPSBzcWwtPmNvbHVt
blRleHQoNCk7CisgICAgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5ID0gc3FsLT5jb2x1bW5C
bG9iKDUpOworICAgIHJlY29yZC5jbGllbnRQdWJsaWNLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNik7
CisgICAgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNyk7CisgICAg
cmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQgPSBzcWwtPmNvbHVtbkJsb2IoOCk7CisgICAgcmVjb3Jk
LmV4cGlyYXRpb25UaW1lID0gd2FsbFRpbWVGcm9tU1FMVmFsdWUoc3FsLT5jb2x1bW5WYWx1ZSg5
KSk7CisgICAgcmVjb3JkLndha2VTdGF0ZSA9IHN0YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+KHNx
bC0+Y29sdW1uSW50KDEwKSk7CisgICAgcmV0dXJuIHJlY29yZDsKK30KKworSGFzaFNldDxpbnQ2
NF90PiBQdXNoRGF0YWJhc2U6OmdldFJvd0lEcygpCit7CisgICAgSGFzaFNldDxpbnQ2NF90PiBy
ZXN1bHQ7CisgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoIlNFTEVDVCByb3dpZCBGUk9N
IFN1YnNjcmlwdGlvbnMiX3MpOworICAgIHdoaWxlIChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgcmVzdWx0LmFkZChzcWwtPmNvbHVtbkludDY0KDApKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6ZW51bWVyYXRlV2FrZVN0YXRl
cyhQdXNoV2FrZVN0YXRlc0VudW1lcmF0b3ImJiBlbnVtZXJhdG9yKQoreworICAgIGF1dG8gc3Fs
ID0gY2FjaGVkU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIHNzLmJ1bmRsZUlELCBzdWIuc2Nv
cGUsIHNzLndha2VTdGF0ZSAiCisgICAgICAgICJGUk9NIFN1YnNjcmlwdGlvbnMgc3ViICIKKyAg
ICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICJPTiBzdWIuc3Vic2Ny
aXB0aW9uU2V0SUQgPSBzcy5yb3dpZCJfcyk7CisKKyAgICBpZiAoIXNxbCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2hpbGUgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
YXV0byBidW5kbGVJRCA9IHNxbC0+Y29sdW1uVGV4dCgwKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IHNxbC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgYXV0byB3YWtlU3RhdGUgPSBzdGF0aWNfY2Fz
dDxQdXNoV2FrZVN0YXRlPihzcWwtPmNvbHVtbkludCgyKSk7CisgICAgICAgIGVudW1lcmF0b3Io
V1RGTW92ZShidW5kbGVJRCksIFdURk1vdmUoc2NvcGUpLCB3YWtlU3RhdGUpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0
YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzhkNzcxMWE2NzgwMjEwYTQ0YjQyOTQwODg2YjA3MjIwZjYyYzNmNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFi
YXNlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnRBdXRv
UmVzZXRTY29wZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gV2FrZSBzdGF0ZSB0aGF0IGFwcGxpZXMgZm9yIGRldmljZXMgdGhhdCByYWNlLXRvLXNsZWVw
LgorZW51bSBjbGFzcyBQdXNoV2FrZVN0YXRlIDogdWludDhfdCB7CisgICAgV2FraW5nLCAvLyBB
bGwgcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgT3Bwb3J0dW5pc3RpYywgLy8gTG93IHBy
aW9yaXR5IHB1c2hlcyBtYXkgbm90IHdha2UgZGV2aWNlLgorICAgIE5vbldha2luZyAvLyBObyBw
dXNoZXMgd2lsbCB3YWtlIGRldmljZS4KK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAgICBp
bnQ2NF90IHJvd0lEIHsgMCB9OworICAgIFN0cmluZyBidW5kbGVJRDsKKyAgICBTdHJpbmcgc2Vj
dXJpdHlPcmlnaW47CisgICAgU3RyaW5nIHNjb3BlOworICAgIFN0cmluZyBlbmRwb2ludDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gc2VydmVyVkFQSURQdWJsaWNLZXk7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGNsaWVudFB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4gY2xpZW50UHJpdmF0ZUtl
eTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2hhcmVkQXV0aFNlY3JldDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFdhbGxUaW1lPiBleHBpcmF0aW9uVGltZSB7IH07CisgICAgUHVzaFdha2VTdGF0ZSB3YWtl
U3RhdGUgeyBQdXNoV2FrZVN0YXRlOjpXYWtpbmcgfTsKK307CisKK2NsYXNzIFB1c2hEYXRhYmFz
ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UHVzaERhdGFiYXNlPiBjcmVhdGVJbk1lbW9yeSgpOworICAgIFdFQkNPUkVfRVhQT1JUIH5QdXNo
RGF0YWJhc2UoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29y
ZD4gaW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBy
ZW1vdmVSZWNvcmQoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZWNvcmQo
Y29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSk7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBIYXNoU2V0PGludDY0X3Q+IGdldFJvd0lEcygpOworCisgICAgdXNpbmcgUHVz
aFdha2VTdGF0ZXNFbnVtZXJhdG9yID0gRnVuY3Rpb248dm9pZChTdHJpbmcmJiBidW5kbGVJRCwg
U3RyaW5nJiYgc2NvcGUsIFB1c2hXYWtlU3RhdGUpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGVudW1lcmF0ZVdha2VTdGF0ZXMoUHVzaFdha2VTdGF0ZXNFbnVtZXJhdG9yJiYpOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IFB1c2hEYXRhYmFzZShVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
RGF0YWJhc2U+JiYgZGIpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIGNhY2hlZFN0YXRlbWVudChBU0NJSUxpdGVyYWwgcXVlcnkpOworCisgICAgVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RiOworICAgIEhhc2hNYXA8Y29uc3QgY2hhcios
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX3N0YXRlbWVudHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IDI3MTBmNjExMzJkODY0ZGMyOWMxZTdhNDFjZDQ0ZTMzNDYw
ZGU2ZTkuLjQxYWQxMzk5MDc4ZDEzYTkzMmE3M2FjMjE0ZTc4YzE5Njk2ODUyYmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC0yNTcsNiArMjU3LDcgQEAgTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0RvY3Vt
ZW50UGljdHVyZUluUGljdHVyZS5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9FbnRlclBp
Y3R1cmVJblBpY3R1cmVFdmVudC5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9IVE1MVmlk
ZW9FbGVtZW50UGljdHVyZUluUGljdHVyZS5jcHAKIE1vZHVsZXMvcGljdHVyZWlucGljdHVyZS9Q
aWN0dXJlSW5QaWN0dXJlV2luZG93LmNwcAorTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2Uu
Y3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hFdmVudC5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVz
aE1lc3NhZ2VEYXRhLmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vic2NyaXB0aW9uLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGRmZDZhMzIxN2YxMmQwY2YzMWRlYWY0ODg0NjU2ODI5ZmI5MzViZTkuLjkzYmQ2MDkwN2Zm
ZmRlNjQ4Y2I1NTBkMzllZjhkY2ZmMjdkYzVmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU0MzUsNiArNTQzNSw3IEBACiAJ
CUVCMjhFRDQ0MjcxN0FDMTEwMDVGMDM5MyAvKiBQdXNoU3Vic2NyaXB0aW9uRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIyOEVENDEyNzE3QUJB
OTAwNUYwMzkzIC8qIFB1c2hTdWJzY3JpcHRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUIzQzI5QjYyNzI5QzM4ODAwRkI2NUI0IC8q
IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUIzQzI5QjQyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJz
Y3JpcHRpb25DaGFuZ2VFdmVudC5oICovOyB9OwogCQlFQjNDMjlCNzI3MjlDMzhDMDBGQjY1QjQg
LyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIzQzI5QjEyNzI5QzM2RDAwRkI2NUI0IC8qIFB1
c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaCAqLzsgfTsKKwkJRUI5QUQ4Q0IyNzY0NkU5
NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVC
Qjk3MzgxMjcxMDA2NzEwMDc3MzJFRiAvKiBQdXNoTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJCOTczODAyNzEwMDY1NDAwNzczMkVGIC8q
IFB1c2hNYW5hZ2VyLmggKi87IH07CiAJCUVCQjk3MzgyMjcxMDA2NzYwMDc3MzJFRiAvKiBQdXNo
UGVybWlzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFQkI5NzM3ODI3MTAwNjUxMDA3NzMyRUYgLyogUHVzaFBlcm1pc3Npb25TdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCQjk3
MzgzMjcxMDA2ODQwMDc3MzJFRiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVzaEFQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJCOTczN0Ey
NzEwMDY1MjAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25QdXNoQVBJLmggKi87
IH07CkBAIC0xNzU4Nyw2ICsxNzU4OCw4IEBACiAJCUVCM0MyOUIyMjcyOUMzNkUwMEZCNjVCNCAv
KiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRUIzQzI5QjMyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRp
b25DaGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlv
bkNoYW5nZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUIzQzI5QjQy
NzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8q
IFB1c2hEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoRGF0
YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4Q0EyNzY0NkU5MTAw
RDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
QkI5NzM3ODI3MTAwNjUxMDA3NzMyRUYgLyogUHVzaFBlcm1pc3Npb25TdGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXNoUGVybWlzc2lvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUVCQjk3MzdBMjcxMDA2NTIwMDc3MzJFRiAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
UHVzaEFQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVzaEFQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkI5NzM3QjI3MTAwNjUyMDA3NzMy
RUYgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbitQdXNoQVBJLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbitQdXNoQVBJLmlkbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTA0MCw2ICsyMTA0Myw4IEBACiAJCTQxOEZDQkI4MjcwNkU0QkQwMEY5NkVDQSAv
KiBwdXNoLWFwaSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRUI5QUQ4Q0EyNzY0NkU5MTAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8sCisJCQkJ
RUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oICovLAogCQkJCUVCMEZC
NkZEMjcwRDBBRTgwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaCAqLywKIAkJCQlF
QjBGQjcwMDI3MEQwQUVBMDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmlkbCAqLywK
IAkJCQk0MThGQ0JCQjI3MDZFNEY2MDBGOTZFQ0EgLyogUHVzaEV2ZW50LmNwcCAqLywKQEAgLTM2
NDI1LDYgKzM2NDMwLDcgQEAKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAzNTU5NjUgLyogUHVibGlj
S2V5Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwODFGRjAwMTZCMEEyRDMw
MDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIwODRCMTRF
MTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
QjlBRDhDQjI3NjQ2RTk0MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFQjBGQjcwODI3MEQwQjEwMDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MThGQ0JDMTI3MDZFNEZCMDBGOTZFQ0EgLyogUHVzaEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MThGQ0JDMjI3MDZFNTAxMDBGOTZFQ0EgLyogUHVzaEV2
ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXgg
ZGMwZjUwOThiODdmMTg0NTUyNWJlM2MwYmE0MWY3Njc1YjE0MDQ3Zi4uMDM0NmMzODdjMTJlMDUz
NTBhYTUxZDQ1NmQ5MjI4ZTgyNjU1Nzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApA
QCAtOTYsNiArOTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCkgXAogICAgIE0oUHJvY2VzcykgXAogICAgIE0oUHJvZ3Jlc3MpIFwKKyAgICBN
KFB1c2gpIFwKICAgICBNKFJlbW90ZUluc3BlY3RvcikgXAogICAgIE0oUmVxdWVzdEFuaW1hdGlv
bkZyYW1lKSBcCiAgICAgTShSZXNvdXJjZUxvYWRpbmcpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4IDUwMDMwYjUyYzE4M2IxNzNlNjlm
ZGEyMTM2YWU2NjFlZmU0Y2EyZWYuLjFjMGZjZTYyODFlNjllNzNiNDdmODEzOGUxYjgwYjIzNDk3
OTM0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcApAQCAtMTQ4LDE0ICsxNDgsMTcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBPcGVuTW9kZSBvcGVuTW9kZSkKICAgICAgICAgICAgIExPR19F
UlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQgdGVtcF9zdG9yZSB0byBtZW1vcnki
KTsKICAgICB9CiAKLSAgICBpZiAob3Blbk1vZGUgIT0gT3Blbk1vZGU6OlJlYWRPbmx5KQotICAg
ICAgICB1c2VXQUxKb3VybmFsTW9kZSgpOwotCi0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VT
dHJpbmcoZmlsZW5hbWUsICItc2htIl9zKTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhzaG1GaWxlTmFtZSkpIHsKLSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1l
bW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19G
QVVMVChTUUxEYXRhYmFzZSwgIk9wZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNz
IEEgLXNobSBmaWxlLiBUaGlzIG1heSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2Nr
cyB0aGUgZGV2aWNlLiAoJXMpIiwgc2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVO
YW1lKTsKKyAgICBib29sIGlzSW5NZW1vcnkgPSBmaWxlbmFtZSA9PSAiOm1lbW9yeToiX3M7Cisg
ICAgaWYgKCFpc0luTWVtb3J5KSB7CisgICAgICAgIGlmIChvcGVuTW9kZSAhPSBPcGVuTW9kZTo6
UmVhZE9ubHkpCisgICAgICAgICAgICB1c2VXQUxKb3VybmFsTW9kZSgpOworCisgICAgICAgIGF1
dG8gc2htRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVuYW1lLCAiLXNobSJfcyk7CisgICAgICAg
IGlmIChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHNobUZpbGVOYW1lKSkgeworICAgICAgICAgICAg
aWYgKCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUp
KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRkFVTFQoU1FMRGF0YWJhc2UsICJPcGVu
ZWQgYW4gU1FMaXRlIGRhdGFiYXNlIHdpdGggYSBDbGFzcyBBIC1zaG0gZmlsZS4gVGhpcyBtYXkg
dHJpZ2dlciBhIGNyYXNoIHdoZW4gdGhlIHVzZXIgbG9ja3MgdGhlIGRldmljZS4gKCVzKSIsIHNo
bUZpbGVOYW1lLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6
bWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNzJhNTZkYzc3NzAzNjZkMDBjNTMzNTVkZDMzMzY0YjAzNTFmODA3
Ny4uNzQ0MWQ1MGFkYTE0M2MzZjU3YmUxYzA2OWQ4ZTBhOTI5NTAwZjFlMyAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDIxLTEyLTEwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNo
RGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNDE5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDIxLTEyLTExICBDb21taXQgUXVldWUgIDxjb21t
aXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4
Njg5My4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2Y2OTE1NTNlM2U0MzNkMjI1ZjMzNDNh
NjE3ZjUwZDQ2OWVmODI4NS4uOWI1NTgzNGUyNWYyYTkwMjYxMDc5ZjlkMDEyZDFkNzA0NDlkYTBk
NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk5Myw2ICs5OTMsNyBAQAogCQlFNUFBNDJG
MjI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBkYXRlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQTQyRjEyNTkxMjhBRTAw
NDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0ZS5tbSAqLzsgfTsKIAkJRTVBQThEMUQy
NTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQThEMUMyNTE1MUNDNjAwNTFDQzQ1IC8qIERh
dGVJbnB1dFRlc3RzLm1tICovOyB9OwogCQlFQjIzMEQ0MTI0NUU4MTNGMDBDNjZBRDEgLyogSURC
Q2hlY2twb2ludFdBTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEVCMjMwRDNEMjQ1RTcyMkUwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50
V0FMLmh0bWwgKi87IH07CisJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5
QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi87IH07CiAJCUVDQTY4
MENFMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLm1tICovOyB9OwogCQlGNDAxMEI4MDI0REEyNEFDMDBBODc2RTIg
LyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDAxMEI3RjI0REEyNEFDMDBBODc2RTIgLyogTmF2aWdhdGlvblN3
aXBlVGVzdHMubW0gKi87IH07CiAJCUY0MDEwQjgzMjREQTI2N0YwMEE4NzZFMiAvKiBQb3NlQXND
bGFzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
MDEwQjgxMjREQTI2N0YwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSAqLzsgfTsKQEAgLTI5MjEs
NiArMjkyMiw3IEBACiAJCUU1QUE4RDFDMjUxNTFDQzYwMDUxQ0M0NSAvKiBEYXRlSW5wdXRUZXN0
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGVJbnB1dFRlc3RzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRDI0NUU3MjJFMDBDNjZBRDEgLyogSURCQ2hlY2tw
b2ludFdBTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSURCQ2hlY2twb2ludFdB
TC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRTI0NUU3MjYzMDBD
NjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IElEQkNoZWNrcG9pbnRXQUwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFiYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUM3OUYxNjhCRTQ1NEU1NzlFNDE3QjA1IC8qIE1hcmth
YmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmthYmxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUNBNjgwQ0QxRTY4Q0MwOTAwNzMxRDIw
IC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFN0cmluZ1V0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjNGQzNFRTIxMzY3OEI3MzAwMTI2QTY1IC8qIGxpYmd0ZXN0LmEgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliZ3Rl
c3QuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTM3MTUsNiArMzcx
Nyw3IEBACiAJCQkJQUE5NkNBQjQyMUM3REI0MjAwRkQyRjk3IC8qIFBhcnNlZENvbnRlbnRUeXBl
LmNwcCAqLywKIAkJCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyogUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQuY3BwICovLAogCQkJCTA0MUExRTMzMjE2RkZEQkMwMDc4OUUwQSAvKiBQdWJsaWNT
dWZmaXguY3BwICovLAorCQkJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJh
c2UuY3BwICovLAogCQkJCTZCNEU4NjFCMjIyMEE1NTIwMDIyRjM4OSAvKiBSZWdpc3RyYWJsZURv
bWFpbi5jcHAgKi8sCiAJCQkJRjQxOEJFMTQxRjcxQjdEQzAwMTk3MEU2IC8qIFJvdW5kZWRSZWN0
VGVzdHMuY3BwICovLAogCQkJCTQxODFDNjJDMjU1QTg5MTEwMEFFQjBGRiAvKiBSVENSdHBTRnJh
bWVUcmFuc2Zvcm1lclRlc3RzLmNwcCAqLywKQEAgLTU2MDksNiArNTYxMiw3IEBACiAJCQkJNDY0
N0IxMjYxRUJBM0I4NTAwNDFEN0VGIC8qIFByb2Nlc3NEaWRUZXJtaW5hdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVDMkE4NTYyNENFQjY1RjAwQURCQzM1IC8qIFByb3BlcnR5U2xvdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwNDFBMUUzNDIxNkZGREJDMDA3ODlFMEEgLyogUHVibGljU3Vm
Zml4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNBNCAvKiBQ
dXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkI0RTg2MUMyMjIwQTU1MjAwMjJG
Mzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjBE
MUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0ZXJDcmFzaC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZyb21ET01O
b2RlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkODI5MjU4Zjk0ZTEyOWU3Mjlh
MjdiYTVkNDdjN2Q2NjM5NDJmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDE5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRh
YmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBQ
dXNoRGF0YWJhc2VUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGRiOworCisgICAgUHVzaFJlY29yZCByZWNvcmQx
IHsKKyAgICAgICAgMCwKKyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCisgICAgICAgICJo
dHRwczovL3d3dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20v
bWFjIl9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQxIl9zLAorICAgICAgICB7IDAs
IDEgfSwKKyAgICAgICAgeyAxLCAyIH0sCisgICAgICAgIHsgMiwgMyB9LAorICAgICAgICB7IDQs
IDUgfSwKKyAgICAgICAgV2FsbFRpbWU6Om5vdygpLAorICAgICAgICBQdXNoV2FrZVN0YXRlOjpP
cHBvcnR1bmlzdGljCisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDIgeworICAgICAgICAw
LAorICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFw
cGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCisg
ICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgIHsgNSwgNiB9LAorICAg
ICAgICB7IDYsIDcgfSwKKyAgICAgICAgeyA3LCA4IH0sCisgICAgICAgIHsgOCwgOSB9CisgICAg
fTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDMgeworICAgICAgICAwLAorICAgICAgICAiY29tLmFw
cGxlLlNhZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAg
ICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1
c2hFbmRwb2ludDMiX3MsCisgICAgICAgIHsgOSwgMTAgfSwKKyAgICAgICAgeyAxMCwgMTEgfSwK
KyAgICAgICAgeyAxMSwgMTIgfSwKKyAgICAgICAgeyAxMiwgMTMgfQorICAgIH07CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDE7CisgICAgc3RkOjpvcHRpb25h
bDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQyOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29y
ZD4gaW5zZXJ0UmVzdWx0MzsKKworICAgIHZvaWQgU2V0VXAoKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoZGIgPSBQdXNoRGF0YWJhc2U6OmNyZWF0ZUluTWVtb3J5KCkpOworICAg
ICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1bHQxID0gZGItPmluc2VydFJlY29yZChQdXNoUmVj
b3JkKHJlY29yZDEpKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDIgPSBkYi0+
aW5zZXJ0UmVjb3JkKFB1c2hSZWNvcmQocmVjb3JkMikpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
aW5zZXJ0UmVzdWx0MyA9IGRiLT5pbnNlcnRSZWNvcmQoUHVzaFJlY29yZChyZWNvcmQzKSkpOwor
ICAgIH0KK307CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwg
Y29uc3QgUHVzaFJlY29yZCYgYikKK3sKKyAgICByZXR1cm4gYS5yb3dJRCA9PSBiLnJvd0lECisg
ICAgICAgICYmIGEuYnVuZGxlSUQgPT0gYi5idW5kbGVJRAorICAgICAgICAmJiBhLnNlY3VyaXR5
T3JpZ2luID09IGIuc2VjdXJpdHlPcmlnaW4KKyAgICAgICAgJiYgYS5zY29wZSA9PSBiLnNjb3Bl
CisgICAgICAgICYmIGEuZW5kcG9pbnQgPT0gYi5lbmRwb2ludAorICAgICAgICAmJiBhLnNlcnZl
clZBUElEUHVibGljS2V5ID09IGIuc2VydmVyVkFQSURQdWJsaWNLZXkKKyAgICAgICAgJiYgYS5j
bGllbnRQdWJsaWNLZXkgPT0gYi5jbGllbnRQdWJsaWNLZXkKKyAgICAgICAgJiYgYS5jbGllbnRQ
cml2YXRlS2V5ID09IGIuY2xpZW50UHJpdmF0ZUtleQorICAgICAgICAmJiBhLnNoYXJlZEF1dGhT
ZWNyZXQgPT0gYi5zaGFyZWRBdXRoU2VjcmV0CisgICAgICAgICYmIGEuZXhwaXJhdGlvblRpbWUg
PT0gYi5leHBpcmF0aW9uVGltZQorICAgICAgICAmJiBhLndha2VTdGF0ZSA9PSBiLndha2VTdGF0
ZTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEluc2VydFJlY29yZCkKK3sKKyAgICBh
dXRvIGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CisgICAgZXhwZWN0ZWRSZWNvcmQxLnJvd0lE
ID0gMTsKKyAgICBFWFBFQ1RfVFJVRShleHBlY3RlZFJlY29yZDEgPT0gKmluc2VydFJlc3VsdDEp
OworCisgICAgYXV0byBleHBlY3RlZFJlY29yZDIgPSByZWNvcmQyOworICAgIGV4cGVjdGVkUmVj
b3JkMi5yb3dJRCA9IDI7CisgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWRSZWNvcmQyID09ICppbnNl
cnRSZXN1bHQyKTsKKworICAgIC8vIFNpbmNlIHJlY29yZDMgaXMgaW4gdGhlIHNhbWUgU3Vic2Ny
aXB0aW9uU2V0IGFzIHJlY29yZDEsIGl0IHNob3VsZAorICAgIC8vIGluaGVyaXQgcmVjb3JkMSdz
IHdha2Ugc3RhdGUuCisgICAgYXV0byBleHBlY3RlZFJlY29yZDMgPSByZWNvcmQzOworICAgIGV4
cGVjdGVkUmVjb3JkMy5yb3dJRCA9IDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLndha2VTdGF0ZSA9
IGV4cGVjdGVkUmVjb3JkMS53YWtlU3RhdGU7CisgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWRSZWNv
cmQzID09ICppbnNlcnRSZXN1bHQzKTsKKworICAgIC8vIEluc2VydGluZyBhIHJlY29yZCB3aXRo
IHRoZSBzYW1lIChidW5kbGVJRCwgc2NvcGUpIGFzIHJlY29yZCAxIHNob3VsZCBmYWlsLgorICAg
IFB1c2hSZWNvcmQgcmVjb3JkNCA9IHJlY29yZDE7CisgICAgcmVjb3JkNC5lbmRwb2ludCA9ICJo
dHRwczovL3d3dy53ZWJraXQub3JnIl9zOworICAgIEVYUEVDVF9GQUxTRShkYi0+aW5zZXJ0UmVj
b3JkKFdURk1vdmUocmVjb3JkNCkpKTsKKworICAgIEVYUEVDVF9FUShkYi0+Z2V0Um93SURzKCks
IChIYXNoU2V0PGludDY0X3Q+IHsgMSwgMiwgMyB9KSk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJh
c2VUZXN0LCBSZW1vdmVSZWNvcmQpCit7CisgICAgRVhQRUNUX1RSVUUoZGItPnJlbW92ZVJlY29y
ZChyZWNvcmQxLmJ1bmRsZUlELCByZWNvcmQxLnNjb3BlKSk7CisgICAgRVhQRUNUX0ZBTFNFKGRi
LT5yZW1vdmVSZWNvcmQocmVjb3JkMS5idW5kbGVJRCwgcmVjb3JkMS5zY29wZSkpOworICAgIEVY
UEVDVF9FUShkYi0+Z2V0Um93SURzKCksIChIYXNoU2V0PGludDY0X3Q+IHsgMiwgMyB9KSk7Cit9
CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBHZXRSZWNvcmQpCit7CisgICAgYXV0byByZXN1
bHQxID0gZGItPmdldFJlY29yZChyZWNvcmQxLmJ1bmRsZUlELCByZWNvcmQxLnNjb3BlKTsKKyAg
ICBBU1NFUlRfVFJVRShyZXN1bHQxKTsKKyAgICBFWFBFQ1RfVFJVRSgqcmVzdWx0MSA9PSAqaW5z
ZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIHJlc3VsdDIgPSBkYi0+Z2V0UmVjb3JkKHJlY29yZDEu
YnVuZGxlSUQsICJmb28iX3MpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQyKTsKK30KKworVEVT
VF9GKFB1c2hEYXRhYmFzZVRlc3QsIEVudW1lcmF0ZVdha2VTdGF0ZXMpCit7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGV4cGVjdGVkV2FrZVN0YXRlcyB7CisgICAgICAgIHsg
ImNvbS5hcHBsZS5TYWZhcmk6aHR0cHM6Ly93d3cuYXBwbGUuY29tL21hYyIsIFB1c2hXYWtlU3Rh
dGU6Ok9wcG9ydHVuaXN0aWMgfSwKKyAgICAgICAgeyAiY29tLmFwcGxlLndlYmFwcDpodHRwczov
L3d3dy5hcHBsZS5jb20vaXBob25lIiwgUHVzaFdha2VTdGF0ZTo6V2FraW5nIH0sCisgICAgICAg
IHsgImNvbS5hcHBsZS5TYWZhcmk6aHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSIsIFB1c2hX
YWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfQorICAgIH07CisgICAgSGFzaE1hcDxTdHJpbmcsIFB1
c2hXYWtlU3RhdGU+IGFjdHVhbFdha2VTdGF0ZXM7CisKKyAgICBkYi0+ZW51bWVyYXRlV2FrZVN0
YXRlcyhbJmFjdHVhbFdha2VTdGF0ZXNdKFN0cmluZyYmIGJ1bmRsZUlELCBTdHJpbmcmJiBzY29w
ZSwgUHVzaFdha2VTdGF0ZSBzdGF0ZSkgeworICAgICAgICBhY3R1YWxXYWtlU3RhdGVzLmFkZChi
dW5kbGVJRCArICI6Il9zICsgc2NvcGUsIHN0YXRlKTsKKyAgICB9KTsKKworICAgIEVYUEVDVF9F
UShleHBlY3RlZFdha2VTdGF0ZXMsIGFjdHVhbFdha2VTdGF0ZXMpOworfQorCitURVNUX0YoUHVz
aERhdGFiYXNlVGVzdCwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRvd25ncmFkZSkKK3sKKyAgICBGaWxl
U3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gcGF0aCA9IEZpbGVT
eXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJQdXNoRGF0YWJhc2UiLCBoYW5kbGUsICIuZGIiKTsK
KyAgICBBU1NFUlRfVFJVRShGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworICAg
IEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOworCisgICAgeworICAgICAgICBTUUxpdGVE
YXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
ZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAxMDAwMDAiX3MpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlUmVzdWx0ID0gUHVzaERhdGFiYXNlOjpj
cmVhdGUocGF0aCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CisgICAgfQor
CisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRo
KTsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHZlcnNpb24gPSAwOworICAgICAgICAgICAg
YXV0byBzcWwgPSBkYi5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsK
KyAgICAgICAgICAgIGlmIChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAg
ICAgICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBFWFBF
Q1RfR1QodmVyc2lvbiwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfTFQodmVyc2lvbiwgMTAwMDAw
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQor
CisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447185</attachid>
            <date>2021-12-14 17:44:24 -0800</date>
            <delta_ts>2022-01-28 22:31:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20211214174424.patch</filename>
            <type>text/plain</type>
            <size>50104</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2JmMDE5YzZlNDEzZTQ2
ZDYwMGFlOWM2OWNjNTkzZjcyMGQ5YmYzNi4uNzE5NzFjODFiZGFjNzQxMTRiMDZlNjU2YmFlZDQx
Zjc3NDUwZGVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTEyLTEwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHVzaFJlY29yZDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZyZXNoUHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpQdXNoRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50T25RdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzcWxWYWx1ZUZyb21XYWxsVGltZSk6CisgICAgICAgIChXZWJDb3JlOjp3YWxsVGltZUZyb21T
UUxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wbGV0ZU9uTWFpblF1ZXVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1c2hEYXRhYmFzZTo6cmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQdXNoUmVjb3JkRnJvbVJvdyk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0
YWJhc2U6OmdldFJlY29yZEJ5VG9waWMpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNl
OjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQdXNoRGF0YWJhc2U6OmdldElkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hE
YXRhYmFzZTo6Z2V0VG9waWNzQnlXYWtlU3RhdGUpOgorICAgICAgICAqIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9Mb2dnaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpvcGVuKToKKwogMjAyMS0xMi0xNCAg
QmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgd2ViIHB1c2ggbWVzc2Fn
ZSBkZWNyeXB0aW9uIHJvdXRpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyNGU0NjFlN2RlZTgz
YjBiYzhlZWE2OTJmMDIzZmUxN2MwNWEyNjRkLi45Y2U1NDJhMGRiMWYyOTFhMTQ0ZTIyZGJjZDAy
N2JkYTBkMGUyYjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTI5MSw2ICsyOTEsNyBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgTW9kdWxlcy9wZXJtaXNzaW9u
cy9QZXJtaXNzaW9uU3RhdGUuaAogCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoQ3J5cHRvLmgK
KyAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFw
aS9QdXNoTWVzc2FnZUNyeXB0by5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoUGVybWlzc2lv
blN0YXRlLmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hTdWJzY3JpcHRpb25EYXRhLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZjkwMTVkZmVmYmQzMGVkYjE2YjRmZTg3NDc1MzM3OWM2NDUzZTk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2Uu
Y3BwCkBAIC0wLDAgKzEsNDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlB1c2hEYXRhYmFzZS5oIgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAi
U1FMaXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIu
aD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKworI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKFB1
c2gsICIlcCAtIFB1c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVm
aW5lIFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUihmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1Io
UHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKSBQVVNIREJfUkVMRUFTRV9MT0df
RVJST1IoIkZhaWxlZCB0byBiaW5kIHN0YXRlbWVudCAoJWQpOiAlcyIsIG1fZGItPmxhc3RFcnJv
cigpLCBtX2RiLT5sYXN0RXJyb3JNc2coKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgY29uc3RleHByIGludCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiA9IDE7CisKK3N0YXRp
YyBjb25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7
CisgICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywKKyAgICAiQ1JFQVRFIFRB
QkxFIFN1YnNjcmlwdGlvblNldHMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEws
IgorICAgICIgIGJ1bmRsZUlEIFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHNlY3VyaXR5T3JpZ2lu
IFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHdha2VTdGF0ZSBJTlQgTk9UIE5VTEwsIgorICAgICIg
IFVOSVFVRShidW5kbGVJRCwgc2VjdXJpdHlPcmlnaW4pKSJfcywKKyAgICAiQ1JFQVRFIFRBQkxF
IFN1YnNjcmlwdGlvbnMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsIgorICAg
ICIgIHN1YnNjcmlwdGlvblNldElEIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc2NvcGUgVEVYVCBO
T1QgTlVMTCwiCisgICAgIiAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgdG9waWMg
VEVYVCBOT1QgTlVMTCBVTklRVUUsIgorICAgICIgIHNlcnZlclZBUElEUHVibGljS2V5IEJMT0Ig
Tk9UIE5VTEwsIgorICAgICIgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAi
ICBjbGllbnRQcml2YXRlS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIHNoYXJlZEF1dGhTZWNy
ZXQgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAgZXhwaXJhdGlvblRpbWUgSU5ULCIKKyAgICAiICBV
TklRVUUoc2NvcGUsIHN1YnNjcmlwdGlvblNldElEKSkiX3MsCisgICAgIkNSRUFURSBJTkRFWCBT
dWJzY3JpcHRpb25zX1N1YnNjcmlwdGlvblNldElEX0luZGV4IE9OIFN1YnNjcmlwdGlvbnMoc3Vi
c2NyaXB0aW9uU2V0SUQpIl9zLAorICAgICJQUkFHTUEgdXNlcl92ZXJzaW9uID0gMSJfcworfTsK
KworUHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIFB1
c2hSZWNvcmQgcmVzdWx0OworICAgIHJlc3VsdC5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAg
ICByZXN1bHQuYnVuZGxlSUQgPSBidW5kbGVJRC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQu
c2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbi5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1
bHQuc2NvcGUgPSBzY29wZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQuZW5kcG9pbnQgPSBl
bmRwb2ludC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQudG9waWMgPSB0b3BpYy5pc29sYXRl
ZENvcHkoKTsKKyAgICByZXN1bHQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBzZXJ2ZXJWQVBJRFB1
YmxpY0tleTsKKyAgICByZXN1bHQuY2xpZW50UHVibGljS2V5ID0gY2xpZW50UHVibGljS2V5Owor
ICAgIHJlc3VsdC5jbGllbnRQcml2YXRlS2V5ID0gY2xpZW50UHJpdmF0ZUtleTsKKyAgICByZXN1
bHQuc2hhcmVkQXV0aFNlY3JldCA9IHNoYXJlZEF1dGhTZWNyZXQ7CisgICAgcmVzdWx0LmV4cGly
YXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWU7CisgICAgcmVzdWx0Lndha2VTdGF0ZSA9IHdha2VT
dGF0ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UHVzaERhdGFiYXNlPiBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgaWYgKHBhdGggPT0gIjptZW1vcnk6Il9zIHx8ICFTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUocGF0aCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0ZShwYXRoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFB1
c2hEYXRhYmFzZT4gUHVzaERhdGFiYXNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiUHVzaERhdGFiYXNlIEkvTyBUaHJl
YWQiKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlRGF0YWJhc2U+IGRhdGFiYXNlOworICAg
IGJvb2wgc3RhcnRGcm9tU2NyYXRjaCA9IGZhbHNlOworCisgICAgcXVldWUtPmRpc3BhdGNoU3lu
YyhbcGF0aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKSwgJmRhdGFiYXNlLCAmc3RhcnRGcm9tU2Ny
YXRjaF0oKSB7CisgICAgICAgIGlmIChwYXRoICE9ICI6bWVtb3J5OiJfcyAmJiAhRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhwYXRoKSAmJiAhRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZp
bGVTeXN0ZW06OnBhcmVudFBhdGgocGF0aCkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihQdXNoLCAiQ291bGRuJ3QgY3JlYXRlIFB1c2hEYXRhYmFzZSBwYXJlbnQgZGlyZWN0b3Jp
ZXMgZm9yIHBhdGggJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBkYiA9IFdURjo6bWFrZVVuaXF1ZTxTUUxpdGVE
YXRhYmFzZT4oKTsKKyAgICAgICAgZGItPmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKworICAg
ICAgICBpZiAoIWRiLT5vcGVuKHBhdGgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihQdXNoLCAiQ291bGRuJ3Qgb3BlbiBkYXRhYmFzZSBmaWxlIGF0IHBhdGggJXMiLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aW50IHZlcnNpb24gPSAwOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLT5w
cmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlm
ICghc3FsIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3QgZ2V0IGRhdGFiYXNlIHZlcnNpb24gYXQg
cGF0aCAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVyc2lvbiA9IHNxbC0+Y29sdW1uSW50KDApOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb24gPiBjdXJyZW50UHVzaERhdGFiYXNlVmVy
c2lvbikgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkZvdW5kIG5ld2Vy
IGRhdGFiYXNlIHZlcnNpb24gdGhhbiBleHBlY3RlZCwgc3RhcnRpbmcgZnJvbSBzY3JhdGNoOiAl
cyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBzdGFydEZyb21TY3JhdGNoID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJz
aW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZlcnNpb24pIHsKKyAgICAgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKCpkYik7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IHB1c2hEYXRhYmFzZVNj
aGVtYVYxU3RhdGVtZW50cykgeworICAgICAgICAgICAgICAgIGlmICghZGItPmV4ZWN1dGVDb21t
YW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
UHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBkYXRhYmFzZSBzY2hlbWEgZm9yIHN0YXRlbWVudCAlcyBh
dCBwYXRoICVzIiwgc3RhdGVtZW50LmNoYXJhY3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBkYXRhYmFzZSA9IFdURk1vdmUoZGIpOworICAgIH0pOworCisgICAgaWYgKHN0YXJ0
RnJvbVNjcmF0Y2gpCisgICAgICAgIHJldHVybiBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShwYXRo
KTsKKworICAgIGlmICghZGF0YWJhc2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+KG5ldyBQdXNoRGF0YWJhc2UoV1RG
TW92ZShxdWV1ZSksIFdURk1vdmUoZGF0YWJhc2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+IFB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkoKQoreworICAgIHJldHVy
biBQdXNoRGF0YWJhc2U6OmNyZWF0ZSgiOm1lbW9yeToiX3MpOworfQorCitQdXNoRGF0YWJhc2U6
OlB1c2hEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBzdGQ6OnVuaXF1ZV9wdHI8U1FM
aXRlRGF0YWJhc2U+JiYgZGIpCisgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQorICAgICwg
bV9kYihXVEZNb3ZlKGRiKSkKK3sKK30KKworUHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKCkK
K3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaFN5bmMoW2RiID0gV1RGTW92ZShtX2RiKSwgc3RhdGVt
ZW50cyA9IFdURk1vdmUobV9zdGF0ZW1lbnRzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RhdGVt
ZW50cy5jbGVhcigpOworICAgICAgICBkYi0+Y2xvc2UoKTsKKyAgICB9KTsKK30KKworU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUHVzaERhdGFiYXNlOjpjYWNoZWRTdGF0ZW1lbnRPblF1
ZXVlKEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIGl0ID0gbV9zdGF0ZW1lbnRzLmZp
bmQocXVlcnkpOworICAgIGlmIChpdCAhPSBtX3N0YXRlbWVudHMuZW5kKCkpCisgICAgICAgIHJl
dHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZShpdC0+dmFsdWUucHRyKCkpOworCisg
ICAgYXV0byByZXN1bHQgPSBtX2RiLT5wcmVwYXJlSGVhcFN0YXRlbWVudChxdWVyeSk7CisgICAg
aWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0VSUk9SKCJGYWlsZWQg
d2l0aCAlZCBwcmVwYXJpbmcgc3RhdGVtZW50OiAlIiBQVUJMSUNfTE9HX1NUUklORywgcmVzdWx0
LmVycm9yKCksIHF1ZXJ5LmNoYXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZShudWxscHRyKTsKKyAgICB9CisKKyAgICBhdXRvIHJlZiA9IFdU
Rk1vdmUoKnJlc3VsdCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSByZWYucHRyKCk7CisgICAgbV9z
dGF0ZW1lbnRzLmFkZChxdWVyeSwgV1RGTW92ZShyZWYpKTsKKyAgICByZXR1cm4gU1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUoc3RhdGVtZW50KTsKK30KKworc3RhdGljIFNRTFZhbHVlIHNx
bFZhbHVlRnJvbVdhbGxUaW1lKHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHdhbGxUaW1lKQorewor
ICAgIGlmICh3YWxsVGltZSkKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lLT5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6
b3B0aW9uYWw8V2FsbFRpbWU+IHdhbGxUaW1lRnJvbVNRTFZhbHVlKFNRTFZhbHVlIHZhbHVlKQor
eworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFsdWUpKQorICAgICAg
ICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0ZDo6Z2V0PGRvdWJsZT4odmFsdWUp
KTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVT4KK3N0YXRpYyB2b2lkIGNvbXBsZXRlT25NYWluUXVldWUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChUKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgY29uc3QgVSYgcmVzdWx0KQoreworICAgIFdv
cmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHQgPSBjcm9zc1RocmVhZENvcHkocmVzdWx0KV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9
KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3Jk
JiByZWNvcmQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3Jk
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgcmVjb3JkID0gY3Jvc3NUaHJlYWRDb3B5KHJlY29yZCksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX2RiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKworICAgICAgICBpbnQ2NF90IHN1YnNjcmlwdGlvblNldElEID0gMDsKKworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlNFTEVDVCBy
b3dpZCwgd2FrZVN0YXRlIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSBidW5kbGVJRCA9ID8g
QU5EIHNlY3VyaXR5T3JpZ2luID0gPyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbAorICAgICAg
ICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcmVjb3JkLmJ1bmRsZUlEKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDIsIHJlY29yZC5zZWN1cml0eU9y
aWdpbikgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9H
X0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
c3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlv
blNldElEID0gc3FsLT5jb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgICAgICByZWNvcmQud2Fr
ZVN0YXRlID0gc3RhdGljX2Nhc3Q8UHVzaFdha2VTdGF0ZT4oc3FsLT5jb2x1bW5JbnQoMSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWJzY3JpcHRpb25TZXRJ
RCkgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJJTlNF
UlQgSU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUyg/LCA/LCA/LCA/KSJfcyk7CisgICAgICAg
ICAgICBpZiAoIXNxbAorICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIHRpbWUo
bnVsbHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQo
MiwgcmVjb3JkLmJ1bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwt
PmJpbmRUZXh0KDMsIHJlY29yZC5zZWN1cml0eU9yaWdpbikgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDQsIHN0YXRpY19jYXN0PGludD4ocmVjb3JkLndha2VT
dGF0ZSkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xP
R19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNo
UmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3Vic2NyaXB0aW9uU2V0SUQgPSBtX2RiLT5sYXN0SW5zZXJ0Um93SUQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3Rh
dGVtZW50T25RdWV1ZSgiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoPywgPywgPywg
PywgPywgPywgPywgPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzcWwKKyAgICAgICAg
ICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0aW1lKG51bGxwdHIpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBzdWJzY3JpcHRpb25TZXRJRCkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgzLCByZWNvcmQu
c2NvcGUpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoNCwg
cmVjb3JkLmVuZHBvaW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJp
bmRUZXh0KDUsIHJlY29yZC50b3BpYykgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwg
c3FsLT5iaW5kQmxvYig2LCByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoNywgcmVjb3JkLmNsaWVudFB1Ymxp
Y0tleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig4LCBy
ZWNvcmQuY2xpZW50UHJpdmF0ZUtleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwg
c3FsLT5iaW5kQmxvYig5LCByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVmFsdWUoMTAsIHNxbFZhbHVlRnJvbVdhbGxUaW1l
KHJlY29yZC5leHBpcmF0aW9uVGltZSkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAg
IFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxl
dGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
ICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
c3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSBtX2RiLT5s
YXN0SW5zZXJ0Um93SUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOworCisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIFdURk1vdmUocmVjb3JkKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNl
OjpyZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIodWludDY0X3QgaWRlbnRpZmllciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgaWRlbnRpZmllciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24oKm1fZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisg
ICAgICAgIGJvb2wgaXNMYXN0U3Vic2NyaXB0aW9uSW5TZXQgPSBmYWxzZTsKKyAgICAgICAgaW50
NjRfdCBzdWJzY3JpcHRpb25TZXRJRCA9IDA7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgc3Vic2NyaXB0aW9uU2V0SUQg
RlJPTSBTdWJzY3JpcHRpb25zIFdIRVJFIHJvd2lkID0gPyJfcyk7CisKKyAgICAgICAgICAgIGlm
ICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIGlkZW50aWZpZXIpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAg
ICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWJz
Y3JpcHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMCk7CisgICAgICAgIH0KKworICAgICAg
ICB7CisgICAgICAgICAgICAvLyBUT0RPOiBvbiBTUUxpdGUgPjMuMzUuMCwgd2UgY291bGQgdXNl
IFJFVFVSTklORyB0byBhdm9pZCB0aGUgU0VMRUNUIGFib3ZlLgorICAgICAgICAgICAgYXV0byBz
cWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIFdI
RVJFIHJvd2lkID0gPyJfcyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZElu
dDY0KDEsIGlkZW50aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHN1YnNjcmlwdGlvbiBpbiB0aGUgc3Vic2NyaXB0
aW9uIHNldC4KKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgi
U0VMRUNUIHJvd2lkIEZST00gU3Vic2NyaXB0aW9ucyBXSEVSRSBzdWJzY3JpcHRpb25TZXRJRCA9
ID8iX3MpOworCisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJz
Y3JpcHRpb25TZXRJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JF
TEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpc0xhc3RTdWJzY3JpcHRpb25J
blNldCA9IChzcWwtPnN0ZXAoKSA9PSBTUUxJVEVfRE9ORSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaXNMYXN0U3Vic2NyaXB0aW9uSW5TZXQpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0
aGUgZW50aXJlIHN1YnNjcmlwdGlvbiBzZXQgaWYgaXQgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQg
d2l0aCBhbnkgc3Vic2NyaXB0aW9ucy4KKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3Rh
dGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSByb3dpZCA9
ID8iX3MpOworICAgICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kSW50NjQoMSwgc3Vic2Ny
aXB0aW9uU2V0SUQpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxF
QVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwor
CisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHRydWUpOworICAgIH0pOworfQorCitzdGF0aWMgUHVzaFJlY29yZCBtYWtlUHVzaFJlY29yZEZy
b21Sb3coU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmIHNxbCkKK3sKKyAgICBQdXNoUmVj
b3JkIHJlY29yZDsKKyAgICByZWNvcmQuaWRlbnRpZmllciA9IHNxbC0+Y29sdW1uSW50NjQoMCk7
CisgICAgcmVjb3JkLmJ1bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgIHJlY29yZC5z
ZWN1cml0eU9yaWdpbiA9IHNxbC0+Y29sdW1uVGV4dCgyKTsKKyAgICByZWNvcmQuc2NvcGUgPSBz
cWwtPmNvbHVtblRleHQoMyk7CisgICAgcmVjb3JkLmVuZHBvaW50ID0gc3FsLT5jb2x1bW5UZXh0
KDQpOworICAgIHJlY29yZC50b3BpYyA9IHNxbC0+Y29sdW1uVGV4dCg1KTsKKyAgICByZWNvcmQu
c2VydmVyVkFQSURQdWJsaWNLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNik7CisgICAgcmVjb3JkLmNs
aWVudFB1YmxpY0tleSA9IHNxbC0+Y29sdW1uQmxvYig3KTsKKyAgICByZWNvcmQuY2xpZW50UHJp
dmF0ZUtleSA9IHNxbC0+Y29sdW1uQmxvYig4KTsKKyAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3Jl
dCA9IHNxbC0+Y29sdW1uQmxvYig5KTsKKyAgICByZWNvcmQuZXhwaXJhdGlvblRpbWUgPSB3YWxs
VGltZUZyb21TUUxWYWx1ZShzcWwtPmNvbHVtblZhbHVlKDEwKSk7CisgICAgcmVjb3JkLndha2VT
dGF0ZSA9IHN0YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDExKSk7CisK
KyAgICByZXR1cm4gcmVjb3JkOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UmVjb3JkQnlU
b3BpYyhjb25zdCBTdHJpbmcmIHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0
aW9uYWw8UHVzaFJlY29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHRvcGljID0gY3Jvc3NUaHJlYWRDb3B5KHRvcGljKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgLy8gRm9yY2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhlIFN1YnNjcmlwdGlvbnMoc2NvcGUp
IGluZGV4IGZpcnN0IHZpYSBDUk9TUyBKT0lOLgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudE9uUXVldWUoCisgICAgICAgICAgICAiU0VMRUNUICIKKyAgICAgICAgICAgICIgIHN1
Yi5yb3dJRCwgc3MuYnVuZGxlSUQsIHNzLnNlY3VyaXR5T3JpZ2luLCBzdWIuc2NvcGUsIHN1Yi5l
bmRwb2ludCwgc3ViLnRvcGljLCAiCisgICAgICAgICAgICAiICBzdWIuc2VydmVyVkFQSURQdWJs
aWNLZXksIHN1Yi5jbGllbnRQdWJsaWNLZXksIHN1Yi5jbGllbnRQcml2YXRlS2V5LCAiCisgICAg
ICAgICAgICAiICBzdWIuc2hhcmVkQXV0aFNlY3JldCwgc3ViLmV4cGlyYXRpb25UaW1lLCBzcy53
YWtlU3RhdGUgIgorICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIgIgorICAgICAg
ICAgICAgIkNST1NTIEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAiT04g
c3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQgIgorICAgICAgICAgICAgIldIRVJFIHN1
Yi50b3BpYyA9ID8iX3MpOworCisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZFRleHQoMSwg
dG9waWMpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJ
TkRfRVJST1IoKTsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBtYWtlUHVzaFJlY29yZEZyb21Sb3coc3FsKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGJ1bmRsZUlEID0g
Y3Jvc3NUaHJlYWRDb3B5KGJ1bmRsZUlEKSwgc2NvcGUgPSBjcm9zc1RocmVhZENvcHkoc2NvcGUp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICAvLyBGb3JjZSBTUUxpdGUgdG8gY29uc3VsdCB0aGUgU3Vic2NyaXB0aW9u
cyhzY29wZSkgaW5kZXggZmlyc3QgdmlhIENST1NTIEpPSU4uCisgICAgICAgIGF1dG8gc3FsID0g
Y2FjaGVkU3RhdGVtZW50T25RdWV1ZSgKKyAgICAgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAg
ICAgIiAgc3ViLnJvd0lELCBzcy5idW5kbGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29w
ZSwgc3ViLmVuZHBvaW50LCBzdWIudG9waWMsICIKKyAgICAgICAgICAgICIgIHN1Yi5zZXJ2ZXJW
QVBJRFB1YmxpY0tleSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3ViLmNsaWVudFByaXZhdGVLZXks
ICIKKyAgICAgICAgICAgICIgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlvblRp
bWUsIHNzLndha2VTdGF0ZSAiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAi
CisgICAgICAgICAgICAiQ1JPU1MgSk9JTiBTdWJzY3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAg
ICAgICJPTiBzdWIuc3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICAgICAi
V0hFUkUgc3ViLnNjb3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBp
ZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5i
aW5kVGV4dCgyLCBidW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7
IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRlT25N
YWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1ha2VQdXNoUmVjb3JkRnJvbVJv
dyhzcWwpKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldElkZW50aWZpZXJz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxpbnQ2NF90PiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgSGFz
aFNldDxpbnQ2NF90PiByZXN1bHQ7CisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50
T25RdWV1ZSgiU0VMRUNUIHJvd2lkIEZST00gU3Vic2NyaXB0aW9ucyJfcyk7CisgICAgICAgIHdo
aWxlIChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJlc3Vs
dC5hZGQoc3FsLT5jb2x1bW5JbnQ2NCgwKSk7CisKKyAgICAgICAgY29tcGxldGVPbk1haW5RdWV1
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9KTsK
K30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldFRvcGljc0J5V2FrZVN0YXRlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUHVzaFdha2VTdGF0ZVRvVG9waWNNYXAmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGludCBudW1i
ZXJPZldha2VTdGF0ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KFB1c2hXYWtlU3RhdGU6Ok51bWJlck9m
U3RhdGVzKTsKKyAgICAgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiB0b3BpY3NCeVdha2VTdGF0
ZShudW1iZXJPZldha2VTdGF0ZXMpOyAvLyB1c2VkIGJlY2F1c2UgSGFzaE1hcDo6aXNvbGF0ZWRD
b3B5IGRvZXNuJ3QgZXhpc3QKKworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9u
UXVldWUoCisgICAgICAgICAgICAiU0VMRUNUIHNzLndha2VTdGF0ZSwgc3ViLnRvcGljICIKKyAg
ICAgICAgICAgICJGUk9NIFN1YnNjcmlwdGlvbnMgc3ViICIKKyAgICAgICAgICAgICJKT0lOIFN1
YnNjcmlwdGlvblNldHMgc3MgIgorICAgICAgICAgICAgIk9OIHN1Yi5zdWJzY3JpcHRpb25TZXRJ
RCA9IHNzLnJvd2lkIl9zKTsKKyAgICAgICAgaWYgKCFzcWwpIHsKKyAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICBXb3JrUXVldWU6Om1haW4o
KS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB3aGlsZSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgYXV0byBw
dXNoV2FrZVN0YXRlID0gc3FsLT5jb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIHRvcGlj
ID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgICAgICAgICAgaWYgKHB1c2hXYWtlU3RhdGUgPj0g
MCAmJiBwdXNoV2FrZVN0YXRlIDwgbnVtYmVyT2ZXYWtlU3RhdGVzKQorICAgICAgICAgICAgICAg
IHRvcGljc0J5V2FrZVN0YXRlW3B1c2hXYWtlU3RhdGVdLmFwcGVuZChXVEZNb3ZlKHRvcGljKSk7
CisgICAgICAgIH0KKworICAgICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9waWNzQnlXYWtlU3Rh
dGUgPSBjcm9zc1RocmVhZENvcHkodG9waWNzQnlXYWtlU3RhdGUpXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgUHVzaFdha2VTdGF0ZVRvVG9waWNNYXAgcmVzdWx0OworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KFB1c2hXYWtlU3RhdGU6Ok51bWJlck9m
U3RhdGVzKTsgKytpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3RhdGljX2Nhc3Q8UHVz
aFdha2VTdGF0ZT4oaSksIFdURk1vdmUodG9waWNzQnlXYWtlU3RhdGVbaV0pKTsKKyAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0
YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYWJlNjk5MmIzMTFjY2MyNDllYzc0NWNmYWEzM2FiMjhiODBh
M2M3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9Q
dXNoRGF0YWJhc2UuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gV2FrZSBzdGF0ZSB0aGF0IGFwcGxpZXMgZm9yIGRldmljZXMgdGhh
dCByYWNlLXRvLXNsZWVwLgorZW51bSBjbGFzcyBQdXNoV2FrZVN0YXRlIDogdWludDhfdCB7Cisg
ICAgV2FraW5nLCAvLyBBbGwgcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgT3Bwb3J0dW5p
c3RpYywgLy8gTG93IHByaW9yaXR5IHB1c2hlcyBtYXkgbm90IHdha2UgZGV2aWNlLgorICAgIE5v
bldha2luZywgLy8gTm8gcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgTnVtYmVyT2ZTdGF0
ZXMKK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAgICBpbnQ2NF90IGlkZW50aWZpZXIgeyAw
IH07CisgICAgU3RyaW5nIGJ1bmRsZUlEOworICAgIFN0cmluZyBzZWN1cml0eU9yaWdpbjsKKyAg
ICBTdHJpbmcgc2NvcGU7CisgICAgU3RyaW5nIGVuZHBvaW50OworICAgIFN0cmluZyB0b3BpYzsK
KyAgICBWZWN0b3I8dWludDhfdD4gc2VydmVyVkFQSURQdWJsaWNLZXk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGNsaWVudFB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4gY2xpZW50UHJpdmF0
ZUtleTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2hhcmVkQXV0aFNlY3JldDsKKyAgICBzdGQ6Om9w
dGlvbmFsPFdhbGxUaW1lPiBleHBpcmF0aW9uVGltZSB7IH07CisgICAgUHVzaFdha2VTdGF0ZSB3
YWtlU3RhdGUgeyBQdXNoV2FrZVN0YXRlOjpXYWtpbmcgfTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IFB1c2hSZWNvcmQgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Cit9OworCitjbGFzcyBQdXNoRGF0YWJh
c2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFB1c2hEYXRhYmFzZT4gY3JlYXRlSW5NZW1vcnkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+UHVz
aERhdGFiYXNlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydFJlY29yZChjb25z
dCBQdXNoUmVjb3JkJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hS
ZWNvcmQ+JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlY29yZEJ5SWRl
bnRpZmllcih1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRT
Y29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChI
YXNoU2V0PGludDY0X3Q+JiYpPiYmKTsKKworICAgIHVzaW5nIFB1c2hXYWtlU3RhdGVUb1RvcGlj
TWFwID0gSGFzaE1hcDxQdXNoV2FrZVN0YXRlLCBWZWN0b3I8U3RyaW5nPiwgV1RGOjpJbnRIYXNo
PFB1c2hXYWtlU3RhdGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFB1c2hXYWtlU3RhdGU+
PjsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFRvcGljc0J5V2FrZVN0YXRlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoUHVzaFdha2VTdGF0ZVRvVG9waWNNYXAmJik+JiYpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IFB1c2hEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmLCBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+JiYpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudE9uUXVldWUoQVNDSUlMaXRlcmFs
IHF1ZXJ5KTsKKworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RiOworICAgIEhhc2hNYXA8Y29uc3QgY2hh
ciosIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX3N0YXRlbWVudHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDY0MDk3MjdlYTQ4MTNjYjJkYzhhZmVjNDAzNmE3OGZh
YzM1YzE5NmYuLmI5MTg4ODEwYjg0MzI0MDQ3NGM0OGE5NzdiN2FhNzZlYzM4NzQyZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yNTgsNiArMjU4LDcgQEAgTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0Vu
dGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0dXJlL0hU
TUxWaWRlb0VsZW1lbnRQaWN0dXJlSW5QaWN0dXJlLmNwcAogTW9kdWxlcy9waWN0dXJlaW5waWN0
dXJlL1BpY3R1cmVJblBpY3R1cmVXaW5kb3cuY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hDcnlw
dG8uY3BwCitNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAKIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaEV2ZW50LmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNoTWVzc2FnZUNyeXB0by5jcHAK
IE1vZHVsZXMvcHVzaC1hcGkvUHVzaE1lc3NhZ2VEYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ3M2I3ODliNDQzZTI4
MDhmZWVjM2IxMTFiMmU2YjFlNDY3YjQzNGUuLjI4NzUwZWU1MGEwOGI0NDkwNmZmMmNjOGFlMDNl
Mjg5MmQ4YTg1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTU0MzgsNiArNTQzOCw3IEBACiAJCUVCM0MyOUI3MjcyOUMzOEMw
MEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCMTI3MjlDMzZEMDBGQjY1
QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oICovOyB9OwogCQlFQkE3NUM0
NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBNzVDNDIyNzVFQkRBQjAwRDZEMzFDIC8qIFB1c2hD
cnlwdG8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFQkE3NUM0NzI3NUVDNjIxMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQTc1QzQwMjc1RUJEQUEw
MEQ2RDMxQyAvKiBQdXNoTWVzc2FnZUNyeXB0by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUVCOUFEOENCMjc2NDZFOTQwMEQ4OTNBNCAvKiBQdXNo
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEVCOUFEOEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQkI5NzM4MTI3MTAwNjcxMDA3
NzMyRUYgLyogUHVzaE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEVCQjk3MzgwMjcxMDA2NTQwMDc3MzJFRiAvKiBQdXNoTWFuYWdlci5oICov
OyB9OwogCQlFQkI5NzM4MjI3MTAwNjc2MDA3NzMyRUYgLyogUHVzaFBlcm1pc3Npb25TdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJCOTczNzgy
NzEwMDY1MTAwNzczMkVGIC8qIFB1c2hQZXJtaXNzaW9uU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQkI5NzM4MzI3MTAwNjg0MDA3NzMy
RUYgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblB1c2hBUEkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQjk3MzdBMjcxMDA2NTIwMDc3MzJFRiAv
KiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUHVzaEFQSS5oICovOyB9OwpAQCAtMTc1ODgsNiAr
MTc1ODksOCBAQAogCQlFQkE3NUM0MTI3NUVCREFCMDBENkQzMUMgLyogUHVzaENyeXB0by5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQdXNoQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRUJBNzVDNDIyNzVFQkRBQjAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHVzaENyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE3
NUM0NTI3NUVDNThFMDBENkQzMUMgLyogUHVzaENyeXB0b0NvY29hLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFB1c2hDcnlwdG9Db2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUVCOUFEOEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHVzaERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUVCOUFEOENBMjc2NDZFOTEwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFiYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJCOTczNzgyNzEwMDY1MTAwNzczMkVGIC8qIFB1
c2hQZXJtaXNzaW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVzaFBlcm1pc3Npb25TdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkI5NzM3QTI3MTAwNjUyMDA3NzMyRUYg
LyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblB1c2hBUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvblB1c2hBUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRUJCOTczN0IyNzEwMDY1MjAwNzczMkVGIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b24rUHVzaEFQSS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gIlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24rUHVzaEFQSS5p
ZGwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwNDQsNiArMjEwNDcsOCBAQAog
CQkJCUVCQTc1QzQ0Mjc1RUM1NjAwMEQ2RDMxQyAvKiBjb2NvYSAqLywKIAkJCQlFQkE3NUM0MTI3
NUVCREFCMDBENkQzMUMgLyogUHVzaENyeXB0by5jcHAgKi8sCiAJCQkJRUJBNzVDNDIyNzVFQkRB
QjAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uaCAqLywKKwkJCQlFQjlBRDhDQTI3NjQ2RTkxMDBEODkz
QTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLywKKwkJCQlFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQg
LyogUHVzaERhdGFiYXNlLmggKi8sCiAJCQkJRUIwRkI2RkQyNzBEMEFFODAwRjc4MTBEIC8qIFB1
c2hFbmNyeXB0aW9uS2V5TmFtZS5oICovLAogCQkJCUVCMEZCNzAwMjcwRDBBRUEwMEY3ODEwRCAv
KiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaWRsICovLAogCQkJCTQxOEZDQkJCMjcwNkU0RjYwMEY5
NkVDQSAvKiBQdXNoRXZlbnQuY3BwICovLApAQCAtMzY0NDUsNiArMzY0NTAsNyBAQAogCQkJCTAw
ODFGRjAwMTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFQkE3NUM0NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRUI5QUQ4Q0IyNzY0NkU5NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUIwRkI3MDgyNzBEMEIxMDAwRjc4MTBEIC8qIFB1c2hF
bmNyeXB0aW9uS2V5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzEyNzA2RTRGQjAw
Rjk2RUNBIC8qIFB1c2hFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzIyNzA2RTUw
MTAwRjk2RUNBIC8qIFB1c2hFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTG9nZ2luZy5oCmluZGV4IGRjMGY1MDk4Yjg3ZjE4NDU1MjViZTNjMGJhNDFmNzY3NWIxNDA0
N2YuLjAzNDZjMzg3YzEyZTA1MzUwYWE1MWQ0NTZkOTIyOGU4MjY1NTc3ODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTk2LDYgKzk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIE0oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpIFwKICAgICBNKFByb2Nlc3MpIFwKICAgICBN
KFByb2dyZXNzKSBcCisgICAgTShQdXNoKSBcCiAgICAgTShSZW1vdGVJbnNwZWN0b3IpIFwKICAg
ICBNKFJlcXVlc3RBbmltYXRpb25GcmFtZSkgXAogICAgIE0oUmVzb3VyY2VMb2FkaW5nKSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCA1
MDAzMGI1MmMxODNiMTczZTY5ZmRhMjEzNmFlNjYxZWZlNGNhMmVmLi4xYzBmY2U2MjgxZTY5ZTcz
YjQ3ZjgxMzhlMWI4MGIyMzQ5NzkzNGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTE0OCwxNCArMTQ4LDE3IEBAIGJvb2wgU1FMaXRl
RGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUp
CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRl
bXBfc3RvcmUgdG8gbWVtb3J5Iik7CiAgICAgfQogCi0gICAgaWYgKG9wZW5Nb2RlICE9IE9wZW5N
b2RlOjpSZWFkT25seSkKLSAgICAgICAgdXNlV0FMSm91cm5hbE1vZGUoKTsKLQotICAgIGF1dG8g
c2htRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVuYW1lLCAiLXNobSJfcyk7Ci0gICAgaWYgKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpKSB7Ci0gICAgICAgIGlmICghRmlsZVN5
c3RlbTo6aXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1lKSkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRkFVTFQoU1FMRGF0YWJhc2UsICJPcGVuZWQgYW4gU1FMaXRlIGRh
dGFiYXNlIHdpdGggYSBDbGFzcyBBIC1zaG0gZmlsZS4gVGhpcyBtYXkgdHJpZ2dlciBhIGNyYXNo
IHdoZW4gdGhlIHVzZXIgbG9ja3MgdGhlIGRldmljZS4gKCVzKSIsIHNobUZpbGVOYW1lLmxhdGlu
MSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5
TWFwRm9yUGF0aChzaG1GaWxlTmFtZSk7CisgICAgYm9vbCBpc0luTWVtb3J5ID0gZmlsZW5hbWUg
PT0gIjptZW1vcnk6Il9zOworICAgIGlmICghaXNJbk1lbW9yeSkgeworICAgICAgICBpZiAob3Bl
bk1vZGUgIT0gT3Blbk1vZGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgdXNlV0FMSm91cm5hbE1v
ZGUoKTsKKworICAgICAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlbmFtZSwg
Ii1zaG0iX3MpOworICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFt
ZSkpIHsKKyAgICAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6aXNTYWZlVG9Vc2VNZW1vcnlNYXBG
b3JQYXRoKHNobUZpbGVOYW1lKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxU
KFNRTERhdGFiYXNlLCAiT3BlbmVkIGFuIFNRTGl0ZSBkYXRhYmFzZSB3aXRoIGEgQ2xhc3MgQSAt
c2htIGZpbGUuIFRoaXMgbWF5IHRyaWdnZXIgYSBjcmFzaCB3aGVuIHRoZSB1c2VyIGxvY2tzIHRo
ZSBkZXZpY2UuICglcykiLCBzaG1GaWxlTmFtZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgIEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVO
YW1lKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFiOGE4M2I2NTQ3YjA2ZTI4NjQ3
NjIzOWQxYmIxMWQwODRlMTgzMjcuLjEzZjQ3MDE4ZmI4ZDA5YWMyZGM4ODgwYWU3M2IwNzQzYWE5
ODRhZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMSBAQAorMjAyMS0xMi0xMCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgUHVzaERhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQxOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9QdXNoRGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hE
YXRhYmFzZVRlc3Q6Omluc2VydFJlY29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNo
RGF0YWJhc2VUZXN0OjpyZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVjb3JkQnlUb3BpYyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZp
ZXJBbmRTY29wZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0Ojpn
ZXRJZGVudGlmaWVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0
OjpnZXRUb3BpY3NCeVdha2VTdGF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjEtMTItMTMgIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgUENNOiBSZW1vdmUg
b2xkIERCIHVwZGF0ZSBhbmQgbWlncmF0aW9uIGNvZGUsIGFuZCBhZGQgYSB1bml0IHRlc3QgZm9y
IGRlc3RpbmF0aW9uIHRva2VuIERCIGNvbHVtbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
N2Y2OTE1NTNlM2U0MzNkMjI1ZjMzNDNhNjE3ZjUwZDQ2OWVmODI4NS4uOWI1NTgzNGUyNWYyYTkw
MjYxMDc5ZjlkMDEyZDFkNzA0NDlkYTBkNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk5
Myw2ICs5OTMsNyBAQAogCQlFNUFBNDJGMjI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFj
ZUlkaW9tVXBkYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTVBQTQyRjEyNTkxMjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0
ZS5tbSAqLzsgfTsKIAkJRTVBQThEMUQyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3Rz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQThE
MUMyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tICovOyB9OwogCQlFQjIzMEQ0
MTI0NUU4MTNGMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjMwRDNEMjQ1RTcyMkUw
MEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi87IH07CisJCUVCOUFEOEM3Mjc2NDZF
NzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRh
YmFzZS5jcHAgKi87IH07CiAJCUVDQTY4MENFMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGls
aXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
Q0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovOyB9OwogCQlG
NDAxMEI4MDI0REEyNEFDMDBBODc2RTIgLyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAxMEI3RjI0REEyNEFD
MDBBODc2RTIgLyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gKi87IH07CiAJCUY0MDEwQjgzMjRE
QTI2N0YwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDEwQjgxMjREQTI2N0YwMEE4NzZFMiAvKiBQb3NlQXND
bGFzcy5tbSAqLzsgfTsKQEAgLTI5MjEsNiArMjkyMiw3IEBACiAJCUU1QUE4RDFDMjUxNTFDQzYw
MDUxQ0M0NSAvKiBEYXRlSW5wdXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGVJ
bnB1dFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRDI0NUU3
MjJFMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gSURCQ2hlY2twb2ludFdBTC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFQjIzMEQzRTI0NUU3MjYzMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQkNoZWNrcG9pbnRXQUwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAv
KiBQdXNoRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHVzaERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUM3OUYxNjhC
RTQ1NEU1NzlFNDE3QjA1IC8qIE1hcmthYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1hcmthYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RUNBNjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0cmluZ1V0aWxpdGllcy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNGQzNFRTIxMzY3OEI3MzAwMTI2QTY1IC8qIGxpYmd0
ZXN0LmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBh
cmNoaXZlLmFyOyBwYXRoID0gbGliZ3Rlc3QuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKQEAgLTM3MTUsNiArMzcxNyw3IEBACiAJCQkJQUE5NkNBQjQyMUM3REI0MjAwRkQy
Rjk3IC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk2QjBBMDdGNjIxRkE5QzJCMDBE
NTczOTEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwICovLAogCQkJCTA0MUExRTMzMjE2
RkZEQkMwMDc4OUUwQSAvKiBQdWJsaWNTdWZmaXguY3BwICovLAorCQkJCUVCOUFEOEM2Mjc2NDZF
NzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovLAogCQkJCTZCNEU4NjFCMjIyMEE1NTIw
MDIyRjM4OSAvKiBSZWdpc3RyYWJsZURvbWFpbi5jcHAgKi8sCiAJCQkJRjQxOEJFMTQxRjcxQjdE
QzAwMTk3MEU2IC8qIFJvdW5kZWRSZWN0VGVzdHMuY3BwICovLAogCQkJCTQxODFDNjJDMjU1QTg5
MTEwMEFFQjBGRiAvKiBSVENSdHBTRnJhbWVUcmFuc2Zvcm1lclRlc3RzLmNwcCAqLywKQEAgLTU2
MDksNiArNTYxMiw3IEBACiAJCQkJNDY0N0IxMjYxRUJBM0I4NTAwNDFEN0VGIC8qIFByb2Nlc3NE
aWRUZXJtaW5hdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVDMkE4NTYyNENFQjY1RjAwQURC
QzM1IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNDFBMUUzNDIxNkZG
REJDMDA3ODlFMEEgLyogUHVibGljU3VmZml4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUVCOUFE
OEM3Mjc2NDZFNzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNkI0RTg2MUMyMjIwQTU1MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDQ0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0
ZXJDcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMg
LyogUmVuZGVyZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY1NTRhNWY2ZTMyM2YyOWQwZmVhNWI4MDdjNjhkN2FhMmU1YmQxMjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNw
cApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5
c3RlbS5oPgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBQdXNoRGF0YWJh
c2VUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoRGF0YWJhc2U+IGRiOworCisgICAgUHVzaFJlY29yZCByZWNvcmQxIHsKKyAgICAg
ICAgMCwKKyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCisgICAgICAgICJodHRwczovL3d3
dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20vbWFjIl9zLAor
ICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQxIl9zLAorICAgICAgICAidG9waWMxIl9zLAor
ICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAxLCAyIH0sCisgICAgICAgIHsgMiwgMyB9LAor
ICAgICAgICB7IDQsIDUgfSwKKyAgICAgICAgV2FsbFRpbWU6Om5vdygpLAorICAgICAgICBQdXNo
V2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljCisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDIg
eworICAgICAgICAwLAorICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKKyAgICAgICAgImh0
dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9p
cGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJ0
b3BpYzIiX3MsCisgICAgICAgIHsgNSwgNiB9LAorICAgICAgICB7IDYsIDcgfSwKKyAgICAgICAg
eyA3LCA4IH0sCisgICAgICAgIHsgOCwgOSB9CisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29y
ZDMgeworICAgICAgICAwLAorICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKKyAgICAgICAg
Imh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS9pcGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAgICAg
ICJ0b3BpYzMiX3MsCisgICAgICAgIHsgOSwgMTAgfSwKKyAgICAgICAgeyAxMCwgMTEgfSwKKyAg
ICAgICAgeyAxMSwgMTIgfSwKKyAgICAgICAgeyAxMiwgMTMgfQorICAgIH07CisKKyAgICBzdGQ6
Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDE7CisgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQyOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4g
aW5zZXJ0UmVzdWx0MzsKKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVj
b3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCkKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9
IGZhbHNlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDsK
KworICAgICAgICBkYi0+aW5zZXJ0UmVjb3JkKHJlY29yZCwgWyZkb25lLCAmaW5zZXJ0UmVzdWx0
XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpbnNl
cnRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGlu
c2VydFJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcih1
aW50NjRfdCBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgcmVtb3ZlUmVzdWx0ID0gZmFsc2U7CisKKyAgICAgICAgZGItPnJlbW92ZVJl
Y29yZEJ5SWRlbnRpZmllcihpZGVudGlmaWVyLCBbJmRvbmUsICZyZW1vdmVSZXN1bHRdKGJvb2wg
cmVzdWx0KSB7CisgICAgICAgICAgICByZW1vdmVSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFs
PFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5VG9waWMoY29uc3QgU3RyaW5nJiB0b3BpYykKKyAgICB7
CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hS
ZWNvcmQ+IGdldFJlc3VsdDsKKworICAgICAgICBkYi0+Z2V0UmVjb3JkQnlUb3BpYyh0b3BpYywg
WyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7
CisgICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBk
b25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hS
ZWNvcmQ+IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGNvbnN0IFN0cmluZyYg
YnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUpCisgICAgeworICAgICAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZXN1bHQ7CisK
KyAgICAgICAgZGItPmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGJ1bmRsZUlE
LCBzY29wZSwgWyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYg
cmVzdWx0KSB7CisgICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAg
ICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9u
ZSk7CisKKyAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICBIYXNoU2V0PGlu
dDY0X3Q+IGdldElkZW50aWZpZXJzKCkKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNl
OworICAgICAgICBIYXNoU2V0PGludDY0X3Q+IGdldFJlc3VsdDsKKworICAgICAgICBkYi0+Z2V0
SWRlbnRpZmllcnMoWyZkb25lLCAmZ2V0UmVzdWx0XShIYXNoU2V0PGludDY0X3Q+JiYgcmVzdWx0
KSB7CisgICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICBQdXNoRGF0YWJhc2U6OlB1
c2hXYWtlU3RhdGVUb1RvcGljTWFwIGdldFRvcGljc0J5V2FrZVN0YXRlKCkKKyAgICB7CisgICAg
ICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3Rh
dGVUb1RvcGljTWFwIGdldFJlc3VsdDsKKworICAgICAgICBkYi0+Z2V0VG9waWNzQnlXYWtlU3Rh
dGUoWyZkb25lLCAmZ2V0UmVzdWx0XShQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGlj
TWFwJiYgcmVzdWx0KSB7CisgICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7
CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1
bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lk
IFNldFVwKCkgZmluYWwKKyAgICB7CisgICAgICAgIEFTU0VSVF9UUlVFKGRiID0gUHVzaERhdGFi
YXNlOjpjcmVhdGVJbk1lbW9yeSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0
MSA9IGluc2VydFJlY29yZChyZWNvcmQxKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJl
c3VsdDIgPSBpbnNlcnRSZWNvcmQocmVjb3JkMikpOworICAgICAgICBBU1NFUlRfVFJVRShpbnNl
cnRSZXN1bHQzID0gaW5zZXJ0UmVjb3JkKHJlY29yZDMpKTsKKyAgICB9Cit9OworCitzdGF0aWMg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFB1c2hSZWNvcmQmIGEsIGNvbnN0IFB1c2hSZWNvcmQmIGIp
Cit7CisgICAgcmV0dXJuIGEuaWRlbnRpZmllciA9PSBiLmlkZW50aWZpZXIKKyAgICAgICAgJiYg
YS5idW5kbGVJRCA9PSBiLmJ1bmRsZUlECisgICAgICAgICYmIGEuc2VjdXJpdHlPcmlnaW4gPT0g
Yi5zZWN1cml0eU9yaWdpbgorICAgICAgICAmJiBhLnNjb3BlID09IGIuc2NvcGUKKyAgICAgICAg
JiYgYS5lbmRwb2ludCA9PSBiLmVuZHBvaW50CisgICAgICAgICYmIGEudG9waWMgPT0gYi50b3Bp
YworICAgICAgICAmJiBhLnNlcnZlclZBUElEUHVibGljS2V5ID09IGIuc2VydmVyVkFQSURQdWJs
aWNLZXkKKyAgICAgICAgJiYgYS5jbGllbnRQdWJsaWNLZXkgPT0gYi5jbGllbnRQdWJsaWNLZXkK
KyAgICAgICAgJiYgYS5jbGllbnRQcml2YXRlS2V5ID09IGIuY2xpZW50UHJpdmF0ZUtleQorICAg
ICAgICAmJiBhLnNoYXJlZEF1dGhTZWNyZXQgPT0gYi5zaGFyZWRBdXRoU2VjcmV0CisgICAgICAg
ICYmIGEuZXhwaXJhdGlvblRpbWUgPT0gYi5leHBpcmF0aW9uVGltZQorICAgICAgICAmJiBhLndh
a2VTdGF0ZSA9PSBiLndha2VTdGF0ZTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIElu
c2VydFJlY29yZCkKK3sKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CisgICAg
ZXhwZWN0ZWRSZWNvcmQxLmlkZW50aWZpZXIgPSAxOworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVk
UmVjb3JkMSA9PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMiA9
IHJlY29yZDI7CisgICAgZXhwZWN0ZWRSZWNvcmQyLmlkZW50aWZpZXIgPSAyOworICAgIEVYUEVD
VF9UUlVFKGV4cGVjdGVkUmVjb3JkMiA9PSAqaW5zZXJ0UmVzdWx0Mik7CisKKyAgICAvLyBTaW5j
ZSByZWNvcmQzIGlzIGluIHRoZSBzYW1lIFN1YnNjcmlwdGlvblNldCBhcyByZWNvcmQxLCBpdCBz
aG91bGQKKyAgICAvLyBpbmhlcml0IHJlY29yZDEncyB3YWtlIHN0YXRlLgorICAgIGF1dG8gZXhw
ZWN0ZWRSZWNvcmQzID0gcmVjb3JkMzsKKyAgICBleHBlY3RlZFJlY29yZDMuaWRlbnRpZmllciA9
IDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLndha2VTdGF0ZSA9IGV4cGVjdGVkUmVjb3JkMS53YWtl
U3RhdGU7CisgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWRSZWNvcmQzID09ICppbnNlcnRSZXN1bHQz
KTsKKworICAgIC8vIEluc2VydGluZyBhIHJlY29yZCB3aXRoIHRoZSBzYW1lIChidW5kbGVJRCwg
c2NvcGUpIGFzIHJlY29yZCAxIHNob3VsZCBmYWlsLgorICAgIFB1c2hSZWNvcmQgcmVjb3JkNCA9
IHJlY29yZDE7CisgICAgcmVjb3JkNC5lbmRwb2ludCA9ICJodHRwczovL3d3dy53ZWJraXQub3Jn
Il9zOworICAgIEVYUEVDVF9GQUxTRShpbnNlcnRSZWNvcmQoV1RGTW92ZShyZWNvcmQ0KSkpOwor
CisgICAgRVhQRUNUX0VRKGdldElkZW50aWZpZXJzKCksIChIYXNoU2V0PGludDY0X3Q+IHsgMSwg
MiwgMyB9KSk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBSZW1vdmVSZWNvcmQpCit7
CisgICAgRVhQRUNUX1RSVUUocmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKDEpKTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKDEpKTsKKyAgICBFWFBFQ1RfRVEoZ2V0
SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8aW50NjRfdD4geyAyLCAzIH0pKTsKK30KKworVEVTVF9G
KFB1c2hEYXRhYmFzZVRlc3QsIEdldFJlY29yZEJ5VG9waWMpCit7CisgICAgYXV0byByZXN1bHQx
ID0gZ2V0UmVjb3JkQnlUb3BpYyhyZWNvcmQxLnRvcGljKTsKKyAgICBBU1NFUlRfVFJVRShyZXN1
bHQxKTsKKyAgICBFWFBFQ1RfVFJVRSgqcmVzdWx0MSA9PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAg
ICBhdXRvIHJlc3VsdDIgPSBnZXRSZWNvcmRCeVRvcGljKCJmb28iX3MpOworICAgIEVYUEVDVF9G
QUxTRShyZXN1bHQyKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFJlY29yZEJ5
QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKQoreworICAgIGF1dG8gcmVzdWx0MSA9IGdldFJlY29y
ZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEuYnVuZGxlSUQsIHJlY29yZDEuc2Nv
cGUpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdDEpOworICAgIEVYUEVDVF9UUlVFKCpyZXN1bHQx
ID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8gcmVzdWx0MiA9IGdldFJlY29yZEJ5QnVu
ZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEuYnVuZGxlSUQsICJiYXIiX3MpOworICAgIEVY
UEVDVF9GQUxTRShyZXN1bHQyKTsKKworICAgIGF1dG8gcmVzdWx0MyA9IGdldFJlY29yZEJ5QnVu
ZGxlSWRlbnRpZmllckFuZFNjb3BlKCJmb28iX3MsICJiYXIiX3MpOworICAgIEVYUEVDVF9GQUxT
RShyZXN1bHQzKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFRvcGljc0J5V2Fr
ZVN0YXRlKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBQdXNoV2FrZVN0YXRlPiBleHBlY3RlZCB7
CisgICAgICAgIHsgInRvcGljMSIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfSwKKyAg
ICAgICAgeyAidG9waWMyIiwgUHVzaFdha2VTdGF0ZTo6V2FraW5nIH0sCisgICAgICAgIHsgInRv
cGljMyIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfQorICAgIH07CisgICAgSGFzaE1h
cDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGFjdHVhbDsKKworICAgIGZvciAoY29uc3QgYXV0byYg
W3dha2VTdGF0ZSwgdG9waWNzXSA6IGdldFRvcGljc0J5V2FrZVN0YXRlKCkpIHsKKyAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiB0b3BpYyA6IHRvcGljcykKKyAgICAgICAgICAgIGFjdHVhbC5hZGQo
dG9waWMsIHdha2VTdGF0ZSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBhY3R1
YWwpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgU3RhcnRzRnJvbVNjcmF0Y2hPbkRv
d25ncmFkZSkKK3sKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlOwor
ICAgIGF1dG8gcGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJQdXNoRGF0YWJh
c2UiLCBoYW5kbGUsICIuZGIiKTsKKyAgICBBU1NFUlRfVFJVRShGaWxlU3lzdGVtOjppc0hhbmRs
ZVZhbGlkKGhhbmRsZSkpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5kbGUpOworCisg
ICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRoKTsK
KyAgICAgICAgQVNTRVJUX1RSVUUoZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB1c2VyX3ZlcnNp
b24gPSAxMDAwMDAiX3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY3JlYXRlUmVz
dWx0ID0gUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNy
ZWF0ZVJlc3VsdCk7CisgICAgfQorCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsK
KyAgICAgICAgZGIub3BlbihwYXRoKTsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHZlcnNp
b24gPSAwOworICAgICAgICAgICAgYXV0byBzcWwgPSBkYi5wcmVwYXJlU3RhdGVtZW50KCJQUkFH
TUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlmIChzcWwgJiYgc3FsLT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQo
MCk7CisgICAgICAgICAgICBFWFBFQ1RfR1QodmVyc2lvbiwgMCk7CisgICAgICAgICAgICBFWFBF
Q1RfTFQodmVyc2lvbiwgMTAwMDAwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450314</attachid>
            <date>2022-01-28 22:31:23 -0800</date>
            <delta_ts>2022-01-28 22:32:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20220128223122.patch</filename>
            <type>text/plain</type>
            <size>52965</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ2Mjc3YjQxNjNmN2Q3
YWRjZmY3NDMwYjBmMDEwNjI5ZTk3Yzg5Yy4uY2M4MmYzZWRkNzU4MWE2M2FlNmQwMmZhNmEyNzNi
ZmY0NGM2ODI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIyLTAxLTI4ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHVzaFJlY29yZDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZyZXNoUHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpQdXNoRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50T25RdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpiaW5kRXhwaXJhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwaXJhdGlvblRpbWVG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVPbk1haW5RdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpQdXNoRGF0YWJhc2U6OnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlUHVzaFJlY29yZEZyb21Sb3cpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERh
dGFiYXNlOjpnZXRSZWNvcmRCeVRvcGljKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFz
ZTo6Z2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UHVzaERhdGFiYXNlOjpnZXRJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQdXNo
RGF0YWJhc2U6OmdldFRvcGljc0J5V2FrZVN0YXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3B1c2gt
YXBpL1B1c2hEYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vTG9nZ2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisKIDIwMjItMDEtMjQg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFzcyB0aGUg
RG9jdW1lbnQgdGhyb3VnaCBiaW5kaW5ncyB0byBLZXlmcmFtZUVmZmVjdDo6c2V0S2V5ZnJhbWVz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1ZWE1MjVlOWVlZjA5NDVjNWVlY2ZiMWZjNWU2NjQz
Nzg1YzA2OTMuLmMwOWQ5NGZjZjBkM2VhYTUzOGE0MWMwMzE0ODE3YTRkYTg2ZmViNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMjkzLDYgKzI5Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBNb2R1bGVzL3Blcm1pc3Npb25zL1Blcm1pc3Npb25TdGF0ZS5o
CiAKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hDcnlwdG8uaAorICAgIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlQ3J5cHRv
LmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hQZXJtaXNzaW9uU3RhdGUuaAogICAgIE1vZHVs
ZXMvcHVzaC1hcGkvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwMWUwNDk4MWJl
ZThmN2ZlZDY1YWE4NTdhNzg4ZmI3N2Y5NjAxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw1MDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHVzaERhdGFi
YXNlLmgiCisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCisjZGVmaW5lIFBVU0hE
Ql9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFi
YXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0Vf
TE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0
YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpIFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUigiRmFpbGVkIHRvIGJp
bmQgc3RhdGVtZW50ICglZCk6ICVzIiwgbV9kYi0+bGFzdEVycm9yKCksIG1fZGItPmxhc3RFcnJv
ck1zZygpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1
cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uID0gMTsKKworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJh
bCBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKKyAgICAiUFJBR01BIGF1dG9f
dmFjdXVtPUlOQ1JFTUVOVEFMIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0
cygiCisgICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgYnVuZGxlSUQg
VEVYVCBOT1QgTlVMTCwiCisgICAgIiAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwiCisg
ICAgIiAgd2FrZVN0YXRlIElOVCBOT1QgTlVMTCwiCisgICAgIiAgVU5JUVVFKGJ1bmRsZUlELCBz
ZWN1cml0eU9yaWdpbikpIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucygiCisg
ICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc3Vic2NyaXB0aW9uU2V0
SUQgSU5UIE5PVCBOVUxMLCIKKyAgICAiICBzY29wZSBURVhUIE5PVCBOVUxMLCIKKyAgICAiICBl
bmRwb2ludCBURVhUIE5PVCBOVUxMLCIKKyAgICAiICB0b3BpYyBURVhUIE5PVCBOVUxMIFVOSVFV
RSwiCisgICAgIiAgc2VydmVyVkFQSURQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAg
Y2xpZW50UHVibGljS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIGNsaWVudFByaXZhdGVLZXkg
QkxPQiBOT1QgTlVMTCwiCisgICAgIiAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxMLCIK
KyAgICAiICBleHBpcmF0aW9uVGltZSBJTlQsIgorICAgICIgIFVOSVFVRShzY29wZSwgc3Vic2Ny
aXB0aW9uU2V0SUQpKSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2Ny
aXB0aW9uU2V0SURfSW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3Ms
CisgICAgIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAxIl9zCit9OworCitQdXNoUmVjb3JkIFB1c2hS
ZWNvcmQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgUHVzaFJlY29yZCByZXN1bHQ7Cisg
ICAgcmVzdWx0LmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJlc3VsdC5idW5kbGVJRCA9
IGJ1bmRsZUlELmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5zZWN1cml0eU9yaWdpbiA9IHNl
Y3VyaXR5T3JpZ2luLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5zY29wZSA9IHNjb3BlLmlz
b2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5lbmRwb2ludCA9IGVuZHBvaW50Lmlzb2xhdGVkQ29w
eSgpOworICAgIHJlc3VsdC50b3BpYyA9IHRvcGljLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3Vs
dC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9IHNlcnZlclZBUElEUHVibGljS2V5OworICAgIHJlc3Vs
dC5jbGllbnRQdWJsaWNLZXkgPSBjbGllbnRQdWJsaWNLZXk7CisgICAgcmVzdWx0LmNsaWVudFBy
aXZhdGVLZXkgPSBjbGllbnRQcml2YXRlS2V5OworICAgIHJlc3VsdC5zaGFyZWRBdXRoU2VjcmV0
ID0gc2hhcmVkQXV0aFNlY3JldDsKKyAgICByZXN1bHQuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0
aW9uVGltZTsKKyAgICByZXN1bHQud2FrZVN0YXRlID0gd2FrZVN0YXRlOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlRnJlc2hQdXNoRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
RGF0YWJhc2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChwYXRoID09ICI6
bWVtb3J5OiJfcyB8fCAhU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgp
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcmV0dXJuIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIHBhdGgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1
c2hEYXRhYmFzZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBxdWV1ZSA9
IFdvcmtRdWV1ZTo6Y3JlYXRlKCJQdXNoRGF0YWJhc2UgSS9PIFRocmVhZCIpOworICAgIHF1ZXVl
LT5kaXNwYXRjaChbcXVldWUsIHBhdGggPSBjcm9zc1RocmVhZENvcHkocGF0aCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8gZmFpbE9uTWFpblF1ZXVlID0gW10oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAg
ICAgICAgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAocGF0aCAhPSAiOm1lbW9yeToiX3MgJiYgIUZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMocGF0aCkgJiYgIUZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVt
OjpwYXJlbnRQYXRoKHBhdGgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVz
aCwgIkNvdWxkbid0IGNyZWF0ZSBQdXNoRGF0YWJhc2UgcGFyZW50IGRpcmVjdG9yaWVzIGZvciBw
YXRoICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGZhaWxPbk1haW5RdWV1
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIGRiID0gV1RGOjptYWtlVW5pcXVlPFNRTGl0ZURhdGFiYXNl
PigpOworICAgICAgICBkYi0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgICAgIGlm
ICghZGItPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gs
ICJDb3VsZG4ndCBvcGVuIGRhdGFiYXNlIGZpbGUgYXQgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBmYWlsT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHZl
cnNpb24gPSAwOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLT5wcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlmICghc3Fs
IHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3QgZ2V0IGRhdGFiYXNlIHZlcnNpb24gYXQgcGF0aCAl
cyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZmFpbE9uTWFpblF1ZXVl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvbiA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJz
aW9uKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRm91bmQgbmV3ZXIg
ZGF0YWJhc2UgdmVyc2lvbiB0aGFuIGV4cGVjdGVkLCBzdGFydGluZyBmcm9tIHNjcmF0Y2g6ICVz
IiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRp
c3BhdGNoKFtwYXRoID0gY3Jvc3NUaHJlYWRDb3B5KHBhdGgpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNlKHBhdGgsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgeworICAgICAg
ICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKmRiKTsKKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDog
cHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFk
Yi0+ZXhlY3V0ZUNvbW1hbmQoc3RhdGVtZW50KSkgeworICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3QgY3JlYXRlIGRhdGFiYXNlIHNjaGVtYSBmb3Ig
c3RhdGVtZW50ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsT25NYWluUXVldWUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNo
KFtxdWV1ZSA9IFdURk1vdmUocXVldWUpLCBkYiA9IFdURk1vdmUoZGIpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4obmV3IFB1
c2hEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwgV1RGTW92ZShkYikpKSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICByZXR1cm4gUHVzaERhdGFiYXNlOjpjcmVhdGUoIjptZW1vcnk6
Il9zLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK1B1c2hEYXRhYmFzZTo6UHVz
aERhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVE
YXRhYmFzZT4mJiBkYikKKyAgICA6IG1fcXVldWUoV1RGTW92ZShxdWV1ZSkpCisgICAgLCBtX2Ri
KFdURk1vdmUoZGIpKQoreworfQorCitQdXNoRGF0YWJhc2U6On5QdXNoRGF0YWJhc2UoKQorewor
ICAgIG1fcXVldWUtPmRpc3BhdGNoU3luYyhbZGIgPSBXVEZNb3ZlKG1fZGIpLCBzdGF0ZW1lbnRz
ID0gV1RGTW92ZShtX3N0YXRlbWVudHMpXSgpIG11dGFibGUgeworICAgICAgICBzdGF0ZW1lbnRz
LmNsZWFyKCk7CisgICAgICAgIGRiLT5jbG9zZSgpOworICAgIH0pOworfQorCitTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBQdXNoRGF0YWJhc2U6OmNhY2hlZFN0YXRlbWVudE9uUXVldWUo
QVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gaXQgPSBtX3N0YXRlbWVudHMuZmluZChx
dWVyeSk7CisgICAgaWYgKGl0ICE9IG1fc3RhdGVtZW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlKGl0LT52YWx1ZS5wdHIoKSk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IG1fZGItPnByZXBhcmVIZWFwU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfRVJST1IoIkZhaWxlZCB3aXRo
ICVkIHByZXBhcmluZyBzdGF0ZW1lbnQ6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCByZXN1bHQuZXJy
b3IoKSwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlKG51bGxwdHIpOworICAgIH0KKworICAgIGF1dG8gcmVmID0gV1RGTW92
ZSgqcmVzdWx0KTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHJlZi5wdHIoKTsKKyAgICBtX3N0YXRl
bWVudHMuYWRkKHF1ZXJ5LCBXVEZNb3ZlKHJlZikpOworICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZShzdGF0ZW1lbnQpOworfQorCitzdGF0aWMgaW50IGJpbmRFeHBpcmF0
aW9uVGltZShTUUxpdGVTdGF0ZW1lbnQqIHNxbCwgaW50IGluZGV4LCBzdGQ6Om9wdGlvbmFsPEVw
b2NoVGltZVN0YW1wPiB0aW1lc3RhbXApCit7CisgICAgcmV0dXJuIHRpbWVzdGFtcCA/IHNxbC0+
YmluZEludDY0KGluZGV4LCBjb252ZXJ0RXBvY2hUaW1lU3RhbXBUb1NlY29uZHMoKnRpbWVzdGFt
cCkpIDogc3FsLT5iaW5kTnVsbChpbmRleCk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPEVw
b2NoVGltZVN0YW1wPiBleHBpcmF0aW9uVGltZUZyb21WYWx1ZShTUUxWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRTZWNvbmRzVG9FcG9jaFRpbWVTdGFtcChzdGQ6OmdldDxkb3VibGU+KHZh
bHVlKSk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFU+CitzdGF0aWMgdm9pZCBjb21wbGV0ZU9uTWFpblF1ZXVlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFUmIHJlc3VsdCkKK3sKKyAg
ICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KHJlc3VsdCldKCkg
bXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjppbnNlcnRSZWNvcmQoY29uc3QgUHVzaFJl
Y29yZCYgcmVjb3JkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJl
Y29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W3RoaXMsIHJlY29yZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKKyAgICAgICAgaW50NjRfdCBzdWJzY3JpcHRpb25TZXRJRCA9IDA7CisKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxF
Q1Qgcm93aWQsIHdha2VTdGF0ZSBGUk9NIFN1YnNjcmlwdGlvblNldHMgV0hFUkUgYnVuZGxlSUQg
PSA/IEFORCBzZWN1cml0eU9yaWdpbiA9ID8iX3MpOworICAgICAgICAgICAgaWYgKCFzcWwKKyAg
ICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIHJlY29yZC5idW5kbGVJRCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCByZWNvcmQuc2VjdXJp
dHlPcmlnaW4pICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNF
X0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBzdWJzY3Jp
cHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMCk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
Lndha2VTdGF0ZSA9IHN0YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDEp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vic2NyaXB0aW9u
U2V0SUQpIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgi
SU5TRVJUIElOVE8gU3Vic2NyaXB0aW9uU2V0cyBWQUxVRVMoPywgPywgPywgPykiX3MpOworICAg
ICAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0
aW1lKG51bGxwdHIpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRU
ZXh0KDIsIHJlY29yZC5idW5kbGVJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwg
c3FsLT5iaW5kVGV4dCgzLCByZWNvcmQuc2VjdXJpdHlPcmlnaW4pICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHJlY29yZC53
YWtlU3RhdGUpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8
UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gbV9kYi0+bGFzdEluc2VydFJvd0lE
KCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudE9uUXVldWUoIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKD8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8pIl9zKTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgdGltZShudWxscHRyKSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgc3Vic2NyaXB0aW9uU2V0
SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVj
b3JkLnNjb3BlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0
KDQsIHJlY29yZC5lbmRwb2ludCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kVGV4dCg1LCByZWNvcmQudG9waWMpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC0+YmluZEJsb2IoNiwgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5KSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDcsIHJlY29yZC5jbGllbnRQ
dWJsaWNLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2Io
OCwgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC0+YmluZEJsb2IoOSwgcmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IGJpbmRFeHBpcmF0aW9uVGltZShzcWwuZ2V0KCksIDEwLCBy
ZWNvcmQuZXhwaXJhdGlvblRpbWUpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBV
U0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNo
UmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3Rk
OjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSBtYWtlT2JqZWN0
SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KG1fZGItPmxhc3RJbnNl
cnRSb3dJRCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwor
CisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IFdURk1vdmUocmVjb3JkKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpyZW1v
dmVSZWNvcmRCeUlkZW50aWZpZXIoUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXIu
dG9VSW50NjQoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1f
ZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGJvb2wgaXNMYXN0
U3Vic2NyaXB0aW9uSW5TZXQgPSBmYWxzZTsKKyAgICAgICAgaW50NjRfdCBzdWJzY3JpcHRpb25T
ZXRJRCA9IDA7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgc3Vic2NyaXB0aW9uU2V0SUQgRlJPTSBTdWJzY3JpcHRpb25z
IFdIRVJFIHJvd2lkID0gPyJfcyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+Ymlu
ZEludDY0KDEsIHJvd0lkZW50aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAg
IFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxl
dGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9
IHNxbC0+Y29sdW1uSW50NjQoMCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICAvLyBUT0RPOiBvbiBTUUxpdGUgPjMuMzUuMCwgd2UgY291bGQgdXNlIFJFVFVSTklORyB0byBh
dm9pZCB0aGUgU0VMRUNUIGFib3ZlLgorICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIFdIRVJFIHJvd2lkID0gPyJf
cyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHJvd0lkZW50
aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xP
R19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRo
aXMgd2FzIHRoZSBsYXN0IHN1YnNjcmlwdGlvbiBpbiB0aGUgc3Vic2NyaXB0aW9uIHNldC4KKyAg
ICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHJvd2lk
IEZST00gU3Vic2NyaXB0aW9ucyBXSEVSRSBzdWJzY3JpcHRpb25TZXRJRCA9ID8iX3MpOworCisg
ICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJ
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJ
TkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IChzcWwt
PnN0ZXAoKSA9PSBTUUxJVEVfRE9ORSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNMYXN0
U3Vic2NyaXB0aW9uSW5TZXQpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZW50aXJlIHN1
YnNjcmlwdGlvbiBzZXQgaWYgaXQgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhbnkgc3Vi
c2NyaXB0aW9ucy4KKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1
ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSByb3dpZCA9ID8iX3MpOworICAg
ICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kSW50NjQoMSwgc3Vic2NyaXB0aW9uU2V0SUQp
ICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5E
X0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCisgICAgICAgIGNv
bXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRydWUpOworICAg
IH0pOworfQorCitzdGF0aWMgUHVzaFJlY29yZCBtYWtlUHVzaFJlY29yZEZyb21Sb3coU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmIHNxbCkKK3sKKyAgICBQdXNoUmVjb3JkIHJlY29yZDsK
KyAgICByZWNvcmQuaWRlbnRpZmllciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFB1c2hTdWJzY3Jp
cHRpb25JZGVudGlmaWVyVHlwZT4oc3FsLT5jb2x1bW5JbnQ2NCgwKSk7CisgICAgcmVjb3JkLmJ1
bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9
IHNxbC0+Y29sdW1uVGV4dCgyKTsKKyAgICByZWNvcmQuc2NvcGUgPSBzcWwtPmNvbHVtblRleHQo
Myk7CisgICAgcmVjb3JkLmVuZHBvaW50ID0gc3FsLT5jb2x1bW5UZXh0KDQpOworICAgIHJlY29y
ZC50b3BpYyA9IHNxbC0+Y29sdW1uVGV4dCg1KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJs
aWNLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNik7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9
IHNxbC0+Y29sdW1uQmxvYig3KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+
Y29sdW1uQmxvYig4KTsKKyAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1u
QmxvYig5KTsKKyAgICByZWNvcmQuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZUZyb21W
YWx1ZShzcWwtPmNvbHVtblZhbHVlKDEwKSk7CisgICAgcmVjb3JkLndha2VTdGF0ZSA9IHN0YXRp
Y19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDExKSk7CisKKyAgICByZXR1cm4g
cmVjb3JkOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UmVjb3JkQnlUb3BpYyhjb25zdCBT
dHJpbmcmIHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJl
Y29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W3RoaXMsIHRvcGljID0gY3Jvc3NUaHJlYWRDb3B5KHRvcGljKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gRm9y
Y2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhlIFN1YnNjcmlwdGlvbnMoc2NvcGUpIGluZGV4IGZpcnN0
IHZpYSBDUk9TUyBKT0lOLgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVl
dWUoCisgICAgICAgICAgICAiU0VMRUNUICIKKyAgICAgICAgICAgICIgIHN1Yi5yb3dJRCwgc3Mu
YnVuZGxlSUQsIHNzLnNlY3VyaXR5T3JpZ2luLCBzdWIuc2NvcGUsIHN1Yi5lbmRwb2ludCwgc3Vi
LnRvcGljLCAiCisgICAgICAgICAgICAiICBzdWIuc2VydmVyVkFQSURQdWJsaWNLZXksIHN1Yi5j
bGllbnRQdWJsaWNLZXksIHN1Yi5jbGllbnRQcml2YXRlS2V5LCAiCisgICAgICAgICAgICAiICBz
dWIuc2hhcmVkQXV0aFNlY3JldCwgc3ViLmV4cGlyYXRpb25UaW1lLCBzcy53YWtlU3RhdGUgIgor
ICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIgIgorICAgICAgICAgICAgIkNST1NT
IEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAiT04gc3ViLnN1YnNjcmlw
dGlvblNldElEID0gc3Mucm93aWQgIgorICAgICAgICAgICAgIldIRVJFIHN1Yi50b3BpYyA9ID8i
X3MpOworCisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZFRleHQoMSwgdG9waWMpICE9IFNR
TElURV9PSykgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsK
KyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBtYWtlUHVzaFJlY29yZEZyb21Sb3coc3FsKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUHVzaERhdGFiYXNlOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25z
dCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGJ1bmRsZUlEID0gY3Jvc3NUaHJlYWRD
b3B5KGJ1bmRsZUlEKSwgc2NvcGUgPSBjcm9zc1RocmVhZENvcHkoc2NvcGUpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICAvLyBGb3JjZSBTUUxpdGUgdG8gY29uc3VsdCB0aGUgU3Vic2NyaXB0aW9ucyhzY29wZSkgaW5k
ZXggZmlyc3QgdmlhIENST1NTIEpPSU4uCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVt
ZW50T25RdWV1ZSgKKyAgICAgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAgICAgIiAgc3ViLnJv
d0lELCBzcy5idW5kbGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBv
aW50LCBzdWIudG9waWMsICIKKyAgICAgICAgICAgICIgIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tl
eSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3ViLmNsaWVudFByaXZhdGVLZXksICIKKyAgICAgICAg
ICAgICIgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlvblRpbWUsIHNzLndha2VT
dGF0ZSAiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAiCisgICAgICAgICAg
ICAiQ1JPU1MgSk9JTiBTdWJzY3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAgICAgICJPTiBzdWIu
c3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICAgICAiV0hFUkUgc3ViLnNj
b3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBz
cWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgyLCBi
dW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0df
QklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1ha2VQdXNoUmVjb3JkRnJvbVJvdyhzcWwpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldElkZW50aWZpZXJzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+IHJlc3VsdDsKKyAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgcm93aWQgRlJPTSBTdWJz
Y3JpcHRpb25zIl9zKTsKKyAgICAgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgcmVzdWx0LmFkZChtYWtlT2JqZWN0SWRlbnRpZmllcjxQdXNo
U3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHNxbC0+Y29sdW1uSW50NjQoMCkpKTsKKworICAg
ICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0VG9waWNz
QnlXYWtlU3RhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoV2FrZVN0YXRlVG9Ub3BpY01h
cCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaW50IG51bWJlck9mV2FrZVN0YXRlcyA9IHN0YXRpY19jYXN0PGludD4o
UHVzaFdha2VTdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpOworICAgICAgICBWZWN0b3I8VmVjdG9yPFN0
cmluZz4+IHRvcGljc0J5V2FrZVN0YXRlKG51bWJlck9mV2FrZVN0YXRlcyk7IC8vIHVzZWQgYmVj
YXVzZSBIYXNoTWFwOjppc29sYXRlZENvcHkgZG9lc24ndCBleGlzdAorCisgICAgICAgIGF1dG8g
c3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgKKyAgICAgICAgICAgICJTRUxFQ1Qgc3Mud2Fr
ZVN0YXRlLCBzdWIudG9waWMgIgorICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIg
IgorICAgICAgICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAi
T04gc3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQiX3MpOworICAgICAgICBpZiAoIXNx
bCkgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAg
ICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChzcWwtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7CisgICAgICAgICAgICBhdXRvIHB1c2hXYWtlU3RhdGUgPSBzcWwtPmNvbHVtbkludCgwKTsK
KyAgICAgICAgICAgIGF1dG8gdG9waWMgPSBzcWwtPmNvbHVtblRleHQoMSk7CisgICAgICAgICAg
ICBpZiAocHVzaFdha2VTdGF0ZSA+PSAwICYmIHB1c2hXYWtlU3RhdGUgPCBudW1iZXJPZldha2VT
dGF0ZXMpCisgICAgICAgICAgICAgICAgdG9waWNzQnlXYWtlU3RhdGVbcHVzaFdha2VTdGF0ZV0u
YXBwZW5kKFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgfQorCisgICAgICAgIFdvcmtRdWV1ZTo6
bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCB0b3BpY3NCeVdha2VTdGF0ZSA9IGNyb3NzVGhyZWFkQ29weSh0b3BpY3NCeVdha2VT
dGF0ZSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBQdXNoV2FrZVN0YXRlVG9Ub3BpY01hcCBy
ZXN1bHQ7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4o
UHVzaFdha2VTdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpOyArK2kpCisgICAgICAgICAgICAgICAgcmVz
dWx0LmFkZChzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRlPihpKSwgV1RGTW92ZSh0b3BpY3NCeVdh
a2VTdGF0ZVtpXSkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyZWUzN2NkZTM1YzI4
ZGU2YTAxYjdjNGE3MzJlODgzMTNiYzc5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKwor
I2luY2x1ZGUgIkVwb2NoVGltZVN0YW1wLmgiCisjaW5jbHVkZSAiUHVzaFN1YnNjcmlwdGlvbklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmgi
CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2FrZSBzdGF0ZSB0aGF0IGFwcGxpZXMgZm9yIGRl
dmljZXMgdGhhdCByYWNlLXRvLXNsZWVwLgorZW51bSBjbGFzcyBQdXNoV2FrZVN0YXRlIDogdWlu
dDhfdCB7CisgICAgV2FraW5nLCAvLyBBbGwgcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAg
T3Bwb3J0dW5pc3RpYywgLy8gTG93IHByaW9yaXR5IHB1c2hlcyBtYXkgbm90IHdha2UgZGV2aWNl
LgorICAgIE5vbldha2luZywgLy8gTm8gcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgTnVt
YmVyT2ZTdGF0ZXMKK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAgICBQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIFN0cmluZyBidW5kbGVJRDsKKyAgICBTdHJp
bmcgc2VjdXJpdHlPcmlnaW47CisgICAgU3RyaW5nIHNjb3BlOworICAgIFN0cmluZyBlbmRwb2lu
dDsKKyAgICBTdHJpbmcgdG9waWM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclZBUElEUHVi
bGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQdWJsaWNLZXk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNsaWVudFByaXZhdGVLZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNoYXJlZEF1
dGhTZWNyZXQ7CisgICAgc3RkOjpvcHRpb25hbDxFcG9jaFRpbWVTdGFtcD4gZXhwaXJhdGlvblRp
bWUgeyB9OworICAgIFB1c2hXYWtlU3RhdGUgd2FrZVN0YXRlIHsgUHVzaFdha2VTdGF0ZTo6V2Fr
aW5nIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXNoUmVjb3JkIGlzb2xhdGVkQ29weSgpIGNv
bnN0OworfTsKKworY2xhc3MgUHVzaERhdGFiYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVh
dGVJbk1lbW9yeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0
YWJhc2U+JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+UHVzaERhdGFiYXNlKCk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihQdXNoU3Vic2Ny
aXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRT
Y29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChI
YXNoU2V0PFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyPiYmKT4mJik7CisKKyAgICB1c2luZyBQ
dXNoV2FrZVN0YXRlVG9Ub3BpY01hcCA9IEhhc2hNYXA8UHVzaFdha2VTdGF0ZSwgVmVjdG9yPFN0
cmluZz4sIFdURjo6SW50SGFzaDxQdXNoV2FrZVN0YXRlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRy
YWl0czxQdXNoV2FrZVN0YXRlPj47CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRUb3BpY3NC
eVdha2VTdGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFB1c2hXYWtlU3RhdGVUb1RvcGljTWFw
JiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQdXNoRGF0YWJhc2UoUmVmPFdvcmtR
dWV1ZT4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiYmKTsKKyAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKEFTQ0lJTGl0ZXJhbCBxdWVyeSk7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4gbV9kYjsKKyAg
ICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
Pj4gbV9zdGF0ZW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2MGY2MTcwYmIwMGZk
NjhiZTkxMjI4NDM5MTBjZmM4ZDAwZTE5NDcwLi4zZWExYjEzZjFiNzE4MDA1N2Q5MzZmOThjNDc3
MWQ4OTUyOTc1MjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjYxLDYgKzI2MSw3IEBAIE1vZHVsZXMv
cGljdHVyZWlucGljdHVyZS9FbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHAKIE1vZHVsZXMv
cGljdHVyZWlucGljdHVyZS9IVE1MVmlkZW9FbGVtZW50UGljdHVyZUluUGljdHVyZS5jcHAKIE1v
ZHVsZXMvcGljdHVyZWlucGljdHVyZS9QaWN0dXJlSW5QaWN0dXJlV2luZG93LmNwcAogTW9kdWxl
cy9wdXNoLWFwaS9QdXNoQ3J5cHRvLmNwcAorTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2Uu
Y3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hFdmVudC5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVz
aE1lc3NhZ2VDcnlwdG8uY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlRGF0YS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZjlmZmM3MzJkZjNjNDczMDdhNzgwNzU0MjA3ZGExYjI5NDNiMzRjLi44ZDNkNTdmODZk
ODcyYWU0NTk2OTI2YzhiMWEyNWIzNDYwYjJlMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDY2LDYgKzU0NjYsNyBAQAog
CQlFQjI4RUQ0NDI3MTdBQzExMDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjhFRDQxMjcxN0FC
QTkwMDVGMDM5MyAvKiBQdXNoU3Vic2NyaXB0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCM0MyOUI2MjcyOUMzODgwMEZCNjVCNCAv
KiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCM0MyOUI0MjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNoU3Vi
c2NyaXB0aW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJRUIzQzI5QjcyNzI5QzM4QzAwRkI2NUI0
IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCM0MyOUIxMjcyOUMzNkQwMEZCNjVCNCAvKiBQ
dXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggKi87IH07CisJCUVCOUFEOENCMjc2NDZF
OTQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEVCOUFEOEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
QkE3NUM0NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBNzVDNDIyNzVFQkRBQjAwRDZEMzFDIC8q
IFB1c2hDcnlwdG8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFQkE3NUM0NzI3NUVDNjIxMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQTc1QzQwMjc1
RUJEQUEwMEQ2RDMxQyAvKiBQdXNoTWVzc2FnZUNyeXB0by5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCQjk3MzgxMjcxMDA2NzEwMDc3MzJFRiAv
KiBQdXNoTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRUJCOTczODAyNzEwMDY1NDAwNzczMkVGIC8qIFB1c2hNYW5hZ2VyLmggKi87IH07CkBA
IC0xNzY4OCw2ICsxNzY4OSw4IEBACiAJCUVCM0MyOUIyMjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNo
U3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQ
dXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRUIzQzI5QjMyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFu
Z2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNoYW5n
ZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUIzQzI5QjQyNzI5QzM2
RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hE
YXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4Q0EyNzY0NkU5MTAwRDg5M0E0
IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE3NUMz
RTI3NUVCREFBMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHVzaE1lc3NhZ2VDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFQkE3NUM0MDI3NUVCREFBMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHVzaE1lc3NhZ2VDcnlwdG8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUJBNzVDNDEyNzVFQkRBQjAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHVzaENyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTE4NSw2ICsyMTE4OCw4IEBACiAJCQkJRUJBNzVDNDQyNzVFQzU2MDAwRDZEMzFDIC8qIGNvY29h
ICovLAogCQkJCUVCQTc1QzQxMjc1RUJEQUIwMEQ2RDMxQyAvKiBQdXNoQ3J5cHRvLmNwcCAqLywK
IAkJCQlFQkE3NUM0MjI3NUVCREFCMDBENkQzMUMgLyogUHVzaENyeXB0by5oICovLAorCQkJCUVC
OUFEOENBMjc2NDZFOTEwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovLAorCQkJCUVCOUFE
OEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLywKIAkJCQlFQjBGQjZGRDI3
MEQwQUU4MDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmggKi8sCiAJCQkJRUIwRkI3
MDAyNzBEMEFFQTAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5pZGwgKi8sCiAJCQkJ
NDE4RkNCQkIyNzA2RTRGNjAwRjk2RUNBIC8qIFB1c2hFdmVudC5jcHAgKi8sCkBAIC0zNDY2MSw2
ICszNDY2Niw3IEBACiAJCQkJOTMwOTA4OTEwQUY3RURFNDAwODFERjAxIC8qIEhpdFRlc3RSZXF1
ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA3RjFEODBBRjJENTkwMDBEQkEzMUEgLyogSGl0
VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkMyOUMwRTkxQUIwRjAwODM1NTg4
IC8qIEhvc3RXaW5kb3cuaCBpbiBIZWFkZXJzICovLAorCQkJCUVCRTA5NUU1Mjc3RDE0REEwMDgw
NEQ2MSAvKiBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwOTkxMkIwMjZGNzAwQzFBMzU5IC8qIEhSVEZEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQzMTYwOUIxMkIwMjZGNzAwQzFBMzU5IC8qIEhSVEZEYXRhYmFzZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOUQxMkIwMjZGNzAwQzFBMzU5IC8qIEhSVEZFbGV2YXRp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtMzY2MzAsNiArMzY2MzYsNyBAQAogCQkJCTAwODFGRjAw
MTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEw
RkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQkE3NUM0NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRUI5QUQ4Q0IyNzY0NkU5NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRUIwRkI3MDgyNzBEMEIxMDAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0
aW9uS2V5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzEyNzA2RTRGQjAwRjk2RUNB
IC8qIFB1c2hFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzIyNzA2RTUwMTAwRjk2
RUNBIC8qIFB1c2hFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9n
Z2luZy5oCmluZGV4IGRjMGY1MDk4Yjg3ZjE4NDU1MjViZTNjMGJhNDFmNzY3NWIxNDA0N2YuLjAz
NDZjMzg3YzEyZTA1MzUwYWE1MWQ0NTZkOTIyOGU4MjY1NTc3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Mb2dnaW5nLmgKQEAgLTk2LDYgKzk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIE0o
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpIFwKICAgICBNKFByb2Nlc3MpIFwKICAgICBNKFByb2dy
ZXNzKSBcCisgICAgTShQdXNoKSBcCiAgICAgTShSZW1vdGVJbnNwZWN0b3IpIFwKICAgICBNKFJl
cXVlc3RBbmltYXRpb25GcmFtZSkgXAogICAgIE0oUmVzb3VyY2VMb2FkaW5nKSBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCAxN2RkZDAy
NWE4OThjYjQxMGRkZDUzYWI3NmQ3MjkxMmU4YWFhY2U0Li4zYjQ5ODU5NjFlZmJlYTU5NWU1OWJh
MjI5OGYwODFjYmJhZDNhMDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAKQEAgLTE0OCwxNCArMTQ4LDE3IEBAIGJvb2wgU1FMaXRlRGF0YWJh
c2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBjb3VsZCBub3Qgc2V0IHRlbXBfc3Rv
cmUgdG8gbWVtb3J5Iik7CiAgICAgfQogCi0gICAgaWYgKG9wZW5Nb2RlICE9IE9wZW5Nb2RlOjpS
ZWFkT25seSkKLSAgICAgICAgdXNlV0FMSm91cm5hbE1vZGUoKTsKLQotICAgIGF1dG8gc2htRmls
ZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVuYW1lLCAiLXNobSJfcyk7Ci0gICAgaWYgKEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpKSB7Ci0gICAgICAgIGlmICghRmlsZVN5c3RlbTo6
aXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1lKSkgewotICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRkFVTFQoU1FMRGF0YWJhc2UsICJPcGVuZWQgYW4gU1FMaXRlIGRhdGFiYXNl
IHdpdGggYSBDbGFzcyBBIC1zaG0gZmlsZS4gVGhpcyBtYXkgdHJpZ2dlciBhIGNyYXNoIHdoZW4g
dGhlIHVzZXIgbG9ja3MgdGhlIGRldmljZS4gKCVzKSIsIHNobUZpbGVOYW1lLmxhdGluMSgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9y
UGF0aChzaG1GaWxlTmFtZSk7CisgICAgYm9vbCBpc0luTWVtb3J5ID0gZmlsZW5hbWUgPT0gIjpt
ZW1vcnk6Il9zOworICAgIGlmICghaXNJbk1lbW9yeSkgeworICAgICAgICBpZiAob3Blbk1vZGUg
IT0gT3Blbk1vZGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgdXNlV0FMSm91cm5hbE1vZGUoKTsK
KworICAgICAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlbmFtZSwgIi1zaG0i
X3MpOworICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSkpIHsK
KyAgICAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6aXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRo
KHNobUZpbGVOYW1lKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFNRTERh
dGFiYXNlLCAiT3BlbmVkIGFuIFNRTGl0ZSBkYXRhYmFzZSB3aXRoIGEgQ2xhc3MgQSAtc2htIGZp
bGUuIFRoaXMgbWF5IHRyaWdnZXIgYSBjcmFzaCB3aGVuIHRoZSB1c2VyIGxvY2tzIHRoZSBkZXZp
Y2UuICglcykiLCBzaG1GaWxlTmFtZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
IEZpbGVTeXN0ZW06Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1lKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhiYTZmM2U4ZjZhNDEwMjIyNTYxN2I5YWMz
YjNhMDhlMzQyOWM1NGQuLjY0ODQwOGFkZDM2ZTc0YmJjYTI4NmY0NmQ5NDdlNGEzZmRmMTRiMmQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMi0wMS0yOCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgUHVzaERhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzQxOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNo
RGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFz
ZVRlc3Q6Omluc2VydFJlY29yZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJh
c2VUZXN0OjpyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVjb3JkQnlUb3BpYyk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJB
bmRTY29wZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRS
b3dJZGVudGlmaWVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0
OjpnZXRUb3BpY3NCeVdha2VTdGF0ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjItMDEtMjQgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
W2ExMXldIFRlc3QgYWNjZXNzaWJpbGl0eS91cmwtdGVzdC5odG1sIGZhaWxzIHdpdGggQVRTUEkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjA3MWMxMjgzY2QyNDdkYWM3ZjkxZTEzZTg4MzIz
ZjAxMmVhZjk0OC4uMTM0NWYxMjhhYzQ5NmU3NmQyZWZmYjc3ZDY2OTM4MmU2NDU2OTNkZiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMDIsNiArMTAwMiw3IEBACiAJCUU1QUE0MkYyMjU5
MTI4QUUwMDQxMEEzRCAvKiBVc2VySW50ZXJmYWNlSWRpb21VcGRhdGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUFBNDJGMTI1OTEyOEFFMDA0MTBB
M0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBkYXRlLm1tICovOyB9OwogCQlFNUFBOEQxRDI1MTUx
Q0M2MDA1MUNDNDUgLyogRGF0ZUlucHV0VGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUFBOEQxQzI1MTUxQ0M2MDA1MUNDNDUgLyogRGF0ZUlu
cHV0VGVzdHMubW0gKi87IH07CiAJCUVCMjMwRDQxMjQ1RTgxM0YwMEM2NkFEMSAvKiBJREJDaGVj
a3BvaW50V0FMLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRUIyMzBEM0QyNDVFNzIyRTAwQzY2QUQxIC8qIElEQkNoZWNrcG9pbnRXQUwu
aHRtbCAqLzsgfTsKKwkJRUI5QUQ4QzcyNzY0NkU3NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjlBRDhD
NjI3NjQ2RTczMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLzsgfTsKIAkJRUNBNjgwQ0Ux
RTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBT
dHJpbmdVdGlsaXRpZXMubW0gKi87IH07CiAJCUY0MDEwQjgwMjREQTI0QUMwMEE4NzZFMiAvKiBO
YXZpZ2F0aW9uU3dpcGVUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0MDEwQjdGMjREQTI0QUMwMEE4NzZFMiAvKiBOYXZpZ2F0aW9uU3dpcGVU
ZXN0cy5tbSAqLzsgfTsKIAkJRjQwMTBCODMyNERBMjY3RjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwMTBC
ODEyNERBMjY3RjAwQTg3NkUyIC8qIFBvc2VBc0NsYXNzLm1tICovOyB9OwpAQCAtMjk1NSw2ICsy
OTU2LDcgQEAKIAkJRTVBQThEMUMyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0ZUlucHV0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUVCMjMwRDNEMjQ1RTcyMkUwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50
V0FMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJDaGVja3BvaW50V0FMLmh0
bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2NkFE
MSAvKiBJREJDaGVja3BvaW50V0FMLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gSURCQ2hlY2twb2ludFdBTC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFQzc5RjE2OEJFNDU0RTU3OUU0MTdCMDUgLyogTWFya2FibGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2FibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAgLyog
U3RyaW5nVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU3RyaW5nVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZD
M0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGliZ3Rlc3QuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJndGVzdC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMzc2Myw2ICszNzY1LDcg
QEAKIAkJCQlBQTk2Q0FCNDIxQzdEQjQyMDBGRDJGOTcgLyogUGFyc2VkQ29udGVudFR5cGUuY3Bw
ICovLAogCQkJCTZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAvKiBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudC5jcHAgKi8sCiAJCQkJMDQxQTFFMzMyMTZGRkRCQzAwNzg5RTBBIC8qIFB1YmxpY1N1ZmZp
eC5jcHAgKi8sCisJCQkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5j
cHAgKi8sCiAJCQkJNkI0RTg2MUIyMjIwQTU1MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWlu
LmNwcCAqLywKIAkJCQlGNDE4QkUxNDFGNzFCN0RDMDAxOTcwRTYgLyogUm91bmRlZFJlY3RUZXN0
cy5jcHAgKi8sCiAJCQkJNDE4MUM2MkMyNTVBODkxMTAwQUVCMEZGIC8qIFJUQ1J0cFNGcmFtZVRy
YW5zZm9ybWVyVGVzdHMuY3BwICovLApAQCAtNTY3Niw2ICs1Njc5LDcgQEAKIAkJCQk0NjQ3QjEy
NjFFQkEzQjg1MDA0MUQ3RUYgLyogUHJvY2Vzc0RpZFRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRUMyQTg1NjI0Q0VCNjVGMDBBREJDMzUgLyogUHJvcGVydHlTbG90LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA0MUExRTM0MjE2RkZEQkMwMDc4OUUwQSAvKiBQdWJsaWNTdWZmaXgu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRUI5QUQ4QzcyNzY0NkU3NDAwRDg5M0E0IC8qIFB1c2hE
YXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2QjRFODYxQzIyMjBBNTUyMDAyMkYzODkg
LyogUmVnaXN0cmFibGVEb21haW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEQxQTQx
MUFFNjAwNDQ3QzRDIC8qIFJlbG9hZFBhZ2VBZnRlckNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUM5MUE0MTFBN0UwMDQ0N0M0QyAvKiBSZW5kZXJlZEltYWdlRnJvbURPTU5vZGUu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1B1c2hEYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNkZTM5NDAwNmQ0YjQxYzdmMjdlNmQ4
ODIxOGMwYTVlNjVmY2IyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlV0aWxpdGllcy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUHVzaERhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRh
YmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisKKyNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK2NsYXNzIFB1c2hEYXRhYmFzZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7CitwdWJsaWM6CisgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gZGI7CisKKyAg
ICBQdXNoUmVjb3JkIHJlY29yZDEgeworICAgICAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmll
cigpLAorICAgICAgICAiY29tLmFwcGxlLlNhZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3
LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9tYWMiX3MsCisg
ICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDEiX3MsCisgICAgICAgICJ0b3BpYzEiX3MsCisg
ICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDEsIDIgfSwKKyAgICAgICAgeyAyLCAzIH0sCisg
ICAgICAgIHsgNCwgNSB9LAorICAgICAgICBjb252ZXJ0U2Vjb25kc1RvRXBvY2hUaW1lU3RhbXAo
MTY0MzM1MDAwMCksCisgICAgICAgIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMKKyAgICB9
OworICAgIFB1c2hSZWNvcmQgcmVjb3JkMiB7CisgICAgICAgIFB1c2hTdWJzY3JpcHRpb25JZGVu
dGlmaWVyKCksCisgICAgICAgICJjb20uYXBwbGUud2ViYXBwIl9zLAorICAgICAgICAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9u
ZSJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MiJfcywKKyAgICAgICAgInRvcGlj
MiJfcywKKyAgICAgICAgeyA1LCA2IH0sCisgICAgICAgIHsgNiwgNyB9LAorICAgICAgICB7IDcs
IDggfSwKKyAgICAgICAgeyA4LCA5IH0KKyAgICB9OworICAgIFB1c2hSZWNvcmQgcmVjb3JkMyB7
CisgICAgICAgIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyKCksCisgICAgICAgICJjb20uYXBw
bGUuU2FmYXJpIl9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAg
ICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL2lwaG9uZSJfcywKKyAgICAgICAgImh0dHBzOi8vcHVz
aEVuZHBvaW50MyJfcywKKyAgICAgICAgInRvcGljMyJfcywKKyAgICAgICAgeyA5LCAxMCB9LAor
ICAgICAgICB7IDEwLCAxMSB9LAorICAgICAgICB7IDExLCAxMiB9LAorICAgICAgICB7IDEyLCAx
MyB9CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0
MTsKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDI7CisgICAgc3Rk
OjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQzOworCisgICAgc3RkOjpvcHRpb25h
bDxQdXNoUmVjb3JkPiBpbnNlcnRSZWNvcmQoY29uc3QgUHVzaFJlY29yZCYgcmVjb3JkKQorICAg
IHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4gaW5zZXJ0UmVzdWx0OworCisgICAgICAgIGRiLT5pbnNlcnRSZWNvcmQocmVjb3Jk
LCBbJmRvbmUsICZpbnNlcnRSZXN1bHRdKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJiByZXN1
bHQpIHsKKyAgICAgICAgICAgIGluc2VydFJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAg
ICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25l
KTsKKworICAgICAgICByZXR1cm4gaW5zZXJ0UmVzdWx0OworICAgIH0KKworICAgIGJvb2wgcmVt
b3ZlUmVjb3JkQnlSb3dJZGVudGlmaWVyKHVpbnQ2NF90IHJvd0lkZW50aWZpZXIpCisgICAgewor
ICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgYm9vbCByZW1vdmVSZXN1bHQgPSBm
YWxzZTsKKworICAgICAgICBkYi0+cmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKG1ha2VPYmplY3RJ
ZGVudGlmaWVyPFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyVHlwZT4ocm93SWRlbnRpZmllciks
IFsmZG9uZSwgJnJlbW92ZVJlc3VsdF0oYm9vbCByZXN1bHQpIHsKKyAgICAgICAgICAgIHJlbW92
ZVJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsK
KyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgICAgICByZXR1cm4gcmVtb3ZlUmVzdWx0
OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVjb3JkQnlUb3Bp
Yyhjb25zdCBTdHJpbmcmIHRvcGljKQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OworCisgICAgICAg
IGRiLT5nZXRSZWNvcmRCeVRvcGljKHRvcGljLCBbJmRvbmUsICZnZXRSZXN1bHRdKHN0ZDo6b3B0
aW9uYWw8UHVzaFJlY29yZD4mJiByZXN1bHQpIHsKKyAgICAgICAgICAgIGdldFJlc3VsdCA9IFdU
Rk1vdmUocmVzdWx0KTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsKKyAg
ICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgICAgICByZXR1cm4gZ2V0UmVzdWx0OworICAg
IH0KKworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVjb3JkQnlCdW5kbGVJZGVu
dGlmaWVyQW5kU2NvcGUoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29w
ZSkKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPFB1c2hSZWNvcmQ+IGdldFJlc3VsdDsKKworICAgICAgICBkYi0+Z2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUoYnVuZGxlSUQsIHNjb3BlLCBbJmRvbmUsICZnZXRSZXN1bHRd
KHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJiByZXN1bHQpIHsKKyAgICAgICAgICAgIGdldFJl
c3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAg
ICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgICAgICByZXR1cm4gZ2V0UmVz
dWx0OworICAgIH0KKworICAgIEhhc2hTZXQ8dWludDY0X3Q+IGdldFJvd0lkZW50aWZpZXJzKCkK
KyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBIYXNoU2V0PHVpbnQ2
NF90PiByb3dJZGVudGlmaWVyczsKKworICAgICAgICBkYi0+Z2V0SWRlbnRpZmllcnMoWyZkb25l
LCAmcm93SWRlbnRpZmllcnNdKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYg
aWRlbnRpZmllcnMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRp
ZmllcnMpCisgICAgICAgICAgICAgICAgcm93SWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIudG9V
SW50NjQoKSk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAg
IFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIHJvd0lkZW50aWZpZXJzOworICAg
IH0KKworICAgIFB1c2hEYXRhYmFzZTo6UHVzaFdha2VTdGF0ZVRvVG9waWNNYXAgZ2V0VG9waWNz
QnlXYWtlU3RhdGUoKQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAg
IFB1c2hEYXRhYmFzZTo6UHVzaFdha2VTdGF0ZVRvVG9waWNNYXAgZ2V0UmVzdWx0OworCisgICAg
ICAgIGRiLT5nZXRUb3BpY3NCeVdha2VTdGF0ZShbJmRvbmUsICZnZXRSZXN1bHRdKFB1c2hEYXRh
YmFzZTo6UHVzaFdha2VTdGF0ZVRvVG9waWNNYXAmJiByZXN1bHQpIHsKKyAgICAgICAgICAgIGdl
dFJlc3VsdCA9IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAg
ICAgICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgICAgICByZXR1cm4gZ2V0
UmVzdWx0OworICAgIH0KKworICAgIHZvaWQgU2V0VXAoKSBmaW5hbAorICAgIHsKKyAgICAgICAg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnko
W3RoaXMsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7
CisgICAgICAgICAgICBkYiA9IFdURk1vdmUoZGF0YWJhc2UpOworICAgICAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgICAg
IEFTU0VSVF9UUlVFKGRiKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MSA9IGlu
c2VydFJlY29yZChyZWNvcmQxKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDIg
PSBpbnNlcnRSZWNvcmQocmVjb3JkMikpOworICAgICAgICBBU1NFUlRfVFJVRShpbnNlcnRSZXN1
bHQzID0gaW5zZXJ0UmVjb3JkKHJlY29yZDMpKTsKKyAgICB9Cit9OworCitzdGF0aWMgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFB1c2hSZWNvcmQmIGEsIGNvbnN0IFB1c2hSZWNvcmQmIGIpCit7Cisg
ICAgcmV0dXJuIGEuaWRlbnRpZmllciA9PSBiLmlkZW50aWZpZXIKKyAgICAgICAgJiYgYS5idW5k
bGVJRCA9PSBiLmJ1bmRsZUlECisgICAgICAgICYmIGEuc2VjdXJpdHlPcmlnaW4gPT0gYi5zZWN1
cml0eU9yaWdpbgorICAgICAgICAmJiBhLnNjb3BlID09IGIuc2NvcGUKKyAgICAgICAgJiYgYS5l
bmRwb2ludCA9PSBiLmVuZHBvaW50CisgICAgICAgICYmIGEudG9waWMgPT0gYi50b3BpYworICAg
ICAgICAmJiBhLnNlcnZlclZBUElEUHVibGljS2V5ID09IGIuc2VydmVyVkFQSURQdWJsaWNLZXkK
KyAgICAgICAgJiYgYS5jbGllbnRQdWJsaWNLZXkgPT0gYi5jbGllbnRQdWJsaWNLZXkKKyAgICAg
ICAgJiYgYS5jbGllbnRQcml2YXRlS2V5ID09IGIuY2xpZW50UHJpdmF0ZUtleQorICAgICAgICAm
JiBhLnNoYXJlZEF1dGhTZWNyZXQgPT0gYi5zaGFyZWRBdXRoU2VjcmV0CisgICAgICAgICYmIGEu
ZXhwaXJhdGlvblRpbWUgPT0gYi5leHBpcmF0aW9uVGltZQorICAgICAgICAmJiBhLndha2VTdGF0
ZSA9PSBiLndha2VTdGF0ZTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEluc2VydFJl
Y29yZCkKK3sKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMSA9IHJlY29yZDE7CisgICAgZXhwZWN0
ZWRSZWNvcmQxLmlkZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllclR5cGU+KDEpOworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkUmVjb3JkMSA9
PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIGV4cGVjdGVkUmVjb3JkMiA9IHJlY29yZDI7
CisgICAgZXhwZWN0ZWRSZWNvcmQyLmlkZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxQ
dXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KDIpOworICAgIEVYUEVDVF9UUlVFKGV4cGVj
dGVkUmVjb3JkMiA9PSAqaW5zZXJ0UmVzdWx0Mik7CisKKyAgICAvLyBTaW5jZSByZWNvcmQzIGlz
IGluIHRoZSBzYW1lIFN1YnNjcmlwdGlvblNldCBhcyByZWNvcmQxLCBpdCBzaG91bGQKKyAgICAv
LyBpbmhlcml0IHJlY29yZDEncyB3YWtlIHN0YXRlLgorICAgIGF1dG8gZXhwZWN0ZWRSZWNvcmQz
ID0gcmVjb3JkMzsKKyAgICBleHBlY3RlZFJlY29yZDMuaWRlbnRpZmllciA9IG1ha2VPYmplY3RJ
ZGVudGlmaWVyPFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyVHlwZT4oMyk7CisgICAgZXhwZWN0
ZWRSZWNvcmQzLndha2VTdGF0ZSA9IGV4cGVjdGVkUmVjb3JkMS53YWtlU3RhdGU7CisgICAgRVhQ
RUNUX1RSVUUoZXhwZWN0ZWRSZWNvcmQzID09ICppbnNlcnRSZXN1bHQzKTsKKworICAgIC8vIElu
c2VydGluZyBhIHJlY29yZCB3aXRoIHRoZSBzYW1lIChidW5kbGVJRCwgc2NvcGUpIGFzIHJlY29y
ZCAxIHNob3VsZCBmYWlsLgorICAgIFB1c2hSZWNvcmQgcmVjb3JkNCA9IHJlY29yZDE7CisgICAg
cmVjb3JkNC5lbmRwb2ludCA9ICJodHRwczovL3d3dy53ZWJraXQub3JnIl9zOworICAgIEVYUEVD
VF9GQUxTRShpbnNlcnRSZWNvcmQoV1RGTW92ZShyZWNvcmQ0KSkpOworCisgICAgRVhQRUNUX0VR
KGdldFJvd0lkZW50aWZpZXJzKCksIChIYXNoU2V0PHVpbnQ2NF90PiB7IDEsIDIsIDMgfSkpOwor
fQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgUmVtb3ZlUmVjb3JkKQoreworICAgIEVYUEVD
VF9UUlVFKHJlbW92ZVJlY29yZEJ5Um93SWRlbnRpZmllcigxKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHJlbW92ZVJlY29yZEJ5Um93SWRlbnRpZmllcigxKSk7CisgICAgRVhQRUNUX0VRKGdldFJvd0lk
ZW50aWZpZXJzKCksIChIYXNoU2V0PHVpbnQ2NF90PiB7IDIsIDMgfSkpOworfQorCitURVNUX0Yo
UHVzaERhdGFiYXNlVGVzdCwgR2V0UmVjb3JkQnlUb3BpYykKK3sKKyAgICBhdXRvIHJlc3VsdDEg
PSBnZXRSZWNvcmRCeVRvcGljKHJlY29yZDEudG9waWMpOworICAgIEFTU0VSVF9UUlVFKHJlc3Vs
dDEpOworICAgIEVYUEVDVF9UUlVFKCpyZXN1bHQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAg
IGF1dG8gcmVzdWx0MiA9IGdldFJlY29yZEJ5VG9waWMoImZvbyJfcyk7CisgICAgRVhQRUNUX0ZB
TFNFKHJlc3VsdDIpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgR2V0UmVjb3JkQnlC
dW5kbGVJZGVudGlmaWVyQW5kU2NvcGUpCit7CisgICAgYXV0byByZXN1bHQxID0gZ2V0UmVjb3Jk
QnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUocmVjb3JkMS5idW5kbGVJRCwgcmVjb3JkMS5zY29w
ZSk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0MSk7CisgICAgRVhQRUNUX1RSVUUoKnJlc3VsdDEg
PT0gKmluc2VydFJlc3VsdDEpOworCisgICAgYXV0byByZXN1bHQyID0gZ2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUocmVjb3JkMS5idW5kbGVJRCwgImJhciJfcyk7CisgICAgRVhQ
RUNUX0ZBTFNFKHJlc3VsdDIpOworCisgICAgYXV0byByZXN1bHQzID0gZ2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUoImZvbyJfcywgImJhciJfcyk7CisgICAgRVhQRUNUX0ZBTFNF
KHJlc3VsdDMpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgR2V0VG9waWNzQnlXYWtl
U3RhdGUpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGV4cGVjdGVkIHsK
KyAgICAgICAgeyAidG9waWMxIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9LAorICAg
ICAgICB7ICJ0b3BpYzIiLCBQdXNoV2FrZVN0YXRlOjpXYWtpbmcgfSwKKyAgICAgICAgeyAidG9w
aWMzIiwgUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyB9CisgICAgfTsKKyAgICBIYXNoTWFw
PFN0cmluZywgUHVzaFdha2VTdGF0ZT4gYWN0dWFsOworCisgICAgZm9yIChjb25zdCBhdXRvJiBb
d2FrZVN0YXRlLCB0b3BpY3NdIDogZ2V0VG9waWNzQnlXYWtlU3RhdGUoKSkgeworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHRvcGljIDogdG9waWNzKQorICAgICAgICAgICAgYWN0dWFsLmFkZCh0
b3BpYywgd2FrZVN0YXRlKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGFjdHVh
bCk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBTdGFydHNGcm9tU2NyYXRjaE9uRG93
bmdyYWRlKQoreworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGU7Cisg
ICAgYXV0byBwYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoIlB1c2hEYXRhYmFz
ZSIsIGhhbmRsZSwgIi5kYiIpOworICAgIEFTU0VSVF9UUlVFKEZpbGVTeXN0ZW06OmlzSGFuZGxl
VmFsaWQoaGFuZGxlKSk7CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisKKyAg
ICB7CisgICAgICAgIFNRTGl0ZURhdGFiYXNlIGRiOworICAgICAgICBkYi5vcGVuKHBhdGgpOwor
ICAgICAgICBBU1NFUlRfVFJVRShkYi5leGVjdXRlQ29tbWFuZCgiUFJBR01BIHVzZXJfdmVyc2lv
biA9IDEwMDAwMCJfcykpOworICAgIH0KKworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFB1c2hEYXRhYmFzZT4gY3JlYXRlUmVzdWx0OworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsK
KyAgICAgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25l
XShzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7CisgICAgICAgICAg
ICBjcmVhdGVSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKKyAgICAgICAgICAgIGRvbmUgPSB0
cnVlOworICAgICAgICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgQVNT
RVJUX1RSVUUoY3JlYXRlUmVzdWx0KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZURh
dGFiYXNlIGRiOworICAgICAgICBkYi5vcGVuKHBhdGgpOworICAgICAgICB7CisgICAgICAgICAg
ICBpbnQgdmVyc2lvbiA9IDA7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLnByZXBhcmVTdGF0
ZW1lbnQoIlBSQUdNQSB1c2VyX3ZlcnNpb24iX3MpOworICAgICAgICAgICAgaWYgKHNxbCAmJiBz
cWwtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBzcWwt
PmNvbHVtbkludCgwKTsKKyAgICAgICAgICAgIEVYUEVDVF9HVCh2ZXJzaW9uLCAwKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9MVCh2ZXJzaW9uLCAxMDAwMDApOworICAgICAgICB9CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450315</attachid>
            <date>2022-01-28 22:32:56 -0800</date>
            <delta_ts>2022-01-30 21:59:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234194-20220128223255.patch</filename>
            <type>text/plain</type>
            <size>53032</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ2Mjc3YjQxNjNmN2Q3
YWRjZmY3NDMwYjBmMDEwNjI5ZTk3Yzg5Yy4uY2M4MmYzZWRkNzU4MWE2M2FlNmQwMmZhNmEyNzNi
ZmY0NGM2ODI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIyLTAxLTI4ICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHVzaFJlY29yZDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZyZXNoUHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpQdXNoRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50T25RdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpiaW5kRXhwaXJhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwaXJhdGlvblRpbWVG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVPbk1haW5RdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpQdXNoRGF0YWJhc2U6OnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlUHVzaFJlY29yZEZyb21Sb3cpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERh
dGFiYXNlOjpnZXRSZWNvcmRCeVRvcGljKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFz
ZTo6Z2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UHVzaERhdGFiYXNlOjpnZXRJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQdXNo
RGF0YWJhc2U6OmdldFRvcGljc0J5V2FrZVN0YXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3B1c2gt
YXBpL1B1c2hEYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vTG9nZ2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisKIDIwMjItMDEtMjQg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFzcyB0aGUg
RG9jdW1lbnQgdGhyb3VnaCBiaW5kaW5ncyB0byBLZXlmcmFtZUVmZmVjdDo6c2V0S2V5ZnJhbWVz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1ZWE1MjVlOWVlZjA5NDVjNWVlY2ZiMWZjNWU2NjQz
Nzg1YzA2OTMuLmMwOWQ5NGZjZjBkM2VhYTUzOGE0MWMwMzE0ODE3YTRkYTg2ZmViNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMjkzLDYgKzI5Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBNb2R1bGVzL3Blcm1pc3Npb25zL1Blcm1pc3Npb25TdGF0ZS5o
CiAKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hDcnlwdG8uaAorICAgIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlQ3J5cHRv
LmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hQZXJtaXNzaW9uU3RhdGUuaAogICAgIE1vZHVs
ZXMvcHVzaC1hcGkvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwMWUwNDk4MWJl
ZThmN2ZlZDY1YWE4NTdhNzg4ZmI3N2Y5NjAxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw1MDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHVzaERhdGFi
YXNlLmgiCisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCisjZGVmaW5lIFBVU0hE
Ql9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coUHVzaCwgIiVwIC0gUHVzaERhdGFi
YXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0Vf
TE9HX0VSUk9SKGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiJXAgLSBQdXNoRGF0
YWJhc2U6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpIFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUigiRmFpbGVkIHRvIGJp
bmQgc3RhdGVtZW50ICglZCk6ICVzIiwgbV9kYi0+bGFzdEVycm9yKCksIG1fZGItPmxhc3RFcnJv
ck1zZygpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGN1
cnJlbnRQdXNoRGF0YWJhc2VWZXJzaW9uID0gMTsKKworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJh
bCBwdXNoRGF0YWJhc2VTY2hlbWFWMVN0YXRlbWVudHNbXSA9IHsKKyAgICAiUFJBR01BIGF1dG9f
dmFjdXVtPUlOQ1JFTUVOVEFMIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9uU2V0
cygiCisgICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgYnVuZGxlSUQg
VEVYVCBOT1QgTlVMTCwiCisgICAgIiAgc2VjdXJpdHlPcmlnaW4gVEVYVCBOT1QgTlVMTCwiCisg
ICAgIiAgd2FrZVN0YXRlIElOVCBOT1QgTlVMTCwiCisgICAgIiAgVU5JUVVFKGJ1bmRsZUlELCBz
ZWN1cml0eU9yaWdpbikpIl9zLAorICAgICJDUkVBVEUgVEFCTEUgU3Vic2NyaXB0aW9ucygiCisg
ICAgIiAgY3JlYXRpb25UaW1lIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc3Vic2NyaXB0aW9uU2V0
SUQgSU5UIE5PVCBOVUxMLCIKKyAgICAiICBzY29wZSBURVhUIE5PVCBOVUxMLCIKKyAgICAiICBl
bmRwb2ludCBURVhUIE5PVCBOVUxMLCIKKyAgICAiICB0b3BpYyBURVhUIE5PVCBOVUxMIFVOSVFV
RSwiCisgICAgIiAgc2VydmVyVkFQSURQdWJsaWNLZXkgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAg
Y2xpZW50UHVibGljS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIGNsaWVudFByaXZhdGVLZXkg
QkxPQiBOT1QgTlVMTCwiCisgICAgIiAgc2hhcmVkQXV0aFNlY3JldCBCTE9CIE5PVCBOVUxMLCIK
KyAgICAiICBleHBpcmF0aW9uVGltZSBJTlQsIgorICAgICIgIFVOSVFVRShzY29wZSwgc3Vic2Ny
aXB0aW9uU2V0SUQpKSJfcywKKyAgICAiQ1JFQVRFIElOREVYIFN1YnNjcmlwdGlvbnNfU3Vic2Ny
aXB0aW9uU2V0SURfSW5kZXggT04gU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25TZXRJRCkiX3Ms
CisgICAgIlBSQUdNQSB1c2VyX3ZlcnNpb24gPSAxIl9zCit9OworCitQdXNoUmVjb3JkIFB1c2hS
ZWNvcmQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgUHVzaFJlY29yZCByZXN1bHQ7Cisg
ICAgcmVzdWx0LmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIHJlc3VsdC5idW5kbGVJRCA9
IGJ1bmRsZUlELmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5zZWN1cml0eU9yaWdpbiA9IHNl
Y3VyaXR5T3JpZ2luLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5zY29wZSA9IHNjb3BlLmlz
b2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5lbmRwb2ludCA9IGVuZHBvaW50Lmlzb2xhdGVkQ29w
eSgpOworICAgIHJlc3VsdC50b3BpYyA9IHRvcGljLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3Vs
dC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9IHNlcnZlclZBUElEUHVibGljS2V5OworICAgIHJlc3Vs
dC5jbGllbnRQdWJsaWNLZXkgPSBjbGllbnRQdWJsaWNLZXk7CisgICAgcmVzdWx0LmNsaWVudFBy
aXZhdGVLZXkgPSBjbGllbnRQcml2YXRlS2V5OworICAgIHJlc3VsdC5zaGFyZWRBdXRoU2VjcmV0
ID0gc2hhcmVkQXV0aFNlY3JldDsKKyAgICByZXN1bHQuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0
aW9uVGltZTsKKyAgICByZXN1bHQud2FrZVN0YXRlID0gd2FrZVN0YXRlOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlRnJlc2hQdXNoRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
RGF0YWJhc2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChwYXRoID09ICI6
bWVtb3J5OiJfcyB8fCAhU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKHBhdGgp
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcmV0dXJuIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIHBhdGgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1
c2hEYXRhYmFzZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBxdWV1ZSA9
IFdvcmtRdWV1ZTo6Y3JlYXRlKCJQdXNoRGF0YWJhc2UgSS9PIFRocmVhZCIpOworICAgIHF1ZXVl
LT5kaXNwYXRjaChbcXVldWUsIHBhdGggPSBjcm9zc1RocmVhZENvcHkocGF0aCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8gZmFpbE9uTWFpblF1ZXVlID0gW10oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeworICAg
ICAgICAgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAocGF0aCAhPSAiOm1lbW9yeToiX3MgJiYgIUZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMocGF0aCkgJiYgIUZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVt
OjpwYXJlbnRQYXRoKHBhdGgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVz
aCwgIkNvdWxkbid0IGNyZWF0ZSBQdXNoRGF0YWJhc2UgcGFyZW50IGRpcmVjdG9yaWVzIGZvciBw
YXRoICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGZhaWxPbk1haW5RdWV1
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvIGRiID0gV1RGOjptYWtlVW5pcXVlPFNRTGl0ZURhdGFiYXNl
PigpOworICAgICAgICBkYi0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgICAgIGlm
ICghZGItPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gs
ICJDb3VsZG4ndCBvcGVuIGRhdGFiYXNlIGZpbGUgYXQgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBmYWlsT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHZl
cnNpb24gPSAwOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGRiLT5wcmVwYXJl
U3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlmICghc3Fs
IHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3QgZ2V0IGRhdGFiYXNlIHZlcnNpb24gYXQgcGF0aCAl
cyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZmFpbE9uTWFpblF1ZXVl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvbiA+IGN1cnJlbnRQdXNoRGF0YWJhc2VWZXJz
aW9uKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQdXNoLCAiRm91bmQgbmV3ZXIg
ZGF0YWJhc2UgdmVyc2lvbiB0aGFuIGV4cGVjdGVkLCBzdGFydGluZyBmcm9tIHNjcmF0Y2g6ICVz
IiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRp
c3BhdGNoKFtwYXRoID0gY3Jvc3NUaHJlYWRDb3B5KHBhdGgpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNyZWF0ZUZyZXNoUHVzaERhdGFiYXNlKHBhdGgsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHZlcnNpb24gPCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgeworICAgICAg
ICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKmRiKTsKKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDog
cHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFk
Yi0+ZXhlY3V0ZUNvbW1hbmQoc3RhdGVtZW50KSkgeworICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3QgY3JlYXRlIGRhdGFiYXNlIHNjaGVtYSBmb3Ig
c3RhdGVtZW50ICVzIGF0IHBhdGggJXMiLCBzdGF0ZW1lbnQuY2hhcmFjdGVycygpLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsT25NYWluUXVldWUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNo
KFtxdWV1ZSA9IFdURk1vdmUocXVldWUpLCBkYiA9IFdURk1vdmUoZGIpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4obmV3IFB1
c2hEYXRhYmFzZShXVEZNb3ZlKHF1ZXVlKSwgV1RGTW92ZShkYikpKSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICByZXR1cm4gUHVzaERhdGFiYXNlOjpjcmVhdGUoIjptZW1vcnk6
Il9zLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK1B1c2hEYXRhYmFzZTo6UHVz
aERhdGFiYXNlKFJlZjxXb3JrUXVldWU+JiYgcXVldWUsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVE
YXRhYmFzZT4mJiBkYikKKyAgICA6IG1fcXVldWUoV1RGTW92ZShxdWV1ZSkpCisgICAgLCBtX2Ri
KFdURk1vdmUoZGIpKQoreworfQorCitQdXNoRGF0YWJhc2U6On5QdXNoRGF0YWJhc2UoKQorewor
ICAgIG1fcXVldWUtPmRpc3BhdGNoU3luYyhbZGIgPSBXVEZNb3ZlKG1fZGIpLCBzdGF0ZW1lbnRz
ID0gV1RGTW92ZShtX3N0YXRlbWVudHMpXSgpIG11dGFibGUgeworICAgICAgICBzdGF0ZW1lbnRz
LmNsZWFyKCk7CisgICAgICAgIGRiLT5jbG9zZSgpOworICAgIH0pOworfQorCitTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBQdXNoRGF0YWJhc2U6OmNhY2hlZFN0YXRlbWVudE9uUXVldWUo
QVNDSUlMaXRlcmFsIHF1ZXJ5KQoreworICAgIGF1dG8gaXQgPSBtX3N0YXRlbWVudHMuZmluZChx
dWVyeSk7CisgICAgaWYgKGl0ICE9IG1fc3RhdGVtZW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlKGl0LT52YWx1ZS5wdHIoKSk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IG1fZGItPnByZXBhcmVIZWFwU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfRVJST1IoIkZhaWxlZCB3aXRo
ICVkIHByZXBhcmluZyBzdGF0ZW1lbnQ6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCByZXN1bHQuZXJy
b3IoKSwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlKG51bGxwdHIpOworICAgIH0KKworICAgIGF1dG8gcmVmID0gV1RGTW92
ZSgqcmVzdWx0KTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHJlZi5wdHIoKTsKKyAgICBtX3N0YXRl
bWVudHMuYWRkKHF1ZXJ5LCBXVEZNb3ZlKHJlZikpOworICAgIHJldHVybiBTUUxpdGVTdGF0ZW1l
bnRBdXRvUmVzZXRTY29wZShzdGF0ZW1lbnQpOworfQorCitzdGF0aWMgaW50IGJpbmRFeHBpcmF0
aW9uVGltZShTUUxpdGVTdGF0ZW1lbnQqIHNxbCwgaW50IGluZGV4LCBzdGQ6Om9wdGlvbmFsPEVw
b2NoVGltZVN0YW1wPiB0aW1lc3RhbXApCit7CisgICAgcmV0dXJuIHRpbWVzdGFtcCA/IHNxbC0+
YmluZEludDY0KGluZGV4LCBjb252ZXJ0RXBvY2hUaW1lU3RhbXBUb1NlY29uZHMoKnRpbWVzdGFt
cCkpIDogc3FsLT5iaW5kTnVsbChpbmRleCk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPEVw
b2NoVGltZVN0YW1wPiBleHBpcmF0aW9uVGltZUZyb21WYWx1ZShTUUxWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRTZWNvbmRzVG9FcG9jaFRpbWVTdGFtcChzdGQ6OmdldDxkb3VibGU+KHZh
bHVlKSk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFU+CitzdGF0aWMgdm9pZCBjb21wbGV0ZU9uTWFpblF1ZXVlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIGNvbnN0IFUmIHJlc3VsdCkKK3sKKyAg
ICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0ID0gY3Jvc3NUaHJlYWRDb3B5KHJlc3VsdCldKCkg
bXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjppbnNlcnRSZWNvcmQoY29uc3QgUHVzaFJl
Y29yZCYgcmVjb3JkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJl
Y29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W3RoaXMsIHJlY29yZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9kYik7CisgICAgICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKKyAgICAgICAgaW50NjRfdCBzdWJzY3JpcHRpb25TZXRJRCA9IDA7CisKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxF
Q1Qgcm93aWQsIHdha2VTdGF0ZSBGUk9NIFN1YnNjcmlwdGlvblNldHMgV0hFUkUgYnVuZGxlSUQg
PSA/IEFORCBzZWN1cml0eU9yaWdpbiA9ID8iX3MpOworICAgICAgICAgICAgaWYgKCFzcWwKKyAg
ICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDEsIHJlY29yZC5idW5kbGVJRCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCByZWNvcmQuc2VjdXJp
dHlPcmlnaW4pICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNF
X0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBzdWJzY3Jp
cHRpb25TZXRJRCA9IHNxbC0+Y29sdW1uSW50NjQoMCk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
Lndha2VTdGF0ZSA9IHN0YXRpY19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDEp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vic2NyaXB0aW9u
U2V0SUQpIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgi
SU5TRVJUIElOVE8gU3Vic2NyaXB0aW9uU2V0cyBWQUxVRVMoPywgPywgPywgPykiX3MpOworICAg
ICAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0
aW1lKG51bGxwdHIpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRU
ZXh0KDIsIHJlY29yZC5idW5kbGVJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwg
c3FsLT5iaW5kVGV4dCgzLCByZWNvcmQuc2VjdXJpdHlPcmlnaW4pICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHJlY29yZC53
YWtlU3RhdGUpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFT
RV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8
UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvblNldElEID0gbV9kYi0+bGFzdEluc2VydFJvd0lE
KCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudE9uUXVldWUoIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvbnMgVkFMVUVTKD8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8pIl9zKTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAg
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgdGltZShudWxscHRyKSkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgc3Vic2NyaXB0aW9uU2V0
SUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVj
b3JkLnNjb3BlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0
KDQsIHJlY29yZC5lbmRwb2ludCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kVGV4dCg1LCByZWNvcmQudG9waWMpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC0+YmluZEJsb2IoNiwgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5KSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDcsIHJlY29yZC5jbGllbnRQ
dWJsaWNLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2Io
OCwgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC0+YmluZEJsb2IoOSwgcmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IGJpbmRFeHBpcmF0aW9uVGltZShzcWwuZ2V0KCksIDEwLCBy
ZWNvcmQuZXhwaXJhdGlvblRpbWUpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBV
U0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVP
bk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNo
UmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3Rk
OjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSBtYWtlT2JqZWN0
SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KG1fZGItPmxhc3RJbnNl
cnRSb3dJRCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwor
CisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IFdURk1vdmUocmVjb3JkKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpyZW1v
dmVSZWNvcmRCeUlkZW50aWZpZXIoUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgaWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXIu
dG9VSW50NjQoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1f
ZGIpOworICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGJvb2wgaXNMYXN0
U3Vic2NyaXB0aW9uSW5TZXQgPSBmYWxzZTsKKyAgICAgICAgaW50NjRfdCBzdWJzY3JpcHRpb25T
ZXRJRCA9IDA7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgc3Vic2NyaXB0aW9uU2V0SUQgRlJPTSBTdWJzY3JpcHRpb25z
IFdIRVJFIHJvd2lkID0gPyJfcyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+Ymlu
ZEludDY0KDEsIHJvd0lkZW50aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAg
IFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxl
dGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9
IHNxbC0+Y29sdW1uSW50NjQoMCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICAvLyBUT0RPOiBvbiBTUUxpdGUgPjMuMzUuMCwgd2UgY291bGQgdXNlIFJFVFVSTklORyB0byBh
dm9pZCB0aGUgU0VMRUNUIGFib3ZlLgorICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnRPblF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIFdIRVJFIHJvd2lkID0gPyJf
cyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHJvd0lkZW50
aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xP
R19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRo
aXMgd2FzIHRoZSBsYXN0IHN1YnNjcmlwdGlvbiBpbiB0aGUgc3Vic2NyaXB0aW9uIHNldC4KKyAg
ICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHJvd2lk
IEZST00gU3Vic2NyaXB0aW9ucyBXSEVSRSBzdWJzY3JpcHRpb25TZXRJRCA9ID8iX3MpOworCisg
ICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJ
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJ
TkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IChzcWwt
PnN0ZXAoKSA9PSBTUUxJVEVfRE9ORSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNMYXN0
U3Vic2NyaXB0aW9uSW5TZXQpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZW50aXJlIHN1
YnNjcmlwdGlvbiBzZXQgaWYgaXQgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhbnkgc3Vi
c2NyaXB0aW9ucy4KKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1
ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSByb3dpZCA9ID8iX3MpOworICAg
ICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kSW50NjQoMSwgc3Vic2NyaXB0aW9uU2V0SUQp
ICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5E
X0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCisgICAgICAgIGNv
bXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRydWUpOworICAg
IH0pOworfQorCitzdGF0aWMgUHVzaFJlY29yZCBtYWtlUHVzaFJlY29yZEZyb21Sb3coU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmIHNxbCkKK3sKKyAgICBQdXNoUmVjb3JkIHJlY29yZDsK
KyAgICByZWNvcmQuaWRlbnRpZmllciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFB1c2hTdWJzY3Jp
cHRpb25JZGVudGlmaWVyVHlwZT4oc3FsLT5jb2x1bW5JbnQ2NCgwKSk7CisgICAgcmVjb3JkLmJ1
bmRsZUlEID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9
IHNxbC0+Y29sdW1uVGV4dCgyKTsKKyAgICByZWNvcmQuc2NvcGUgPSBzcWwtPmNvbHVtblRleHQo
Myk7CisgICAgcmVjb3JkLmVuZHBvaW50ID0gc3FsLT5jb2x1bW5UZXh0KDQpOworICAgIHJlY29y
ZC50b3BpYyA9IHNxbC0+Y29sdW1uVGV4dCg1KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJs
aWNLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNik7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9
IHNxbC0+Y29sdW1uQmxvYig3KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+
Y29sdW1uQmxvYig4KTsKKyAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1u
QmxvYig5KTsKKyAgICByZWNvcmQuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZUZyb21W
YWx1ZShzcWwtPmNvbHVtblZhbHVlKDEwKSk7CisgICAgcmVjb3JkLndha2VTdGF0ZSA9IHN0YXRp
Y19jYXN0PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDExKSk7CisKKyAgICByZXR1cm4g
cmVjb3JkOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UmVjb3JkQnlUb3BpYyhjb25zdCBT
dHJpbmcmIHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJl
Y29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W3RoaXMsIHRvcGljID0gY3Jvc3NUaHJlYWRDb3B5KHRvcGljKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gRm9y
Y2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhlIFN1YnNjcmlwdGlvbnMoc2NvcGUpIGluZGV4IGZpcnN0
IHZpYSBDUk9TUyBKT0lOLgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVl
dWUoCisgICAgICAgICAgICAiU0VMRUNUICIKKyAgICAgICAgICAgICIgIHN1Yi5yb3dJRCwgc3Mu
YnVuZGxlSUQsIHNzLnNlY3VyaXR5T3JpZ2luLCBzdWIuc2NvcGUsIHN1Yi5lbmRwb2ludCwgc3Vi
LnRvcGljLCAiCisgICAgICAgICAgICAiICBzdWIuc2VydmVyVkFQSURQdWJsaWNLZXksIHN1Yi5j
bGllbnRQdWJsaWNLZXksIHN1Yi5jbGllbnRQcml2YXRlS2V5LCAiCisgICAgICAgICAgICAiICBz
dWIuc2hhcmVkQXV0aFNlY3JldCwgc3ViLmV4cGlyYXRpb25UaW1lLCBzcy53YWtlU3RhdGUgIgor
ICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIgIgorICAgICAgICAgICAgIkNST1NT
IEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAiT04gc3ViLnN1YnNjcmlw
dGlvblNldElEID0gc3Mucm93aWQgIgorICAgICAgICAgICAgIldIRVJFIHN1Yi50b3BpYyA9ID8i
X3MpOworCisgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZFRleHQoMSwgdG9waWMpICE9IFNR
TElURV9PSykgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsK
KyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBtYWtlUHVzaFJlY29yZEZyb21Sb3coc3FsKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUHVzaERhdGFiYXNlOjpnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25z
dCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGJ1bmRsZUlEID0gY3Jvc3NUaHJlYWRD
b3B5KGJ1bmRsZUlEKSwgc2NvcGUgPSBjcm9zc1RocmVhZENvcHkoc2NvcGUpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICAvLyBGb3JjZSBTUUxpdGUgdG8gY29uc3VsdCB0aGUgU3Vic2NyaXB0aW9ucyhzY29wZSkgaW5k
ZXggZmlyc3QgdmlhIENST1NTIEpPSU4uCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVt
ZW50T25RdWV1ZSgKKyAgICAgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAgICAgIiAgc3ViLnJv
d0lELCBzcy5idW5kbGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBv
aW50LCBzdWIudG9waWMsICIKKyAgICAgICAgICAgICIgIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tl
eSwgc3ViLmNsaWVudFB1YmxpY0tleSwgc3ViLmNsaWVudFByaXZhdGVLZXksICIKKyAgICAgICAg
ICAgICIgIHN1Yi5zaGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlvblRpbWUsIHNzLndha2VT
dGF0ZSAiCisgICAgICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAiCisgICAgICAgICAg
ICAiQ1JPU1MgSk9JTiBTdWJzY3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAgICAgICJPTiBzdWIu
c3Vic2NyaXB0aW9uU2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICAgICAiV0hFUkUgc3ViLnNj
b3BlID0gPyBBTkQgc3MuYnVuZGxlSUQgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBz
cWwtPmJpbmRUZXh0KDEsIHNjb3BlKSAhPSBTUUxJVEVfT0sgfHwgc3FsLT5iaW5kVGV4dCgyLCBi
dW5kbGVJRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0df
QklORF9FUlJPUigpOworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1ha2VQdXNoUmVjb3JkRnJvbVJvdyhzcWwpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldElkZW50aWZpZXJzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+IHJlc3VsdDsKKyAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgcm93aWQgRlJPTSBTdWJz
Y3JpcHRpb25zIl9zKTsKKyAgICAgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgcmVzdWx0LmFkZChtYWtlT2JqZWN0SWRlbnRpZmllcjxQdXNo
U3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHNxbC0+Y29sdW1uSW50NjQoMCkpKTsKKworICAg
ICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0VG9waWNz
QnlXYWtlU3RhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoV2FrZVN0YXRlVG9Ub3BpY01h
cCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaW50IG51bWJlck9mV2FrZVN0YXRlcyA9IHN0YXRpY19jYXN0PGludD4o
UHVzaFdha2VTdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpOworICAgICAgICBWZWN0b3I8VmVjdG9yPFN0
cmluZz4+IHRvcGljc0J5V2FrZVN0YXRlKG51bWJlck9mV2FrZVN0YXRlcyk7IC8vIHVzZWQgYmVj
YXVzZSBIYXNoTWFwOjppc29sYXRlZENvcHkgZG9lc24ndCBleGlzdAorCisgICAgICAgIGF1dG8g
c3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgKKyAgICAgICAgICAgICJTRUxFQ1Qgc3Mud2Fr
ZVN0YXRlLCBzdWIudG9waWMgIgorICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIg
IgorICAgICAgICAgICAgIkpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAi
T04gc3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQiX3MpOworICAgICAgICBpZiAoIXNx
bCkgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAg
ICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChzcWwtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7CisgICAgICAgICAgICBhdXRvIHB1c2hXYWtlU3RhdGUgPSBzcWwtPmNvbHVtbkludCgwKTsK
KyAgICAgICAgICAgIGF1dG8gdG9waWMgPSBzcWwtPmNvbHVtblRleHQoMSk7CisgICAgICAgICAg
ICBpZiAocHVzaFdha2VTdGF0ZSA+PSAwICYmIHB1c2hXYWtlU3RhdGUgPCBudW1iZXJPZldha2VT
dGF0ZXMpCisgICAgICAgICAgICAgICAgdG9waWNzQnlXYWtlU3RhdGVbcHVzaFdha2VTdGF0ZV0u
YXBwZW5kKFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgfQorCisgICAgICAgIFdvcmtRdWV1ZTo6
bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCB0b3BpY3NCeVdha2VTdGF0ZSA9IGNyb3NzVGhyZWFkQ29weSh0b3BpY3NCeVdha2VT
dGF0ZSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBQdXNoV2FrZVN0YXRlVG9Ub3BpY01hcCBy
ZXN1bHQ7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4o
UHVzaFdha2VTdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpOyArK2kpCisgICAgICAgICAgICAgICAgcmVz
dWx0LmFkZChzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRlPihpKSwgV1RGTW92ZSh0b3BpY3NCeVdh
a2VTdGF0ZVtpXSkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyZWUzN2NkZTM1YzI4
ZGU2YTAxYjdjNGE3MzJlODgzMTNiYzc5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKwor
I2luY2x1ZGUgIkVwb2NoVGltZVN0YW1wLmgiCisjaW5jbHVkZSAiUHVzaFN1YnNjcmlwdGlvbklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmgi
CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2FrZSBzdGF0ZSB0aGF0IGFwcGxpZXMgZm9yIGRl
dmljZXMgdGhhdCByYWNlLXRvLXNsZWVwLgorZW51bSBjbGFzcyBQdXNoV2FrZVN0YXRlIDogdWlu
dDhfdCB7CisgICAgV2FraW5nLCAvLyBBbGwgcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAg
T3Bwb3J0dW5pc3RpYywgLy8gTG93IHByaW9yaXR5IHB1c2hlcyBtYXkgbm90IHdha2UgZGV2aWNl
LgorICAgIE5vbldha2luZywgLy8gTm8gcHVzaGVzIHdpbGwgd2FrZSBkZXZpY2UuCisgICAgTnVt
YmVyT2ZTdGF0ZXMKK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAgICBQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIFN0cmluZyBidW5kbGVJRDsKKyAgICBTdHJp
bmcgc2VjdXJpdHlPcmlnaW47CisgICAgU3RyaW5nIHNjb3BlOworICAgIFN0cmluZyBlbmRwb2lu
dDsKKyAgICBTdHJpbmcgdG9waWM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclZBUElEUHVi
bGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQdWJsaWNLZXk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNsaWVudFByaXZhdGVLZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNoYXJlZEF1
dGhTZWNyZXQ7CisgICAgc3RkOjpvcHRpb25hbDxFcG9jaFRpbWVTdGFtcD4gZXhwaXJhdGlvblRp
bWUgeyB9OworICAgIFB1c2hXYWtlU3RhdGUgd2FrZVN0YXRlIHsgUHVzaFdha2VTdGF0ZTo6V2Fr
aW5nIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXNoUmVjb3JkIGlzb2xhdGVkQ29weSgpIGNv
bnN0OworfTsKKworY2xhc3MgUHVzaERhdGFiYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVh
dGVJbk1lbW9yeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0
YWJhc2U+JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+UHVzaERhdGFiYXNlKCk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydFJlY29yZChjb25zdCBQdXNoUmVjb3JkJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihQdXNoU3Vic2Ny
aXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRT
Y29wZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4mJik+JiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0SWRlbnRpZmllcnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChI
YXNoU2V0PFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyPiYmKT4mJik7CisKKyAgICB1c2luZyBQ
dXNoV2FrZVN0YXRlVG9Ub3BpY01hcCA9IEhhc2hNYXA8UHVzaFdha2VTdGF0ZSwgVmVjdG9yPFN0
cmluZz4sIFdURjo6SW50SGFzaDxQdXNoV2FrZVN0YXRlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRy
YWl0czxQdXNoV2FrZVN0YXRlPj47CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRUb3BpY3NC
eVdha2VTdGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFB1c2hXYWtlU3RhdGVUb1RvcGljTWFw
JiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQdXNoRGF0YWJhc2UoUmVmPFdvcmtR
dWV1ZT4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiYmKTsKKyAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKEFTQ0lJTGl0ZXJhbCBxdWVyeSk7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4gbV9kYjsKKyAg
ICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
Pj4gbV9zdGF0ZW1lbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2MGY2MTcwYmIwMGZk
NjhiZTkxMjI4NDM5MTBjZmM4ZDAwZTE5NDcwLi4zZWExYjEzZjFiNzE4MDA1N2Q5MzZmOThjNDc3
MWQ4OTUyOTc1MjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjYxLDYgKzI2MSw3IEBAIE1vZHVsZXMv
cGljdHVyZWlucGljdHVyZS9FbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHAKIE1vZHVsZXMv
cGljdHVyZWlucGljdHVyZS9IVE1MVmlkZW9FbGVtZW50UGljdHVyZUluUGljdHVyZS5jcHAKIE1v
ZHVsZXMvcGljdHVyZWlucGljdHVyZS9QaWN0dXJlSW5QaWN0dXJlV2luZG93LmNwcAogTW9kdWxl
cy9wdXNoLWFwaS9QdXNoQ3J5cHRvLmNwcAorTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2Uu
Y3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hFdmVudC5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVz
aE1lc3NhZ2VDcnlwdG8uY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlRGF0YS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZjlmZmM3MzJkZjNjNDczMDdhNzgwNzU0MjA3ZGExYjI5NDNiMzRjLi5hNWQ2ZWQyYWI2
Y2UzOTVhYjAxNmM3MzQ0MjFiYTkxNDZlOGJiYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDY2LDYgKzU0NjYsNyBAQAog
CQlFQjI4RUQ0NDI3MTdBQzExMDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjhFRDQxMjcxN0FC
QTkwMDVGMDM5MyAvKiBQdXNoU3Vic2NyaXB0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCM0MyOUI2MjcyOUMzODgwMEZCNjVCNCAv
KiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCM0MyOUI0MjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNoU3Vi
c2NyaXB0aW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJRUIzQzI5QjcyNzI5QzM4QzAwRkI2NUI0
IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCM0MyOUIxMjcyOUMzNkQwMEZCNjVCNCAvKiBQ
dXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggKi87IH07CisJCUVCOUFEOENCMjc2NDZF
OTQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEVCOUFEOEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
QkE3NUM0NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBNzVDNDIyNzVFQkRBQjAwRDZEMzFDIC8q
IFB1c2hDcnlwdG8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFQkE3NUM0NzI3NUVDNjIxMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQTc1QzQwMjc1
RUJEQUEwMEQ2RDMxQyAvKiBQdXNoTWVzc2FnZUNyeXB0by5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVCQjk3MzgxMjcxMDA2NzEwMDc3MzJFRiAv
KiBQdXNoTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRUJCOTczODAyNzEwMDY1NDAwNzczMkVGIC8qIFB1c2hNYW5hZ2VyLmggKi87IH07CkBA
IC0xNzY4OCw2ICsxNzY4OSw4IEBACiAJCUVCM0MyOUIyMjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNo
U3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQ
dXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRUIzQzI5QjMyNzI5QzM2RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFu
Z2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNoYW5n
ZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUIzQzI5QjQyNzI5QzM2
RTAwRkI2NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzgyNzY0NkU5MDAwRDg5M0E0IC8qIFB1c2hE
YXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoRGF0YWJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4Q0EyNzY0NkU5MTAwRDg5M0E0
IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE3NUMz
RTI3NUVCREFBMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHVzaE1lc3NhZ2VDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFQkE3NUM0MDI3NUVCREFBMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHVzaE1lc3NhZ2VDcnlwdG8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUJBNzVDNDEyNzVFQkRBQjAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHVzaENyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTE4NSw2ICsyMTE4OCw4IEBACiAJCQkJRUJBNzVDNDQyNzVFQzU2MDAwRDZEMzFDIC8qIGNvY29h
ICovLAogCQkJCUVCQTc1QzQxMjc1RUJEQUIwMEQ2RDMxQyAvKiBQdXNoQ3J5cHRvLmNwcCAqLywK
IAkJCQlFQkE3NUM0MjI3NUVCREFCMDBENkQzMUMgLyogUHVzaENyeXB0by5oICovLAorCQkJCUVC
OUFEOENBMjc2NDZFOTEwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovLAorCQkJCUVCOUFE
OEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLywKIAkJCQlFQjBGQjZGRDI3
MEQwQUU4MDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmggKi8sCiAJCQkJRUIwRkI3
MDAyNzBEMEFFQTAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5pZGwgKi8sCiAJCQkJ
NDE4RkNCQkIyNzA2RTRGNjAwRjk2RUNBIC8qIFB1c2hFdmVudC5jcHAgKi8sCkBAIC0zNjYzMCw2
ICszNjYzNSw3IEBACiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAwOEFBQTdBIC8qIFB1YmxpY1N1ZmZp
eC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUxNUM3RTAwQTNEQjk4IC8qIFB1Ymxp
Y1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCQTc1QzQ2Mjc1RUM2MUEwMEQ2RDMx
QyAvKiBQdXNoQ3J5cHRvLmggaW4gSGVhZGVycyAqLywKKwkJCQlFQjlBRDhDQjI3NjQ2RTk0MDBE
ODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQjBGQjcwODI3MEQw
QjEwMDBGNzgxMEQgLyogUHVzaEVuY3J5cHRpb25LZXlOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MThGQ0JDMTI3MDZFNEZCMDBGOTZFQ0EgLyogUHVzaEV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MThGQ0JDMjI3MDZFNTAxMDBGOTZFQ0EgLyogUHVzaEV2ZW50SW5pdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjY0Miw2ICszNjY0OCw3IEBACiAJCQkJRUIzQzI5QjcyNzI5QzM4QzAwRkI2
NUI0IC8qIFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUVCMjhFRDQ0MjcxN0FDMTEwMDVGMDM5MyAvKiBQdXNoU3Vic2NyaXB0aW9uRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRUJFMDk1RTUyNzdEMTREQTAwODA0RDYxIC8qIFB1c2hTdWJzY3Jp
cHRpb25JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFQkUwOTVFNTI3N0QxNERBMDA4
MDRENjEgLyogUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUVCMEZCNzBBMjcwRDBCMUIwMEY3ODEwRCAvKiBQdXNoU3Vic2NyaXB0aW9uSlNPTi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRUIwRkI3MEMyNzBEMEIyOTAwRjc4MTBEIC8qIFB1c2hTdWJzY3JpcHRp
b25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQjBGQjcwRDI3MEQwQjJFMDBGNzgxMEQg
LyogUHVzaFN1YnNjcmlwdGlvbk9wdGlvbnNJbml0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaAppbmRleCBkYzBmNTA5OGI4N2YxODQ1NTI1YmUzYzBiYTQxZjc2NzVi
MTQwNDdmLi4wMzQ2YzM4N2MxMmUwNTM1MGFhNTFkNDU2ZDkyMjhlODI2NTU3NzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTG9nZ2luZy5oCkBAIC05Niw2ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBNKFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBcCiAgICAgTShQcm9jZXNzKSBcCiAg
ICAgTShQcm9ncmVzcykgXAorICAgIE0oUHVzaCkgXAogICAgIE0oUmVtb3RlSW5zcGVjdG9yKSBc
CiAgICAgTShSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIFwKICAgICBNKFJlc291cmNlTG9hZGluZykg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKaW5k
ZXggMTdkZGQwMjVhODk4Y2I0MTBkZGQ1M2FiNzZkNzI5MTJlOGFhYWNlNC4uM2I0OTg1OTYxZWZi
ZWE1OTVlNTliYTIyOThmMDgxY2JiYWQzYTA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCkBAIC0xNDgsMTQgKzE0OCwxNyBAQCBib29sIFNR
TGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlIG9wZW5N
b2RlKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291bGQgbm90IHNl
dCB0ZW1wX3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIAotICAgIGlmIChvcGVuTW9kZSAhPSBP
cGVuTW9kZTo6UmVhZE9ubHkpCi0gICAgICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7Ci0KLSAgICBh
dXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlbmFtZSwgIi1zaG0iX3MpOwotICAgIGlm
IChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHNobUZpbGVOYW1lKSkgewotICAgICAgICBpZiAoIUZp
bGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkpIHsKLSAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFNRTERhdGFiYXNlLCAiT3BlbmVkIGFuIFNRTGl0
ZSBkYXRhYmFzZSB3aXRoIGEgQ2xhc3MgQSAtc2htIGZpbGUuIFRoaXMgbWF5IHRyaWdnZXIgYSBj
cmFzaCB3aGVuIHRoZSB1c2VyIGxvY2tzIHRoZSBkZXZpY2UuICglcykiLCBzaG1GaWxlTmFtZS5s
YXRpbjEoKS5kYXRhKCkpOwotICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1l
bW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpOworICAgIGJvb2wgaXNJbk1lbW9yeSA9IGZpbGVu
YW1lID09ICI6bWVtb3J5OiJfczsKKyAgICBpZiAoIWlzSW5NZW1vcnkpIHsKKyAgICAgICAgaWYg
KG9wZW5Nb2RlICE9IE9wZW5Nb2RlOjpSZWFkT25seSkKKyAgICAgICAgICAgIHVzZVdBTEpvdXJu
YWxNb2RlKCk7CisKKyAgICAgICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5h
bWUsICItc2htIl9zKTsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmls
ZU5hbWUpKSB7CisgICAgICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVtb3J5
TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19G
QVVMVChTUUxEYXRhYmFzZSwgIk9wZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNz
IEEgLXNobSBmaWxlLiBUaGlzIG1heSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2Nr
cyB0aGUgZGV2aWNlLiAoJXMpIiwgc2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1G
aWxlTmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4YmE2ZjNlOGY2YTQxMDIy
MjU2MTdiOWFjM2IzYTA4ZTM0MjljNTRkLi42NDg0MDhhZGQzNmU3NGJiY2EyODZmNDZkOTQ3ZTRh
M2ZkZjE0YjJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIFB1c2hEYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvUHVzaERhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQ
dXNoRGF0YWJhc2VUZXN0OjppbnNlcnRSZWNvcmQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
UHVzaERhdGFiYXNlVGVzdDo6cmVtb3ZlUmVjb3JkQnlSb3dJZGVudGlmaWVyKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJlY29yZEJ5VG9waWMpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVjb3JkQnlCdW5kbGVJ
ZGVudGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNl
VGVzdDo6Z2V0Um93SWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERh
dGFiYXNlVGVzdDo6Z2V0VG9waWNzQnlXYWtlU3RhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6b3BlcmF0b3I9PSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDIy
LTAxLTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXVthMTF5XSBUZXN0IGFjY2Vzc2liaWxpdHkvdXJsLXRlc3QuaHRtbCBmYWlscyB3
aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYwNzFjMTI4M2NkMjQ3ZGFjN2Y5
MWUxM2U4ODMyM2YwMTJlYWY5NDguLjEzNDVmMTI4YWM0OTZlNzZkMmVmZmI3N2Q2NjkzODJlNjQ1
NjkzZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDAyLDYgKzEwMDIsNyBAQAogCQlF
NUFBNDJGMjI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFjZUlkaW9tVXBkYXRlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQTQyRjEyNTkx
MjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0ZS5tbSAqLzsgfTsKIAkJRTVB
QThEMUQyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQThEMUMyNTE1MUNDNjAwNTFDQzQ1
IC8qIERhdGVJbnB1dFRlc3RzLm1tICovOyB9OwogCQlFQjIzMEQ0MTI0NUU4MTNGMDBDNjZBRDEg
LyogSURCQ2hlY2twb2ludFdBTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjMwRDNEMjQ1RTcyMkUwMEM2NkFEMSAvKiBJREJDaGVj
a3BvaW50V0FMLmh0bWwgKi87IH07CisJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNBNCAvKiBQdXNo
RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi87IH07CiAJ
CUVDQTY4MENFMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQ0E2ODBDRDFFNjhDQzA5MDA3
MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovOyB9OwogCQlGNDAxMEI4MDI0REEyNEFDMDBB
ODc2RTIgLyogTmF2aWdhdGlvblN3aXBlVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAxMEI3RjI0REEyNEFDMDBBODc2RTIgLyogTmF2aWdh
dGlvblN3aXBlVGVzdHMubW0gKi87IH07CiAJCUY0MDEwQjgzMjREQTI2N0YwMEE4NzZFMiAvKiBQ
b3NlQXNDbGFzcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0MDEwQjgxMjREQTI2N0YwMEE4NzZFMiAvKiBQb3NlQXNDbGFzcy5tbSAqLzsgfTsKQEAg
LTI5NTUsNiArMjk1Niw3IEBACiAJCUU1QUE4RDFDMjUxNTFDQzYwMDUxQ0M0NSAvKiBEYXRlSW5w
dXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGVJbnB1dFRlc3RzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRDI0NUU3MjJFMDBDNjZBRDEgLyogSURC
Q2hlY2twb2ludFdBTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSURCQ2hlY2tw
b2ludFdBTC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRTI0NUU3
MjYzMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IElEQkNoZWNrcG9pbnRXQUwubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUM3OUYxNjhCRTQ1NEU1NzlFNDE3QjA1IC8q
IE1hcmthYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmth
YmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUNBNjgwQ0QxRTY4Q0MwOTAw
NzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFN0cmluZ1V0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjNGQzNFRTIxMzY3OEI3MzAwMTI2QTY1IC8qIGxpYmd0ZXN0LmEgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0g
bGliZ3Rlc3QuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTM3NjMs
NiArMzc2NSw3IEBACiAJCQkJQUE5NkNBQjQyMUM3REI0MjAwRkQyRjk3IC8qIFBhcnNlZENvbnRl
bnRUeXBlLmNwcCAqLywKIAkJCQk2QjBBMDdGNjIxRkE5QzJCMDBENTczOTEgLyogUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQuY3BwICovLAogCQkJCTA0MUExRTMzMjE2RkZEQkMwMDc4OUUwQSAvKiBQ
dWJsaWNTdWZmaXguY3BwICovLAorCQkJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNo
RGF0YWJhc2UuY3BwICovLAogCQkJCTZCNEU4NjFCMjIyMEE1NTIwMDIyRjM4OSAvKiBSZWdpc3Ry
YWJsZURvbWFpbi5jcHAgKi8sCiAJCQkJRjQxOEJFMTQxRjcxQjdEQzAwMTk3MEU2IC8qIFJvdW5k
ZWRSZWN0VGVzdHMuY3BwICovLAogCQkJCTQxODFDNjJDMjU1QTg5MTEwMEFFQjBGRiAvKiBSVENS
dHBTRnJhbWVUcmFuc2Zvcm1lclRlc3RzLmNwcCAqLywKQEAgLTU2NzYsNiArNTY3OSw3IEBACiAJ
CQkJNDY0N0IxMjYxRUJBM0I4NTAwNDFEN0VGIC8qIFByb2Nlc3NEaWRUZXJtaW5hdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkVDMkE4NTYyNENFQjY1RjAwQURCQzM1IC8qIFByb3BlcnR5U2xv
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNDFBMUUzNDIxNkZGREJDMDA3ODlFMEEgLyogUHVi
bGljU3VmZml4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNB
NCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkI0RTg2MUMyMjIwQTU1
MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
Q0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAvKiBSZWxvYWRQYWdlQWZ0ZXJDcmFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZy
b21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9QdXNoRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZGUzOTQwMDZkNGI0
MWM3ZjI3ZTZkODgyMThjMGE1ZTY1ZmNiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDMxNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBQdXNoRGF0YWJhc2VUZXN0IDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+
IGRiOworCisgICAgUHVzaFJlY29yZCByZWNvcmQxIHsKKyAgICAgICAgUHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXIoKSwKKyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCisgICAgICAgICJo
dHRwczovL3d3dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20v
bWFjIl9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQxIl9zLAorICAgICAgICAidG9w
aWMxIl9zLAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAxLCAyIH0sCisgICAgICAgIHsg
MiwgMyB9LAorICAgICAgICB7IDQsIDUgfSwKKyAgICAgICAgY29udmVydFNlY29uZHNUb0Vwb2No
VGltZVN0YW1wKDE2NDMzNTAwMDApLAorICAgICAgICBQdXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlz
dGljCisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDIgeworICAgICAgICBQdXNoU3Vic2Ny
aXB0aW9uSWRlbnRpZmllcigpLAorICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKKyAgICAg
ICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxl
LmNvbS9pcGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAg
ICAgICJ0b3BpYzIiX3MsCisgICAgICAgIHsgNSwgNiB9LAorICAgICAgICB7IDYsIDcgfSwKKyAg
ICAgICAgeyA3LCA4IH0sCisgICAgICAgIHsgOCwgOSB9CisgICAgfTsKKyAgICBQdXNoUmVjb3Jk
IHJlY29yZDMgeworICAgICAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcigpLAorICAgICAg
ICAiY29tLmFwcGxlLlNhZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJf
cywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCisgICAgICAgICJo
dHRwczovL3B1c2hFbmRwb2ludDMiX3MsCisgICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgIHsg
OSwgMTAgfSwKKyAgICAgICAgeyAxMCwgMTEgfSwKKyAgICAgICAgeyAxMSwgMTIgfSwKKyAgICAg
ICAgeyAxMiwgMTMgfQorICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGlu
c2VydFJlc3VsdDE7CisgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQy
OworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKKworICAgIHN0
ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJl
Y29yZCkKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBzdGQ6Om9w
dGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDsKKworICAgICAgICBkYi0+aW5zZXJ0UmVj
b3JkKHJlY29yZCwgWyZkb25lLCAmaW5zZXJ0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNv
cmQ+JiYgcmVzdWx0KSB7CisgICAgICAgICAgICBpbnNlcnRSZXN1bHQgPSBXVEZNb3ZlKHJlc3Vs
dCk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6
OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGluc2VydFJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIHJlbW92ZVJlY29yZEJ5Um93SWRlbnRpZmllcih1aW50NjRfdCByb3dJZGVudGlmaWVy
KQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAgIGJvb2wgcmVtb3Zl
UmVzdWx0ID0gZmFsc2U7CisKKyAgICAgICAgZGItPnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllciht
YWtlT2JqZWN0SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHJvd0lk
ZW50aWZpZXIpLCBbJmRvbmUsICZyZW1vdmVSZXN1bHRdKGJvb2wgcmVzdWx0KSB7CisgICAgICAg
ICAgICByZW1vdmVSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bW92ZVJlc3VsdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJl
Y29yZEJ5VG9waWMoY29uc3QgU3RyaW5nJiB0b3BpYykKKyAgICB7CisgICAgICAgIGJvb2wgZG9u
ZSA9IGZhbHNlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlc3VsdDsK
KworICAgICAgICBkYi0+Z2V0UmVjb3JkQnlUb3BpYyh0b3BpYywgWyZkb25lLCAmZ2V0UmVzdWx0
XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7CisgICAgICAgICAgICBnZXRS
ZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGdldFJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5
QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGNvbnN0IFN0cmluZyYgYnVuZGxlSUQsIGNvbnN0IFN0
cmluZyYgc2NvcGUpCisgICAgeworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBnZXRSZXN1bHQ7CisKKyAgICAgICAgZGItPmdldFJl
Y29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGJ1bmRsZUlELCBzY29wZSwgWyZkb25lLCAm
Z2V0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7CisgICAgICAg
ICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0
dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBnZXRSb3dJZGVu
dGlmaWVycygpCisgICAgeworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgSGFz
aFNldDx1aW50NjRfdD4gcm93SWRlbnRpZmllcnM7CisKKyAgICAgICAgZGItPmdldElkZW50aWZp
ZXJzKFsmZG9uZSwgJnJvd0lkZW50aWZpZXJzXShIYXNoU2V0PFB1c2hTdWJzY3JpcHRpb25JZGVu
dGlmaWVyPiYmIGlkZW50aWZpZXJzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gaWRlbnRpZmll
ciA6IGlkZW50aWZpZXJzKQorICAgICAgICAgICAgICAgIHJvd0lkZW50aWZpZXJzLmFkZChpZGVu
dGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0p
OworICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgICAgIHJldHVybiByb3dJZGVudGlm
aWVyczsKKyAgICB9CisKKyAgICBQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGljTWFw
IGdldFRvcGljc0J5V2FrZVN0YXRlKCkKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNl
OworICAgICAgICBQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGljTWFwIGdldFJlc3Vs
dDsKKworICAgICAgICBkYi0+Z2V0VG9waWNzQnlXYWtlU3RhdGUoWyZkb25lLCAmZ2V0UmVzdWx0
XShQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGljTWFwJiYgcmVzdWx0KSB7CisgICAg
ICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAg
cmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIFNldFVwKCkgZmluYWwKKyAgICB7
CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0
ZUluTWVtb3J5KFt0aGlzLCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBk
YXRhYmFzZSkgeworICAgICAgICAgICAgZGIgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKKyAgICAgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsK
KworICAgICAgICBBU1NFUlRfVFJVRShkYik7CisgICAgICAgIEFTU0VSVF9UUlVFKGluc2VydFJl
c3VsdDEgPSBpbnNlcnRSZWNvcmQocmVjb3JkMSkpOworICAgICAgICBBU1NFUlRfVFJVRShpbnNl
cnRSZXN1bHQyID0gaW5zZXJ0UmVjb3JkKHJlY29yZDIpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
aW5zZXJ0UmVzdWx0MyA9IGluc2VydFJlY29yZChyZWNvcmQzKSk7CisgICAgfQorfTsKKworc3Rh
dGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXNoUmVjb3JkJiBhLCBjb25zdCBQdXNoUmVjb3Jk
JiBiKQoreworICAgIHJldHVybiBhLmlkZW50aWZpZXIgPT0gYi5pZGVudGlmaWVyCisgICAgICAg
ICYmIGEuYnVuZGxlSUQgPT0gYi5idW5kbGVJRAorICAgICAgICAmJiBhLnNlY3VyaXR5T3JpZ2lu
ID09IGIuc2VjdXJpdHlPcmlnaW4KKyAgICAgICAgJiYgYS5zY29wZSA9PSBiLnNjb3BlCisgICAg
ICAgICYmIGEuZW5kcG9pbnQgPT0gYi5lbmRwb2ludAorICAgICAgICAmJiBhLnRvcGljID09IGIu
dG9waWMKKyAgICAgICAgJiYgYS5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9PSBiLnNlcnZlclZBUElE
UHVibGljS2V5CisgICAgICAgICYmIGEuY2xpZW50UHVibGljS2V5ID09IGIuY2xpZW50UHVibGlj
S2V5CisgICAgICAgICYmIGEuY2xpZW50UHJpdmF0ZUtleSA9PSBiLmNsaWVudFByaXZhdGVLZXkK
KyAgICAgICAgJiYgYS5zaGFyZWRBdXRoU2VjcmV0ID09IGIuc2hhcmVkQXV0aFNlY3JldAorICAg
ICAgICAmJiBhLmV4cGlyYXRpb25UaW1lID09IGIuZXhwaXJhdGlvblRpbWUKKyAgICAgICAgJiYg
YS53YWtlU3RhdGUgPT0gYi53YWtlU3RhdGU7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0
LCBJbnNlcnRSZWNvcmQpCit7CisgICAgYXV0byBleHBlY3RlZFJlY29yZDEgPSByZWNvcmQxOwor
ICAgIGV4cGVjdGVkUmVjb3JkMS5pZGVudGlmaWVyID0gbWFrZU9iamVjdElkZW50aWZpZXI8UHVz
aFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBlPigxKTsKKyAgICBFWFBFQ1RfVFJVRShleHBlY3Rl
ZFJlY29yZDEgPT0gKmluc2VydFJlc3VsdDEpOworCisgICAgYXV0byBleHBlY3RlZFJlY29yZDIg
PSByZWNvcmQyOworICAgIGV4cGVjdGVkUmVjb3JkMi5pZGVudGlmaWVyID0gbWFrZU9iamVjdElk
ZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBlPigyKTsKKyAgICBFWFBFQ1Rf
VFJVRShleHBlY3RlZFJlY29yZDIgPT0gKmluc2VydFJlc3VsdDIpOworCisgICAgLy8gU2luY2Ug
cmVjb3JkMyBpcyBpbiB0aGUgc2FtZSBTdWJzY3JpcHRpb25TZXQgYXMgcmVjb3JkMSwgaXQgc2hv
dWxkCisgICAgLy8gaW5oZXJpdCByZWNvcmQxJ3Mgd2FrZSBzdGF0ZS4KKyAgICBhdXRvIGV4cGVj
dGVkUmVjb3JkMyA9IHJlY29yZDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLmlkZW50aWZpZXIgPSBt
YWtlT2JqZWN0SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KDMpOwor
ICAgIGV4cGVjdGVkUmVjb3JkMy53YWtlU3RhdGUgPSBleHBlY3RlZFJlY29yZDEud2FrZVN0YXRl
OworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkUmVjb3JkMyA9PSAqaW5zZXJ0UmVzdWx0Myk7CisK
KyAgICAvLyBJbnNlcnRpbmcgYSByZWNvcmQgd2l0aCB0aGUgc2FtZSAoYnVuZGxlSUQsIHNjb3Bl
KSBhcyByZWNvcmQgMSBzaG91bGQgZmFpbC4KKyAgICBQdXNoUmVjb3JkIHJlY29yZDQgPSByZWNv
cmQxOworICAgIHJlY29yZDQuZW5kcG9pbnQgPSAiaHR0cHM6Ly93d3cud2Via2l0Lm9yZyJfczsK
KyAgICBFWFBFQ1RfRkFMU0UoaW5zZXJ0UmVjb3JkKFdURk1vdmUocmVjb3JkNCkpKTsKKworICAg
IEVYUEVDVF9FUShnZXRSb3dJZGVudGlmaWVycygpLCAoSGFzaFNldDx1aW50NjRfdD4geyAxLCAy
LCAzIH0pKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIFJlbW92ZVJlY29yZCkKK3sK
KyAgICBFWFBFQ1RfVFJVRShyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIoMSkpOworICAgIEVY
UEVDVF9GQUxTRShyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIoMSkpOworICAgIEVYUEVDVF9F
UShnZXRSb3dJZGVudGlmaWVycygpLCAoSGFzaFNldDx1aW50NjRfdD4geyAyLCAzIH0pKTsKK30K
KworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFJlY29yZEJ5VG9waWMpCit7CisgICAgYXV0
byByZXN1bHQxID0gZ2V0UmVjb3JkQnlUb3BpYyhyZWNvcmQxLnRvcGljKTsKKyAgICBBU1NFUlRf
VFJVRShyZXN1bHQxKTsKKyAgICBFWFBFQ1RfVFJVRSgqcmVzdWx0MSA9PSAqaW5zZXJ0UmVzdWx0
MSk7CisKKyAgICBhdXRvIHJlc3VsdDIgPSBnZXRSZWNvcmRCeVRvcGljKCJmb28iX3MpOworICAg
IEVYUEVDVF9GQUxTRShyZXN1bHQyKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdl
dFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKQoreworICAgIGF1dG8gcmVzdWx0MSA9
IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEuYnVuZGxlSUQsIHJl
Y29yZDEuc2NvcGUpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdDEpOworICAgIEVYUEVDVF9UUlVF
KCpyZXN1bHQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8gcmVzdWx0MiA9IGdldFJl
Y29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEuYnVuZGxlSUQsICJiYXIiX3Mp
OworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQyKTsKKworICAgIGF1dG8gcmVzdWx0MyA9IGdldFJl
Y29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKCJmb28iX3MsICJiYXIiX3MpOworICAgIEVY
UEVDVF9GQUxTRShyZXN1bHQzKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFRv
cGljc0J5V2FrZVN0YXRlKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBQdXNoV2FrZVN0YXRlPiBl
eHBlY3RlZCB7CisgICAgICAgIHsgInRvcGljMSIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0
aWMgfSwKKyAgICAgICAgeyAidG9waWMyIiwgUHVzaFdha2VTdGF0ZTo6V2FraW5nIH0sCisgICAg
ICAgIHsgInRvcGljMyIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMgfQorICAgIH07Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGFjdHVhbDsKKworICAgIGZvciAoY29u
c3QgYXV0byYgW3dha2VTdGF0ZSwgdG9waWNzXSA6IGdldFRvcGljc0J5V2FrZVN0YXRlKCkpIHsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0b3BpYyA6IHRvcGljcykKKyAgICAgICAgICAgIGFj
dHVhbC5hZGQodG9waWMsIHdha2VTdGF0ZSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKGV4cGVj
dGVkLCBhY3R1YWwpOworfQorCitURVNUX0YoUHVzaERhdGFiYXNlVGVzdCwgU3RhcnRzRnJvbVNj
cmF0Y2hPbkRvd25ncmFkZSkKK3sKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGxlOworICAgIGF1dG8gcGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJQ
dXNoRGF0YWJhc2UiLCBoYW5kbGUsICIuZGIiKTsKKyAgICBBU1NFUlRfVFJVRShGaWxlU3lzdGVt
Ojppc0hhbmRsZVZhbGlkKGhhbmRsZSkpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShoYW5k
bGUpOworCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3Bl
bihwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSB1
c2VyX3ZlcnNpb24gPSAxMDAwMDAiX3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKKyAgICAgICAgYm9vbCBkb25l
ID0gZmFsc2U7CisgICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRlUmVz
dWx0LCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkgewor
ICAgICAgICAgICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7CisgICAgICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7Cisg
ICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CisgICAgfQorCisgICAgeworICAgICAg
ICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRoKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgaW50IHZlcnNpb24gPSAwOworICAgICAgICAgICAgYXV0byBzcWwgPSBkYi5w
cmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAgIGlm
IChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICB2ZXJz
aW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBFWFBFQ1RfR1QodmVyc2lvbiwg
MCk7CisgICAgICAgICAgICBFWFBFQ1RfTFQodmVyc2lvbiwgMTAwMDAwKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450379</attachid>
            <date>2022-01-30 22:00:00 -0800</date>
            <delta_ts>2022-02-02 22:07:15 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-234194-20220130215959.patch</filename>
            <type>text/plain</type>
            <size>52991</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxODg5OGZmYWZiNjdj
MzhmNGU5M2RmZGUzNWRjNmNlNTI3MmY1MC4uOWIyYzUzNTVjNmEyZmIyYTE2YzlkNWZiYmJmMTVh
NGQyNWRjMWQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIyLTAxLTMwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHVzaFJlY29yZDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZyZXNoUHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3JlYXRlSW5NZW1vcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpQdXNoRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6UHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1c2hEYXRhYmFzZTo6Y2FjaGVkU3RhdGVtZW50T25RdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpiaW5kRXhwaXJhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwaXJhdGlvblRpbWVG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVPbk1haW5RdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6Omluc2VydFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpQdXNoRGF0YWJhc2U6OnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlUHVzaFJlY29yZEZyb21Sb3cpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERh
dGFiYXNlOjpnZXRSZWNvcmRCeVRvcGljKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFz
ZTo6Z2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UHVzaERhdGFiYXNlOjpnZXRJZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQdXNo
RGF0YWJhc2U6OmdldFRvcGljc0J5V2FrZVN0YXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3B1c2gt
YXBpL1B1c2hEYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vTG9nZ2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6b3Blbik6CisKIDIwMjItMDEtMzAg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGVsZXRlIGNvZGUg
Zm9yIGtleWdlbiBlbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA1YWNjMmQ5ZGZlMWU3MTg2
MzIzODU0NmRmODU5OTA4MjJjZDg2OGMzLi4zNGFlZjg0MWFhNGFlYTc0ZDY3NGU0MzNkZGJmYmZk
Y2FlYTMyYzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTI5Miw2ICsyOTIsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgTW9kdWxlcy9wZXJtaXNzaW9ucy9Q
ZXJtaXNzaW9uU3RhdGUuaAogCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoQ3J5cHRvLmgKKyAg
ICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9Q
dXNoTWVzc2FnZUNyeXB0by5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoUGVybWlzc2lvblN0
YXRlLmgKICAgICBNb2R1bGVzL3B1c2gtYXBpL1B1c2hTdWJzY3JpcHRpb25EYXRhLmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMDFlMDQ5ODFiZWU4ZjdmZWQ2NWFhODU3YTc4OGZiNzdmOTYwMWJmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuY3Bw
CkBAIC0wLDAgKzEsNTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlB1c2hEYXRhYmFzZS5oIgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FM
aXRlRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4K
KyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KworI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKFB1c2gs
ICIlcCAtIFB1c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5l
IFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUihmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoUHVz
aCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZp
bmUgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKSBQVVNIREJfUkVMRUFTRV9MT0dfRVJS
T1IoIkZhaWxlZCB0byBiaW5kIHN0YXRlbWVudCAoJWQpOiAlcyIsIG1fZGItPmxhc3RFcnJvcigp
LCBtX2RiLT5sYXN0RXJyb3JNc2coKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3RleHByIGludCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiA9IDE7CisKK3N0YXRpYyBj
b25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0ZW1lbnRzW10gPSB7Cisg
ICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywKKyAgICAiQ1JFQVRFIFRBQkxF
IFN1YnNjcmlwdGlvblNldHMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsIgor
ICAgICIgIGJ1bmRsZUlEIFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHNlY3VyaXR5T3JpZ2luIFRF
WFQgTk9UIE5VTEwsIgorICAgICIgIHdha2VTdGF0ZSBJTlQgTk9UIE5VTEwsIgorICAgICIgIFVO
SVFVRShidW5kbGVJRCwgc2VjdXJpdHlPcmlnaW4pKSJfcywKKyAgICAiQ1JFQVRFIFRBQkxFIFN1
YnNjcmlwdGlvbnMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9UIE5VTEwsIgorICAgICIg
IHN1YnNjcmlwdGlvblNldElEIElOVCBOT1QgTlVMTCwiCisgICAgIiAgc2NvcGUgVEVYVCBOT1Qg
TlVMTCwiCisgICAgIiAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgdG9waWMgVEVY
VCBOT1QgTlVMTCBVTklRVUUsIgorICAgICIgIHNlcnZlclZBUElEUHVibGljS2V5IEJMT0IgTk9U
IE5VTEwsIgorICAgICIgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBOVUxMLCIKKyAgICAiICBj
bGllbnRQcml2YXRlS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIHNoYXJlZEF1dGhTZWNyZXQg
QkxPQiBOT1QgTlVMTCwiCisgICAgIiAgZXhwaXJhdGlvblRpbWUgSU5ULCIKKyAgICAiICBVTklR
VUUoc2NvcGUsIHN1YnNjcmlwdGlvblNldElEKSkiX3MsCisgICAgIkNSRUFURSBJTkRFWCBTdWJz
Y3JpcHRpb25zX1N1YnNjcmlwdGlvblNldElEX0luZGV4IE9OIFN1YnNjcmlwdGlvbnMoc3Vic2Ny
aXB0aW9uU2V0SUQpIl9zLAorICAgICJQUkFHTUEgdXNlcl92ZXJzaW9uID0gMSJfcworfTsKKwor
UHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIFB1c2hS
ZWNvcmQgcmVzdWx0OworICAgIHJlc3VsdC5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBy
ZXN1bHQuYnVuZGxlSUQgPSBidW5kbGVJRC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQuc2Vj
dXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbi5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQu
c2NvcGUgPSBzY29wZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQuZW5kcG9pbnQgPSBlbmRw
b2ludC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQudG9waWMgPSB0b3BpYy5pc29sYXRlZENv
cHkoKTsKKyAgICByZXN1bHQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBzZXJ2ZXJWQVBJRFB1Ymxp
Y0tleTsKKyAgICByZXN1bHQuY2xpZW50UHVibGljS2V5ID0gY2xpZW50UHVibGljS2V5OworICAg
IHJlc3VsdC5jbGllbnRQcml2YXRlS2V5ID0gY2xpZW50UHJpdmF0ZUtleTsKKyAgICByZXN1bHQu
c2hhcmVkQXV0aFNlY3JldCA9IHNoYXJlZEF1dGhTZWNyZXQ7CisgICAgcmVzdWx0LmV4cGlyYXRp
b25UaW1lID0gZXhwaXJhdGlvblRpbWU7CisgICAgcmVzdWx0Lndha2VTdGF0ZSA9IHdha2VTdGF0
ZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUZyZXNoUHVz
aERhdGFiYXNlKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBpZiAocGF0aCA9PSAiOm1lbW9yeToiX3MgfHwgIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURh
dGFiYXNlRmlsZShwYXRoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJldHVybiBQdXNoRGF0YWJhc2U6OmNyZWF0
ZShwYXRoLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgUHVzaERhdGFi
YXNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0
ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiUHVzaERhdGFiYXNlIEkvTyBUaHJl
YWQiKTsKKyAgICBxdWV1ZS0+ZGlzcGF0Y2goW3F1ZXVlLCBwYXRoID0gY3Jvc3NUaHJlYWRDb3B5
KHBhdGgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICBhdXRvIGZhaWxPbk1haW5RdWV1ZSA9IFtdKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpIHsKKyAgICAgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHBhdGggIT0gIjptZW1vcnk6Il9zICYmICFG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgpICYmICFGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0
b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChwYXRoKSkpIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFB1c2gsICJDb3VsZG4ndCBjcmVhdGUgUHVzaERhdGFiYXNlIHBhcmVudCBk
aXJlY3RvcmllcyBmb3IgcGF0aCAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBmYWlsT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBkYiA9IFdURjo6bWFrZVVuaXF1
ZTxTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICAgICAgZGItPmRpc2FibGVUaHJlYWRpbmdDaGVja3Mo
KTsKKworICAgICAgICBpZiAoIWRiLT5vcGVuKHBhdGgpKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihQdXNoLCAiQ291bGRuJ3Qgb3BlbiBkYXRhYmFzZSBmaWxlIGF0IHBhdGggJXMi
LCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZmFpbE9uTWFpblF1ZXVlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBz
cWwgPSBkYi0+cHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7CisgICAg
ICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkNvdWxkbid0IGdldCBkYXRhYmFzZSB2
ZXJzaW9uIGF0IHBhdGggJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
IGZhaWxPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVyc2lvbiA9IHNxbC0+
Y29sdW1uSW50KDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb24gPiBjdXJyZW50
UHVzaERhdGFiYXNlVmVyc2lvbikgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVz
aCwgIkZvdW5kIG5ld2VyIGRhdGFiYXNlIHZlcnNpb24gdGhhbiBleHBlY3RlZCwgc3RhcnRpbmcg
ZnJvbSBzY3JhdGNoOiAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBXb3Jr
UXVldWU6Om1haW4oKS5kaXNwYXRjaChbcGF0aCA9IGNyb3NzVGhyZWFkQ29weShwYXRoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBjcmVhdGVGcmVzaFB1c2hEYXRhYmFzZShwYXRoLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJzaW9uIDwgY3VycmVudFB1c2hEYXRhYmFzZVZl
cnNpb24pIHsKKyAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCpkYik7
CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgICAgICBmb3IgKGF1
dG8mIHN0YXRlbWVudCA6IHB1c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50cykgeworICAgICAg
ICAgICAgICAgIGlmICghZGItPmV4ZWN1dGVDb21tYW5kKHN0YXRlbWVudCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkNvdWxkbid0IGNyZWF0ZSBkYXRh
YmFzZSBzY2hlbWEgZm9yIHN0YXRlbWVudCAlcyBhdCBwYXRoICVzIiwgc3RhdGVtZW50LmNoYXJh
Y3RlcnMoKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbE9u
TWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIH0KKworICAgICAgICBXb3JrUXVldWU6
Om1haW4oKS5kaXNwYXRjaChbcXVldWUgPSBXVEZNb3ZlKHF1ZXVlKSwgZGIgPSBXVEZNb3ZlKGRi
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
RGF0YWJhc2U+KG5ldyBQdXNoRGF0YWJhc2UoV1RGTW92ZShxdWV1ZSksIFdURk1vdmUoZGIpKSkp
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmNyZWF0ZUlu
TWVtb3J5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFz
ZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgcmV0dXJuIFB1c2hEYXRhYmFzZTo6
Y3JlYXRlKCI6bWVtb3J5OiJfcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCitQ
dXNoRGF0YWJhc2U6OlB1c2hEYXRhYmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBzdGQ6OnVu
aXF1ZV9wdHI8U1FMaXRlRGF0YWJhc2U+JiYgZGIpCisgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVl
dWUpKQorICAgICwgbV9kYihXVEZNb3ZlKGRiKSkKK3sKK30KKworUHVzaERhdGFiYXNlOjp+UHVz
aERhdGFiYXNlKCkKK3sKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaFN5bmMoW2RiID0gV1RGTW92ZSht
X2RiKSwgc3RhdGVtZW50cyA9IFdURk1vdmUobV9zdGF0ZW1lbnRzKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgc3RhdGVtZW50cy5jbGVhcigpOworICAgICAgICBkYi0+Y2xvc2UoKTsKKyAgICB9KTsK
K30KKworU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUHVzaERhdGFiYXNlOjpjYWNoZWRT
dGF0ZW1lbnRPblF1ZXVlKEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sKKyAgICBhdXRvIGl0ID0gbV9z
dGF0ZW1lbnRzLmZpbmQocXVlcnkpOworICAgIGlmIChpdCAhPSBtX3N0YXRlbWVudHMuZW5kKCkp
CisgICAgICAgIHJldHVybiBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZShpdC0+dmFsdWUu
cHRyKCkpOworCisgICAgYXV0byByZXN1bHQgPSBtX2RiLT5wcmVwYXJlSGVhcFN0YXRlbWVudChx
dWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0VS
Uk9SKCJGYWlsZWQgd2l0aCAlZCBwcmVwYXJpbmcgc3RhdGVtZW50OiAlIiBQVUJMSUNfTE9HX1NU
UklORywgcmVzdWx0LmVycm9yKCksIHF1ZXJ5LmNoYXJhY3RlcnMoKSk7CisgICAgICAgIHJldHVy
biBTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZShudWxscHRyKTsKKyAgICB9CisKKyAgICBh
dXRvIHJlZiA9IFdURk1vdmUoKnJlc3VsdCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSByZWYucHRy
KCk7CisgICAgbV9zdGF0ZW1lbnRzLmFkZChxdWVyeSwgV1RGTW92ZShyZWYpKTsKKyAgICByZXR1
cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUoc3RhdGVtZW50KTsKK30KKworc3RhdGlj
IGludCBiaW5kRXhwaXJhdGlvblRpbWUoU1FMaXRlU3RhdGVtZW50KiBzcWwsIGludCBpbmRleCwg
c3RkOjpvcHRpb25hbDxFcG9jaFRpbWVTdGFtcD4gdGltZXN0YW1wKQoreworICAgIHJldHVybiB0
aW1lc3RhbXAgPyBzcWwtPmJpbmRJbnQ2NChpbmRleCwgY29udmVydEVwb2NoVGltZVN0YW1wVG9T
ZWNvbmRzKCp0aW1lc3RhbXApKSA6IHNxbC0+YmluZE51bGwoaW5kZXgpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxFcG9jaFRpbWVTdGFtcD4gZXhwaXJhdGlvblRpbWVGcm9tVmFsdWUoU1FM
VmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2
YWx1ZSkpCisgICAgICAgIHJldHVybiBjb252ZXJ0U2Vjb25kc1RvRXBvY2hUaW1lU3RhbXAoc3Rk
OjpnZXQ8ZG91YmxlPih2YWx1ZSkpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgorc3RhdGljIHZvaWQgY29tcGxldGVPbk1haW5RdWV1
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFQpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBjb25zdCBV
JiByZXN1bHQpCit7CisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdCA9IGNyb3NzVGhyZWFk
Q29weShyZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVj
b3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCByZWNvcmQgPSBjcm9zc1RocmVhZENvcHkocmVjb3JkKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGIpOworICAgICAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGludDY0X3Qgc3Vic2NyaXB0aW9uU2V0
SUQgPSAwOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVt
ZW50T25RdWV1ZSgiU0VMRUNUIHJvd2lkLCB3YWtlU3RhdGUgRlJPTSBTdWJzY3JpcHRpb25TZXRz
IFdIRVJFIGJ1bmRsZUlEID0gPyBBTkQgc2VjdXJpdHlPcmlnaW4gPSA/Il9zKTsKKyAgICAgICAg
ICAgIGlmICghc3FsCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgxLCByZWNvcmQu
YnVuZGxlSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQo
MiwgcmVjb3JkLnNlY3VyaXR5T3JpZ2luKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAg
ICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBs
ZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8
UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
ICAgICAgICAgc3Vic2NyaXB0aW9uU2V0SUQgPSBzcWwtPmNvbHVtbkludDY0KDApOworICAgICAg
ICAgICAgICAgIHJlY29yZC53YWtlU3RhdGUgPSBzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRlPihz
cWwtPmNvbHVtbkludCgxKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXN1YnNjcmlwdGlvblNldElEKSB7CisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0
YXRlbWVudE9uUXVldWUoIklOU0VSVCBJTlRPIFN1YnNjcmlwdGlvblNldHMgVkFMVUVTKD8sID8s
ID8sID8pIl9zKTsKKyAgICAgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoMSwgdGltZShudWxscHRyKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kVGV4dCgyLCByZWNvcmQuYnVuZGxlSUQpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMywgcmVjb3JkLnNlY3VyaXR5T3JpZ2luKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQoNCwgc3RhdGljX2Nh
c3Q8aW50PihyZWNvcmQud2FrZVN0YXRlKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAg
ICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFs
PFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IG1fZGIt
Pmxhc3RJbnNlcnRSb3dJRCgpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJJTlNFUlQgSU5UTyBTdWJzY3JpcHRp
b25zIFZBTFVFUyg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfcyk7CisgICAgICAgICAg
ICBpZiAoIXNxbAorICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIHRpbWUobnVs
bHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIs
IHN1YnNjcmlwdGlvblNldElEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwt
PmJpbmRUZXh0KDMsIHJlY29yZC5zY29wZSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAg
fHwgc3FsLT5iaW5kVGV4dCg0LCByZWNvcmQuZW5kcG9pbnQpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoNSwgcmVjb3JkLnRvcGljKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDYsIHJlY29yZC5zZXJ2ZXJWQVBJRFB1
YmxpY0tleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig3
LCByZWNvcmQuY2xpZW50UHVibGljS2V5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwtPmJpbmRCbG9iKDgsIHJlY29yZC5jbGllbnRQcml2YXRlS2V5KSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDksIHJlY29yZC5zaGFyZWRBdXRoU2Vj
cmV0KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBiaW5kRXhwaXJhdGlvblRpbWUo
c3FsLmdldCgpLCAxMCwgcmVjb3JkLmV4cGlyYXRpb25UaW1lKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAg
ICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0
ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlY29yZC5pZGVudGlm
aWVyID0gbWFrZU9iamVjdElkZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBl
PihtX2RiLT5sYXN0SW5zZXJ0Um93SUQoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBXVEZNb3ZlKHJlY29yZCkpOworICAgIH0pOworfQorCit2b2lkIFB1
c2hEYXRhYmFzZTo6cmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKFB1c2hTdWJzY3JpcHRpb25JZGVu
dGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHJvd0lkZW50aWZp
ZXIgPSBpZGVudGlmaWVyLnRvVUludDY0KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKCptX2RiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAg
ICAgICBib29sIGlzTGFzdFN1YnNjcmlwdGlvbkluU2V0ID0gZmFsc2U7CisgICAgICAgIGludDY0
X3Qgc3Vic2NyaXB0aW9uU2V0SUQgPSAwOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
c3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHN1YnNjcmlwdGlvblNldElEIEZS
T00gU3Vic2NyaXB0aW9ucyBXSEVSRSByb3dpZCA9ID8iX3MpOworCisgICAgICAgICAgICBpZiAo
IXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCByb3dJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAg
ICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Vi
c2NyaXB0aW9uU2V0SUQgPSBzcWwtPmNvbHVtbkludDY0KDApOworICAgICAgICB9CisKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVE9ETzogb24gU1FMaXRlID4zLjM1LjAsIHdlIGNvdWxkIHVz
ZSBSRVRVUk5JTkcgdG8gYXZvaWQgdGhlIFNFTEVDVCBhYm92ZS4KKyAgICAgICAgICAgIGF1dG8g
c3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVMRVRFIEZST00gU3Vic2NyaXB0aW9ucyBX
SEVSRSByb3dpZCA9ID8iX3MpOworCisgICAgICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJ
bnQ2NCgxLCByb3dJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQ
VVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRl
T25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVl
dWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiB0aGlzIHdhcyB0aGUgbGFzdCBzdWJzY3JpcHRpb24gaW4gdGhlIHN1YnNj
cmlwdGlvbiBzZXQuCisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVl
dWUoIlNFTEVDVCByb3dpZCBGUk9NIFN1YnNjcmlwdGlvbnMgV0hFUkUgc3Vic2NyaXB0aW9uU2V0
SUQgPSA/Il9zKTsKKworICAgICAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kSW50NjQoMSwg
c3Vic2NyaXB0aW9uU2V0SUQpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXNMYXN0U3Vic2NyaXB0
aW9uSW5TZXQgPSAoc3FsLT5zdGVwKCkgPT0gU1FMSVRFX0RPTkUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzTGFzdFN1YnNjcmlwdGlvbkluU2V0KSB7CisgICAgICAgICAgICAvLyBEZWxl
dGUgdGhlIGVudGlyZSBzdWJzY3JpcHRpb24gc2V0IGlmIGl0IGlzIG5vIGxvbmdlciBhc3NvY2lh
dGVkIHdpdGggYW55IHN1YnNjcmlwdGlvbnMuCisgICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudE9uUXVldWUoIkRFTEVURSBGUk9NIFN1YnNjcmlwdGlvblNldHMgV0hFUkUgcm93
aWQgPSA/Il9zKTsKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHN1
YnNjcmlwdGlvblNldElEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWlu
UXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCB0cnVlKTsKKyAgICB9KTsKK30KKworc3RhdGljIFB1c2hSZWNvcmQgbWFrZVB1c2hSZWNv
cmRGcm9tUm93KFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiBzcWwpCit7CisgICAgUHVz
aFJlY29yZCByZWNvcmQ7CisgICAgcmVjb3JkLmlkZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRp
ZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHNxbC0+Y29sdW1uSW50NjQoMCkp
OworICAgIHJlY29yZC5idW5kbGVJRCA9IHNxbC0+Y29sdW1uVGV4dCgxKTsKKyAgICByZWNvcmQu
c2VjdXJpdHlPcmlnaW4gPSBzcWwtPmNvbHVtblRleHQoMik7CisgICAgcmVjb3JkLnNjb3BlID0g
c3FsLT5jb2x1bW5UZXh0KDMpOworICAgIHJlY29yZC5lbmRwb2ludCA9IHNxbC0+Y29sdW1uVGV4
dCg0KTsKKyAgICByZWNvcmQudG9waWMgPSBzcWwtPmNvbHVtblRleHQoNSk7CisgICAgcmVjb3Jk
LnNlcnZlclZBUElEUHVibGljS2V5ID0gc3FsLT5jb2x1bW5CbG9iKDYpOworICAgIHJlY29yZC5j
bGllbnRQdWJsaWNLZXkgPSBzcWwtPmNvbHVtbkJsb2IoNyk7CisgICAgcmVjb3JkLmNsaWVudFBy
aXZhdGVLZXkgPSBzcWwtPmNvbHVtbkJsb2IoOCk7CisgICAgcmVjb3JkLnNoYXJlZEF1dGhTZWNy
ZXQgPSBzcWwtPmNvbHVtbkJsb2IoOSk7CisgICAgcmVjb3JkLmV4cGlyYXRpb25UaW1lID0gZXhw
aXJhdGlvblRpbWVGcm9tVmFsdWUoc3FsLT5jb2x1bW5WYWx1ZSgxMCkpOworICAgIHJlY29yZC53
YWtlU3RhdGUgPSBzdGF0aWNfY2FzdDxQdXNoV2FrZVN0YXRlPihzcWwtPmNvbHVtbkludCgxMSkp
OworCisgICAgcmV0dXJuIHJlY29yZDsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OmdldFJlY29y
ZEJ5VG9waWMoY29uc3QgU3RyaW5nJiB0b3BpYywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1f
cXVldWUtPmRpc3BhdGNoKFt0aGlzLCB0b3BpYyA9IGNyb3NzVGhyZWFkQ29weSh0b3BpYyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CisgICAgICAgIC8vIEZvcmNlIFNRTGl0ZSB0byBjb25zdWx0IHRoZSBTdWJzY3JpcHRpb25zKHNj
b3BlKSBpbmRleCBmaXJzdCB2aWEgQ1JPU1MgSk9JTi4KKyAgICAgICAgYXV0byBzcWwgPSBjYWNo
ZWRTdGF0ZW1lbnRPblF1ZXVlKAorICAgICAgICAgICAgIlNFTEVDVCAiCisgICAgICAgICAgICAi
ICBzdWIucm93SUQsIHNzLmJ1bmRsZUlELCBzcy5zZWN1cml0eU9yaWdpbiwgc3ViLnNjb3BlLCBz
dWIuZW5kcG9pbnQsIHN1Yi50b3BpYywgIgorICAgICAgICAgICAgIiAgc3ViLnNlcnZlclZBUElE
UHVibGljS2V5LCBzdWIuY2xpZW50UHVibGljS2V5LCBzdWIuY2xpZW50UHJpdmF0ZUtleSwgIgor
ICAgICAgICAgICAgIiAgc3ViLnNoYXJlZEF1dGhTZWNyZXQsIHN1Yi5leHBpcmF0aW9uVGltZSwg
c3Mud2FrZVN0YXRlICIKKyAgICAgICAgICAgICJGUk9NIFN1YnNjcmlwdGlvbnMgc3ViICIKKyAg
ICAgICAgICAgICJDUk9TUyBKT0lOIFN1YnNjcmlwdGlvblNldHMgc3MgIgorICAgICAgICAgICAg
Ik9OIHN1Yi5zdWJzY3JpcHRpb25TZXRJRCA9IHNzLnJvd2lkICIKKyAgICAgICAgICAgICJXSEVS
RSBzdWIudG9waWMgPSA/Il9zKTsKKworICAgICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRUZXh0
KDEsIHRvcGljKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xP
R19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbWFrZVB1c2hSZWNvcmRGcm9tUm93KHNxbCkpOwor
ICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UmVjb3JkQnlCdW5kbGVJZGVudGlm
aWVyQW5kU2NvcGUoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBidW5kbGVJ
RCA9IGNyb3NzVGhyZWFkQ29weShidW5kbGVJRCksIHNjb3BlID0gY3Jvc3NUaHJlYWRDb3B5KHNj
b3BlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgLy8gRm9yY2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhlIFN1YnNjcmlw
dGlvbnMoc2NvcGUpIGluZGV4IGZpcnN0IHZpYSBDUk9TUyBKT0lOLgorICAgICAgICBhdXRvIHNx
bCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoCisgICAgICAgICAgICAiU0VMRUNUICIKKyAgICAg
ICAgICAgICIgIHN1Yi5yb3dJRCwgc3MuYnVuZGxlSUQsIHNzLnNlY3VyaXR5T3JpZ2luLCBzdWIu
c2NvcGUsIHN1Yi5lbmRwb2ludCwgc3ViLnRvcGljLCAiCisgICAgICAgICAgICAiICBzdWIuc2Vy
dmVyVkFQSURQdWJsaWNLZXksIHN1Yi5jbGllbnRQdWJsaWNLZXksIHN1Yi5jbGllbnRQcml2YXRl
S2V5LCAiCisgICAgICAgICAgICAiICBzdWIuc2hhcmVkQXV0aFNlY3JldCwgc3ViLmV4cGlyYXRp
b25UaW1lLCBzcy53YWtlU3RhdGUgIgorICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBz
dWIgIgorICAgICAgICAgICAgIkNST1NTIEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAg
ICAgICAgICAiT04gc3ViLnN1YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQgIgorICAgICAgICAg
ICAgIldIRVJFIHN1Yi5zY29wZSA9ID8gQU5EIHNzLmJ1bmRsZUlEID0gPyJfcyk7CisKKyAgICAg
ICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kVGV4dCgxLCBzY29wZSkgIT0gU1FMSVRFX09LIHx8IHNx
bC0+YmluZFRleHQoMiwgYnVuZGxlSUQpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgUFVT
SERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWlu
UXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29y
ZD4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
cWwtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
IHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb21wbGV0
ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtYWtlUHVzaFJlY29yZEZy
b21Sb3coc3FsKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpnZXRJZGVudGlm
aWVycyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXI+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICBIYXNoU2V0PFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyPiBy
ZXN1bHQ7CisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNU
IHJvd2lkIEZST00gU3Vic2NyaXB0aW9ucyJfcyk7CisgICAgICAgIHdoaWxlIChzcWwgJiYgc3Fs
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobWFrZU9iamVj
dElkZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBlPihzcWwtPmNvbHVtbklu
dDY0KDApKSk7CisKKyAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0
YWJhc2U6OmdldFRvcGljc0J5V2FrZVN0YXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVzaFdh
a2VTdGF0ZVRvVG9waWNNYXAmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGludCBudW1iZXJPZldha2VTdGF0ZXMgPSBz
dGF0aWNfY2FzdDxpbnQ+KFB1c2hXYWtlU3RhdGU6Ok51bWJlck9mU3RhdGVzKTsKKyAgICAgICAg
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiB0b3BpY3NCeVdha2VTdGF0ZShudW1iZXJPZldha2VTdGF0
ZXMpOyAvLyB1c2VkIGJlY2F1c2UgSGFzaE1hcDo6aXNvbGF0ZWRDb3B5IGRvZXNuJ3QgZXhpc3QK
KworICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoCisgICAgICAgICAg
ICAiU0VMRUNUIHNzLndha2VTdGF0ZSwgc3ViLnRvcGljICIKKyAgICAgICAgICAgICJGUk9NIFN1
YnNjcmlwdGlvbnMgc3ViICIKKyAgICAgICAgICAgICJKT0lOIFN1YnNjcmlwdGlvblNldHMgc3Mg
IgorICAgICAgICAgICAgIk9OIHN1Yi5zdWJzY3JpcHRpb25TZXRJRCA9IHNzLnJvd2lkIl9zKTsK
KyAgICAgICAgaWYgKCFzcWwpIHsKKyAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5E
X0VSUk9SKCk7CisgICAgICAgICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoc3FsLT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgYXV0byBwdXNoV2FrZVN0YXRlID0gc3Fs
LT5jb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIHRvcGljID0gc3FsLT5jb2x1bW5UZXh0
KDEpOworICAgICAgICAgICAgaWYgKHB1c2hXYWtlU3RhdGUgPj0gMCAmJiBwdXNoV2FrZVN0YXRl
IDwgbnVtYmVyT2ZXYWtlU3RhdGVzKQorICAgICAgICAgICAgICAgIHRvcGljc0J5V2FrZVN0YXRl
W3B1c2hXYWtlU3RhdGVdLmFwcGVuZChXVEZNb3ZlKHRvcGljKSk7CisgICAgICAgIH0KKworICAg
ICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9waWNzQnlXYWtlU3RhdGUgPSBjcm9zc1RocmVhZENv
cHkodG9waWNzQnlXYWtlU3RhdGUpXSgpIG11dGFibGUgeworICAgICAgICAgICAgUHVzaFdha2VT
dGF0ZVRvVG9waWNNYXAgcmVzdWx0OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDxpbnQ+KFB1c2hXYWtlU3RhdGU6Ok51bWJlck9mU3RhdGVzKTsgKytpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3RhdGljX2Nhc3Q8UHVzaFdha2VTdGF0ZT4oaSksIFdU
Rk1vdmUodG9waWNzQnlXYWtlU3RhdGVbaV0pKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMmVlMzdjZGUzNWMyOGRlNmEwMWI3YzRhNzMyZTg4MzEzYmM3OTlhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaApAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCisKKyNpbmNsdWRlICJFcG9jaFRpbWVTdGFtcC5oIgorI2luY2x1ZGUgIlB1
c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFdha2Ugc3RhdGUgdGhh
dCBhcHBsaWVzIGZvciBkZXZpY2VzIHRoYXQgcmFjZS10by1zbGVlcC4KK2VudW0gY2xhc3MgUHVz
aFdha2VTdGF0ZSA6IHVpbnQ4X3QgeworICAgIFdha2luZywgLy8gQWxsIHB1c2hlcyB3aWxsIHdh
a2UgZGV2aWNlLgorICAgIE9wcG9ydHVuaXN0aWMsIC8vIExvdyBwcmlvcml0eSBwdXNoZXMgbWF5
IG5vdCB3YWtlIGRldmljZS4KKyAgICBOb25XYWtpbmcsIC8vIE5vIHB1c2hlcyB3aWxsIHdha2Ug
ZGV2aWNlLgorICAgIE51bWJlck9mU3RhdGVzCit9OworCitzdHJ1Y3QgUHVzaFJlY29yZCB7Cisg
ICAgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICBTdHJpbmcgYnVu
ZGxlSUQ7CisgICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOworICAgIFN0cmluZyBzY29wZTsKKyAg
ICBTdHJpbmcgZW5kcG9pbnQ7CisgICAgU3RyaW5nIHRvcGljOworICAgIFZlY3Rvcjx1aW50OF90
PiBzZXJ2ZXJWQVBJRFB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4gY2xpZW50UHVibGlj
S2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQcml2YXRlS2V5OworICAgIFZlY3Rvcjx1
aW50OF90PiBzaGFyZWRBdXRoU2VjcmV0OworICAgIHN0ZDo6b3B0aW9uYWw8RXBvY2hUaW1lU3Rh
bXA+IGV4cGlyYXRpb25UaW1lIHsgfTsKKyAgICBQdXNoV2FrZVN0YXRlIHdha2VTdGF0ZSB7IFB1
c2hXYWtlU3RhdGU6Oldha2luZyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgUHVzaFJlY29yZCBp
c29sYXRlZENvcHkoKSBjb25zdDsKK307CisKK2NsYXNzIFB1c2hEYXRhYmFzZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgY3JlYXRlSW5NZW1vcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVu
aXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgflB1c2hE
YXRhYmFzZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRSZWNvcmQoY29uc3Qg
UHVzaFJlY29yZCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVj
b3JkPiYmKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZWNvcmRCeUlkZW50
aWZpZXIoUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UmVjb3JkQnlUb3BpYyhjb25z
dCBTdHJpbmcmIHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4mJik+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5n
JiBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
JiYpPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldElkZW50aWZpZXJzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJik+JiYp
OworCisgICAgdXNpbmcgUHVzaFdha2VTdGF0ZVRvVG9waWNNYXAgPSBIYXNoTWFwPFB1c2hXYWtl
U3RhdGUsIFZlY3RvcjxTdHJpbmc+LCBXVEY6OkludEhhc2g8UHVzaFdha2VTdGF0ZT4sIFdURjo6
U3Ryb25nRW51bUhhc2hUcmFpdHM8UHVzaFdha2VTdGF0ZT4+OworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZ2V0VG9waWNzQnlXYWtlU3RhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoV2Fr
ZVN0YXRlVG9Ub3BpY01hcCYmKT4mJik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUHVzaERh
dGFiYXNlKFJlZjxXb3JrUXVldWU+JiYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZT4mJik7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
Y2FjaGVkU3RhdGVtZW50T25RdWV1ZShBU0NJSUxpdGVyYWwgcXVlcnkpOworCisgICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U+IG1fZGI7CisgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4+IG1fc3RhdGVtZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggZjY2Y2NmOGYwNmE1NzkxOWQ4YTRlYTBkYzBkMDg5MDAxNjU0NTU2Ny4uNmQ1ZTg0NDUxNjI4
NmMwZjJhMTI0YTk1MzA1MzU2YTE4YTU3ODdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI2MSw2ICsy
NjEsNyBAQCBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZl
bnQuY3BwCiBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvSFRNTFZpZGVvRWxlbWVudFBpY3R1cmVJ
blBpY3R1cmUuY3BwCiBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvUGljdHVyZUluUGljdHVyZVdp
bmRvdy5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVzaENyeXB0by5jcHAKK01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNoRXZlbnQuY3BwCiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlQ3J5cHRvLmNwcAogTW9kdWxlcy9wdXNoLWFwaS9QdXNo
TWVzc2FnZURhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggOWNiZjg3NmUyNThmYjk3Y2RjOGEzNjY1MWY0YjcyMDU0ZmQ5
YzY0My4uMmY5OTllNTUwYzY0MGVlNTMzZThiN2ZhYTI3MWY5YzU0NTRhMDZjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTQ2
NSw2ICs1NDY1LDcgQEAKIAkJRUIyOEVENDQyNzE3QUMxMTAwNUYwMzkzIC8qIFB1c2hTdWJzY3Jp
cHRpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFQjI4RUQ0MTI3MTdBQkE5MDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQjNDMjlCNjI3
MjlDMzg4MDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCNDI3MjlDMzZFMDBG
QjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCUVCM0MyOUI3
MjcyOUMzOEMwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjNDMjlCMTI3MjlD
MzZEMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5oICovOyB9Owor
CQlFQjlBRDhDQjI3NjQ2RTk0MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjlBRDhDODI3NjQ2RTkwMDBEODkz
QTQgLyogUHVzaERhdGFiYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRUJBNzVDNDYyNzVFQzYxQTAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQTc1QzQyMjc1
RUJEQUIwMEQ2RDMxQyAvKiBQdXNoQ3J5cHRvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUJBNzVDNDcyNzVFQzYyMTAwRDZEMzFDIC8qIFB1c2hN
ZXNzYWdlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFQkE3NUM0MDI3NUVCREFBMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFQkI5NzM4MTI3
MTAwNjcxMDA3NzMyRUYgLyogUHVzaE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQjk3MzgwMjcxMDA2NTQwMDc3MzJFRiAvKiBQdXNoTWFu
YWdlci5oICovOyB9OwpAQCAtMTc2OTAsNiArMTc2OTEsOCBAQAogCQlFQjNDMjlCMjI3MjlDMzZF
MDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50SW5pdC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCM0MyOUIzMjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNo
U3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFB1c2hT
dWJzY3JpcHRpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUVCM0MyOUI0MjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNoYW5n
ZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCOUFEOEM4Mjc2NDZFOTAw
MEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHVzaERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCOUFEOENB
Mjc2NDZFOTEwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRUJBNzVDM0UyNzVFQkRBQTAwRDZEMzFDIC8qIFB1c2hNZXNzYWdlQ3J5cHRvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1c2hNZXNzYWdlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRUJBNzVDNDAyNzVFQkRBQTAwRDZEMzFDIC8qIFB1c2hNZXNzYWdl
Q3J5cHRvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1c2hNZXNzYWdlQ3J5cHRvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUVCQTc1QzQxMjc1RUJEQUIwMEQ2RDMxQyAvKiBQdXNoQ3J5cHRv
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1c2hDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjExOTMsNiArMjExOTYsOCBAQAogCQkJCUVCQTc1QzQ0Mjc1RUM1NjAw
MEQ2RDMxQyAvKiBjb2NvYSAqLywKIAkJCQlFQkE3NUM0MTI3NUVCREFCMDBENkQzMUMgLyogUHVz
aENyeXB0by5jcHAgKi8sCiAJCQkJRUJBNzVDNDIyNzVFQkRBQjAwRDZEMzFDIC8qIFB1c2hDcnlw
dG8uaCAqLywKKwkJCQlFQjlBRDhDQTI3NjQ2RTkxMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNw
cCAqLywKKwkJCQlFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggKi8s
CiAJCQkJRUIwRkI2RkQyNzBEMEFFODAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5o
ICovLAogCQkJCUVCMEZCNzAwMjcwRDBBRUEwMEY3ODEwRCAvKiBQdXNoRW5jcnlwdGlvbktleU5h
bWUuaWRsICovLAogCQkJCTQxOEZDQkJCMjcwNkU0RjYwMEY5NkVDQSAvKiBQdXNoRXZlbnQuY3Bw
ICovLApAQCAtMzY2MzMsNiArMzY2MzgsNyBAQAogCQkJCTAwODFGRjAwMTZCMEEyRDMwMDhBQUE3
QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIwODRCMTRFMTVDN0Uw
MEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQkE3NUM0
NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGluIEhlYWRlcnMgKi8sCisJCQkJRUI5
QUQ4Q0IyNzY0NkU5NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRUIwRkI3MDgyNzBEMEIxMDAwRjc4MTBEIC8qIFB1c2hFbmNyeXB0aW9uS2V5TmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzEyNzA2RTRGQjAwRjk2RUNBIC8qIFB1c2hFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzIyNzA2RTUwMTAwRjk2RUNBIC8qIFB1c2hFdmVu
dEluaXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY2NDUsNiArMzY2NTEsNyBAQAogCQkJCUVCM0My
OUI3MjcyOUMzOEMwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnRJbml0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFQjI4RUQ0NDI3MTdBQzExMDA1RjAzOTMgLyogUHVzaFN1YnNj
cmlwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCRTA5NUU1Mjc3RDE0REEwMDgwNEQ2
MSAvKiBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRUJF
MDk1RTUyNzdEMTREQTAwODA0RDYxIC8qIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFQjBGQjcwQTI3MEQwQjFCMDBGNzgxMEQgLyogUHVzaFN1YnNjcmlw
dGlvbkpTT04uaCBpbiBIZWFkZXJzICovLAogCQkJCUVCMEZCNzBDMjcwRDBCMjkwMEY3ODEwRCAv
KiBQdXNoU3Vic2NyaXB0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUIwRkI3MEQy
NzBEMEIyRTAwRjc4MTBEIC8qIFB1c2hTdWJzY3JpcHRpb25PcHRpb25zSW5pdC5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggZGMwZjUwOThiODdmMTg0NTUy
NWJlM2MwYmE0MWY3Njc1YjE0MDQ3Zi4uMDM0NmMzODdjMTJlMDUzNTBhYTUxZDQ1NmQ5MjI4ZTgy
NjU1Nzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtOTYsNiArOTYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgXAogICAg
IE0oUHJvY2VzcykgXAogICAgIE0oUHJvZ3Jlc3MpIFwKKyAgICBNKFB1c2gpIFwKICAgICBNKFJl
bW90ZUluc3BlY3RvcikgXAogICAgIE0oUmVxdWVzdEFuaW1hdGlvbkZyYW1lKSBcCiAgICAgTShS
ZXNvdXJjZUxvYWRpbmcpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuY3BwCmluZGV4IDE3ZGRkMDI1YTg5OGNiNDEwZGRkNTNhYjc2ZDcyOTEyZThhYWFj
ZTQuLjNiNDk4NTk2MWVmYmVhNTk1ZTU5YmEyMjk4ZjA4MWNiYmFkM2EwNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcApAQCAtMTQ4LDE0ICsx
NDgsMTcgQEAgYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBPcGVuTW9kZSBvcGVuTW9kZSkKICAgICAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFi
YXNlIGNvdWxkIG5vdCBzZXQgdGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKICAgICB9CiAKLSAgICBp
ZiAob3Blbk1vZGUgIT0gT3Blbk1vZGU6OlJlYWRPbmx5KQotICAgICAgICB1c2VXQUxKb3VybmFs
TW9kZSgpOwotCi0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5hbWUsICIt
c2htIl9zKTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSkpIHsK
LSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2ht
RmlsZU5hbWUpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChTUUxEYXRhYmFzZSwg
Ik9wZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEgLXNobSBmaWxlLiBUaGlz
IG1heSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0aGUgZGV2aWNlLiAoJXMp
Iiwgc2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06
Om1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1lKTsKKyAgICBib29sIGlz
SW5NZW1vcnkgPSBmaWxlbmFtZSA9PSAiOm1lbW9yeToiX3M7CisgICAgaWYgKCFpc0luTWVtb3J5
KSB7CisgICAgICAgIGlmIChvcGVuTW9kZSAhPSBPcGVuTW9kZTo6UmVhZE9ubHkpCisgICAgICAg
ICAgICB1c2VXQUxKb3VybmFsTW9kZSgpOworCisgICAgICAgIGF1dG8gc2htRmlsZU5hbWUgPSBt
YWtlU3RyaW5nKGZpbGVuYW1lLCAiLXNobSJfcyk7CisgICAgICAgIGlmIChGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKHNobUZpbGVOYW1lKSkgeworICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpp
c1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmlsZU5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRkFVTFQoU1FMRGF0YWJhc2UsICJPcGVuZWQgYW4gU1FMaXRlIGRhdGFi
YXNlIHdpdGggYSBDbGFzcyBBIC1zaG0gZmlsZS4gVGhpcyBtYXkgdHJpZ2dlciBhIGNyYXNoIHdo
ZW4gdGhlIHVzZXIgbG9ja3MgdGhlIGRldmljZS4gKCVzKSIsIHNobUZpbGVOYW1lLmxhdGluMSgp
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZVNhZmVUb1VzZU1lbW9y
eU1hcEZvclBhdGgoc2htRmlsZU5hbWUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MGE3MzJjNmM5YzA0ZGQwMzEyNjk1NDUwZGNiM2M5YTcyNzk3MDkzMi4uNWVhMjNkZmZkNWVhMzg0
ODUzMTZiZmRhNjQxNGZkNmI3MDBiNjEzYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIyLTAxLTMwICBCZW4gTmhh
bSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6aW5zZXJ0UmVjb3JkKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OnJlbW92ZVJlY29yZEJ5Um93SWRlbnRp
Zmllcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRSZWNv
cmRCeVRvcGljKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6Omdl
dFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFJvd0lkZW50aWZpZXJzKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6OmdldFRvcGljc0J5V2FrZVN0YXRlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVF9GKToKKwogMjAyMi0wMS0zMCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gR3N0U3RydWN0dXJlIHRvIEpTT04gc2VyaWFs
aXphdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZDcxMDE4OGI3MDgzYTg3OTY1YWFi
NTRkZjRhMjFjMjI5MDQ5YTk5Li41NDExNWUwYzM4MmZjYmYwOTE4NjgzMzE5OWMzNDg0ZTBjYTky
NjJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAwMiw2ICsxMDAyLDcgQEAKIAkJRTVB
QTQyRjIyNTkxMjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0ZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1QUE0MkYxMjU5MTI4
QUUwMDQxMEEzRCAvKiBVc2VySW50ZXJmYWNlSWRpb21VcGRhdGUubW0gKi87IH07CiAJCUU1QUE4
RDFEMjUxNTFDQzYwMDUxQ0M0NSAvKiBEYXRlSW5wdXRUZXN0cy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1QUE4RDFDMjUxNTFDQzYwMDUxQ0M0NSAv
KiBEYXRlSW5wdXRUZXN0cy5tbSAqLzsgfTsKIAkJRUIyMzBENDEyNDVFODEzRjAwQzY2QUQxIC8q
IElEQkNoZWNrcG9pbnRXQUwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFQjIzMEQzRDI0NUU3MjJFMDBDNjZBRDEgLyogSURCQ2hlY2tw
b2ludFdBTC5odG1sICovOyB9OworCQlFQjlBRDhDNzI3NjQ2RTc0MDBEODkzQTQgLyogUHVzaERh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovOyB9OwogCQlF
QkE3NUM0OTI3NUVEN0M3MDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBNzVDNDgyNzVFRDdCRTAw
RDZEMzFDIC8qIFB1c2hNZXNzYWdlQ3J5cHRvLmNwcCAqLzsgfTsKIAkJRUNBNjgwQ0UxRTY4Q0Mw
OTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdV
dGlsaXRpZXMubW0gKi87IH07CiAJCUY0MDEwQjgwMjREQTI0QUMwMEE4NzZFMiAvKiBOYXZpZ2F0
aW9uU3dpcGVUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0MDEwQjdGMjREQTI0QUMwMEE4NzZFMiAvKiBOYXZpZ2F0aW9uU3dpcGVUZXN0cy5t
bSAqLzsgfTsKQEAgLTI5NTksNiArMjk2MCw3IEBACiAJCUU1QUE4RDFDMjUxNTFDQzYwMDUxQ0M0
NSAvKiBEYXRlSW5wdXRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGVJbnB1dFRl
c3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjIzMEQzRDI0NUU3MjJFMDBD
NjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gSURCQ2hlY2twb2ludFdBTC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
QjIzMEQzRTI0NUU3MjYzMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQkNoZWNrcG9pbnRXQUwubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNo
RGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERh
dGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBNzVDNDgyNzVFRDdC
RTAwRDZEMzFDIC8qIFB1c2hNZXNzYWdlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1
c2hNZXNzYWdlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUM3OUYx
NjhCRTQ1NEU1NzlFNDE3QjA1IC8qIE1hcmthYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1hcmthYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUNBNjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0cmluZ1V0aWxpdGllcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NzAsNiArMzc3Miw3IEBACiAJCQkJQUE5NkNB
QjQyMUM3REI0MjAwRkQyRjk3IC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk2QjBB
MDdGNjIxRkE5QzJCMDBENTczOTEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQuY3BwICovLAog
CQkJCTA0MUExRTMzMjE2RkZEQkMwMDc4OUUwQSAvKiBQdWJsaWNTdWZmaXguY3BwICovLAorCQkJ
CUVCOUFEOEM2Mjc2NDZFNzMwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwICovLAogCQkJCUVC
QTc1QzQ4Mjc1RUQ3QkUwMEQ2RDMxQyAvKiBQdXNoTWVzc2FnZUNyeXB0by5jcHAgKi8sCiAJCQkJ
NkI0RTg2MUIyMjIwQTU1MjAwMjJGMzg5IC8qIFJlZ2lzdHJhYmxlRG9tYWluLmNwcCAqLywKIAkJ
CQlGNDE4QkUxNDFGNzFCN0RDMDAxOTcwRTYgLyogUm91bmRlZFJlY3RUZXN0cy5jcHAgKi8sCkBA
IC01Njg2LDYgKzU2ODksNyBAQAogCQkJCTQ2NDdCMTI2MUVCQTNCODUwMDQxRDdFRiAvKiBQcm9j
ZXNzRGlkVGVybWluYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQzJBODU2MjRDRUI2NUYw
MEFEQkMzNSAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDQxQTFFMzQy
MTZGRkRCQzAwNzg5RTBBIC8qIFB1YmxpY1N1ZmZpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
QjlBRDhDNzI3NjQ2RTc0MDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUVCQTc1QzQ5Mjc1RUQ3QzcwMEQ2RDMxQyAvKiBQdXNoTWVzc2FnZUNyeXB0by5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2QjRFODYxQzIyMjBBNTUyMDAyMkYzODkgLyogUmVnaXN0cmFi
bGVEb21haW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEQxQTQxMUFFNjAwNDQ3QzRD
IC8qIFJlbG9hZFBhZ2VBZnRlckNyYXNoLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVzaERhdGFiYXNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mM2RlMzk0MDA2ZDRiNDFjN2YyN2U2ZDg4MjE4YzBhNWU2NWZjYjJlCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHAK
QEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJhc2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0
ZW0uaD4KKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgUHVzaERhdGFiYXNl
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UHVzaERhdGFiYXNlPiBkYjsKKworICAgIFB1c2hSZWNvcmQgcmVjb3JkMSB7CisgICAgICAg
IFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyKCksCisgICAgICAgICJjb20uYXBwbGUuU2FmYXJp
Il9zLAorICAgICAgICAiaHR0cHM6Ly93d3cuYXBwbGUuY29tIl9zLAorICAgICAgICAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tL21hYyJfcywKKyAgICAgICAgImh0dHBzOi8vcHVzaEVuZHBvaW50MSJf
cywKKyAgICAgICAgInRvcGljMSJfcywKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMSwg
MiB9LAorICAgICAgICB7IDIsIDMgfSwKKyAgICAgICAgeyA0LCA1IH0sCisgICAgICAgIGNvbnZl
cnRTZWNvbmRzVG9FcG9jaFRpbWVTdGFtcCgxNjQzMzUwMDAwKSwKKyAgICAgICAgUHVzaFdha2VT
dGF0ZTo6T3Bwb3J0dW5pc3RpYworICAgIH07CisgICAgUHVzaFJlY29yZCByZWNvcmQyIHsKKyAg
ICAgICAgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIoKSwKKyAgICAgICAgImNvbS5hcHBsZS53
ZWJhcHAiX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJo
dHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lIl9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5k
cG9pbnQyIl9zLAorICAgICAgICAidG9waWMyIl9zLAorICAgICAgICB7IDUsIDYgfSwKKyAgICAg
ICAgeyA2LCA3IH0sCisgICAgICAgIHsgNywgOCB9LAorICAgICAgICB7IDgsIDkgfQorICAgIH07
CisgICAgUHVzaFJlY29yZCByZWNvcmQzIHsKKyAgICAgICAgUHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXIoKSwKKyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCisgICAgICAgICJodHRwczov
L3d3dy5hcHBsZS5jb20iX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20vaXBob25l
Il9zLAorICAgICAgICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQzIl9zLAorICAgICAgICAidG9waWMz
Il9zLAorICAgICAgICB7IDksIDEwIH0sCisgICAgICAgIHsgMTAsIDExIH0sCisgICAgICAgIHsg
MTEsIDEyIH0sCisgICAgICAgIHsgMTIsIDEzIH0KKyAgICB9OworCisgICAgc3RkOjpvcHRpb25h
bDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQxOworICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29y
ZD4gaW5zZXJ0UmVzdWx0MjsKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJl
c3VsdDM7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlY29yZChjb25z
dCBQdXNoUmVjb3JkJiByZWNvcmQpCisgICAgeworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQ7CisKKyAgICAg
ICAgZGItPmluc2VydFJlY29yZChyZWNvcmQsIFsmZG9uZSwgJmluc2VydFJlc3VsdF0oc3RkOjpv
cHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkgeworICAgICAgICAgICAgaW5zZXJ0UmVzdWx0
ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0p
OworICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAgICAgIHJldHVybiBpbnNlcnRSZXN1
bHQ7CisgICAgfQorCisgICAgYm9vbCByZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIodWludDY0
X3Qgcm93SWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAg
ICAgICBib29sIHJlbW92ZVJlc3VsdCA9IGZhbHNlOworCisgICAgICAgIGRiLT5yZW1vdmVSZWNv
cmRCeUlkZW50aWZpZXIobWFrZU9iamVjdElkZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXJUeXBlPihyb3dJZGVudGlmaWVyKSwgWyZkb25lLCAmcmVtb3ZlUmVzdWx0XShib29sIHJl
c3VsdCkgeworICAgICAgICAgICAgcmVtb3ZlUmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworCisg
ICAgICAgIHJldHVybiByZW1vdmVSZXN1bHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBnZXRSZWNvcmRCeVRvcGljKGNvbnN0IFN0cmluZyYgdG9waWMpCisgICAgewor
ICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVj
b3JkPiBnZXRSZXN1bHQ7CisKKyAgICAgICAgZGItPmdldFJlY29yZEJ5VG9waWModG9waWMsIFsm
ZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmIHJlc3VsdCkgewor
ICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGlsOjpydW4oJmRvbmUpOworCisgICAg
ICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxQdXNoUmVj
b3JkPiBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShjb25zdCBTdHJpbmcmIGJ1
bmRsZUlELCBjb25zdCBTdHJpbmcmIHNjb3BlKQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0g
ZmFsc2U7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4gZ2V0UmVzdWx0OworCisg
ICAgICAgIGRiLT5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShidW5kbGVJRCwg
c2NvcGUsIFsmZG9uZSwgJmdldFJlc3VsdF0oc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmIHJl
c3VsdCkgeworICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAgICAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGlsOjpydW4oJmRvbmUp
OworCisgICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgfQorCisgICAgSGFzaFNldDx1aW50
NjRfdD4gZ2V0Um93SWRlbnRpZmllcnMoKQorICAgIHsKKyAgICAgICAgYm9vbCBkb25lID0gZmFs
c2U7CisgICAgICAgIEhhc2hTZXQ8dWludDY0X3Q+IHJvd0lkZW50aWZpZXJzOworCisgICAgICAg
IGRiLT5nZXRJZGVudGlmaWVycyhbJmRvbmUsICZyb3dJZGVudGlmaWVyc10oSGFzaFNldDxQdXNo
U3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJiBpZGVudGlmaWVycykgeworICAgICAgICAgICAgZm9y
IChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykKKyAgICAgICAgICAgICAgICByb3dJZGVu
dGlmaWVycy5hZGQoaWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAgICAgICAgIGRvbmUgPSB0
cnVlOworICAgICAgICB9KTsKKyAgICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKworICAgICAgICBy
ZXR1cm4gcm93SWRlbnRpZmllcnM7CisgICAgfQorCisgICAgUHVzaERhdGFiYXNlOjpQdXNoV2Fr
ZVN0YXRlVG9Ub3BpY01hcCBnZXRUb3BpY3NCeVdha2VTdGF0ZSgpCisgICAgeworICAgICAgICBi
b29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgUHVzaERhdGFiYXNlOjpQdXNoV2FrZVN0YXRlVG9U
b3BpY01hcCBnZXRSZXN1bHQ7CisKKyAgICAgICAgZGItPmdldFRvcGljc0J5V2FrZVN0YXRlKFsm
ZG9uZSwgJmdldFJlc3VsdF0oUHVzaERhdGFiYXNlOjpQdXNoV2FrZVN0YXRlVG9Ub3BpY01hcCYm
IHJlc3VsdCkgeworICAgICAgICAgICAgZ2V0UmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpOworICAg
ICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGlsOjpydW4oJmRv
bmUpOworCisgICAgICAgIHJldHVybiBnZXRSZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBTZXRV
cCgpIGZpbmFsCisgICAgeworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgUHVz
aERhdGFiYXNlOjpjcmVhdGVJbk1lbW9yeShbdGhpcywgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoRGF0YWJhc2U+JiYgZGF0YWJhc2UpIHsKKyAgICAgICAgICAgIGRiID0gV1RGTW92ZShkYXRh
YmFzZSk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0
aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgQVNTRVJUX1RSVUUoZGIpOworICAgICAgICBBU1NF
UlRfVFJVRShpbnNlcnRSZXN1bHQxID0gaW5zZXJ0UmVjb3JkKHJlY29yZDEpKTsKKyAgICAgICAg
QVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MiA9IGluc2VydFJlY29yZChyZWNvcmQyKSk7CisgICAg
ICAgIEFTU0VSVF9UUlVFKGluc2VydFJlc3VsdDMgPSBpbnNlcnRSZWNvcmQocmVjb3JkMykpOwor
ICAgIH0KK307CisKK3N0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgUHVzaFJlY29yZCYgYSwg
Y29uc3QgUHVzaFJlY29yZCYgYikKK3sKKyAgICByZXR1cm4gYS5pZGVudGlmaWVyID09IGIuaWRl
bnRpZmllcgorICAgICAgICAmJiBhLmJ1bmRsZUlEID09IGIuYnVuZGxlSUQKKyAgICAgICAgJiYg
YS5zZWN1cml0eU9yaWdpbiA9PSBiLnNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuc2NvcGUg
PT0gYi5zY29wZQorICAgICAgICAmJiBhLmVuZHBvaW50ID09IGIuZW5kcG9pbnQKKyAgICAgICAg
JiYgYS50b3BpYyA9PSBiLnRvcGljCisgICAgICAgICYmIGEuc2VydmVyVkFQSURQdWJsaWNLZXkg
PT0gYi5zZXJ2ZXJWQVBJRFB1YmxpY0tleQorICAgICAgICAmJiBhLmNsaWVudFB1YmxpY0tleSA9
PSBiLmNsaWVudFB1YmxpY0tleQorICAgICAgICAmJiBhLmNsaWVudFByaXZhdGVLZXkgPT0gYi5j
bGllbnRQcml2YXRlS2V5CisgICAgICAgICYmIGEuc2hhcmVkQXV0aFNlY3JldCA9PSBiLnNoYXJl
ZEF1dGhTZWNyZXQKKyAgICAgICAgJiYgYS5leHBpcmF0aW9uVGltZSA9PSBiLmV4cGlyYXRpb25U
aW1lCisgICAgICAgICYmIGEud2FrZVN0YXRlID09IGIud2FrZVN0YXRlOworfQorCitURVNUX0Yo
UHVzaERhdGFiYXNlVGVzdCwgSW5zZXJ0UmVjb3JkKQoreworICAgIGF1dG8gZXhwZWN0ZWRSZWNv
cmQxID0gcmVjb3JkMTsKKyAgICBleHBlY3RlZFJlY29yZDEuaWRlbnRpZmllciA9IG1ha2VPYmpl
Y3RJZGVudGlmaWVyPFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyVHlwZT4oMSk7CisgICAgRVhQ
RUNUX1RSVUUoZXhwZWN0ZWRSZWNvcmQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8g
ZXhwZWN0ZWRSZWNvcmQyID0gcmVjb3JkMjsKKyAgICBleHBlY3RlZFJlY29yZDIuaWRlbnRpZmll
ciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyVHlwZT4o
Mik7CisgICAgRVhQRUNUX1RSVUUoZXhwZWN0ZWRSZWNvcmQyID09ICppbnNlcnRSZXN1bHQyKTsK
KworICAgIC8vIFNpbmNlIHJlY29yZDMgaXMgaW4gdGhlIHNhbWUgU3Vic2NyaXB0aW9uU2V0IGFz
IHJlY29yZDEsIGl0IHNob3VsZAorICAgIC8vIGluaGVyaXQgcmVjb3JkMSdzIHdha2Ugc3RhdGUu
CisgICAgYXV0byBleHBlY3RlZFJlY29yZDMgPSByZWNvcmQzOworICAgIGV4cGVjdGVkUmVjb3Jk
My5pZGVudGlmaWVyID0gbWFrZU9iamVjdElkZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXJUeXBlPigzKTsKKyAgICBleHBlY3RlZFJlY29yZDMud2FrZVN0YXRlID0gZXhwZWN0ZWRS
ZWNvcmQxLndha2VTdGF0ZTsKKyAgICBFWFBFQ1RfVFJVRShleHBlY3RlZFJlY29yZDMgPT0gKmlu
c2VydFJlc3VsdDMpOworCisgICAgLy8gSW5zZXJ0aW5nIGEgcmVjb3JkIHdpdGggdGhlIHNhbWUg
KGJ1bmRsZUlELCBzY29wZSkgYXMgcmVjb3JkIDEgc2hvdWxkIGZhaWwuCisgICAgUHVzaFJlY29y
ZCByZWNvcmQ0ID0gcmVjb3JkMTsKKyAgICByZWNvcmQ0LmVuZHBvaW50ID0gImh0dHBzOi8vd3d3
LndlYmtpdC5vcmciX3M7CisgICAgRVhQRUNUX0ZBTFNFKGluc2VydFJlY29yZChXVEZNb3ZlKHJl
Y29yZDQpKSk7CisKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8
dWludDY0X3Q+IHsgMSwgMiwgMyB9KSk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBS
ZW1vdmVSZWNvcmQpCit7CisgICAgRVhQRUNUX1RSVUUocmVtb3ZlUmVjb3JkQnlSb3dJZGVudGlm
aWVyKDEpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVtb3ZlUmVjb3JkQnlSb3dJZGVudGlmaWVyKDEp
KTsKKyAgICBFWFBFQ1RfRVEoZ2V0Um93SWRlbnRpZmllcnMoKSwgKEhhc2hTZXQ8dWludDY0X3Q+
IHsgMiwgMyB9KSk7Cit9CisKK1RFU1RfRihQdXNoRGF0YWJhc2VUZXN0LCBHZXRSZWNvcmRCeVRv
cGljKQoreworICAgIGF1dG8gcmVzdWx0MSA9IGdldFJlY29yZEJ5VG9waWMocmVjb3JkMS50b3Bp
Yyk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0MSk7CisgICAgRVhQRUNUX1RSVUUoKnJlc3VsdDEg
PT0gKmluc2VydFJlc3VsdDEpOworCisgICAgYXV0byByZXN1bHQyID0gZ2V0UmVjb3JkQnlUb3Bp
YygiZm9vIl9zKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0Mik7Cit9CisKK1RFU1RfRihQdXNo
RGF0YWJhc2VUZXN0LCBHZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZSkKK3sKKyAg
ICBhdXRvIHJlc3VsdDEgPSBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShyZWNv
cmQxLmJ1bmRsZUlELCByZWNvcmQxLnNjb3BlKTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHQxKTsK
KyAgICBFWFBFQ1RfVFJVRSgqcmVzdWx0MSA9PSAqaW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRv
IHJlc3VsdDIgPSBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShyZWNvcmQxLmJ1
bmRsZUlELCAiYmFyIl9zKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0Mik7CisKKyAgICBhdXRv
IHJlc3VsdDMgPSBnZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZSgiZm9vIl9zLCAi
YmFyIl9zKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0Myk7Cit9CisKK1RFU1RfRihQdXNoRGF0
YWJhc2VUZXN0LCBHZXRUb3BpY3NCeVdha2VTdGF0ZSkKK3sKKyAgICBIYXNoTWFwPFN0cmluZywg
UHVzaFdha2VTdGF0ZT4gZXhwZWN0ZWQgeworICAgICAgICB7ICJ0b3BpYzEiLCBQdXNoV2FrZVN0
YXRlOjpPcHBvcnR1bmlzdGljIH0sCisgICAgICAgIHsgInRvcGljMiIsIFB1c2hXYWtlU3RhdGU6
Oldha2luZyB9LAorICAgICAgICB7ICJ0b3BpYzMiLCBQdXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlz
dGljIH0KKyAgICB9OworICAgIEhhc2hNYXA8U3RyaW5nLCBQdXNoV2FrZVN0YXRlPiBhY3R1YWw7
CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFt3YWtlU3RhdGUsIHRvcGljc10gOiBnZXRUb3BpY3NC
eVdha2VTdGF0ZSgpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG9waWMgOiB0b3BpY3Mp
CisgICAgICAgICAgICBhY3R1YWwuYWRkKHRvcGljLCB3YWtlU3RhdGUpOworICAgIH0KKworICAg
IEVYUEVDVF9FUShleHBlY3RlZCwgYWN0dWFsKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRl
c3QsIFN0YXJ0c0Zyb21TY3JhdGNoT25Eb3duZ3JhZGUpCit7CisgICAgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZTsKKyAgICBhdXRvIHBhdGggPSBGaWxlU3lzdGVtOjpvcGVu
VGVtcG9yYXJ5RmlsZSgiUHVzaERhdGFiYXNlIiwgaGFuZGxlLCAiLmRiIik7CisgICAgQVNTRVJU
X1RSVUUoRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpKTsKKyAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoaGFuZGxlKTsKKworICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJhc2UgZGI7
CisgICAgICAgIGRiLm9wZW4ocGF0aCk7CisgICAgICAgIEFTU0VSVF9UUlVFKGRiLmV4ZWN1dGVD
b21tYW5kKCJQUkFHTUEgdXNlcl92ZXJzaW9uID0gMTAwMDAwIl9zKSk7CisgICAgfQorCisgICAg
eworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiBjcmVhdGVSZXN1bHQ7Cisg
ICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShw
YXRoLCBbJmNyZWF0ZVJlc3VsdCwgJmRvbmVdKHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+
JiYgZGF0YWJhc2UpIHsKKyAgICAgICAgICAgIGNyZWF0ZVJlc3VsdCA9IFdURk1vdmUoZGF0YWJh
c2UpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGls
OjpydW4oJmRvbmUpOworICAgICAgICBBU1NFUlRfVFJVRShjcmVhdGVSZXN1bHQpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgU1FMaXRlRGF0YWJhc2UgZGI7CisgICAgICAgIGRiLm9wZW4ocGF0
aCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICAgICAgICAg
IGF1dG8gc3FsID0gZGIucHJlcGFyZVN0YXRlbWVudCgiUFJBR01BIHVzZXJfdmVyc2lvbiJfcyk7
CisgICAgICAgICAgICBpZiAoc3FsICYmIHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgICAgICAgICAgdmVyc2lvbiA9IHNxbC0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgRVhQ
RUNUX0dUKHZlcnNpb24sIDApOworICAgICAgICAgICAgRVhQRUNUX0xUKHZlcnNpb24sIDEwMDAw
MCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
KworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450736</attachid>
            <date>2022-02-02 22:07:18 -0800</date>
            <delta_ts>2022-02-04 15:22:51 -0800</delta_ts>
            <desc>patch feedback</desc>
            <filename>bug-234194-20220202220717.patch</filename>
            <type>text/plain</type>
            <size>57595</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxODg5OGZmYWZiNjdj
MzhmNGU5M2RmZGUzNWRjNmNlNTI3MmY1MC4uMTZlMDVkYWU3ZmEzYzYxYzc4MmYzNjg1NzkwZjJj
NDU4OWNhZjk1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIyLTAxLTMwICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhIHBl
cnNpc3RlbmNlIGxheWVyIGZvciBwdXNoIHN1YnNjcmlwdGlvbnMgc3RvcmVkIGluIHdlYnB1c2hk
LiBUaGUgb3BlcmF0aW9ucworICAgICAgICB0aGF0IHdlIHN1cHBvcnQgZm9yIG5vdyBhcmU6CisK
KyAgICAgICAgICAtIGluc2VydGluZyBhIHJlY29yZCAodXNlZCB3aGVuIHN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmVtb3ZpbmcgYSByZWNvcmQgKHVzZWQgd2hlbiB1bnN1YnNjcmliaW5nKQor
ICAgICAgICAgIC0gcmV0cmlldmluZyBhIHJlY29yZCAodXNlZCB3aGVuIHJlY2VpdmluZyBhIHB1
c2gpCisgICAgICAgICAgLSBlbnVtZXJhdGluZyBhbGwgcmVjb3JkcyBieSB3YWtlIHN0YXRlICh1
c2VkIHRvIHByb3ZpZGUgdGhlIHB1c2ggc2VydmljZSB0aGUgbGlzdCBvZiBhbGwKKyAgICAgICAg
ICAgdG9waWNzIHRoYXQgd2UgYXJlIHN1YnNjcmliZWQgdG8gYnkgd2FrZSBzdGF0ZSkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIGRhdGEgdHlwZXMgaW4gdGhpcyBkYXRhIG1vZGVsOgor
CisgICAgICAgICAgLSBTdWJzY3JpcHRpb25zLCB3aGljaCBhcmUgdW5pcXVlbHkgaWRlbnRpZmll
ZCBieSAoYnVuZGxlSUQsIHNlcnZpY2VXb3JrZXJTY29wZSkuIFRoaXMKKyAgICAgICAgICAgIHN0
b3JlcyBkYXRhIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggc3Vic2NyaXB0aW9uLCBlLmcuIGVuY3J5
cHRpb24ga2V5cyBhbmQgdGhlIEhUVFAKKyAgICAgICAgICAgIGVuZHBvaW50IHVzZWQgYnkgdGhl
IHNlcnZlciB0byBzZW5kIHB1c2hlcyB0byB0aGlzIHN1YnNjcmlwdGlvbi4KKyAgICAgICAgICAt
IFN1YnNjcmlwdGlvblNldHMsIHdoaWNoIGVuY29tcGFzcyBvbmUgb3IgbW9yZSBTdWJzY3JpcHRp
b25zLCBhbmQgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQKKyAgICAgICAgICAgIGJ5IChidW5kbGVJ
RCwgc2VjdXJpdHlPcmlnaW4pLiBUaGlzIHN0b3JlcyBzdGF0ZSB0aGlzIGNvbW1vbiB0byBtdWx0
aXBsZSBzdWJzY3JpcHRpb25zLAorICAgICAgICAgICAgZS5nLiB3aGV0aGVyIG9yIG5vdCBhbGwg
cHVzaGVzIHNlbnQgYnkgYSBwYXJ0aWN1bGFyIG9yaWdpbiBzaG91bGQgYmUgbm9uLXdha2luZy4K
KworICAgICAgICBGb3IgaW5zdGFuY2UsIHN1cHBvc2Ugd2Via2l0Lm9yZyBpbiBTYWZhcmkgaGFz
IHR3byBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zIHNjb3BlZCB0bworICAgICAgICB3ZWJr
aXQub3JnL2ZvbyBhbmQgd2Via2l0Lm9yZy9iYXIuIEVhY2ggcmVnaXN0cmF0aW9uIGhhcyBzdWNj
ZXNzZnVsbHkgcmVnaXN0ZXJlZCBmb3IgcHVzaC4KKyAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQg
aW4gdGhyZWUgcm93cyBpbiB0aGUgZGF0YWJhc2U6CisKKyAgICAgICAgICAxLiBTdWJzY3JpcHRp
b24gcm93IGlkZW50aWZpZWQgYnkgKGJ1bmRsZUlEPXNhZmFyaSwgc2NvcGU9d2Via2l0Lm9yZy9m
b28pCisgICAgICAgICAgMi4gU3Vic2NyaXB0aW9uIHJvdyBpZGVudGlmaWVkIGJ5IChidW5kbGVJ
RD1zYWZhcmksIHNjb3BlPXdlYmtpdC5vcmcvYmFyKQorICAgICAgICAgIDMuIFN1YnNjcmlwdGlv
blNldCByb3cgaWRlbnRpZmllZCBieSAoYnVuZGxlSUQ9c2FmYXJpLCBzZWN1cml0eU9yaWdpbj13
ZWJraXQub3JnKQorCisgICAgICAgIEJvdGggc3Vic2NyaXB0aW9ucyAoMSkgYW5kICgyKSBhcmUg
cGFydCBvZiB0aGUgc3Vic2NyaXB0aW9uIHNldCAoMykuCisKKyAgICAgICAgQ292ZXJlZCBieSBu
ZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1
bGVzL3B1c2gtYXBpL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHVzaFJlY29yZDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hS
ZWNvcmQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuQW5kTWlncmF0ZURh
dGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuQW5kTWlncmF0ZURhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1c2hEYXRhYmFzZTo6UHVzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hE
YXRhYmFzZTo6flB1c2hEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6
OmRpc3BhdGNoT25Xb3JrUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpj
YWNoZWRTdGF0ZW1lbnRPblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OmJpbmRFeHBpcmF0aW9u
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpleHBpcmF0aW9uVGltZUZyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wbGV0ZU9uTWFpblF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFz
ZTo6cmVtb3ZlUmVjb3JkQnlJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQdXNo
UmVjb3JkRnJvbVJvdyk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6OmdldFJlY29y
ZEJ5VG9waWMpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaERhdGFiYXNlOjpnZXRSZWNvcmRCeUJ1
bmRsZUlkZW50aWZpZXJBbmRTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXNoRGF0YWJhc2U6
OmdldElkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hEYXRhYmFzZTo6Z2V0VG9w
aWNzQnlXYWtlU3RhdGUpOgorICAgICAgICAqIE1vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNl
Lmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlOjppbk1lbW9yeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5oOgorCiAyMDIyLTAxLTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIERlbGV0ZSBjb2RlIGZvciBrZXlnZW4gZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggNWFjYzJkOWRmZTFlNzE4NjMyMzg1NDZkZjg1OTkwODIyY2Q4NjhjMy4uMzRhZWY4NDFhYTRh
ZWE3NGQ2NzRlNDMzZGRiZmJmZGNhZWEzMmM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0yOTIs
NiArMjkyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIE1v
ZHVsZXMvcGVybWlzc2lvbnMvUGVybWlzc2lvblN0YXRlLmgKIAogICAgIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaENyeXB0by5oCisgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoRGF0YWJhc2UuaAogICAg
IE1vZHVsZXMvcHVzaC1hcGkvUHVzaE1lc3NhZ2VDcnlwdG8uaAogICAgIE1vZHVsZXMvcHVzaC1h
cGkvUHVzaFBlcm1pc3Npb25TdGF0ZS5oCiAgICAgTW9kdWxlcy9wdXNoLWFwaS9QdXNoU3Vic2Ny
aXB0aW9uRGF0YS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBp
L1B1c2hEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3B1c2gtYXBpL1B1c2hE
YXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGExZjUzYWI0ODBhZTBiNDA1OTYyNmJjYTBjNDZlZTA3
YzM5MjVjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1h
cGkvUHVzaERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXNoRGF0YWJhc2UuaCIKKworI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxWYWx1
ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL0Ny
b3NzVGhyZWFkQ29waWVyLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KKworI2RlZmluZSBQVVNIREJfUkVMRUFTRV9MT0coZm10LCAuLi4pIFJF
TEVBU0VfTE9HKFB1c2gsICIlcCAtIFB1c2hEYXRhYmFzZTo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCisjZGVmaW5lIFBVU0hEQl9SRUxFQVNFX0xPR19FUlJPUihmbXQsIC4uLikgUkVMRUFT
RV9MT0dfRVJST1IoUHVzaCwgIiVwIC0gUHVzaERhdGFiYXNlOjoiIGZtdCwgdGhpcywgIyNfX1ZB
X0FSR1NfXykKKyNkZWZpbmUgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJST1IoKSBQVVNIREJf
UkVMRUFTRV9MT0dfRVJST1IoIkZhaWxlZCB0byBiaW5kIHN0YXRlbWVudCAoJWQpOiAlcyIsIG1f
ZGItPmxhc3RFcnJvcigpLCBtX2RiLT5sYXN0RXJyb3JNc2coKSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3RleHByIGludCBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbiA9
IDE7CisKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgcHVzaERhdGFiYXNlU2NoZW1hVjFTdGF0
ZW1lbnRzW10gPSB7CisgICAgIlBSQUdNQSBhdXRvX3ZhY3V1bT1JTkNSRU1FTlRBTCJfcywKKyAg
ICAiQ1JFQVRFIFRBQkxFIFN1YnNjcmlwdGlvblNldHMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJ
TlQgTk9UIE5VTEwsIgorICAgICIgIGJ1bmRsZUlEIFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHNl
Y3VyaXR5T3JpZ2luIFRFWFQgTk9UIE5VTEwsIgorICAgICIgIHdha2VTdGF0ZSBJTlQgTk9UIE5V
TEwsIgorICAgICIgIFVOSVFVRShidW5kbGVJRCwgc2VjdXJpdHlPcmlnaW4pKSJfcywKKyAgICAi
Q1JFQVRFIFRBQkxFIFN1YnNjcmlwdGlvbnMoIgorICAgICIgIGNyZWF0aW9uVGltZSBJTlQgTk9U
IE5VTEwsIgorICAgICIgIHN1YnNjcmlwdGlvblNldElEIElOVCBOT1QgTlVMTCwiCisgICAgIiAg
c2NvcGUgVEVYVCBOT1QgTlVMTCwiCisgICAgIiAgZW5kcG9pbnQgVEVYVCBOT1QgTlVMTCwiCisg
ICAgIiAgdG9waWMgVEVYVCBOT1QgTlVMTCBVTklRVUUsIgorICAgICIgIHNlcnZlclZBUElEUHVi
bGljS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIGNsaWVudFB1YmxpY0tleSBCTE9CIE5PVCBO
VUxMLCIKKyAgICAiICBjbGllbnRQcml2YXRlS2V5IEJMT0IgTk9UIE5VTEwsIgorICAgICIgIHNo
YXJlZEF1dGhTZWNyZXQgQkxPQiBOT1QgTlVMTCwiCisgICAgIiAgZXhwaXJhdGlvblRpbWUgSU5U
LCIKKyAgICAiICBVTklRVUUoc2NvcGUsIHN1YnNjcmlwdGlvblNldElEKSkiX3MsCisgICAgIkNS
RUFURSBJTkRFWCBTdWJzY3JpcHRpb25zX1N1YnNjcmlwdGlvblNldElEX0luZGV4IE9OIFN1YnNj
cmlwdGlvbnMoc3Vic2NyaXB0aW9uU2V0SUQpIl9zLAorICAgICJQUkFHTUEgdXNlcl92ZXJzaW9u
ID0gMSJfcworfTsKKworUHVzaFJlY29yZCBQdXNoUmVjb3JkOjppc29sYXRlZENvcHkoKSBjb25z
dCAmCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgaWRlbnRpZmllciwKKyAgICAgICAgYnVuZGxl
SUQuaXNvbGF0ZWRDb3B5KCksCisgICAgICAgIHNlY3VyaXR5T3JpZ2luLmlzb2xhdGVkQ29weSgp
LAorICAgICAgICBzY29wZS5pc29sYXRlZENvcHkoKSwKKyAgICAgICAgZW5kcG9pbnQuaXNvbGF0
ZWRDb3B5KCksCisgICAgICAgIHRvcGljLmlzb2xhdGVkQ29weSgpLAorICAgICAgICBzZXJ2ZXJW
QVBJRFB1YmxpY0tleSwKKyAgICAgICAgY2xpZW50UHVibGljS2V5LAorICAgICAgICBjbGllbnRQ
cml2YXRlS2V5LAorICAgICAgICBzaGFyZWRBdXRoU2VjcmV0LAorICAgICAgICBleHBpcmF0aW9u
VGltZSwKKyAgICAgICAgd2FrZVN0YXRlCisgICAgfTsKK30KKworUHVzaFJlY29yZCBQdXNoUmVj
b3JkOjppc29sYXRlZENvcHkoKSAmJgoreworICAgIHJldHVybiB7CisgICAgICAgIGlkZW50aWZp
ZXIsCisgICAgICAgIFdURk1vdmUoYnVuZGxlSUQpLmlzb2xhdGVkQ29weSgpLAorICAgICAgICBX
VEZNb3ZlKHNlY3VyaXR5T3JpZ2luKS5pc29sYXRlZENvcHkoKSwKKyAgICAgICAgV1RGTW92ZShz
Y29wZSkuaXNvbGF0ZWRDb3B5KCksCisgICAgICAgIFdURk1vdmUoZW5kcG9pbnQpLmlzb2xhdGVk
Q29weSgpLAorICAgICAgICBXVEZNb3ZlKHRvcGljKS5pc29sYXRlZENvcHkoKSwKKyAgICAgICAg
V1RGTW92ZShzZXJ2ZXJWQVBJRFB1YmxpY0tleSksCisgICAgICAgIFdURk1vdmUoY2xpZW50UHVi
bGljS2V5KSwKKyAgICAgICAgV1RGTW92ZShjbGllbnRQcml2YXRlS2V5KSwKKyAgICAgICAgV1RG
TW92ZShzaGFyZWRBdXRoU2VjcmV0KSwKKyAgICAgICAgZXhwaXJhdGlvblRpbWUsCisgICAgICAg
IHdha2VTdGF0ZQorICAgIH07Cit9CisKK2VudW0gY2xhc3MgU2hvdWxkRGVsZXRlQW5kUmV0cnkg
eyBObywgWWVzIH07CisKK3N0YXRpYyBFeHBlY3RlZDxVbmlxdWVSZWY8U1FMaXRlRGF0YWJhc2U+
LCBTaG91bGREZWxldGVBbmRSZXRyeT4gb3BlbkFuZE1pZ3JhdGVEYXRhYmFzZUltcGwoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKHBhdGggIT0gIjptZW1vcnk6Il9zICYmICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgp
ICYmICFGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0
aChwYXRoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkNvdWxkbid0IGNy
ZWF0ZSBQdXNoRGF0YWJhc2UgcGFyZW50IGRpcmVjdG9yaWVzIGZvciBwYXRoICVzIiwgcGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNob3VsZERlbGV0
ZUFuZFJldHJ5OjpObyk7CisgICAgfQorCisgICAgYXV0byBkYiA9IFdURjo6bWFrZVVuaXF1ZVJl
ZjxTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBkYi0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOwor
CisgICAgaWYgKCFkYi0+b3BlbihwYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihQ
dXNoLCAiQ291bGRuJ3Qgb3BlbiBQdXNoRGF0YWJhc2UgYXQgcGF0aCAlcyIsIHBhdGgudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRS
ZXRyeTo6WWVzKTsKKyAgICB9CisKKyAgICBpbnQgdmVyc2lvbiA9IDA7CisgICAgeworICAgICAg
ICBhdXRvIHNxbCA9IGRiLT5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9z
KTsKKyAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUHVzaCwgIkNvdWxkbid0IGdldCBQdXNoRGF0YWJh
c2UgdmVyc2lvbiBhdCBwYXRoICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChTaG91bGREZWxldGVBbmRSZXRyeTo6WWVzKTsKKyAgICAg
ICAgfQorICAgICAgICB2ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7CisgICAgfQorCisgICAg
aWYgKHZlcnNpb24gJiYgdmVyc2lvbiAhPSBjdXJyZW50UHVzaERhdGFiYXNlVmVyc2lvbikgewor
ICAgICAgICAvLyBGSVhNRTogYWRkIG1pZ3JhdGlvbiB3aGVuIHdlIG5lZWQgaXQuCisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFB1c2gsICJGb3VuZCB1bmV4cGVjdGVkIFB1c2hEYXRhYmFzZSB2
ZXJzaW9uOiAlZCAoZXhwZWN0ZWQ6ICVkKSBhdCBwYXRoOiAlcyIsIHZlcnNpb24sIGN1cnJlbnRQ
dXNoRGF0YWJhc2VWZXJzaW9uLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoU2hvdWxkRGVsZXRlQW5kUmV0cnk6Olllcyk7CisgICAgfQorCisgICAg
aWYgKCF2ZXJzaW9uKSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRi
KTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgICAgICBmb3IgKGF1dG8mIHN0
YXRlbWVudCA6IHB1c2hEYXRhYmFzZVNjaGVtYVYxU3RhdGVtZW50cykgeworICAgICAgICAgICAg
aWYgKCFkYi0+ZXhlY3V0ZUNvbW1hbmQoc3RhdGVtZW50KSkgeworICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFB1c2gsICJFcnJvciBleGVjdXRpbmcgUHVzaERhdGFiYXNlIERETCBz
dGF0ZW1lbnQgJXMgYXQgcGF0aCAlcyIsIHN0YXRlbWVudC5jaGFyYWN0ZXJzKCksIHBhdGgudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNob3Vs
ZERlbGV0ZUFuZFJldHJ5OjpZZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoZGIp
OworfQorCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZURhdGFiYXNlPiBvcGVuQW5kTWln
cmF0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gb3BlbkFuZE1pZ3JhdGVEYXRhYmFzZUlt
cGwocGF0aCk7CisgICAgaWYgKCFyZXN1bHQgJiYgcmVzdWx0LmVycm9yKCkgPT0gU2hvdWxkRGVs
ZXRlQW5kUmV0cnk6OlllcykgeworICAgICAgICBpZiAocGF0aCA9PSBTUUxpdGVEYXRhYmFzZTo6
aW5NZW1vcnlQYXRoKCkgfHwgIVNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShw
YXRoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkZhaWxlZCB0byBkZWxldGUg
UHVzaERhdGFiYXNlIGF0IHBhdGggJXM7IGJhaWxpbmcgb24gcmVjcmVhdGluZyBmcm9tIHNjcmF0
Y2giLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRGVsZXRlZCBQdXNoRGF0YWJh
c2UgYXQgcGF0aCAlcyBhbmQgcmVjcmVhdGluZyBmcm9tIHNjcmF0Y2giLCBwYXRoLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXN1bHQgPSBvcGVuQW5kTWlncmF0ZURhdGFiYXNlSW1wbChwYXRo
KTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGRhdGFiYXNlID0gV1RGTW92ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4gZGF0YWJh
c2UubW92ZVRvVW5pcXVlUHRyKCk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBDcmVhdGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBxdWV1ZSA9IFdvcmtR
dWV1ZTo6Y3JlYXRlKCJQdXNoRGF0YWJhc2UgSS9PIFRocmVhZCIpOworICAgIHF1ZXVlLT5kaXNw
YXRjaChbcXVldWUsIHBhdGggPSBjcm9zc1RocmVhZENvcHkocGF0aCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1
dG8gZGF0YWJhc2UgPSBvcGVuQW5kTWlncmF0ZURhdGFiYXNlKHBhdGgpOworICAgICAgICBXb3Jr
UXVldWU6Om1haW4oKS5kaXNwYXRjaChbcXVldWUgPSBXVEZNb3ZlKHF1ZXVlKSwgZGF0YWJhc2Ug
PSBXVEZNb3ZlKGRhdGFiYXNlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghZGF0YWJhc2UpIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+KG5ldyBQdXNoRGF0YWJhc2UoV1RGTW92ZShx
dWV1ZSksIG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGRhdGFiYXNl
KSkpKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitQdXNoRGF0YWJhc2U6OlB1c2hEYXRh
YmFzZShSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlLCBVbmlxdWVSZWY8U1FMaXRlRGF0YWJhc2U+JiYg
ZGIpCisgICAgOiBtX3F1ZXVlKFdURk1vdmUocXVldWUpKQorICAgICwgbV9kYihXVEZNb3ZlKGRi
KSkKK3sKK30KKworUHVzaERhdGFiYXNlOjp+UHVzaERhdGFiYXNlKCkKK3sKKyAgICAvLyBJbiBw
cmFjdGljZSB3ZSBhcmVuJ3QgYWN0dWFsbHkgZXhwZWN0aW5nIHRoaXMgdG8gcnVuLCBzaW5jZSBh
IE5ldmVyRGVzdHJveWVkPFdlYlB1c2hEYWVtb24+IGluc3RhbmNlCisgICAgLy8gaG9sZHMgb24g
dG8gdGhpcyBvYmplY3QuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBpbnRlbmQgdG8gZGVsZXRlIHRo
aXMgb2JqZWN0IGZvciByZWFsLCB3ZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIG9iamVjdCBy
ZWZjb3VudGVkIGFuZCBtYWtlCisgICAgLy8gdGhlIGJsb2NrcyBvbiB0aGUgcXVldWUgcHJvdGVj
dCB0aGUgZGF0YWJhc2Ugb2JqZWN0IHJhdGhlciB0aGFuIHVzaW5nIGRpc3BhdGNoU3luYy4KKyAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRmx1c2ggYW55IG91dHN0YW5k
aW5nIHJlcXVlc3RzLgorICAgIG1fcXVldWUtPmRpc3BhdGNoU3luYyhbXSgpIHsgfSk7CisKKyAg
ICAvLyBGaW5hbGl6ZSBtZW1iZXIgdmFyaWFibGVzIG9uIHRoZSBxdWV1ZSwgc2luY2UgdGhleSB3
ZXJlIGFyZSBvbmx5IG1lYW50IHRvIGJlIHVzZWQgb24gdGhlIHF1ZXVlLgorICAgIG1fcXVldWUt
PmRpc3BhdGNoU3luYyhbZGIgPSBXVEZNb3ZlKG1fZGIpLCBzdGF0ZW1lbnRzID0gV1RGTW92ZSht
X3N0YXRlbWVudHMpXSgpIG11dGFibGUgeworICAgICAgICBzdGF0ZW1lbnRzLmNsZWFyKCk7Cisg
ICAgICAgIGRiLT5jbG9zZSgpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6ZGlz
cGF0Y2hPbldvcmtRdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFdU
Rk1vdmUoZnVuY3Rpb24pKTsKK30KKworU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUHVz
aERhdGFiYXNlOjpjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKEFTQ0lJTGl0ZXJhbCBxdWVyeSkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gaXQgPSBtX3N0YXRl
bWVudHMuZmluZChxdWVyeSk7CisgICAgaWYgKGl0ICE9IG1fc3RhdGVtZW50cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlKGl0LT52YWx1ZS5wdHIo
KSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fZGItPnByZXBhcmVIZWFwU3RhdGVtZW50KHF1ZXJ5
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfRVJST1Io
IkZhaWxlZCB3aXRoICVkIHByZXBhcmluZyBzdGF0ZW1lbnQ6ICUiIFBVQkxJQ19MT0dfU1RSSU5H
LCByZXN1bHQuZXJyb3IoKSwgcXVlcnkuY2hhcmFjdGVycygpKTsKKyAgICAgICAgcmV0dXJuIFNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlKG51bGxwdHIpOworICAgIH0KKworICAgIGF1dG8g
cmVmID0gV1RGTW92ZSgqcmVzdWx0KTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IHJlZi5wdHIoKTsK
KyAgICBtX3N0YXRlbWVudHMuYWRkKHF1ZXJ5LCBXVEZNb3ZlKHJlZikpOworICAgIHJldHVybiBT
UUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZShzdGF0ZW1lbnQpOworfQorCitzdGF0aWMgaW50
IGJpbmRFeHBpcmF0aW9uVGltZShTUUxpdGVTdGF0ZW1lbnQqIHNxbCwgaW50IGluZGV4LCBzdGQ6
Om9wdGlvbmFsPEVwb2NoVGltZVN0YW1wPiB0aW1lc3RhbXApCit7CisgICAgcmV0dXJuIHRpbWVz
dGFtcCA/IHNxbC0+YmluZEludDY0KGluZGV4LCBjb252ZXJ0RXBvY2hUaW1lU3RhbXBUb1NlY29u
ZHMoKnRpbWVzdGFtcCkpIDogc3FsLT5iaW5kTnVsbChpbmRleCk7Cit9CisKK3N0YXRpYyBzdGQ6
Om9wdGlvbmFsPEVwb2NoVGltZVN0YW1wPiBleHBpcmF0aW9uVGltZUZyb21WYWx1ZShTUUxWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRTZWNvbmRzVG9FcG9jaFRpbWVTdGFtcChzdGQ6Omdl
dDxkb3VibGU+KHZhbHVlKSk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFU+CitzdGF0aWMgdm9pZCBjb21wbGV0ZU9uTWFpblF1ZXVlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIFUmJiByZXN1bHQp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgV29ya1F1ZXVlOjptYWlu
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdCA9IGNyb3NzVGhyZWFkQ29weShXVEZNb3ZlKHJlc3VsdCkpXSgpIG11dGFibGUg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgIH0pOwor
fQorCit2b2lkIFB1c2hEYXRhYmFzZTo6aW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJl
Y29yZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMs
IHJlY29yZCA9IGNyb3NzVGhyZWFkQ29weShyZWNvcmQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
KworICAgICAgICBpbnQ2NF90IHN1YnNjcmlwdGlvblNldElEID0gMDsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVudE9uUXVldWUoIlNFTEVDVCByb3dp
ZCwgd2FrZVN0YXRlIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSBidW5kbGVJRCA9ID8gQU5E
IHNlY3VyaXR5T3JpZ2luID0gPyJfcyk7CisgICAgICAgICAgICBpZiAoIXNxbAorICAgICAgICAg
ICAgICAgIHx8IHNxbC0+YmluZFRleHQoMSwgcmVjb3JkLmJ1bmRsZUlEKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDIsIHJlY29yZC5zZWN1cml0eU9yaWdp
bikgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJ
TkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3Fs
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblNl
dElEID0gc3FsLT5jb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgICAgICByZWNvcmQud2FrZVN0
YXRlID0gc3RhdGljX2Nhc3Q8UHVzaFdha2VTdGF0ZT4oc3FsLT5jb2x1bW5JbnQoMSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWJzY3JpcHRpb25TZXRJRCkg
eworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJJTlNFUlQg
SU5UTyBTdWJzY3JpcHRpb25TZXRzIFZBTFVFUyg/LCA/LCA/LCA/KSJfcyk7CisgICAgICAgICAg
ICBpZiAoIXNxbAorICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIHRpbWUobnVs
bHB0cikpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwg
cmVjb3JkLmJ1bmRsZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJp
bmRUZXh0KDMsIHJlY29yZC5zZWN1cml0eU9yaWdpbikgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICAgICAgfHwgc3FsLT5iaW5kSW50KDQsIHN0YXRpY19jYXN0PGludD4ocmVjb3JkLndha2VTdGF0
ZSkpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19C
SU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RkOjpvcHRpb25hbDxQdXNoUmVj
b3JkPiB7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3Vic2NyaXB0aW9uU2V0SUQgPSBtX2RiLT5sYXN0SW5zZXJ0Um93SUQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVt
ZW50T25RdWV1ZSgiSU5TRVJUIElOVE8gU3Vic2NyaXB0aW9ucyBWQUxVRVMoPywgPywgPywgPywg
PywgPywgPywgPywgPywgPykiX3MpOworICAgICAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCB0aW1lKG51bGxwdHIpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBzdWJzY3JpcHRpb25TZXRJRCkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgzLCByZWNvcmQuc2Nv
cGUpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoNCwgcmVj
b3JkLmVuZHBvaW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRU
ZXh0KDUsIHJlY29yZC50b3BpYykgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kQmxvYig2LCByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoNywgcmVjb3JkLmNsaWVudFB1YmxpY0tl
eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYig4LCByZWNv
cmQuY2xpZW50UHJpdmF0ZUtleSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kQmxvYig5LCByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgYmluZEV4cGlyYXRpb25UaW1lKHNxbC5nZXQoKSwgMTAsIHJlY29yZC5l
eHBpcmF0aW9uVGltZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JF
TEVBU0VfTE9HX0JJTkRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1
ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+
IHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlv
bmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZWNvcmQuaWRlbnRpZmllciA9IG1ha2VPYmplY3RJZGVudGlm
aWVyPFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyVHlwZT4obV9kYi0+bGFzdEluc2VydFJvd0lE
KCkpOworICAgICAgICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAg
ICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgV1RGTW92
ZShyZWNvcmQpKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoRGF0YWJhc2U6OnJlbW92ZVJlY29y
ZEJ5SWRlbnRpZmllcihQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGRp
c3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyLnRvVUlu
dDY0KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CisgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGIpOwor
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGJvb2wgaXNMYXN0U3Vic2Ny
aXB0aW9uSW5TZXQgPSBmYWxzZTsKKyAgICAgICAgaW50NjRfdCBzdWJzY3JpcHRpb25TZXRJRCA9
IDA7CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKCJTRUxFQ1Qgc3Vic2NyaXB0aW9uU2V0SUQgRlJPTSBTdWJzY3JpcHRpb25zIFdIRVJF
IHJvd2lkID0gPyJfcyk7CisKKyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0
KDEsIHJvd0lkZW50aWZpZXIpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hE
Ql9SRUxFQVNFX0xPR19CSU5EX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1h
aW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgp
ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWJzY3JpcHRpb25TZXRJRCA9IHNxbC0+
Y29sdW1uSW50NjQoMCk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICAvLyBU
T0RPOiBvbiBTUUxpdGUgPjMuMzUuMCwgd2UgY291bGQgdXNlIFJFVFVSTklORyB0byBhdm9pZCB0
aGUgU0VMRUNUIGFib3ZlLgorICAgICAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRP
blF1ZXVlKCJERUxFVEUgRlJPTSBTdWJzY3JpcHRpb25zIFdIRVJFIHJvd2lkID0gPyJfcyk7CisK
KyAgICAgICAgICAgIGlmICghc3FsIHx8IHNxbC0+YmluZEludDY0KDEsIHJvd0lkZW50aWZpZXIp
ICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5E
X0VSUk9SKCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgd2Fz
IHRoZSBsYXN0IHN1YnNjcmlwdGlvbiBpbiB0aGUgc3Vic2NyaXB0aW9uIHNldC4KKyAgICAgICAg
ICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiU0VMRUNUIHJvd2lkIEZST00g
U3Vic2NyaXB0aW9ucyBXSEVSRSBzdWJzY3JpcHRpb25TZXRJRCA9ID8iX3MpOworCisgICAgICAg
ICAgICBpZiAoIXNxbCB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBzdWJzY3JpcHRpb25TZXRJRCkgIT0g
U1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJTkRfRVJS
T1IoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpc0xhc3RTdWJzY3JpcHRpb25JblNldCA9IChzcWwtPnN0ZXAo
KSA9PSBTUUxJVEVfRE9ORSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNMYXN0U3Vic2Ny
aXB0aW9uSW5TZXQpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZW50aXJlIHN1YnNjcmlw
dGlvbiBzZXQgaWYgaXQgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhbnkgc3Vic2NyaXB0
aW9ucy4KKyAgICAgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgiREVM
RVRFIEZST00gU3Vic2NyaXB0aW9uU2V0cyBXSEVSRSByb3dpZCA9ID8iX3MpOworICAgICAgICAg
ICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kSW50NjQoMSwgc3Vic2NyaXB0aW9uU2V0SUQpICE9IFNR
TElURV9PSykgeworICAgICAgICAgICAgICAgIFBVU0hEQl9SRUxFQVNFX0xPR19CSU5EX0VSUk9S
KCk7CisgICAgICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCisgICAgICAgIGNvbXBsZXRl
T25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRydWUpOworICAgIH0pOwor
fQorCitzdGF0aWMgUHVzaFJlY29yZCBtYWtlUHVzaFJlY29yZEZyb21Sb3coU1FMaXRlU3RhdGVt
ZW50QXV0b1Jlc2V0U2NvcGUmIHNxbCkKK3sKKyAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICBy
ZWNvcmQuaWRlbnRpZmllciA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFB1c2hTdWJzY3JpcHRpb25J
ZGVudGlmaWVyVHlwZT4oc3FsLT5jb2x1bW5JbnQ2NCgwKSk7CisgICAgcmVjb3JkLmJ1bmRsZUlE
ID0gc3FsLT5jb2x1bW5UZXh0KDEpOworICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9IHNxbC0+
Y29sdW1uVGV4dCgyKTsKKyAgICByZWNvcmQuc2NvcGUgPSBzcWwtPmNvbHVtblRleHQoMyk7Cisg
ICAgcmVjb3JkLmVuZHBvaW50ID0gc3FsLT5jb2x1bW5UZXh0KDQpOworICAgIHJlY29yZC50b3Bp
YyA9IHNxbC0+Y29sdW1uVGV4dCg1KTsKKyAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkg
PSBzcWwtPmNvbHVtbkJsb2IoNik7CisgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IHNxbC0+
Y29sdW1uQmxvYig3KTsKKyAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IHNxbC0+Y29sdW1u
QmxvYig4KTsKKyAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IHNxbC0+Y29sdW1uQmxvYig5
KTsKKyAgICByZWNvcmQuZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZUZyb21WYWx1ZShz
cWwtPmNvbHVtblZhbHVlKDEwKSk7CisgICAgcmVjb3JkLndha2VTdGF0ZSA9IHN0YXRpY19jYXN0
PFB1c2hXYWtlU3RhdGU+KHNxbC0+Y29sdW1uSW50KDExKSk7CisKKyAgICByZXR1cm4gcmVjb3Jk
OworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0UmVjb3JkQnlUb3BpYyhjb25zdCBTdHJpbmcm
IHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGlzcGF0Y2hPbldvcmtRdWV1ZShbdGhp
cywgdG9waWMgPSBjcm9zc1RocmVhZENvcHkodG9waWMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAvLyBGb3JjZSBT
UUxpdGUgdG8gY29uc3VsdCB0aGUgU3Vic2NyaXB0aW9ucyhzY29wZSkgaW5kZXggZmlyc3Qgdmlh
IENST1NTIEpPSU4uCisgICAgICAgIGF1dG8gc3FsID0gY2FjaGVkU3RhdGVtZW50T25RdWV1ZSgK
KyAgICAgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAgICAgIiAgc3ViLnJvd0lELCBzcy5idW5k
bGVJRCwgc3Muc2VjdXJpdHlPcmlnaW4sIHN1Yi5zY29wZSwgc3ViLmVuZHBvaW50LCBzdWIudG9w
aWMsICIKKyAgICAgICAgICAgICIgIHN1Yi5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgc3ViLmNsaWVu
dFB1YmxpY0tleSwgc3ViLmNsaWVudFByaXZhdGVLZXksICIKKyAgICAgICAgICAgICIgIHN1Yi5z
aGFyZWRBdXRoU2VjcmV0LCBzdWIuZXhwaXJhdGlvblRpbWUsIHNzLndha2VTdGF0ZSAiCisgICAg
ICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAiCisgICAgICAgICAgICAiQ1JPU1MgSk9J
TiBTdWJzY3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAgICAgICJPTiBzdWIuc3Vic2NyaXB0aW9u
U2V0SUQgPSBzcy5yb3dpZCAiCisgICAgICAgICAgICAiV0hFUkUgc3ViLnRvcGljID0gPyJfcyk7
CisKKyAgICAgICAgaWYgKCFzcWwgfHwgc3FsLT5iaW5kVGV4dCgxLCB0b3BpYykgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgICAgICBQVVNIREJfUkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAg
ICAgICAgICAgY29tcGxldGVPbk1haW5RdWV1ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
c3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiB7IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNxbC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0
ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIG1ha2VQdXNoUmVjb3JkRnJvbVJvdyhzcWwpKTsKKyAgICB9KTsKK30KKwordm9pZCBQ
dXNoRGF0YWJhc2U6OmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKGNvbnN0IFN0
cmluZyYgYnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0aGlzLCBidW5kbGVJRCA9IGNyb3NzVGhyZWFkQ29w
eShidW5kbGVJRCksIHNjb3BlID0gY3Jvc3NUaHJlYWRDb3B5KHNjb3BlKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
Ly8gRm9yY2UgU1FMaXRlIHRvIGNvbnN1bHQgdGhlIFN1YnNjcmlwdGlvbnMoc2NvcGUpIGluZGV4
IGZpcnN0IHZpYSBDUk9TUyBKT0lOLgorICAgICAgICBhdXRvIHNxbCA9IGNhY2hlZFN0YXRlbWVu
dE9uUXVldWUoCisgICAgICAgICAgICAiU0VMRUNUICIKKyAgICAgICAgICAgICIgIHN1Yi5yb3dJ
RCwgc3MuYnVuZGxlSUQsIHNzLnNlY3VyaXR5T3JpZ2luLCBzdWIuc2NvcGUsIHN1Yi5lbmRwb2lu
dCwgc3ViLnRvcGljLCAiCisgICAgICAgICAgICAiICBzdWIuc2VydmVyVkFQSURQdWJsaWNLZXks
IHN1Yi5jbGllbnRQdWJsaWNLZXksIHN1Yi5jbGllbnRQcml2YXRlS2V5LCAiCisgICAgICAgICAg
ICAiICBzdWIuc2hhcmVkQXV0aFNlY3JldCwgc3ViLmV4cGlyYXRpb25UaW1lLCBzcy53YWtlU3Rh
dGUgIgorICAgICAgICAgICAgIkZST00gU3Vic2NyaXB0aW9ucyBzdWIgIgorICAgICAgICAgICAg
IkNST1NTIEpPSU4gU3Vic2NyaXB0aW9uU2V0cyBzcyAiCisgICAgICAgICAgICAiT04gc3ViLnN1
YnNjcmlwdGlvblNldElEID0gc3Mucm93aWQgIgorICAgICAgICAgICAgIldIRVJFIHN1Yi5zY29w
ZSA9ID8gQU5EIHNzLmJ1bmRsZUlEID0gPyJfcyk7CisKKyAgICAgICAgaWYgKCFzcWwgfHwgc3Fs
LT5iaW5kVGV4dCgxLCBzY29wZSkgIT0gU1FMSVRFX09LIHx8IHNxbC0+YmluZFRleHQoMiwgYnVu
ZGxlSUQpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgUFVTSERCX1JFTEVBU0VfTE9HX0JJ
TkRfRVJST1IoKTsKKyAgICAgICAgICAgIGNvbXBsZXRlT25NYWluUXVldWUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4geyB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWwtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IHsgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBtYWtlUHVzaFJlY29yZEZyb21Sb3coc3FsKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUHVzaERhdGFiYXNlOjpnZXRJZGVudGlmaWVycyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGRpc3BhdGNoT25Xb3JrUXVldWUoW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIEhhc2hTZXQ8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXI+IHJlc3VsdDsKKyAgICAgICAg
YXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1ZXVlKCJTRUxFQ1Qgcm93aWQgRlJPTSBTdWJz
Y3JpcHRpb25zIl9zKTsKKyAgICAgICAgd2hpbGUgKHNxbCAmJiBzcWwtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgcmVzdWx0LmFkZChtYWtlT2JqZWN0SWRlbnRpZmllcjxQdXNo
U3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHNxbC0+Y29sdW1uSW50NjQoMCkpKTsKKworICAg
ICAgICBjb21wbGV0ZU9uTWFpblF1ZXVlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIH0pOworfQorCit2b2lkIFB1c2hEYXRhYmFzZTo6Z2V0VG9waWNz
QnlXYWtlU3RhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoV2FrZVN0YXRlVG9Ub3BpY01h
cCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBkaXNwYXRjaE9uV29ya1F1ZXVlKFt0
aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICBjb25zdGV4cHIgaW50IG51bWJlck9mV2FrZVN0YXRlcyA9IHN0YXRp
Y19jYXN0PGludD4oUHVzaFdha2VTdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpOworICAgICAgICBWZWN0
b3I8VmVjdG9yPFN0cmluZz4sIG51bWJlck9mV2FrZVN0YXRlcz4gdG9waWNzQnlXYWtlU3RhdGUo
bnVtYmVyT2ZXYWtlU3RhdGVzKTsgLy8gdXNlZCBiZWNhdXNlIEhhc2hNYXA6Omlzb2xhdGVkQ29w
eSBkb2Vzbid0IGV4aXN0CisKKyAgICAgICAgYXV0byBzcWwgPSBjYWNoZWRTdGF0ZW1lbnRPblF1
ZXVlKAorICAgICAgICAgICAgIlNFTEVDVCBzcy53YWtlU3RhdGUsIHN1Yi50b3BpYyAiCisgICAg
ICAgICAgICAiRlJPTSBTdWJzY3JpcHRpb25zIHN1YiAiCisgICAgICAgICAgICAiSk9JTiBTdWJz
Y3JpcHRpb25TZXRzIHNzICIKKyAgICAgICAgICAgICJPTiBzdWIuc3Vic2NyaXB0aW9uU2V0SUQg
PSBzcy5yb3dpZCJfcyk7CisgICAgICAgIGlmICghc3FsKSB7CisgICAgICAgICAgICBQVVNIREJf
UkVMRUFTRV9MT0dfQklORF9FUlJPUigpOworICAgICAgICAgICAgV29ya1F1ZXVlOjptYWluKCku
ZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
d2hpbGUgKHNxbC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gcHVz
aFdha2VTdGF0ZSA9IHNxbC0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byB0b3BpYyA9
IHNxbC0+Y29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGlmIChwdXNoV2FrZVN0YXRlID49IDAg
JiYgcHVzaFdha2VTdGF0ZSA8IG51bWJlck9mV2FrZVN0YXRlcykKKyAgICAgICAgICAgICAgICB0
b3BpY3NCeVdha2VTdGF0ZVtwdXNoV2FrZVN0YXRlXS5hcHBlbmQoV1RGTW92ZSh0b3BpYykpOwor
ICAgICAgICB9CisKKyAgICAgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRvcGljc0J5V2FrZVN0YXRl
ID0gY3Jvc3NUaHJlYWRDb3B5KFdURk1vdmUodG9waWNzQnlXYWtlU3RhdGUpKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIFB1c2hXYWtlU3RhdGVUb1RvcGljTWFwIHJlc3VsdDsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihQdXNoV2FrZVN0YXRlOjpO
dW1iZXJPZlN0YXRlcyk7ICsraSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHN0YXRpY19j
YXN0PFB1c2hXYWtlU3RhdGU+KGkpLCBXVEZNb3ZlKHRvcGljc0J5V2FrZVN0YXRlW2ldKSk7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
dXNoLWFwaS9QdXNoRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVzaC1hcGkv
UHVzaERhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNkODk4MWUwMzMzNmFjMjc2Njk2YzZlNTNkMTg5
MWM1YjUyMDY3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHVz
aC1hcGkvUHVzaERhdGFiYXNlLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKworI2luY2x1ZGUgIkVwb2No
VGltZVN0YW1wLmgiCisjaW5jbHVkZSAiUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2FrZSBzdGF0ZSB0aGF0
IGFwcGxpZXMgZm9yIGRldmljZXMgdGhhdCByYWNlLXRvLXNsZWVwLgorZW51bSBjbGFzcyBQdXNo
V2FrZVN0YXRlIDogdWludDhfdCB7CisgICAgV2FraW5nLCAvLyBBbGwgcHVzaGVzIHdpbGwgd2Fr
ZSBkZXZpY2UuCisgICAgT3Bwb3J0dW5pc3RpYywgLy8gTG93IHByaW9yaXR5IHB1c2hlcyBtYXkg
bm90IHdha2UgZGV2aWNlLgorICAgIE5vbldha2luZywgLy8gTm8gcHVzaGVzIHdpbGwgd2FrZSBk
ZXZpY2UuCisgICAgTnVtYmVyT2ZTdGF0ZXMKK307CisKK3N0cnVjdCBQdXNoUmVjb3JkIHsKKyAg
ICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIFN0cmluZyBidW5k
bGVJRDsKKyAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47CisgICAgU3RyaW5nIHNjb3BlOworICAg
IFN0cmluZyBlbmRwb2ludDsKKyAgICBTdHJpbmcgdG9waWM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHNlcnZlclZBUElEUHVibGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBjbGllbnRQdWJsaWNL
ZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNsaWVudFByaXZhdGVLZXk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHNoYXJlZEF1dGhTZWNyZXQ7CisgICAgc3RkOjpvcHRpb25hbDxFcG9jaFRpbWVTdGFt
cD4gZXhwaXJhdGlvblRpbWUgeyB9OworICAgIFB1c2hXYWtlU3RhdGUgd2FrZVN0YXRlIHsgUHVz
aFdha2VTdGF0ZTo6V2FraW5nIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXNoUmVjb3JkIGlz
b2xhdGVkQ29weSgpIGNvbnN0ICY7CisgICAgV0VCQ09SRV9FWFBPUlQgUHVzaFJlY29yZCBpc29s
YXRlZENvcHkoKSAmJjsKK307CisKK2NsYXNzIFB1c2hEYXRhYmFzZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdXNpbmcgQ3JlYXRpb25IYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaERhdGFiYXNlPiYmKT47CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBDcmVhdGlvbkhhbmRsZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgflB1c2hEYXRhYmFzZSgp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRSZWNvcmQoY29uc3QgUHVzaFJlY29y
ZCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiYmKT4m
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIoUHVz
aFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UmVjb3JkQnlUb3BpYyhjb25zdCBTdHJpbmcm
IHRvcGljLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8UHVzaFJlY29yZD4m
Jik+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlm
aWVyQW5kU2NvcGUoY29uc3QgU3RyaW5nJiBidW5kbGVJRCwgY29uc3QgU3RyaW5nJiBzY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYpPiYmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldElkZW50aWZpZXJzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoSGFzaFNldDxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcj4mJik+JiYpOworCisgICAg
dXNpbmcgUHVzaFdha2VTdGF0ZVRvVG9waWNNYXAgPSBIYXNoTWFwPFB1c2hXYWtlU3RhdGUsIFZl
Y3RvcjxTdHJpbmc+LCBXVEY6OkludEhhc2g8UHVzaFdha2VTdGF0ZT4sIFdURjo6U3Ryb25nRW51
bUhhc2hUcmFpdHM8UHVzaFdha2VTdGF0ZT4+OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0
VG9waWNzQnlXYWtlU3RhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoV2FrZVN0YXRlVG9U
b3BpY01hcCYmKT4mJik7CisKK3ByaXZhdGU6CisgICAgUHVzaERhdGFiYXNlKFJlZjxXb3JrUXVl
dWU+JiYsIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4mJik7CisgICAgV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50T25RdWV1ZShB
U0NJSUxpdGVyYWwgcXVlcnkpOworICAgIHZvaWQgZGlzcGF0Y2hPbldvcmtRdWV1ZShGdW5jdGlv
bjx2b2lkKCk+JiYpOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fZGI7CisgICAgSGFzaE1hcDxjb25zdCBjaGFy
KiwgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fc3RhdGVtZW50czsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZjY2Y2NmOGYwNmE1NzkxOWQ4YTRlYTBkYzBkMDg5MDAx
NjU0NTU2Ny4uNmQ1ZTg0NDUxNjI4NmMwZjJhMTI0YTk1MzA1MzU2YTE4YTU3ODdmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTI2MSw2ICsyNjEsNyBAQCBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvRW50
ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuY3BwCiBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1cmUvSFRN
TFZpZGVvRWxlbWVudFBpY3R1cmVJblBpY3R1cmUuY3BwCiBNb2R1bGVzL3BpY3R1cmVpbnBpY3R1
cmUvUGljdHVyZUluUGljdHVyZVdpbmRvdy5jcHAKIE1vZHVsZXMvcHVzaC1hcGkvUHVzaENyeXB0
by5jcHAKK01vZHVsZXMvcHVzaC1hcGkvUHVzaERhdGFiYXNlLmNwcAogTW9kdWxlcy9wdXNoLWFw
aS9QdXNoRXZlbnQuY3BwCiBNb2R1bGVzL3B1c2gtYXBpL1B1c2hNZXNzYWdlQ3J5cHRvLmNwcAog
TW9kdWxlcy9wdXNoLWFwaS9QdXNoTWVzc2FnZURhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWNiZjg3NmUyNThmYjk3
Y2RjOGEzNjY1MWY0YjcyMDU0ZmQ5YzY0My4uMmY5OTllNTUwYzY0MGVlNTMzZThiN2ZhYTI3MWY5
YzU0NTRhMDZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNTQ2NSw2ICs1NDY1LDcgQEAKIAkJRUIyOEVENDQyNzE3QUMxMTAw
NUYwMzkzIC8qIFB1c2hTdWJzY3JpcHRpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjI4RUQ0MTI3MTdBQkE5MDA1RjAzOTMgLyogUHVzaFN1
YnNjcmlwdGlvbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFQjNDMjlCNjI3MjlDMzg4MDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNo
YW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFQjNDMjlCNDI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50
LmggKi87IH07CiAJCUVCM0MyOUI3MjcyOUMzOEMwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9u
Q2hhbmdlRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFQjNDMjlCMTI3MjlDMzZEMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5n
ZUV2ZW50SW5pdC5oICovOyB9OworCQlFQjlBRDhDQjI3NjQ2RTk0MDBEODkzQTQgLyogUHVzaERh
dGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
QjlBRDhDODI3NjQ2RTkwMDBEODkzQTQgLyogUHVzaERhdGFiYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUJBNzVDNDYyNzVFQzYxQTAwRDZE
MzFDIC8qIFB1c2hDcnlwdG8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEVCQTc1QzQyMjc1RUJEQUIwMEQ2RDMxQyAvKiBQdXNoQ3J5cHRvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRUJBNzVDNDcyNzVF
QzYyMTAwRDZEMzFDIC8qIFB1c2hNZXNzYWdlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE3NUM0MDI3NUVCREFBMDBENkQzMUMgLyogUHVz
aE1lc3NhZ2VDcnlwdG8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFQkI5NzM4MTI3MTAwNjcxMDA3NzMyRUYgLyogUHVzaE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCQjk3MzgwMjcxMDA2
NTQwMDc3MzJFRiAvKiBQdXNoTWFuYWdlci5oICovOyB9OwpAQCAtMTc2OTAsNiArMTc2OTEsOCBA
QAogCQlFQjNDMjlCMjI3MjlDMzZFMDBGQjY1QjQgLyogUHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2
ZW50SW5pdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHVzaFN1YnNjcmlwdGlvbkNoYW5n
ZUV2ZW50SW5pdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCM0MyOUIzMjcy
OUMzNkUwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0aW9uQ2hhbmdlRXZlbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFB1c2hTdWJzY3JpcHRpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCM0MyOUI0MjcyOUMzNkUwMEZCNjVCNCAvKiBQdXNoU3Vi
c2NyaXB0aW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHVzaFN1YnNjcmlwdGlvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUVCOUFEOEM4Mjc2NDZFOTAwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVzaERhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUVCOUFEOENBMjc2NDZFOTEwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVzaERhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBNzVDM0UyNzVFQkRBQTAwRDZEMzFDIC8q
IFB1c2hNZXNzYWdlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1c2hNZXNzYWdlQ3J5
cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBNzVDNDAyNzVFQkRBQTAw
RDZEMzFDIC8qIFB1c2hNZXNzYWdlQ3J5cHRvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1c2hNZXNzYWdl
Q3J5cHRvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCQTc1QzQxMjc1RUJEQUIw
MEQ2RDMxQyAvKiBQdXNoQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1c2hDcnlwdG8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjExOTMsNiArMjExOTYsOCBAQAog
CQkJCUVCQTc1QzQ0Mjc1RUM1NjAwMEQ2RDMxQyAvKiBjb2NvYSAqLywKIAkJCQlFQkE3NUM0MTI3
NUVCREFCMDBENkQzMUMgLyogUHVzaENyeXB0by5jcHAgKi8sCiAJCQkJRUJBNzVDNDIyNzVFQkRB
QjAwRDZEMzFDIC8qIFB1c2hDcnlwdG8uaCAqLywKKwkJCQlFQjlBRDhDQTI3NjQ2RTkxMDBEODkz
QTQgLyogUHVzaERhdGFiYXNlLmNwcCAqLywKKwkJCQlFQjlBRDhDODI3NjQ2RTkwMDBEODkzQTQg
LyogUHVzaERhdGFiYXNlLmggKi8sCiAJCQkJRUIwRkI2RkQyNzBEMEFFODAwRjc4MTBEIC8qIFB1
c2hFbmNyeXB0aW9uS2V5TmFtZS5oICovLAogCQkJCUVCMEZCNzAwMjcwRDBBRUEwMEY3ODEwRCAv
KiBQdXNoRW5jcnlwdGlvbktleU5hbWUuaWRsICovLAogCQkJCTQxOEZDQkJCMjcwNkU0RjYwMEY5
NkVDQSAvKiBQdXNoRXZlbnQuY3BwICovLApAQCAtMzY2MzMsNiArMzY2MzgsNyBAQAogCQkJCTAw
ODFGRjAwMTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFQkE3NUM0NjI3NUVDNjFBMDBENkQzMUMgLyogUHVzaENyeXB0by5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRUI5QUQ4Q0IyNzY0NkU5NDAwRDg5M0E0IC8qIFB1c2hEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUIwRkI3MDgyNzBEMEIxMDAwRjc4MTBEIC8qIFB1c2hF
bmNyeXB0aW9uS2V5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzEyNzA2RTRGQjAw
Rjk2RUNBIC8qIFB1c2hFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4RkNCQzIyNzA2RTUw
MTAwRjk2RUNBIC8qIFB1c2hFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY2NDUsNiAr
MzY2NTEsNyBAQAogCQkJCUVCM0MyOUI3MjcyOUMzOEMwMEZCNjVCNCAvKiBQdXNoU3Vic2NyaXB0
aW9uQ2hhbmdlRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFQjI4RUQ0NDI3MTdBQzEx
MDA1RjAzOTMgLyogUHVzaFN1YnNjcmlwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUVC
RTA5NUU1Mjc3RDE0REEwMDgwNEQ2MSAvKiBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRUJFMDk1RTUyNzdEMTREQTAwODA0RDYxIC8qIFB1c2hTdWJzY3Jp
cHRpb25JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQjBGQjcwQTI3MEQwQjFCMDBG
NzgxMEQgLyogUHVzaFN1YnNjcmlwdGlvbkpTT04uaCBpbiBIZWFkZXJzICovLAogCQkJCUVCMEZC
NzBDMjcwRDBCMjkwMEY3ODEwRCAvKiBQdXNoU3Vic2NyaXB0aW9uT3B0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRUIwRkI3MEQyNzBEMEIyRTAwRjc4MTBEIC8qIFB1c2hTdWJzY3JpcHRpb25P
cHRpb25zSW5pdC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5k
ZXggZGMwZjUwOThiODdmMTg0NTUyNWJlM2MwYmE0MWY3Njc1YjE0MDQ3Zi4uMDM0NmMzODdjMTJl
MDUzNTBhYTUxZDQ1NmQ5MjI4ZTgyNjU1Nzc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcu
aApAQCAtOTYsNiArOTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCkgXAogICAgIE0oUHJvY2VzcykgXAogICAgIE0oUHJvZ3Jlc3MpIFwKKyAg
ICBNKFB1c2gpIFwKICAgICBNKFJlbW90ZUluc3BlY3RvcikgXAogICAgIE0oUmVxdWVzdEFuaW1h
dGlvbkZyYW1lKSBcCiAgICAgTShSZXNvdXJjZUxvYWRpbmcpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCmluZGV4IDE3ZGRkMDI1YTg5OGNiNDEw
ZGRkNTNhYjc2ZDcyOTEyZThhYWFjZTQuLjAxOGE1OGUxOTEzMGNmZDQ4OTJkM2JhZTZkZTE3Zjg1
ODAxY2VhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmNwcApAQCAtODgsNiArODgsMTEgQEAgU1FMaXRlRGF0YWJhc2U6On5TUUxpdGVEYXRhYmFz
ZSgpCiAgICAgY2xvc2UoKTsKIH0KIAorY29uc3QgY2hhciogU1FMaXRlRGF0YWJhc2U6OmluTWVt
b3J5UGF0aCgpCit7CisgICAgcmV0dXJuICI6bWVtb3J5OiI7Cit9CisKIGJvb2wgU1FMaXRlRGF0
YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgT3Blbk1vZGUgb3Blbk1vZGUpCiB7
CiAgICAgaW5pdGlhbGl6ZVNRTGl0ZUlmTmVjZXNzYXJ5KCk7CkBAIC0xNDgsMTQgKzE1MywxNiBA
QCBib29sIFNRTGl0ZURhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5N
b2RlIG9wZW5Nb2RlKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJTUUxpdGUgZGF0YWJhc2UgY291
bGQgbm90IHNldCB0ZW1wX3N0b3JlIHRvIG1lbW9yeSIpOwogICAgIH0KIAotICAgIGlmIChvcGVu
TW9kZSAhPSBPcGVuTW9kZTo6UmVhZE9ubHkpCi0gICAgICAgIHVzZVdBTEpvdXJuYWxNb2RlKCk7
CisgICAgaWYgKGZpbGVuYW1lICE9IGluTWVtb3J5UGF0aCgpKSB7CisgICAgICAgIGlmIChvcGVu
TW9kZSAhPSBPcGVuTW9kZTo6UmVhZE9ubHkpCisgICAgICAgICAgICB1c2VXQUxKb3VybmFsTW9k
ZSgpOwogCi0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5hbWUsICItc2ht
Il9zKTsKLSAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSkpIHsKLSAg
ICAgICAgaWYgKCFGaWxlU3lzdGVtOjppc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoc2htRmls
ZU5hbWUpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChTUUxEYXRhYmFzZSwgIk9w
ZW5lZCBhbiBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEgLXNobSBmaWxlLiBUaGlzIG1h
eSB0cmlnZ2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0aGUgZGV2aWNlLiAoJXMpIiwg
c2htRmlsZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1h
a2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKHNobUZpbGVOYW1lKTsKKyAgICAgICAgYXV0byBz
aG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZW5hbWUsICItc2htIl9zKTsKKyAgICAgICAgaWYg
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpKSB7CisgICAgICAgICAgICBpZiAo
IUZpbGVTeXN0ZW06OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSkpIHsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChTUUxEYXRhYmFzZSwgIk9wZW5lZCBh
biBTUUxpdGUgZGF0YWJhc2Ugd2l0aCBhIENsYXNzIEEgLXNobSBmaWxlLiBUaGlzIG1heSB0cmln
Z2VyIGEgY3Jhc2ggd2hlbiB0aGUgdXNlciBsb2NrcyB0aGUgZGV2aWNlLiAoJXMpIiwgc2htRmls
ZU5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjptYWtl
U2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChzaG1GaWxlTmFtZSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKaW5kZXggMzJiODEyNmVkMjJjZDE1ZWNkOTUwNmFkMjk4NWYxN2U1YTk3NjU4MS4u
YzViNWIyMzlmZDYxNDhmOTIwZTA5Zjg3NWRlZTNlN2JlM2U1ZGQ0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTU2LDYgKzU2LDggQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFNRTGl0ZURhdGFiYXNlKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgflNRTGl0ZURhdGFiYXNlKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29u
c3QgY2hhciogaW5NZW1vcnlQYXRoKCk7CisKICAgICBlbnVtIGNsYXNzIE9wZW5Nb2RlIHsgUmVh
ZE9ubHksIFJlYWRXcml0ZSwgUmVhZFdyaXRlQ3JlYXRlIH07CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBvcGVuKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE9wZW5Nb2RlID0gT3Blbk1vZGU6OlJl
YWRXcml0ZUNyZWF0ZSk7CiAgICAgYm9vbCBpc09wZW4oKSBjb25zdCB7IHJldHVybiBtX2RiOyB9
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGE3
MzJjNmM5YzA0ZGQwMzEyNjk1NDUwZGNiM2M5YTcyNzk3MDkzMi4uYzBhNTQxMzBjYWEwNDA1N2My
Y2QyMTY4ZGZlOTNkNTgwOTE5ODJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIyLTAxLTMwICBCZW4gTmhhbSAg
PG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoRGF0YWJhc2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE5NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1B1c2hEYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6Z2V0VG9waWNzQnlXYWtlU3RhdGVTeW5jKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlB1c2hEYXRhYmFzZVRlc3Q6Omluc2VydFJlY29yZCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6UHVzaERhdGFiYXNlVGVzdDo6Z2V0UmVjb3JkQnlUb3Bp
Yyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRSZWNvcmRC
eUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQdXNo
RGF0YWJhc2VUZXN0OjpnZXRSb3dJZGVudGlmaWVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpQdXNoRGF0YWJhc2VUZXN0OjpnZXRUb3BpY3NCeVdha2VTdGF0ZSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWtlVGVtcG9yYXJ5RGF0YWJhc2VQYXRoKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAxLTMwICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBHc3RTdHJ1
Y3R1cmUgdG8gSlNPTiBzZXJpYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJk
NzEwMTg4YjcwODNhODc5NjVhYWI1NGRmNGEyMWMyMjkwNDlhOTkuLjU0MTE1ZTBjMzgyZmNiZjA5
MTg2ODMzMTk5YzM0ODRlMGNhOTI2MmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDAy
LDYgKzEwMDIsNyBAQAogCQlFNUFBNDJGMjI1OTEyOEFFMDA0MTBBM0QgLyogVXNlckludGVyZmFj
ZUlkaW9tVXBkYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTVBQTQyRjEyNTkxMjhBRTAwNDEwQTNEIC8qIFVzZXJJbnRlcmZhY2VJZGlvbVVwZGF0
ZS5tbSAqLzsgfTsKIAkJRTVBQThEMUQyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3Rz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVBQThE
MUMyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tICovOyB9OwogCQlFQjIzMEQ0
MTI0NUU4MTNGMDBDNjZBRDEgLyogSURCQ2hlY2twb2ludFdBTC5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMjMwRDNEMjQ1RTcyMkUw
MEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi87IH07CisJCUVCOUFEOEM3Mjc2NDZF
NzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRh
YmFzZS5jcHAgKi87IH07CiAJCUVCQTc1QzQ5Mjc1RUQ3QzcwMEQ2RDMxQyAvKiBQdXNoTWVzc2Fn
ZUNyeXB0by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFQkE3NUM0ODI3NUVEN0JFMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uY3BwICovOyB9
OwogCQlFQ0E2ODBDRTFFNjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUNBNjgwQ0QxRTY4Q0Mw
OTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLzsgfTsKIAkJRjQwMTBCODAyNERBMjRB
QzAwQTg3NkUyIC8qIE5hdmlnYXRpb25Td2lwZVRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwMTBCN0YyNERBMjRBQzAwQTg3NkUyIC8qIE5h
dmlnYXRpb25Td2lwZVRlc3RzLm1tICovOyB9OwpAQCAtMjk1OSw2ICsyOTYwLDcgQEAKIAkJRTVB
QThEMUMyNTE1MUNDNjAwNTFDQzQ1IC8qIERhdGVJbnB1dFRlc3RzLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRGF0ZUlucHV0VGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUVCMjMwRDNEMjQ1RTcyMkUwMEM2NkFEMSAvKiBJREJDaGVja3BvaW50V0FMLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJDaGVja3BvaW50V0FMLmh0bWw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUVCMjMwRDNFMjQ1RTcyNjMwMEM2NkFEMSAvKiBJREJDaGVja3Bv
aW50V0FMLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSURCQ2hl
Y2twb2ludFdBTC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUI5QUQ4QzYyNzY0
NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQdXNoRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFQkE3NUM0ODI3NUVEN0JFMDBENkQzMUMgLyogUHVzaE1lc3NhZ2VDcnlwdG8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHVzaE1lc3NhZ2VDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFQzc5RjE2OEJFNDU0RTU3OUU0MTdCMDUgLyogTWFya2FibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2FibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAgLyogU3RyaW5n
VXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3Ry
aW5nVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc3MCw2ICsz
NzcyLDcgQEAKIAkJCQlBQTk2Q0FCNDIxQzdEQjQyMDBGRDJGOTcgLyogUGFyc2VkQ29udGVudFR5
cGUuY3BwICovLAogCQkJCTZCMEEwN0Y2MjFGQTlDMkIwMEQ1NzM5MSAvKiBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudC5jcHAgKi8sCiAJCQkJMDQxQTFFMzMyMTZGRkRCQzAwNzg5RTBBIC8qIFB1Ymxp
Y1N1ZmZpeC5jcHAgKi8sCisJCQkJRUI5QUQ4QzYyNzY0NkU3MzAwRDg5M0E0IC8qIFB1c2hEYXRh
YmFzZS5jcHAgKi8sCiAJCQkJRUJBNzVDNDgyNzVFRDdCRTAwRDZEMzFDIC8qIFB1c2hNZXNzYWdl
Q3J5cHRvLmNwcCAqLywKIAkJCQk2QjRFODYxQjIyMjBBNTUyMDAyMkYzODkgLyogUmVnaXN0cmFi
bGVEb21haW4uY3BwICovLAogCQkJCUY0MThCRTE0MUY3MUI3REMwMDE5NzBFNiAvKiBSb3VuZGVk
UmVjdFRlc3RzLmNwcCAqLywKQEAgLTU2ODYsNiArNTY4OSw3IEBACiAJCQkJNDY0N0IxMjYxRUJB
M0I4NTAwNDFEN0VGIC8qIFByb2Nlc3NEaWRUZXJtaW5hdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVDMkE4NTYyNENFQjY1RjAwQURCQzM1IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNDFBMUUzNDIxNkZGREJDMDA3ODlFMEEgLyogUHVibGljU3VmZml4LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUVCOUFEOEM3Mjc2NDZFNzQwMEQ4OTNBNCAvKiBQdXNoRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRUJBNzVDNDkyNzVFRDdDNzAwRDZEMzFDIC8qIFB1
c2hNZXNzYWdlQ3J5cHRvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZCNEU4NjFDMjIyMEE1NTIw
MDIyRjM4OSAvKiBSZWdpc3RyYWJsZURvbWFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0YwRDFBNDExQUU2MDA0NDdDNEMgLyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUHVz
aERhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QdXNoRGF0
YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYmNlMzk3YzIwNTIxMGUzYTU2Nzc1OGE2Yjc3YTNiMmQz
MDI5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvUHVzaERhdGFiYXNlLmNwcApAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNp
bmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
CitzdGF0aWMgUHVzaERhdGFiYXNlOjpQdXNoV2FrZVN0YXRlVG9Ub3BpY01hcCBnZXRUb3BpY3NC
eVdha2VTdGF0ZVN5bmMoUHVzaERhdGFiYXNlJiBkYXRhYmFzZSkKK3sKKyAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICBQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGljTWFwIGdldFJl
c3VsdDsKKworICAgIGRhdGFiYXNlLmdldFRvcGljc0J5V2FrZVN0YXRlKFsmZG9uZSwgJmdldFJl
c3VsdF0oUHVzaERhdGFiYXNlOjpQdXNoV2FrZVN0YXRlVG9Ub3BpY01hcCYmIHJlc3VsdCkgewor
ICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIGRvbmUgPSB0cnVl
OworICAgIH0pOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICByZXR1cm4gZ2V0UmVzdWx0
OworfQorCitjbGFzcyBQdXNoRGF0YWJhc2VUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewor
cHVibGljOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGRiOworCisgICAgUHVz
aFJlY29yZCByZWNvcmQxIHsKKyAgICAgICAgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIoKSwK
KyAgICAgICAgImNvbS5hcHBsZS5TYWZhcmkiX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBs
ZS5jb20iX3MsCisgICAgICAgICJodHRwczovL3d3dy5hcHBsZS5jb20vbWFjIl9zLAorICAgICAg
ICAiaHR0cHM6Ly9wdXNoRW5kcG9pbnQxIl9zLAorICAgICAgICAidG9waWMxIl9zLAorICAgICAg
ICB7IDAsIDEgfSwKKyAgICAgICAgeyAxLCAyIH0sCisgICAgICAgIHsgMiwgMyB9LAorICAgICAg
ICB7IDQsIDUgfSwKKyAgICAgICAgY29udmVydFNlY29uZHNUb0Vwb2NoVGltZVN0YW1wKDE2NDMz
NTAwMDApLAorICAgICAgICBQdXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljCisgICAgfTsKKyAg
ICBQdXNoUmVjb3JkIHJlY29yZDIgeworICAgICAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmll
cigpLAorICAgICAgICAiY29tLmFwcGxlLndlYmFwcCJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3
LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3Ms
CisgICAgICAgICJodHRwczovL3B1c2hFbmRwb2ludDIiX3MsCisgICAgICAgICJ0b3BpYzIiX3Ms
CisgICAgICAgIHsgNSwgNiB9LAorICAgICAgICB7IDYsIDcgfSwKKyAgICAgICAgeyA3LCA4IH0s
CisgICAgICAgIHsgOCwgOSB9CisgICAgfTsKKyAgICBQdXNoUmVjb3JkIHJlY29yZDMgeworICAg
ICAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllcigpLAorICAgICAgICAiY29tLmFwcGxlLlNh
ZmFyaSJfcywKKyAgICAgICAgImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJfcywKKyAgICAgICAgImh0
dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUiX3MsCisgICAgICAgICJodHRwczovL3B1c2hFbmRw
b2ludDMiX3MsCisgICAgICAgICJ0b3BpYzMiX3MsCisgICAgICAgIHsgOSwgMTAgfSwKKyAgICAg
ICAgeyAxMCwgMTEgfSwKKyAgICAgICAgeyAxMSwgMTIgfSwKKyAgICAgICAgeyAxMiwgMTMgfQor
ICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGluc2VydFJlc3VsdDE7Cisg
ICAgc3RkOjpvcHRpb25hbDxQdXNoUmVjb3JkPiBpbnNlcnRSZXN1bHQyOworICAgIHN0ZDo6b3B0
aW9uYWw8UHVzaFJlY29yZD4gaW5zZXJ0UmVzdWx0MzsKKworICAgIHN0ZDo6b3B0aW9uYWw8UHVz
aFJlY29yZD4gaW5zZXJ0UmVjb3JkKGNvbnN0IFB1c2hSZWNvcmQmIHJlY29yZCkKKyAgICB7Cisg
ICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNv
cmQ+IGluc2VydFJlc3VsdDsKKworICAgICAgICBkYi0+aW5zZXJ0UmVjb3JkKHJlY29yZCwgWyZk
b25lLCAmaW5zZXJ0UmVzdWx0XShzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7
CisgICAgICAgICAgICBpbnNlcnRSZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICAgICAgcmV0dXJuIGluc2VydFJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIHJlbW92ZVJl
Y29yZEJ5Um93SWRlbnRpZmllcih1aW50NjRfdCByb3dJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAgIGJvb2wgcmVtb3ZlUmVzdWx0ID0gZmFsc2U7
CisKKyAgICAgICAgZGItPnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihtYWtlT2JqZWN0SWRlbnRp
ZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllclR5cGU+KHJvd0lkZW50aWZpZXIpLCBbJmRv
bmUsICZyZW1vdmVSZXN1bHRdKGJvb2wgcmVzdWx0KSB7CisgICAgICAgICAgICByZW1vdmVSZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAg
ICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIHJlbW92ZVJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5VG9waWMoY29u
c3QgU3RyaW5nJiB0b3BpYykKKyAgICB7CisgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlc3VsdDsKKworICAgICAgICBkYi0+
Z2V0UmVjb3JkQnlUb3BpYyh0b3BpYywgWyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6Om9wdGlvbmFs
PFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7CisgICAgICAgICAgICBnZXRSZXN1bHQgPSBXVEZNb3Zl
KHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAg
IFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGQ6Om9wdGlvbmFsPFB1c2hSZWNvcmQ+IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmll
ckFuZFNjb3BlKGNvbnN0IFN0cmluZyYgYnVuZGxlSUQsIGNvbnN0IFN0cmluZyYgc2NvcGUpCisg
ICAgeworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQ
dXNoUmVjb3JkPiBnZXRSZXN1bHQ7CisKKyAgICAgICAgZGItPmdldFJlY29yZEJ5QnVuZGxlSWRl
bnRpZmllckFuZFNjb3BlKGJ1bmRsZUlELCBzY29wZSwgWyZkb25lLCAmZ2V0UmVzdWx0XShzdGQ6
Om9wdGlvbmFsPFB1c2hSZWNvcmQ+JiYgcmVzdWx0KSB7CisgICAgICAgICAgICBnZXRSZXN1bHQg
PSBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7
CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAgICAgcmV0dXJuIGdldFJlc3VsdDsK
KyAgICB9CisKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBnZXRSb3dJZGVudGlmaWVycygpCisgICAg
eworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgSGFzaFNldDx1aW50NjRfdD4g
cm93SWRlbnRpZmllcnM7CisKKyAgICAgICAgZGItPmdldElkZW50aWZpZXJzKFsmZG9uZSwgJnJv
d0lkZW50aWZpZXJzXShIYXNoU2V0PFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyPiYmIGlkZW50
aWZpZXJzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gaWRlbnRpZmllciA6IGlkZW50aWZpZXJz
KQorICAgICAgICAgICAgICAgIHJvd0lkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyLnRvVUludDY0
KCkpOworICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBVdGls
OjpydW4oJmRvbmUpOworCisgICAgICAgIHJldHVybiByb3dJZGVudGlmaWVyczsKKyAgICB9CisK
KyAgICBQdXNoRGF0YWJhc2U6OlB1c2hXYWtlU3RhdGVUb1RvcGljTWFwIGdldFRvcGljc0J5V2Fr
ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRUb3BpY3NCeVdha2VTdGF0ZVN5bmMo
KmRiKTsKKyAgICB9CisKKyAgICB2b2lkIFNldFVwKCkgZmluYWwKKyAgICB7CisgICAgICAgIGJv
b2wgZG9uZSA9IGZhbHNlOworICAgICAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShTUUxpdGVEYXRh
YmFzZTo6aW5NZW1vcnlQYXRoKCksIFt0aGlzLCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hE
YXRhYmFzZT4mJiBkYXRhYmFzZSkgeworICAgICAgICAgICAgZGIgPSBXVEZNb3ZlKGRhdGFiYXNl
KTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgVXRpbDo6
cnVuKCZkb25lKTsKKworICAgICAgICBBU1NFUlRfVFJVRShkYik7CisgICAgICAgIEFTU0VSVF9U
UlVFKGluc2VydFJlc3VsdDEgPSBpbnNlcnRSZWNvcmQocmVjb3JkMSkpOworICAgICAgICBBU1NF
UlRfVFJVRShpbnNlcnRSZXN1bHQyID0gaW5zZXJ0UmVjb3JkKHJlY29yZDIpKTsKKyAgICAgICAg
QVNTRVJUX1RSVUUoaW5zZXJ0UmVzdWx0MyA9IGluc2VydFJlY29yZChyZWNvcmQzKSk7CisgICAg
fQorfTsKKworc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQdXNoUmVjb3JkJiBhLCBjb25z
dCBQdXNoUmVjb3JkJiBiKQoreworICAgIHJldHVybiBhLmlkZW50aWZpZXIgPT0gYi5pZGVudGlm
aWVyCisgICAgICAgICYmIGEuYnVuZGxlSUQgPT0gYi5idW5kbGVJRAorICAgICAgICAmJiBhLnNl
Y3VyaXR5T3JpZ2luID09IGIuc2VjdXJpdHlPcmlnaW4KKyAgICAgICAgJiYgYS5zY29wZSA9PSBi
LnNjb3BlCisgICAgICAgICYmIGEuZW5kcG9pbnQgPT0gYi5lbmRwb2ludAorICAgICAgICAmJiBh
LnRvcGljID09IGIudG9waWMKKyAgICAgICAgJiYgYS5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9PSBi
LnNlcnZlclZBUElEUHVibGljS2V5CisgICAgICAgICYmIGEuY2xpZW50UHVibGljS2V5ID09IGIu
Y2xpZW50UHVibGljS2V5CisgICAgICAgICYmIGEuY2xpZW50UHJpdmF0ZUtleSA9PSBiLmNsaWVu
dFByaXZhdGVLZXkKKyAgICAgICAgJiYgYS5zaGFyZWRBdXRoU2VjcmV0ID09IGIuc2hhcmVkQXV0
aFNlY3JldAorICAgICAgICAmJiBhLmV4cGlyYXRpb25UaW1lID09IGIuZXhwaXJhdGlvblRpbWUK
KyAgICAgICAgJiYgYS53YWtlU3RhdGUgPT0gYi53YWtlU3RhdGU7Cit9CisKK1RFU1RfRihQdXNo
RGF0YWJhc2VUZXN0LCBJbnNlcnRSZWNvcmQpCit7CisgICAgYXV0byBleHBlY3RlZFJlY29yZDEg
PSByZWNvcmQxOworICAgIGV4cGVjdGVkUmVjb3JkMS5pZGVudGlmaWVyID0gbWFrZU9iamVjdElk
ZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBlPigxKTsKKyAgICBFWFBFQ1Rf
VFJVRShleHBlY3RlZFJlY29yZDEgPT0gKmluc2VydFJlc3VsdDEpOworCisgICAgYXV0byBleHBl
Y3RlZFJlY29yZDIgPSByZWNvcmQyOworICAgIGV4cGVjdGVkUmVjb3JkMi5pZGVudGlmaWVyID0g
bWFrZU9iamVjdElkZW50aWZpZXI8UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXJUeXBlPigyKTsK
KyAgICBFWFBFQ1RfVFJVRShleHBlY3RlZFJlY29yZDIgPT0gKmluc2VydFJlc3VsdDIpOworCisg
ICAgLy8gU2luY2UgcmVjb3JkMyBpcyBpbiB0aGUgc2FtZSBTdWJzY3JpcHRpb25TZXQgYXMgcmVj
b3JkMSwgaXQgc2hvdWxkCisgICAgLy8gaW5oZXJpdCByZWNvcmQxJ3Mgd2FrZSBzdGF0ZS4KKyAg
ICBhdXRvIGV4cGVjdGVkUmVjb3JkMyA9IHJlY29yZDM7CisgICAgZXhwZWN0ZWRSZWNvcmQzLmlk
ZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmll
clR5cGU+KDMpOworICAgIGV4cGVjdGVkUmVjb3JkMy53YWtlU3RhdGUgPSBleHBlY3RlZFJlY29y
ZDEud2FrZVN0YXRlOworICAgIEVYUEVDVF9UUlVFKGV4cGVjdGVkUmVjb3JkMyA9PSAqaW5zZXJ0
UmVzdWx0Myk7CisKKyAgICAvLyBJbnNlcnRpbmcgYSByZWNvcmQgd2l0aCB0aGUgc2FtZSAoYnVu
ZGxlSUQsIHNjb3BlKSBhcyByZWNvcmQgMSBzaG91bGQgZmFpbC4KKyAgICBQdXNoUmVjb3JkIHJl
Y29yZDQgPSByZWNvcmQxOworICAgIHJlY29yZDQuZW5kcG9pbnQgPSAiaHR0cHM6Ly93d3cud2Vi
a2l0Lm9yZyJfczsKKyAgICBFWFBFQ1RfRkFMU0UoaW5zZXJ0UmVjb3JkKFdURk1vdmUocmVjb3Jk
NCkpKTsKKworICAgIEVYUEVDVF9FUShnZXRSb3dJZGVudGlmaWVycygpLCAoSGFzaFNldDx1aW50
NjRfdD4geyAxLCAyLCAzIH0pKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIFJlbW92
ZVJlY29yZCkKK3sKKyAgICBFWFBFQ1RfVFJVRShyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIo
MSkpOworICAgIEVYUEVDVF9GQUxTRShyZW1vdmVSZWNvcmRCeVJvd0lkZW50aWZpZXIoMSkpOwor
ICAgIEVYUEVDVF9FUShnZXRSb3dJZGVudGlmaWVycygpLCAoSGFzaFNldDx1aW50NjRfdD4geyAy
LCAzIH0pKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFzZVRlc3QsIEdldFJlY29yZEJ5VG9waWMp
Cit7CisgICAgYXV0byByZXN1bHQxID0gZ2V0UmVjb3JkQnlUb3BpYyhyZWNvcmQxLnRvcGljKTsK
KyAgICBBU1NFUlRfVFJVRShyZXN1bHQxKTsKKyAgICBFWFBFQ1RfVFJVRSgqcmVzdWx0MSA9PSAq
aW5zZXJ0UmVzdWx0MSk7CisKKyAgICBhdXRvIHJlc3VsdDIgPSBnZXRSZWNvcmRCeVRvcGljKCJm
b28iX3MpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQyKTsKK30KKworVEVTVF9GKFB1c2hEYXRh
YmFzZVRlc3QsIEdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKQoreworICAgIGF1
dG8gcmVzdWx0MSA9IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEu
YnVuZGxlSUQsIHJlY29yZDEuc2NvcGUpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdDEpOworICAg
IEVYUEVDVF9UUlVFKCpyZXN1bHQxID09ICppbnNlcnRSZXN1bHQxKTsKKworICAgIGF1dG8gcmVz
dWx0MiA9IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKHJlY29yZDEuYnVuZGxl
SUQsICJiYXIiX3MpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQyKTsKKworICAgIGF1dG8gcmVz
dWx0MyA9IGdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKCJmb28iX3MsICJiYXIi
X3MpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHQzKTsKK30KKworVEVTVF9GKFB1c2hEYXRhYmFz
ZVRlc3QsIEdldFRvcGljc0J5V2FrZVN0YXRlKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBQdXNo
V2FrZVN0YXRlPiBleHBlY3RlZCB7CisgICAgICAgIHsgInRvcGljMSIsIFB1c2hXYWtlU3RhdGU6
Ok9wcG9ydHVuaXN0aWMgfSwKKyAgICAgICAgeyAidG9waWMyIiwgUHVzaFdha2VTdGF0ZTo6V2Fr
aW5nIH0sCisgICAgICAgIHsgInRvcGljMyIsIFB1c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMg
fQorICAgIH07CisgICAgSGFzaE1hcDxTdHJpbmcsIFB1c2hXYWtlU3RhdGU+IGFjdHVhbDsKKwor
ICAgIGZvciAoY29uc3QgYXV0byYgW3dha2VTdGF0ZSwgdG9waWNzXSA6IGdldFRvcGljc0J5V2Fr
ZVN0YXRlKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0b3BpYyA6IHRvcGljcykKKyAg
ICAgICAgICAgIGFjdHVhbC5hZGQodG9waWMsIHdha2VTdGF0ZSk7CisgICAgfQorCisgICAgRVhQ
RUNUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOworfQorCitzdGF0aWMgU3RyaW5nIG1ha2VUZW1wb3Jh
cnlEYXRhYmFzZVBhdGgoKQoreworICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGU7CisgICAgYXV0byBwYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoIlB1
c2hEYXRhYmFzZSIsIGhhbmRsZSwgIi5kYiIpOworICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZSho
YW5kbGUpOworICAgIHJldHVybiBwYXRoOworfQorCitURVNUKFB1c2hEYXRhYmFzZSwgTWFueUlu
RmxpZ2h0T3BzKQoreworICAgIGF1dG8gcGF0aCA9IG1ha2VUZW1wb3JhcnlEYXRhYmFzZVBhdGgo
KTsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgcmVjb3JkQ291bnQgPSAyNTY7CisKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKKyAgICAg
ICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgs
IFsmY3JlYXRlUmVzdWx0LCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBk
YXRhYmFzZSkgeworICAgICAgICAgICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7
CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1
bigmZG9uZSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CisKKyAgICAgICAg
YXV0byYgZGF0YWJhc2UgPSAqY3JlYXRlUmVzdWx0OworICAgICAgICBjaGFyIHNjb3BlWzY0XSB7
IH07CisgICAgICAgIGNoYXIgdG9waWNbNjRdIHsgfTsKKyAgICAgICAgUHVzaFJlY29yZCByZWNv
cmQgeworICAgICAgICAgICAgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIoKSwKKyAgICAgICAg
ICAgICJjb20uYXBwbGUuU2FmYXJpIl9zLAorICAgICAgICAgICAgImh0dHBzOi8vd3d3LndlYmtp
dC5vcmciX3MsCisgICAgICAgICAgICB7IH0sCisgICAgICAgICAgICAiaHR0cHM6Ly9wdXNoRW5k
cG9pbnQxIl9zLAorICAgICAgICAgICAgeyB9LAorICAgICAgICAgICAgeyAwLCAxIH0sCisgICAg
ICAgICAgICB7IDEsIDIgfSwKKyAgICAgICAgICAgIHsgMiwgMyB9LAorICAgICAgICAgICAgeyA0
LCA1IH0sCisgICAgICAgICAgICBjb252ZXJ0U2Vjb25kc1RvRXBvY2hUaW1lU3RhbXAoMTY0MzM1
MDAwMCksCisgICAgICAgICAgICBQdXNoV2FrZVN0YXRlOjpXYWtpbmcKKyAgICAgICAgfTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgeworICAg
ICAgICAgICAgc25wcmludGYoc2NvcGUsIHNpemVvZihzY29wZSksICJodHRwOi8vd3d3LndlYmtp
dC5vcmcvdGVzdC8lZCIsIGkpOworICAgICAgICAgICAgc25wcmludGYodG9waWMsIHNpemVvZih0
b3BpYyksICJ0b3BpY18lZCIsIGkpOworICAgICAgICAgICAgcmVjb3JkLnNjb3BlID0gc2NvcGU7
CisgICAgICAgICAgICByZWNvcmQudG9waWMgPSB0b3BpYzsKKworICAgICAgICAgICAgZGF0YWJh
c2UuaW5zZXJ0UmVjb3JkKHJlY29yZCwgW10oYXV0byYmIHJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVF9UUlVFKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4gY3JlYXRl
UmVzdWx0OworICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgUHVzaERhdGFiYXNl
OjpjcmVhdGUocGF0aCwgWyZjcmVhdGVSZXN1bHQsICZkb25lXShzdGQ6OnVuaXF1ZV9wdHI8UHVz
aERhdGFiYXNlPiYmIGRhdGFiYXNlKSB7CisgICAgICAgICAgICBjcmVhdGVSZXN1bHQgPSBXVEZN
b3ZlKGRhdGFiYXNlKTsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICB9KTsKKyAg
ICAgICAgVXRpbDo6cnVuKCZkb25lKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY3JlYXRlUmVzdWx0
KTsKKworICAgICAgICBhdXRvIGdldFJlc3VsdCA9IGdldFRvcGljc0J5V2FrZVN0YXRlU3luYygq
Y3JlYXRlUmVzdWx0KTsKKyAgICAgICAgYXV0byB0b3BpY3MgPSBnZXRSZXN1bHQudGFrZShQdXNo
V2FrZVN0YXRlOjpXYWtpbmcpOworICAgICAgICBFWFBFQ1RfRVEodG9waWNzLnNpemUoKSwgcmVj
b3JkQ291bnQpOworICAgIH0KK30KKworVEVTVChQdXNoRGF0YWJhc2UsIFN0YXJ0c0Zyb21TY3Jh
dGNoT25Eb3duZ3JhZGUpCit7CisgICAgYXV0byBwYXRoID0gbWFrZVRlbXBvcmFyeURhdGFiYXNl
UGF0aCgpOworCisgICAgeworICAgICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIu
b3BlbihwYXRoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZGIuZXhlY3V0ZUNvbW1hbmQoIlBSQUdN
QSB1c2VyX3ZlcnNpb24gPSAxMDAwMDAiX3MpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxQdXNoRGF0YWJhc2U+IGNyZWF0ZVJlc3VsdDsKKyAgICAgICAgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKHBhdGgsIFsmY3JlYXRl
UmVzdWx0LCAmZG9uZV0oc3RkOjp1bmlxdWVfcHRyPFB1c2hEYXRhYmFzZT4mJiBkYXRhYmFzZSkg
eworICAgICAgICAgICAgY3JlYXRlUmVzdWx0ID0gV1RGTW92ZShkYXRhYmFzZSk7CisgICAgICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIFV0aWw6OnJ1bigmZG9uZSk7
CisgICAgICAgIEFTU0VSVF9UUlVFKGNyZWF0ZVJlc3VsdCk7CisgICAgfQorCisgICAgeworICAg
ICAgICBTUUxpdGVEYXRhYmFzZSBkYjsKKyAgICAgICAgZGIub3BlbihwYXRoKTsKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHZlcnNpb24gPSAwOworICAgICAgICAgICAgYXV0byBzcWwgPSBk
Yi5wcmVwYXJlU3RhdGVtZW50KCJQUkFHTUEgdXNlcl92ZXJzaW9uIl9zKTsKKyAgICAgICAgICAg
IGlmIChzcWwgJiYgc3FsLT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgICAgICB2
ZXJzaW9uID0gc3FsLT5jb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBFWFBFQ1RfR1QodmVyc2lv
biwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfTFQodmVyc2lvbiwgMTAwMDAwKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8g
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>