<?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>189435</bug_id>
          
          <creation_ts>2018-09-07 14:51:26 -0700</creation_ts>
          <short_desc>IndexedDB tests leak documents</short_desc>
          <delta_ts>2019-02-14 14:08:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1457707</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-07 14:51:26 -0700</bug_when>
    <thetext>These tests are still leaking documents:

imported/w3c/IndexedDB-private-browsing/idbcursor_delete_objectstore3.html [ Leak ]
imported/w3c/IndexedDB-private-browsing/idbcursor_update_index3.html [ Leak ]
imported/w3c/IndexedDB-private-browsing/idbcursor_update_objectstore3.html [ Leak ]
imported/w3c/IndexedDB-private-browsing/value.html [ Leak ]
imported/w3c/IndexedDB-private-browsing/value_recursive.html [ Leak ]

imported/w3c/web-platform-tests/IndexedDB/idb-binary-key-roundtrip.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor-continuePrimaryKey.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor_delete_index3.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor_delete_objectstore3.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor_update_index3.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbcursor_update_objectstore3.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbindex-rename-abort.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbindex-rename-errors.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbindex-rename.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbindex_getAll.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-store.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/key-conversion-exceptions.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/request-abort-ordering.html [ Leak ]
imported/w3c/web-platform-tests/IndexedDB/request-event-ordering.html [ Leak ]

imported/w3c/IndexedDB-private-browsing/idbcursor_delete_index3.html [ Pass Leak ]
imported/w3c/IndexedDB-private-browsing/transaction-requestqueue.html [ Pass Leak ]

storage/indexeddb/closed-cursor-private.html [ Leak ]
storage/indexeddb/closed-cursor.html [ Leak ]
storage/indexeddb/create-object-store-options-private.html [ Leak ]
storage/indexeddb/create-object-store-options.html [ Leak ]
storage/indexeddb/cursor-properties-private.html [ Leak ]
storage/indexeddb/cursor-properties.html [ Leak ]
storage/indexeddb/cursor-value-private.html [ Leak ]
storage/indexeddb/cursor-value.html [ Leak ]
storage/indexeddb/deleted-objects-private.html [ Leak ]
storage/indexeddb/deleted-objects.html [ Leak ]
storage/indexeddb/exceptions-private.html [ Leak ]
storage/indexeddb/exceptions.html [ Leak ]
storage/indexeddb/key-type-array-private.html [ Leak ]
storage/indexeddb/key-type-array.html [ Leak ]
storage/indexeddb/keypath-arrays-private.html [ Leak ]
storage/indexeddb/keypath-arrays.html [ Leak ]
storage/indexeddb/keypath-fetch-key-private.html [ Leak ]
storage/indexeddb/keypath-fetch-key.html [ Leak ]
storage/indexeddb/modern/blob-svg-image.html [ Leak ]
storage/indexeddb/modern/idbcursor-continue-primary-key-1-private.html [ Leak ]
storage/indexeddb/modern/idbcursor-continue-primary-key-1.html [ Leak ]
storage/indexeddb/modern/idbindex-getall-1-private.html [ Leak ]
storage/indexeddb/modern/idbindex-getall-1.html [ Leak ]
storage/indexeddb/modern/idbindex-getallkeys-1-private.html [ Leak ]
storage/indexeddb/modern/idbindex-getallkeys-1.html [ Leak ]
storage/indexeddb/modern/idbobjectstore-getall-1-private.html [ Leak ]
storage/indexeddb/modern/idbobjectstore-getall-1.html [ Leak ]
storage/indexeddb/modern/idbobjectstore-getallkeys-1-private.html [ Leak ]
storage/indexeddb/modern/idbobjectstore-getallkeys-1.html [ Leak ]
storage/indexeddb/mozilla/autoincrement-indexes-private.html [ Leak ]
storage/indexeddb/mozilla/autoincrement-indexes.html [ Leak ]
storage/indexeddb/mozilla/cursor-update-updates-indexes-private.html [ Leak ]
storage/indexeddb/mozilla/cursor-update-updates-indexes.html [ Leak ]
storage/indexeddb/mozilla/object-cursors-private.html [ Leak ]
storage/indexeddb/mozilla/object-cursors.html [ Leak ]
storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put-private.html [ Leak ]
storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html [ Leak ]
storage/indexeddb/mozilla/readyState-private.html [ Leak ]
storage/indexeddb/mozilla/readyState.html [ Leak ]
storage/indexeddb/objectstore-autoincrement-private.html [ Leak ]
storage/indexeddb/objectstore-autoincrement.html [ Leak ]
storage/indexeddb/optional-arguments-private.html [ Leak ]
storage/indexeddb/optional-arguments.html [ Leak ]
storage/indexeddb/prefetch-bugfix-108071-private.html [ Leak ]
storage/indexeddb/prefetch-bugfix-108071.html [ Leak ]
storage/indexeddb/readonly-private.html [ Leak ]
storage/indexeddb/readonly.html [ Leak ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457708</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-07 14:51:51 -0700</bug_when>
    <thetext>At OpenSource r235805.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457709</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-07 14:52:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/44240043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503540</commentid>
    <comment_count>3</comment_count>
      <attachid>361349</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-06 17:36:45 -0800</bug_when>
    <thetext>Created attachment 361349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503558</commentid>
    <comment_count>4</comment_count>
      <attachid>361349</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-02-06 18:11:18 -0800</bug_when>
    <thetext>Comment on attachment 361349
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.h:109
&gt; +    JSValueInWrappedObject m_cachedValue;

The patch is going from JSC::String to JSC::Weak.
The patch is probably making sure that as long as the JSIDBCursor is alive, we will not GC these values.
Can there be cases where:
- we create a JSIDBCursor from an IDBCursor, GC the JSIDBCursor and recreate a new JSIDBCursor from the same IDBCursor.
- we want to keep the cached values from being GCed when the JSIDBCursor is no longer there.

Using DOMGuardedObject might be a solution so that we ensure that these values do not get GCed while making sure we do not create unbreakable ref cycles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503753</commentid>
    <comment_count>5</comment_count>
      <attachid>361403</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-07 09:01:29 -0800</bug_when>
    <thetext>Created attachment 361403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503763</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-07 09:43:41 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #4)
&gt; Comment on attachment 361349 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361349&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBCursor.h:109
&gt; &gt; +    JSValueInWrappedObject m_cachedValue;
&gt; 
&gt; The patch is going from JSC::String to JSC::Weak.
&gt; The patch is probably making sure that as long as the JSIDBCursor is alive,
&gt; we will not GC these values.
&gt; Can there be cases where:
&gt; - we create a JSIDBCursor from an IDBCursor, GC the JSIDBCursor and recreate
&gt; a new JSIDBCursor from the same IDBCursor.

This is possible. Why is this a problem?

&gt; - we want to keep the cached values from being GCed when the JSIDBCursor is
&gt; no longer there.

If there is JSIDBRequest, we will keep the cached value from being GCed. Other than that, do we need to keep the cached values around without having JSIDBCursor? This patch keeps previous behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503768</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-02-07 10:02:51 -0800</bug_when>
    <thetext>&gt; If there is JSIDBRequest, we will keep the cached value from being GCed.
&gt; Other than that, do we need to keep the cached values around without having
&gt; JSIDBCursor?

That is my question, yes.
I am not familiar enough in IDB to know whether this is ok or not.
Code inspection or tests exercising IDB API and GC might help.

&gt; This patch keeps previous behavior.

Not really, the previous behavior with JSC::Strong is to tie cached values lifetime with IDBCursor lifetime. This patch is tieing these cached values lifetime with JSIDBCursor lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503798</commentid>
    <comment_count>8</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-07 10:39:41 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #7)
&gt; &gt; If there is JSIDBRequest, we will keep the cached value from being GCed.
&gt; &gt; Other than that, do we need to keep the cached values around without having
&gt; &gt; JSIDBCursor?
&gt; 
&gt; That is my question, yes.
&gt; I am not familiar enough in IDB to know whether this is ok or not.
&gt; Code inspection or tests exercising IDB API and GC might help.
&gt; 
The change doesn&apos;t break any existing test, so far.

&gt; &gt; This patch keeps previous behavior.
&gt; 
&gt; Not really, the previous behavior with JSC::Strong is to tie cached values
&gt; lifetime with IDBCursor lifetime. This patch is tieing these cached values
&gt; lifetime with JSIDBCursor lifetime.

Yes, by &quot;keeping previous behavior&quot; I mean keeping expected behavior from layout tests. Tying cached values to IDBCursor caused unexpected document leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503826</commentid>
    <comment_count>9</comment_count>
      <attachid>361403</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 11:06:09 -0800</bug_when>
    <thetext>Comment on attachment 361403
Patch

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

r=me

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:131
&gt; +    JSValue key = m_cachedPrimaryKey ? JSValue(m_cachedPrimaryKey) : primaryKey(state);

JSValueInWrappedObject&apos;s operator JSC::JSValue() is not explicit, so I think you can change JSValue(m_cachedPrimaryKey) to just m_cachedPrimaryKey.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:303
&gt; +    JSValue key = m_cachedPrimaryKey ? JSValue(m_cachedPrimaryKey) : primaryKey(state);

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:358
&gt; +JSValue IDBCursor::key(ExecState&amp; state)
&gt; +{
&gt; +    return toJS(state, *state.lexicalGlobalObject(), m_currentKey.get());
&gt; +}
&gt; +
&gt; +JSValue IDBCursor::primaryKey(ExecState&amp; state)
&gt; +{
&gt; +    return toJS(state, *state.lexicalGlobalObject(), m_currentPrimaryKey.get());
&gt; +}
&gt; +
&gt; +JSC::JSValue IDBCursor::value(ExecState&amp; state)
&gt; +{
&gt; +    return deserializeIDBValueToJSValue(state, m_currentValue);
&gt; +}

We usually put these wrapper functions that call toJS() into our JSXXX.cpp or JSXXXCustom.cpp files. We believe these functions are only invoked by JavaScript bindings code. And if we autogenerated these functions, the autogenerator would put them in the JSXXX.cpp file.

So, I&apos;d suggest removing these functions from the IDBCursor class, and moving their code into JSIDBCursorCustom.cpp.

In general, it is &quot;bad code smell&quot; to see significant use of JavaScript interfaces inside a C++ DOM object. We usually think of JavaScript as something that wraps C++ DOM objects, and is not part of their internal implementation. Once JavaScript interfaces become part of the internal implementation of a C++ DOM object, we risk the kind of memory leak you&apos;re fixing here.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.h:63
&gt; +    JSValueInWrappedObject&amp; cachedKey() { return m_cachedKey; }
&gt; +    JSValueInWrappedObject&amp; cachedPrimaryKey() { return m_cachedPrimaryKey; }
&gt; +    JSValueInWrappedObject&amp; cachedValue() { return m_cachedValue; }

I would call these currentKeyWrapper, currentPrimaryKeyWrapper, and currentValueWrapper -- because these data members/accessors are always null or JavaScript wrappers for currentKey, currentPrimaryKey, and currentValue.

Maybe we can also remove the word &quot;current&quot; from all of these names. Any state, at the moment you examine it, is current.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.idl:35
&gt; +    [CustomGetter] readonly attribute any key;
&gt; +    [CustomGetter] readonly attribute any primaryKey;

It would be nice, in a future patch, to teach our auto generator how to generate a getter for a JSValueInWrappedObject automatically. But it&apos;s OK that these are custom for now.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.h:63
&gt; +    enum class OtherResultType {

Maybe we should call this NullResultType? Empty and Undefined are different ways to express absence, which we usually call &quot;null&quot;.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.h:80
&gt; +    JSValueInWrappedObject&amp; cachedResult() { return m_cachedResult; }

I would call this resultWrapper.

One thing I don&apos;t like about the word &quot;cache&quot; is that a cache is usually an optimization that you can delete at any time without changing correctness. But in our case, once we allocate our result and its JS wrapper, it is essential for correctness that they remain in sync.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.h:-83
&gt; -    

Please revert whitespace change to keep svn history clean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503831</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 11:13:31 -0800</bug_when>
    <thetext>&gt; &gt; Can there be cases where:
&gt; &gt; - we create a JSIDBCursor from an IDBCursor, GC the JSIDBCursor and recreate
&gt; &gt; a new JSIDBCursor from the same IDBCursor.
&gt; 
&gt; This is possible. Why is this a problem?

Can you give an example where this is possible?

If this is possible, it is a subtle bug. A JavaScript programmer who set a custom JavaScript property on the IDBCursor, or who put the IDBCursor in a WeakMap, would observe that the property or map entry disappeared when the JSIDBCursor was garbage collected.

The likely solution to this bug is to make sure that the other DOM object(s) that provide APIs that return this IDBCursor should, in their custom visit functions, make sure to visit this IDBCursor.

If there are many objects that can return this IDBCursor through many different APIs, it might not be practical to deploy custom visit functions for all those casdes, and we&apos;ll have to consider other options, probably using the opaque roots API.

&gt; &gt; - we want to keep the cached values from being GCed when the JSIDBCursor is
&gt; &gt; no longer there.
&gt; 
&gt; If there is JSIDBRequest, we will keep the cached value from being GCed.
&gt; Other than that, do we need to keep the cached values around without having
&gt; JSIDBCursor? This patch keeps previous behavior.

The answer to this question depends on whether DOM objects other than JSIDBRequest offer APIs that return this IDBCursor. If JSIDBRequest is the only object that offers API that returns this IDBCursor, and JSIDBRequest has a custom visit function that takes care to visit this IDBCursor, that&apos;s good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503833</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 11:18:41 -0800</bug_when>
    <thetext>I don&apos;t think DOMGuardedObject is the right solution in this case because it would cause every IDB request and cursor to survive as long as the webpage survives. A webpage that executes lots of IDB queries will see a serious memory leak.

In fact, it seems likely to me that many uses of DOMGuardedObject are memory leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503840</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 11:25:50 -0800</bug_when>
    <thetext>Consider DOMGuardedObject, I do think I see a pre-existing bug here, which I&apos;d like you to fix in a separate bug:

JSValueInWrappedObject neglects to execute any write barrier.

JSValueInWrappedObject needs to tell the garbage collector that its owner now points to its value. Otherwise, the garbage collector, if it has already concurrently or generationally visited the owner, may neglect to visit the value.

This is probably as simple as:

(1) Call heap.writeBarrier(), passing owner and value, inside cachedPropertyValue, after we assign to cachedValue.

(2) Change the JSValueInWrappedObject(JSC::JSValue value) to require an owner argument, and execute a write barrier there too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504073</commentid>
    <comment_count>13</comment_count>
      <attachid>361483</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-07 18:31:54 -0800</bug_when>
    <thetext>Created attachment 361483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504106</commentid>
    <comment_count>14</comment_count>
      <attachid>361483</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 21:09:36 -0800</bug_when>
    <thetext>Comment on attachment 361483
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504179</commentid>
    <comment_count>15</comment_count>
      <attachid>361483</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-08 09:05:59 -0800</bug_when>
    <thetext>Comment on attachment 361483
Patch

Clearing flags on attachment: 361483

Committed r241196: &lt;https://trac.webkit.org/changeset/241196&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504180</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-08 09:06:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504263</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-08 13:05:16 -0800</bug_when>
    <thetext>I don’t see any tests here or any test results changing.

We need to create regression tests that cover the object lifetime, or be clearer about why that is difficult or impossible.

When I created JSValueInWrappedObject, I created the reference-cycle-leaks test &lt;https://trac.webkit.org/browser/webkit/trunk/LayoutTests/fast/dom/reference-cycle-leaks.html&gt; and in writing the test was in fact more difficult than fixing the bug.

There is a placeholder in there for an IDBRequest test, although not a placeholder for an IDBCursor test. I think it’s dangerous for us to say this is fixed without also adding a regression test, so we should settle for that only if we find it’s prohibitively difficult to do so.

Also, since the comments above point to something wrong about the JSValueInWrappedObject implementation or possibly in how it’s being used, I also would like us to create tests that demonstrate that. We could do that either when we fix the problem, or, better, even before we fix the problem to help us understand even more deeply that the problem is real.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504264</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-08 13:05:45 -0800</bug_when>
    <thetext>I think seeing these indirectly through [ Leak ] isn’t the best way to test, but I suppose it’s better than nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504512</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-08 22:18:13 -0800</bug_when>
    <thetext>Seems like we could regression test this in a direct way by following the model of &lt;https://trac.webkit.org/browser/webkit/trunk/LayoutTests/fast/dom/reference-cycle-leaks.html&gt;:

1. Make a test with an iframe

2. Record window.internals.numberOfLiveDocuments()

3. Do 100 times:

3a. Navigate the iframe to a test page that uses IDBCursor

4. Record window.internals.numberOfLiveDocuments() - (2)

Write barrier test will be hard. Maybe we can make it easier with a window.internals.performSyncEdenGC().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504586</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-09 09:51:46 -0800</bug_when>
    <thetext>One other side comment: The createPromiseRejectionEventPromiseCycle subtest of reference-cycle-leaks.html is still an expected failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506353</commentid>
    <comment_count>21</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-02-14 14:08:52 -0800</bug_when>
    <thetext>Added two IDB tests for reference cycle in GC world: 
https://bugs.webkit.org/show_bug.cgi?id=194527</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361349</attachid>
            <date>2019-02-06 17:36:45 -0800</date>
            <delta_ts>2019-02-07 09:01:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189435-20190206173644.patch</filename>
            <type>text/plain</type>
            <size>31337</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjU5OTU3OTlmY2ZmMjc2
ODJlODRkMTQzNDMzYWZmMzVkNGJlODBjYy4uMTQ1ODg5MGY1Y2NjZjhkODExZTZjYzEzZWJmZjIy
ZmRhMzlkYjczYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE5LTAyLTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiB0ZXN0cyBs
ZWFrIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg5NDM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDI0MDA0Mz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdXNlIG9mIEpT
Qzo6U3Ryb25nIGluIEluZGV4ZWREYXRhYmFzZS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFyeUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2Fj
aGVkS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2FjaGVkUHJpbWFyeUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6a2V5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvcjo6cHJpbWFyeUtleSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9T
dHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0
VG9VbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OmNhY2hlZFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yOjprZXkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3I6OnByaW1hcnlLZXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcDoKKwogMjAxOS0wMi0wMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQwNjk4KTogZmFzdC9zY3JvbGxpbmcvc3RpY2t5
LXRvLWZpeGVkLmh0bWwgY2FuIGNhdXNlIGEgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDliNTljZmZjZTU0NjY2OWU4ZmNlM2Y0
NjQyZmUxYTFiYjc0MGM5M2EuLjU1NDkwNzc1YTU1YTk0NWU2NTlmZTExYTAwNmY0YTJjYmViODBj
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNw
cApAQCAtMTI4LDcgKzEyOCw4IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCQ3Vy
c29yOjp1cGRhdGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRl
JyBvbiAnSURCQ3Vyc29yJzogVGhlIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgb2YgdGhpcyBjdXJz
b3IgdXNlcyBpbi1saW5lIGtleXMgYW5kIGV2YWx1YXRpbmcgdGhlIGtleSBwYXRoIG9mIHRoZSB2
YWx1ZSBwYXJhbWV0ZXIgcmVzdWx0cyBpbiBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBjdXJz
b3IncyBlZmZlY3RpdmUga2V5LiJfcyB9OwogICAgIH0KIAotICAgIGF1dG8gcHV0UmVzdWx0ID0g
ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRhdGUoc3RhdGUsIHZhbHVlLCBt
X2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKTsKKyAgICBKU1ZhbHVlIGtleSA9IG1fY2FjaGVkUHJp
bWFyeUtleSA/IEpTVmFsdWUobV9jYWNoZWRQcmltYXJ5S2V5KSA6IHByaW1hcnlLZXkoc3RhdGUp
OworICAgIGF1dG8gcHV0UmVzdWx0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJz
b3JVcGRhdGUoc3RhdGUsIHZhbHVlLCBrZXkpOwogICAgIGlmIChwdXRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBwdXRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogCkBA
IC0yOTksNyArMzAwLDggQEAgRXhjZXB0aW9uT3I8UmVmPFdlYkNvcmU6OklEQlJlcXVlc3Q+PiBJ
REJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBpZiAoIWlzS2V5
Q3Vyc29yV2l0aFZhbHVlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUg
Y3Vyc29yIGlzIGEga2V5IGN1cnNvci4iX3MgfTsKIAotICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0
aXZlT2JqZWN0U3RvcmUoKS5kZWxldGVGdW5jdGlvbihzdGF0ZSwgbV9jdXJyZW50UHJpbWFyeUtl
eS5nZXQoKSk7CisgICAgSlNWYWx1ZSBrZXkgPSBtX2NhY2hlZFByaW1hcnlLZXkgPyBKU1ZhbHVl
KG1fY2FjaGVkUHJpbWFyeUtleSkgOiBwcmltYXJ5S2V5KHN0YXRlKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkuZGVsZXRlRnVuY3Rpb24oc3RhdGUsIGtleSk7CiAg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CiAKQEAgLTMwOSw0NyArMzExLDUyIEBAIEV4Y2VwdGlvbk9yPFJlZjxX
ZWJDb3JlOjpJREJSZXF1ZXN0Pj4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihFeGVjU3RhdGUm
IHN0YXRlCiAgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7CiB9CiAKLXZvaWQgSURCQ3Vyc29y
OjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBn
ZXRSZXN1bHQpCit2b2lkIElEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmLCBjb25z
dCBJREJHZXRSZXN1bHQmIGdldFJlc3VsdCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vy
c29yOjpzZXRHZXRSZXN1bHQgLSBjdXJyZW50IGtleSAlcyIsIGdldFJlc3VsdC5rZXlEYXRhKCku
bG9nZ2luZ1N0cmluZygpLnN1YnN0cmluZygwLCAxMDApLnV0ZjgoKS5kYXRhKCkpOwogICAgIEFT
U0VSVCgmZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3Jp
Z2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKIAotICAgIGF1dG8qIGNvbnRleHQg
PSByZXF1ZXN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsK
LSAgICBpZiAoIWV4ZWMpCi0gICAgICAgIHJldHVybjsKKyAgICBtX2NhY2hlZEtleSA9IHsgfTsK
KyAgICBtX2NhY2hlZFByaW1hcnlLZXkgPSB7IH07CisgICAgbV9jYWNoZWRWYWx1ZSA9IHsgfTsK
IAogICAgIGlmICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fY3VycmVudEtl
eSA9IHsgfTsKICAgICAgICAgbV9jdXJyZW50S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9jdXJy
ZW50UHJpbWFyeUtleSA9IHsgfTsKKyAgICAgICAgbV9jdXJyZW50S2V5ID0gbnVsbHB0cjsKICAg
ICAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSB7IH07CisgICAgICAgIG1fY3VycmVudFBy
aW1hcnlLZXkgPSBudWxscHRyOwogICAgICAgICBtX2N1cnJlbnRWYWx1ZSA9IHsgfTsKIAogICAg
ICAgICBtX2dvdFZhbHVlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvJiB2bSA9IGNvbnRleHQtPnZtKCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9u
IHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBz
byB0aGF0IGdsb2JhbCBvYmplY3QKLSAgICAvLyBvZiB0aGUgSURCQ3Vyc29yIHdyYXBwZXIgY2Fu
IGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgotICAgIG1fY3Vy
cmVudEtleSA9IHsgdm0sIHRvSlMoKmV4ZWMsICpleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGdldFJlc3VsdC5rZXlEYXRhKCkubWF5YmVDcmVhdGVJREJLZXkoKS5nZXQoKSkgfTsKICAgICBt
X2N1cnJlbnRLZXlEYXRhID0gZ2V0UmVzdWx0LmtleURhdGEoKTsKLSAgICBtX2N1cnJlbnRQcmlt
YXJ5S2V5ID0geyB2bSwgdG9KUygqZXhlYywgKmV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Z2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkubWF5YmVDcmVhdGVJREJLZXkoKS5nZXQoKSkgfTsK
KyAgICBtX2N1cnJlbnRLZXkgPSBtX2N1cnJlbnRLZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7
CiAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEo
KTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbV9jdXJyZW50UHJpbWFyeUtleURhdGEubWF5
YmVDcmVhdGVJREJLZXkoKTsKIAogICAgIGlmIChpc0tleUN1cnNvcldpdGhWYWx1ZSgpKQotICAg
ICAgICBtX2N1cnJlbnRWYWx1ZSA9IHsgdm0sIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
KmV4ZWMsIGdldFJlc3VsdC52YWx1ZSgpKSB9OwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJyZW50
VmFsdWUgPSB7IH07CisgICAgICAgIG1fY3VycmVudFZhbHVlID0gZ2V0UmVzdWx0LnZhbHVlKCk7
CiAKICAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKIH0KIAorSlNWYWx1ZSBJREJDdXJzb3I6OmtleShF
eGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiB0b0pTKHN0YXRlLCAqc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBtX2N1cnJlbnRLZXkuZ2V0KCkpOworfQorCitKU1ZhbHVlIElEQkN1
cnNvcjo6cHJpbWFyeUtleShFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiB0b0pTKHN0
YXRlLCAqc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2N1cnJlbnRQcmltYXJ5S2V5Lmdl
dCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIElEQkN1cnNvcjo6dmFsdWUoRXhlY1N0YXRlJiBzdGF0
ZSkKK3sKKyAgICByZXR1cm4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShzdGF0ZSwgbV9j
dXJyZW50VmFsdWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmgKaW5kZXggOWJhMjdmMzcwMzYxYjFkZjM1MDJiNGNjNmM1NzJkNWQ3NTAx
NWJiYy4uNzVjMTI3MjM1MGE1OWRkZDZmMDYyODkzYWZiMTQxYjljMzMwZjIyOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTMwLDYgKzMwLDgg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIklEQkN1cnNvckRpcmVjdGlv
bi5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKKyNpbmNsdWRlICJJREJWYWx1ZS5oIgor
I2luY2x1ZGUgIkpTVmFsdWVJbldyYXBwZWRPYmplY3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdHJvbmcuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CkBAIC01Miw5ICs1NCwxMyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTb3VyY2Um
IHNvdXJjZSgpIGNvbnN0OwogICAgIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dDsKLSAgICBKU0M6OkpTVmFsdWUga2V5KCkgY29uc3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIHByaW1h
cnlLZXkoKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgdmFsdWUoKSBjb25zdDsKKworICAgIEpT
Qzo6SlNWYWx1ZSBrZXkoSlNDOjpFeGVjU3RhdGUmKTsKKyAgICBKU0M6OkpTVmFsdWUgcHJpbWFy
eUtleShKU0M6OkV4ZWNTdGF0ZSYpOworICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZShKU0M6OkV4ZWNT
dGF0ZSYpOworICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIGNhY2hlZEtleSgpIHsgcmV0dXJu
IG1fY2FjaGVkS2V5OyB9CisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVkUHJpbWFy
eUtleSgpIHsgcmV0dXJuIG1fY2FjaGVkUHJpbWFyeUtleTsgfQorICAgIEpTVmFsdWVJbldyYXBw
ZWRPYmplY3QmIGNhY2hlZFZhbHVlKCkgeyByZXR1cm4gbV9jYWNoZWRWYWx1ZTsgfQogCiAgICAg
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkdmFuY2UodW5zaWduZWQpOwpAQCAt
OTIsMTQgKzk4LDE1IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZ290VmFsdWUgeyBmYWxzZSB9
OwogCisgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OworICAgIFJlZlB0cjxJREJLZXk+
IG1fY3VycmVudFByaW1hcnlLZXk7CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRLZXlEYXRhOwog
ICAgIElEQktleURhdGEgbV9jdXJyZW50UHJpbWFyeUtleURhdGE7CisgICAgSURCVmFsdWUgbV9j
dXJyZW50VmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2VzIG9mIEpTQzo6
U3Ryb25nIGFyZSBpbmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIHN0b3JhZ2UgbGVha3MKLSAgICAv
LyBkdWUgdG8gcmVmZXJlbmNlIGN5Y2xlczsgd2Ugc2hvdWxkIHVzZSBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0IGluc3RlYWQuCi0gICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRL
ZXk7Ci0gICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRQcmltYXJ5S2V5Owot
ICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJyZW50VmFsdWU7CisgICAgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdCBtX2NhY2hlZEtleTsKKyAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0
IG1fY2FjaGVkUHJpbWFyeUtleTsKKyAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0IG1fY2FjaGVk
VmFsdWU7CiB9OwogCiAKQEAgLTExMywyMSArMTIwLDYgQEAgaW5saW5lIElEQkN1cnNvckRpcmVj
dGlvbiBJREJDdXJzb3I6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5mby5jdXJz
b3JEaXJlY3Rpb24oKTsKIH0KIAotaW5saW5lIEpTQzo6SlNWYWx1ZSBJREJDdXJzb3I6OmtleSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudEtleS5nZXQoKTsKLX0KLQotaW5saW5lIEpT
Qzo6SlNWYWx1ZSBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIHJldHVybiBt
X2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIElEQkN1
cnNvcjo6dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZS5nZXQoKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmlkbAppbmRleCBmY2NiMzBmZWUwZjg5MzBkYWNmZmMyMDU4MjE3YThhYjg1OGVhMjQ0Li4wNmUz
YTUwM2QyN2NlZDk0ZDk0MzUzNmNhNGYzZWNhMTI0MWUxZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTMxLDggKzMxLDggQEAKIF0g
aW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIChJREJPYmplY3RT
dG9yZSBvciBJREJJbmRleCkgc291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkga2V5Owot
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgcHJpbWFyeUtleTsKKyAgICBbQ3VzdG9tR2V0dGVy
XSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGtleTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgYW55IHByaW1hcnlLZXk7CiAKICAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBN
YXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCB1cGRhdGUoYW55IHZhbHVlKTsKICAgICBbTWF5
VGhyb3dFeGNlcHRpb25dIHZvaWQgYWR2YW5jZShbRW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBsb25n
IGNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDViMDQ3ZDUxYjE2YjY1MWEwN2E4NjYyZmJkYTc3
MDM1YzRmY2FkYmYuLmJhNTJjNGMwNTc2NTRmZjkwOGIxZWE4MzdhN2EyZGM4NzQ2YjJmMTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhW
YWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
V2l0aFZhbHVlLmlkbApAQCAtMjgsNSArMjgsNSBAQAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9u
LAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogXSBpbnRlcmZhY2UgSURCQ3Vyc29yV2l0aFZh
bHVlIDogSURCQ3Vyc29yIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZhbHVlOworICAg
IFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgdmFsdWU7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA2NzE3
ODcyN2Y4MGQyNDQxMjQ2OWY4Mzc0NzhiZTE1NDY1NjRmNjY1Li4yMjIzNGQ1ZWQxNjRhMjgyYTc1
MDRmYzMyNWMwM2FlNmJhYTdkYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtODUsNiArODUsNyBAQCBJREJSZXF1ZXN0OjpJREJS
ZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkNsaWVudDo6SURCQ29u
bmVjdGlvbgogICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIoY29ubmVjdGlvblByb3h5KQogICAg
ICwgbV9jb25uZWN0aW9uUHJveHkoY29ubmVjdGlvblByb3h5KQogeworICAgIG1fcmVzdWx0ID0g
T3RoZXJSZXN1bHRUeXBlOjpFbXB0eTsKICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIApAQCAt
OTUsNiArOTYsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdAogICAgICwgbV9zb3VyY2UoJm9i
amVjdFN0b3JlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24uZGF0YWJhc2Uo
KS5jb25uZWN0aW9uUHJveHkoKSkKIHsKKyAgICBtX3Jlc3VsdCA9IE90aGVyUmVzdWx0VHlwZTo6
RW1wdHk7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKQEAgLTExMSw2ICsxMTMsNyBAQCBJ
REJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QkN1cnNvciYgY3Vyc29yLCBJREJUcgogICAgICAgICBbdGhpc10gKGNvbnN0IGF1dG8mIHZhbHVl
KSB7IHRoaXMtPm1fc291cmNlID0gSURCUmVxdWVzdDo6U291cmNlIHsgdmFsdWUgfTsgfQogICAg
ICk7CiAKKyAgICBtX3Jlc3VsdCA9IE90aGVyUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAgY3Vyc29y
LnNldFJlcXVlc3QoKnRoaXMpOwogfQogCkBAIC0xMjEsNiArMTI0LDcgQEAgSURCUmVxdWVzdDo6
SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5k
ZXgsIElEQlRyYW4KICAgICAsIG1fc291cmNlKCZpbmRleCkKICAgICAsIG1fY29ubmVjdGlvblBy
b3h5KHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuY29ubmVjdGlvblByb3h5KCkpCiB7CisgICAgbV9y
ZXN1bHQgPSBPdGhlclJlc3VsdFR5cGU6OkVtcHR5OwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwog
fQogCkBAIC0xMzIsMTIgKzEzNiwxNCBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdAogICAgICwg
bV9yZXF1ZXN0ZWRPYmplY3RTdG9yZVJlY29yZFR5cGUodHlwZSkKICAgICAsIG1fY29ubmVjdGlv
blByb3h5KHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuY29ubmVjdGlvblByb3h5KCkpCiB7CisgICAg
bV9yZXN1bHQgPSBPdGhlclJlc3VsdFR5cGU6OkVtcHR5OwogICAgIHN1c3BlbmRJZk5lZWRlZCgp
OwogfQogCiBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVz
dGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogICAgIDogSURCUmVx
dWVzdChjb250ZXh0LCBpbmRleCwgdHJhbnNhY3Rpb24pCiB7CisgICAgbV9yZXN1bHQgPSBPdGhl
clJlc3VsdFR5cGU6OkVtcHR5OwogICAgIG1fcmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlID0gcmVx
dWVzdGVkUmVjb3JkVHlwZTsKIH0KIApAQCAtMTQ1LDIwICsxNTEsMTggQEAgSURCUmVxdWVzdDo6
fklEQlJlcXVlc3QoKQogewogICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKIAotICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAgICBXVEY6OnN3aXRjaE9u
KG1fcmVzdWx0LnZhbHVlKCksCi0gICAgICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1
cnNvcikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAotICAgICAgICAgICAgW10gKGNvbnN0
IGF1dG8mKSB7IH0KLSAgICAgICAgKTsKLSAgICB9CisgICAgV1RGOjpzd2l0Y2hPbihtX3Jlc3Vs
dCwKKyAgICAgICAgW10gKFJlZlB0cjxJREJDdXJzb3I+JiBjdXJzb3IpIHsgY3Vyc29yLT5jbGVh
clJlcXVlc3QoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IGF1dG8mKSB7IH0KKyAgICApOwogfQog
Ci1FeGNlcHRpb25PcjxPcHRpb25hbDxJREJSZXF1ZXN0OjpSZXN1bHQ+PiBJREJSZXF1ZXN0Ojpy
ZXN1bHQoKSBjb25zdAorRXhjZXB0aW9uT3I8SURCUmVxdWVzdDo6UmVzdWx0PiBJREJSZXF1ZXN0
OjpyZXN1bHQoKSBjb25zdAogewogICAgIGlmICghaXNEb25lKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byByZWFkIHRoZSAncmVzdWx0
JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hl
ZC4iX3MgfTsKIAotICAgIHJldHVybiBPcHRpb25hbDxJREJSZXF1ZXN0OjpSZXN1bHQ+IHsgbV9y
ZXN1bHQgfTsKKyAgICByZXR1cm4gSURCUmVxdWVzdDo6UmVzdWx0IHsgbV9yZXN1bHQgfTsKIH0K
IAogRXhjZXB0aW9uT3I8RE9NRXhjZXB0aW9uKj4gSURCUmVxdWVzdDo6ZXJyb3IoKSBjb25zdApA
QCAtMzU4LDExICszNjIsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURC
S2V5RGF0YSYga2V5RGF0YSkKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBz
Y3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmplY3QKLSAgICAvLyBv
ZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4
aWNhbEdsb2JhbE9iamVjdC4KICAgICBWTSYgdm0gPSBjb250ZXh0LT52bSgpOwogICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4geyB2bSwgdG9KUzxJRExJREJLZXlEYXRhPigqc3RhdGUsICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YSkg
fSB9OworICAgIG1fcmVzdWx0ID0ga2V5RGF0YTsKKyAgICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsK
IH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQktleURhdGE+
JiBrZXlEYXRhcykKQEAgLTM3NywxMSArMzgwLDEwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVz
dWx0KGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYga2V5RGF0YXMpCiAgICAgaWYgKCFzdGF0ZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoaXMgY29udmVyc2lvbiBzaG91bGQg
YmUgZG9uZSBsYXppbHksIHdoZW4gc2NyaXB0IG5lZWRzIHRoZSBKU1ZhbHVlcywgc28gdGhhdCBn
bG9iYWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhlIElEQlJlcXVlc3Qgd3JhcHBlciBjYW4gYmUgdXNl
ZCwgcmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9iYWxPYmplY3QuCiAgICAgVk0mIHZtID0gY29u
dGV4dC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgbV9yZXN1bHQgPSBS
ZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgdm0sIHRvSlM8SURMU2VxdWVuY2U8
SURMSURCS2V5RGF0YT4+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhcykgfSB9OworICAgIG1fcmVzdWx0ID0g
a2V5RGF0YXM7CisgICAgbV9jYWNoZWRSZXN1bHQgPSB7IH07CiB9CiAKIHZvaWQgSURCUmVxdWVz
dDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJREJWYWx1ZT4mIHZhbHVlcykKQEAgLTM5NiwxMSAr
Mzk4LDEwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJREJWYWx1
ZT4mIHZhbHVlcykKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQg
bmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmplY3QKLSAgICAvLyBvZiB0aGUg
SURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4aWNhbEds
b2JhbE9iamVjdC4KICAgICBWTSYgdm0gPSBjb250ZXh0LT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyB2bSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJREJWYWx1ZT4+KCpzdGF0ZSwgKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1
ZXMpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IHZhbHVlczsKKyAgICBtX2NhY2hlZFJlc3VsdCA9IHsg
fTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQpAQCAt
NDExLDcgKzQxMiw4IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJl
cikKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmVzdWx0ID0g
UmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIHRvSlM8
SURMVW5yZXN0cmljdGVkRG91YmxlPihudW1iZXIpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IG51bWJl
cjsKKyAgICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRS
ZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJREJWYWx1ZSYgdmFsdWUpCkBAIC00MjgsMzIg
KzQzMCwyNSBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNv
bnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hl
biBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmplY3QKLSAgICAv
LyBvZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUg
bGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICBWTSYgdm0gPSBjb250ZXh0LT52bSgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4geyB2bSwgdG9KUzxJRExJREJWYWx1ZT4oKnN0YXRlLCAqanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHZhbHVlKSB9
IH07CisgICAgbV9yZXN1bHQgPSB2YWx1ZTsKKyAgICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsKIH0K
IAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCiB7CiAgICAgQVNTRVJU
KCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogCi0gICAgYXV0byogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNVbmRlZmluZWQoKSB9IH07CisgICAgbV9y
ZXN1bHQgPSBPdGhlclJlc3VsdFR5cGU6OlVuZGVmaW5lZDsKKyAgICBtX2NhY2hlZFJlc3VsdCA9
IHsgfTsKIH0KIAogSURCQ3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IoKQogewogICAg
IEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKIAotICAgIGlm
ICghbV9yZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9yZXN1bHQudmFsdWUoKSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Jl
c3VsdCwKICAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JiBjdXJzb3IpIC0+IElE
QkN1cnNvciogeyByZXR1cm4gY3Vyc29yLmdldCgpOyB9LAogICAgICAgICBbXSAoY29uc3QgYXV0
byYpIC0+IElEQkN1cnNvciogeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICk7CkBAIC00NzAsNyAr
NDY1LDggQEAgdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1cnNvcihJREJDdXJzb3ImIGN1
cnNvcikKIAogICAgIG1fcGVuZGluZ0N1cnNvciA9ICZjdXJzb3I7CiAgICAgbV9oYXNQZW5kaW5n
QWN0aXZpdHkgPSB0cnVlOwotICAgIG1fcmVzdWx0ID0gV1RGOjpudWxsb3B0OworICAgIG1fcmVz
dWx0ID0gT3RoZXJSZXN1bHRUeXBlOjpFbXB0eTsKKyAgICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsK
ICAgICBtX3JlYWR5U3RhdGUgPSBSZWFkeVN0YXRlOjpQZW5kaW5nOwogICAgIG1fZG9tRXJyb3Ig
PSBudWxscHRyOwogICAgIG1faWRiRXJyb3IgPSBJREJFcnJvciB7IH07CkBAIC00ODEsMTIgKzQ3
NywxMyBAQCB2b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgQVNTRVJUKG1fcGVuZGluZ0N1cnNvcik7CiAKLSAgICBt
X3Jlc3VsdCA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3Jlc3VsdCA9IE90aGVyUmVzdWx0VHlwZTo6
RW1wdHk7CisgICAgbV9jYWNoZWRSZXN1bHQgPSB7IH07CiAKICAgICBpZiAocmVzdWx0RGF0YS50
eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6SXRlcmF0ZUN1cnNvclN1Y2Nlc3MgfHwgcmVzdWx0RGF0
YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6T3BlbkN1cnNvclN1Y2Nlc3MpIHsKICAgICAgICAg
bV9wZW5kaW5nQ3Vyc29yLT5zZXRHZXRSZXN1bHQoKnRoaXMsIHJlc3VsdERhdGEuZ2V0UmVzdWx0
KCkpOwogICAgICAgICBpZiAocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS5pc0RlZmluZWQoKSkKLSAg
ICAgICAgICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgbV9wZW5kaW5nQ3Vyc29yIH07CisgICAgICAg
ICAgICBtX3Jlc3VsdCA9IG1fcGVuZGluZ0N1cnNvcjsKICAgICB9CiAKICAgICBtX3BlbmRpbmdD
dXJzb3IgPSBudWxscHRyOwpAQCAtNTI5LDcgKzUyNiw4IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0
UmVzdWx0KFJlZjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoJm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAKLSAgICBtX3Jlc3VsdCA9IFJlc3Vs
dCB7IFJlZlB0cjxJREJEYXRhYmFzZT4geyBXVEZNb3ZlKGRhdGFiYXNlKSB9IH07CisgICAgbV9y
ZXN1bHQgPSBSZWZQdHI8SURCRGF0YWJhc2U+IHsgV1RGTW92ZShkYXRhYmFzZSkgfTsKKyAgICBt
X2NhY2hlZFJlc3VsdCA9IHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGEzNDMzYTU5
MjY5OTNmZThmNzkyMGQyNjNlYmFkZGJkYWFmNWY2YjMuLmNmYjMyNWI1Njc2MzI5ZTg3YmM5NTMz
NTg1NzU5MzdlYTlmMjI3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmgKQEAgLTMxLDggKzMxLDExIEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uT3Iu
aCIKICNpbmNsdWRlICJJREJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJJREJFcnJvci5o
IgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKICNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlICJJREJWYWx1ZS5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorI2lu
Y2x1ZGUgIkpTVmFsdWVJbldyYXBwZWRPYmplY3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9TdHJvbmcuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvU2Nv
cGUuaD4KQEAgLTQ1LDExICs0OCw5IEBAIGNsYXNzIEV2ZW50OwogY2xhc3MgSURCQ3Vyc29yOwog
Y2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJJbmRleDsKLWNsYXNzIElEQktleURhdGE7CiBj
bGFzcyBJREJPYmplY3RTdG9yZTsKIGNsYXNzIElEQlJlc3VsdERhdGE7CiBjbGFzcyBJREJUcmFu
c2FjdGlvbjsKLWNsYXNzIElEQlZhbHVlOwogY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAK
IG5hbWVzcGFjZSBJREJDbGllbnQgewpAQCAtNTksNiArNjAsMTEgQEAgY2xhc3MgSURCQ29ubmVj
dGlvblRvU2VydmVyOwogCiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEsIHB1YmxpYyBJREJBY3RpdmVET01PYmplY3QsIHB1YmxpYyBSZWZDb3VudGVk
PElEQlJlcXVlc3Q+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SURCUmVxdWVzdD4gewogcHVibGlj
OgorICAgIGVudW0gY2xhc3MgT3RoZXJSZXN1bHRUeXBlIHsKKyAgICAgICAgRW1wdHksCisgICAg
ICAgIFVuZGVmaW5lZAorICAgIH07CisKICAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJREJUcmFuc2FjdGlv
biYpOwogICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBJREJDdXJzb3ImLCBJREJUcmFuc2FjdGlvbiYpOwogICAgIHN0YXRpYyBSZWY8SURC
UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIElEQlRy
YW5zYWN0aW9uJik7CkBAIC02OSwxMCArNzUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5J
REJSZXF1ZXN0KCk7CiAKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2Ugb2YgSlNDOjpT
dHJvbmcgaXMgaW5jb3JyZWN0IGFuZCBjYW4gbGVhZCB0byBzdG9yYWdlIGxlYWtzCi0gICAgLy8g
ZHVlIHRvIHJlZmVyZW5jZSBjeWNsZXM7IHdlIHNob3VsZCB1c2UgSlNWYWx1ZUluV3JhcHBlZE9i
amVjdCBpbnN0ZWFkLgotICAgIHVzaW5nIFJlc3VsdCA9IFZhcmlhbnQ8UmVmUHRyPElEQkN1cnNv
cj4sIFJlZlB0cjxJREJEYXRhYmFzZT4sIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+OwotICAg
IEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlc3VsdD4+IHJlc3VsdCgpIGNvbnN0OworICAgIHVzaW5n
IFJlc3VsdCA9IFZhcmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4sIFJlZlB0cjxJREJEYXRhYmFzZT4s
IElEQktleURhdGEsIFZlY3RvcjxJREJLZXlEYXRhPiwgSURCVmFsdWUsIFZlY3RvcjxJREJWYWx1
ZT4sIHVpbnQ2NF90LCBPdGhlclJlc3VsdFR5cGU+OworICAgIEV4Y2VwdGlvbk9yPFJlc3VsdD4g
cmVzdWx0KCkgY29uc3Q7CisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVkUmVzdWx0
KCkgeyByZXR1cm4gbV9jYWNoZWRSZXN1bHQ7IH0KIAogICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlh
bnQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPiwgUmVmUHRyPElEQkluZGV4PiwgUmVmUHRyPElEQkN1
cnNvcj4+OwogICAgIGNvbnN0IE9wdGlvbmFsPFNvdXJjZT4mIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CkBAIC04MCw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25P
cjxET01FeGNlcHRpb24qPiBlcnJvcigpIGNvbnN0OwogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0OwotICAgIAorCiAgICAgZW51bSBjbGFzcyBSZWFkeVN0
YXRlIHsgUGVuZGluZywgRG9uZSB9OwogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQogCkBAIC0xNjUsNyArMTcwLDggQEAgcHJpdmF0ZToK
ICAgICBJREJFcnJvciBtX2lkYkVycm9yOwogICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3Jl
c291cmNlSWRlbnRpZmllcjsKIAotICAgIE9wdGlvbmFsPFJlc3VsdD4gbV9yZXN1bHQ7CisgICAg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCBtX2NhY2hlZFJlc3VsdDsKKyAgICBSZXN1bHQgbV9yZXN1
bHQ7CiAgICAgT3B0aW9uYWw8U291cmNlPiBtX3NvdXJjZTsKIAogICAgIGJvb2wgbV9oYXNQZW5k
aW5nQWN0aXZpdHkgeyB0cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsCmluZGV4IDc3NTFlMjA1MjgyYjhlOGE1ODg5NTE1NWY0YjU0ZTBh
YWFiYjA0YWQuLjg1YmJkZTkxNjhiNTBjZWM0MmZkMTRjM2RkNjViOWQ5ZmVmMjI0ODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCkBAIC0z
MSw5ICszMSwxMCBAQAogICAgIEFjdGl2ZURPTU9iamVjdCwKICAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFLAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKKyAgICBKU0N1c3Rv
bU1hcmtGdW5jdGlvbiwKICAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIElE
QlJlcXVlc3QgOiBFdmVudFRhcmdldCB7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIChJREJDdXJz
b3Igb3IgSURCRGF0YWJhc2Ugb3IgYW55KT8gcmVzdWx0OworICAgIFtDdXN0b21HZXR0ZXJdIHJl
YWRvbmx5IGF0dHJpYnV0ZSAoSURCQ3Vyc29yIG9yIElEQkRhdGFiYXNlIG9yIGFueSkgcmVzdWx0
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01FeGNlcHRpb24/IGVycm9yOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0U3RvcmUgb3IgSURCSW5kZXggb3IgSURCQ3Vyc29yKT8g
c291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggMzc4YzA2NTNiODA5MGNmMDFjM2IwZGFkY2EzOTU5MTMwZTdm
ODU4NC4uYjk0OTQxYTZhMGY3ODNiNWQ5MWVjZTc3MDRkZjVjYmRhMTQ4Yzg5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTQ4OCw2ICs0ODgsNyBAQCBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5j
cHAKIGJpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAogYmluZGluZ3Mv
anMvSlNJREJJbmRleEN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCitiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9K
U0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAogYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20u
Y3BwCiBiaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyRW50cnlDdXN0b20uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZGQ5MTc0ZGVlNmZhMjYyMjA0NzljNGEwMzZlMWM0ZWZjMjM4M2I2MS4uZjIwZjVhMDk2NWIx
MDA2NTY0ZTRhOTIwZjU1M2EwYjBlNzU4NzA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA0Myw2ICs0MDQzLDcgQEAKIAkJ
QzlEODUxRjAxQjM5REM3ODAwODUwNjJFIC8qIE1lZGlhU2Vzc2lvbk1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOUQ4NTFFRTFCMzlEQzc4
MDA4NTA2MkUgLyogTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDOUY4N0NGRTFCMjhGNDBFMDA5NzlCODMgLyog
TWVkaWFTZXNzaW9uRXZlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDOUY4N0NGRDFCMjhFNUY2MDA5NzlCODMgLyogTWVkaWFTZXNzaW9uRXZlbnRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Ez
QkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMg
LyogU2Nyb2xsQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDQTZDMTUzMDIyMEI5OENDMDA1NUNCRkMgLyogSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMxQUUzQjgxRkI4MEVBRTAwRjVFRkIyIC8qIEpTVmFsdWVJbldyYXBwZWRPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDQUU5RjkxMDE0
NjQ0MUYwMDBDMjQ1QjAgLyogQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0FFOUY5MEUxNDY0NDFGMDAwQzI0NUIwIC8q
IENTU0FzcGVjdFJhdGlvVmFsdWUuaCAqLzsgfTsKIAkJQ0IzOEZENTIxQ0NGOTM5NDAwNTkyQTNG
IC8qIEpTUGVyZm9ybWFuY2VFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0IzOEZENEUxQ0NGOTM3RTAwNTkyQTNGIC8qIEpTUGVyZm9ybWFuY2VF
bnRyeS5oICovOyB9OwogCQlDQjM4RkQ1QjFDRDIzMjVCMDA1OTJBM0YgLyogSlNQZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDQjM4RkQ1OTFDRDIzMTQ1MDA1OTJBM0YgLyogSlNQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmggKi87IH07CkBAIC0xMzUyOCw2ICsxMzUyOSw3IEBACiAJCUNBMTYzNURDMjA3MkU3
NjkwMEU3RDJDRSAvKiBSZWZlcnJlclBvbGljeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWZlcnJlclBvbGljeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBT
Y3JvbGxBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxB
bmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTZDMTUyRjIyMEI0QTU1
MDA1NUNCRkMgLyogSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSURCUmVxdWVzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNBRTlGOTBEMTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0FzcGVjdFJh
dGlvVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQUU5RjkwRTE0NjQ0
MUYwMDBDMjQ1QjAgLyogQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDU1NBc3BlY3RSYXRpb1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNCMzhGRDRBMUNDQ0YyREQwMDU5MkEzRiAvKiBQZXJmb3JtYW5jZUVudHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcmZvcm1hbmNlRW50cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA5NTMsNiArMjA5NTUsNyBAQAog
CQkJCTgzMUM0NkMzMUY5RUU1RTAwMEVCRDQ1MCAvKiBKU0V4dGVuZGFibGVNZXNzYWdlRXZlbnRD
dXN0b20uY3BwICovLAogCQkJCTQxMzFGM0IxMUY5NTUyODEwMDU5OTk1QSAvKiBKU0ZldGNoRXZl
bnRDdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3Rv
cnlDdXN0b20uY3BwICovLAorCQkJCUNBNkMxNTJGMjIwQjRBNTUwMDU1Q0JGQyAvKiBKU0lEQlJl
cXVlc3RDdXN0b20uY3BwICovLAogCQkJCTQxMEI3RTcxMTA0NUZBQjAwMEQ4MjI0RiAvKiBKU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQTE2NzdFMjQyMTQ0NTMyODAwQTA4QzM0IC8q
IEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlBMTBENkU5NDIx
NDRDOTk4MDBGREQxNEQgLyogSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwICovLApAQCAtMzA0
NjYsNiArMzA0NjksNyBAQAogCQkJCTdDNzNGQjBEMTkxRUY1QTgwMDdERTA2MSAvKiBKU1VzZXJN
ZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MkI0MDJDMjE3
NjkwMjAwMDBBRDQzRSAvKiBKU1VzZXJWZXJpZmljYXRpb25SZXF1aXJlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0E2QzE1MzAyMjBCOThDQzAwNTVDQkZDIC8qIEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOEVGMDRCMTcxQzkwMTQwMDlC
NDhDMyAvKiBKU1ZpZGVvVHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOEVGMDREMTcxQzkw
MTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkU3
OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNWaXNpYmlsaXR5U3RhdGUuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3Bw
CmluZGV4IGJhZmUyZmUwYmY0MjdhZjljMTRhMjE3OTQ1YjZiMjNiZDA2YzliOTMuLjZiOTJmYTli
YmIyZmU0M2VjMjVkNGRkNWIwYTg1MGQ4MzBiNDc4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29y
V2l0aFZhbHVlLmgiCiAKQEAgLTM1LDExICszNiwyNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjprZXkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAoreworICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZh
bHVlKHN0YXRlLCAqdGhpcywgd3JhcHBlZCgpLmNhY2hlZEtleSgpLCBbJl0geworICAgICAgICBy
ZXR1cm4gd3JhcHBlZCgpLmtleShzdGF0ZSk7CisgICAgfSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkuY2Fj
aGVkUHJpbWFyeUtleSgpLCBbJl0geworICAgICAgICByZXR1cm4gd3JhcHBlZCgpLnByaW1hcnlL
ZXkoc3RhdGUpOworICAgIH0pOworfQorCiB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3
cmFwcGVkKCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQogICAg
ICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVxdWVzdCk7CisgICAgY3Vyc29yLmNhY2hlZEtl
eSgpLnZpc2l0KHZpc2l0b3IpOworICAgIGN1cnNvci5jYWNoZWRQcmltYXJ5S2V5KCkudmlzaXQo
dmlzaXRvcik7CiB9CiAKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29y
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRo
VmFsdWVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwCmluZGV4IDhjMzIzYjYwMTBmNTZlMjQwMDdlZGRmN2VlMjNkMDAy
NWM0NmM1NGIuLmU5YmY0YWVkNzU1MmI2Nzg3ZGFjNmY4OTY3ZDVmYTNiYWE3N2UyMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAKQEAgLTI4LDE1ICsyOCwyNCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcElubGlu
ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorSlND
OjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2YWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlz
LCB3cmFwcGVkKCkuY2FjaGVkVmFsdWUoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQo
KS52YWx1ZShzdGF0ZSk7CisgICAgfSk7Cit9CisKIHZvaWQgSlNJREJDdXJzb3JXaXRoVmFsdWU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
SURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbih2aXNpdG9yKTsKKyAgICB3cmFwcGVk
KCkuY2FjaGVkVmFsdWUoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCA2ZDU4ODFlYTBlNjY0Y2JiY2UyYTg1Zjhk
OWRlMDkzZmI0M2NjYWMwLi5hZGUwZTEzMDY2YzgxNjE2ZjlkYTVlNjBmY2M0YTc5ZTU0OTk4YTBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtMTM3LDEyICsxMzcsMTIgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgeworICAg
ICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVz
dWx0VmFsdWUpKSB7CiAgICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVl
c3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3VsdCB0eXBlLiIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBkYXRhYmFzZVJlc3Vs
dCA9IFdURjo6Z2V0PFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gV1RGOjpnZXQ8UmVmUHRyPElEQkRhdGFiYXNl
Pj4ocmVzdWx0VmFsdWUpOwogICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1
dGUoKmRhdGFiYXNlUmVzdWx0KTsKICAgICAgICAgZGF0YWJhc2VSZXN1bHQtPmNsb3NlKCk7CiAg
ICAgfQpAQCAtMzYzLDcgKzM2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRoaXMgPT0g
Jm90aGVyOwogICAgIH0KIAotICAgIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEV2ZW50JiBldmVudCkgb3ZlcnJpZGUKKyAgICB2b2lkIGhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV2ZW50JiBldmVudCkgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkg
ewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVk
IGV2ZW50IHR5cGUuIik7CkBAIC0zNzksMTIgKzM3OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAg
IGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFs
dWUpKSB7CiAgICAgICAgICAgICBlbmQoZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJzb3IgPSBXVEY6OmdldDxSZWZQdHI8SURCQ3Vyc29y
Pj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CisgICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8
UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlKTsKIAogICAgICAgICBpZiAobV9za2lwQ291
bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3ItPmFkdmFuY2UobV9za2lwQ291bnQpLmhhc0V4
Y2VwdGlvbigpKQpAQCAtNDA0LDEwICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LmV4ZWNTdGF0
ZSgpOwogICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IERhdGFFbnRyeTo6Y3JlYXRlKCkKLSAgICAg
ICAgICAgIC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+a2V5KCks
IFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdChjdXJzb3ItPnByaW1hcnlLZXkoKSwgU3RyaW5nKCksIHRydWUpKQot
ICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3It
PnZhbHVlKCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3Rl
ZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+a2V5KCpzdGF0ZSksIFN0cmluZygpLCB0cnVlKSkK
KyAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChj
dXJzb3ItPnByaW1hcnlLZXkoKnN0YXRlKSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAg
LnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3ItPnZhbHVlKCpzdGF0
ZSksIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1f
cmVzdWx0LT5hZGRJdGVtKFdURk1vdmUoZGF0YUVudHJ5KSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361403</attachid>
            <date>2019-02-07 09:01:29 -0800</date>
            <delta_ts>2019-02-07 18:31:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189435-20190207090128.patch</filename>
            <type>text/plain</type>
            <size>35656</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjU5OTU3OTlmY2ZmMjc2
ODJlODRkMTQzNDMzYWZmMzVkNGJlODBjYy4uZTIyYzE0OGUxODBlNmQ2NjY5Y2FiMWRkZDU5OWQ1
MWE5Nzg4ZjY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE5LTAyLTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiB0ZXN0cyBs
ZWFrIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg5NDM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDI0MDA0Mz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdXNlIG9mIEpT
Qzo6U3Ryb25nIGluIEluZGV4ZWREYXRhYmFzZS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFyeUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2Fj
aGVkS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2FjaGVkUHJpbWFyeUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNhY2hlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6a2V5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvcjo6cHJpbWFyeUtleSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OnJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9T
dHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0
VG9VbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OmNhY2hlZFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5pZGw6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yOjprZXkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3I6OnByaW1hcnlLZXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZpc2l0QWRkaXRpb25hbENoaWxk
cmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSURCUmVxdWVzdDo6cmVzdWx0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorCiAy
MDE5LTAyLTAxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04gKHIyNDA2OTgpOiBmYXN0L3Njcm9sbGluZy9zdGlja3ktdG8tZml4ZWQu
aHRtbCBjYW4gY2F1c2UgYSBjcmFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggOWI1OWNmZmNlNTQ2NjY5ZThmY2UzZjQ2NDJmZTFhMWJi
NzQwYzkzYS4uNTU0OTA3NzVhNTVhOTQ1ZTY1OWZlMTFhMDA2ZjRhMmNiZWI4MGNhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xMjgs
NyArMTI4LDggQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IERhdGFFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJD
dXJzb3InOiBUaGUgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBvZiB0aGlzIGN1cnNvciB1c2VzIGlu
LWxpbmUga2V5cyBhbmQgZXZhbHVhdGluZyB0aGUga2V5IHBhdGggb2YgdGhlIHZhbHVlIHBhcmFt
ZXRlciByZXN1bHRzIGluIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIGN1cnNvcidzIGVmZmVj
dGl2ZSBrZXkuIl9zIH07CiAgICAgfQogCi0gICAgYXV0byBwdXRSZXN1bHQgPSBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShzdGF0ZSwgdmFsdWUsIG1fY3VycmVudFBy
aW1hcnlLZXkuZ2V0KCkpOworICAgIEpTVmFsdWUga2V5ID0gbV9jYWNoZWRQcmltYXJ5S2V5ID8g
SlNWYWx1ZShtX2NhY2hlZFByaW1hcnlLZXkpIDogcHJpbWFyeUtleShzdGF0ZSk7CisgICAgYXV0
byBwdXRSZXN1bHQgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShz
dGF0ZSwgdmFsdWUsIGtleSk7CiAgICAgaWYgKHB1dFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIHB1dFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKQEAgLTI5OSw3ICsz
MDAsOCBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6
ZGVsZXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgIGlmICghaXNLZXlDdXJzb3JXaXRo
VmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMg
YSBrZXkgY3Vyc29yLiJfcyB9OwogCi0gICAgYXV0byByZXN1bHQgPSBlZmZlY3RpdmVPYmplY3RT
dG9yZSgpLmRlbGV0ZUZ1bmN0aW9uKHN0YXRlLCBtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKTsK
KyAgICBKU1ZhbHVlIGtleSA9IG1fY2FjaGVkUHJpbWFyeUtleSA/IEpTVmFsdWUobV9jYWNoZWRQ
cmltYXJ5S2V5KSA6IHByaW1hcnlLZXkoc3RhdGUpOworICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0
aXZlT2JqZWN0U3RvcmUoKS5kZWxldGVGdW5jdGlvbihzdGF0ZSwga2V5KTsKICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKIApAQCAtMzA5LDQ3ICszMTEsNTIgQEAgRXhjZXB0aW9uT3I8UmVmPFdlYkNvcmU6OklE
QlJlcXVlc3Q+PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAg
ICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKIH0KIAotdm9pZCBJREJDdXJzb3I6OnNldEdldFJl
c3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJHZXRSZXN1bHQmIGdldFJlc3VsdCkK
K3ZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYsIGNvbnN0IElEQkdldFJl
c3VsdCYgZ2V0UmVzdWx0KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OnNldEdl
dFJlc3VsdCAtIGN1cnJlbnQga2V5ICVzIiwgZ2V0UmVzdWx0LmtleURhdGEoKS5sb2dnaW5nU3Ry
aW5nKCkuc3Vic3RyaW5nKDAsIDEwMCkudXRmOCgpLmRhdGEoKSk7CiAgICAgQVNTRVJUKCZlZmZl
Y3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogCi0gICAgYXV0byogY29udGV4dCA9IHJlcXVlc3Qu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byogZXhlYyA9IGNvbnRleHQtPmV4ZWNTdGF0ZSgpOwotICAgIGlmICgh
ZXhlYykKLSAgICAgICAgcmV0dXJuOworICAgIG1fY2FjaGVkS2V5ID0geyB9OworICAgIG1fY2Fj
aGVkUHJpbWFyeUtleSA9IHsgfTsKKyAgICBtX2NhY2hlZFZhbHVlID0geyB9OwogCiAgICAgaWYg
KCFnZXRSZXN1bHQuaXNEZWZpbmVkKCkpIHsKLSAgICAgICAgbV9jdXJyZW50S2V5ID0geyB9Owog
ICAgICAgICBtX2N1cnJlbnRLZXlEYXRhID0geyB9OwotICAgICAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5ID0geyB9OworICAgICAgICBtX2N1cnJlbnRLZXkgPSBudWxscHRyOwogICAgICAgICBtX2N1
cnJlbnRQcmltYXJ5S2V5RGF0YSA9IHsgfTsKKyAgICAgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9
IG51bGxwdHI7CiAgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogCiAgICAgICAgIG1fZ290
VmFsdWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIHZtID0g
Y29udGV4dC0+dm0oKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJl
IGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xv
YmFsIG9iamVjdAotICAgIC8vIG9mIHRoZSBJREJDdXJzb3Igd3JhcHBlciBjYW4gYmUgdXNlZCwg
cmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9iYWxPYmplY3QuCi0gICAgbV9jdXJyZW50S2V5ID0g
eyB2bSwgdG9KUygqZXhlYywgKmV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0UmVzdWx0
LmtleURhdGEoKS5tYXliZUNyZWF0ZUlEQktleSgpLmdldCgpKSB9OwogICAgIG1fY3VycmVudEtl
eURhdGEgPSBnZXRSZXN1bHQua2V5RGF0YSgpOwotICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSB7
IHZtLCB0b0pTKCpleGVjLCAqZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnZXRSZXN1bHQu
cHJpbWFyeUtleURhdGEoKS5tYXliZUNyZWF0ZUlEQktleSgpLmdldCgpKSB9OworICAgIG1fY3Vy
cmVudEtleSA9IG1fY3VycmVudEtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKICAgICBtX2N1
cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpOworICAgIG1f
Y3VycmVudFByaW1hcnlLZXkgPSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YS5tYXliZUNyZWF0ZUlE
QktleSgpOwogCiAgICAgaWYgKGlzS2V5Q3Vyc29yV2l0aFZhbHVlKCkpCi0gICAgICAgIG1fY3Vy
cmVudFZhbHVlID0geyB2bSwgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSgqZXhlYywgZ2V0
UmVzdWx0LnZhbHVlKCkpIH07Ci0gICAgZWxzZQotICAgICAgICBtX2N1cnJlbnRWYWx1ZSA9IHsg
fTsKKyAgICAgICAgbV9jdXJyZW50VmFsdWUgPSBnZXRSZXN1bHQudmFsdWUoKTsKIAogICAgIG1f
Z290VmFsdWUgPSB0cnVlOwogfQogCitKU1ZhbHVlIElEQkN1cnNvcjo6a2V5KEV4ZWNTdGF0ZSYg
c3RhdGUpCit7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsICpzdGF0ZS5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG1fY3VycmVudEtleS5nZXQoKSk7Cit9CisKK0pTVmFsdWUgSURCQ3Vyc29yOjpwcmlt
YXJ5S2V5KEV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsICpzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpOworfQor
CitKU0M6OkpTVmFsdWUgSURCQ3Vyc29yOjp2YWx1ZShFeGVjU3RhdGUmIHN0YXRlKQoreworICAg
IHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKHN0YXRlLCBtX2N1cnJlbnRWYWx1
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaAppbmRleCA5YmEyN2YzNzAzNjFiMWRmMzUwMmI0Y2M2YzU3MmQ1ZDc1MDE1YmJjLi43NWMx
MjcyMzUwYTU5ZGRkNmYwNjI4OTNhZmIxNDFiOWMzMzBmMjI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yRGlyZWN0aW9uLmgiCiAjaW5j
bHVkZSAiSURCQ3Vyc29ySW5mby5oIgorI2luY2x1ZGUgIklEQlZhbHVlLmgiCisjaW5jbHVkZSAi
SlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9u
Zy5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTUyLDkgKzU0LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFNvdXJjZSYgc291cmNlKCkg
Y29uc3Q7CiAgICAgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwotICAgIEpT
Qzo6SlNWYWx1ZSBrZXkoKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgcHJpbWFyeUtleSgpIGNv
bnN0OwotICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSgpIGNvbnN0OworCisgICAgSlNDOjpKU1ZhbHVl
IGtleShKU0M6OkV4ZWNTdGF0ZSYpOworICAgIEpTQzo6SlNWYWx1ZSBwcmltYXJ5S2V5KEpTQzo6
RXhlY1N0YXRlJik7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlKEpTQzo6RXhlY1N0YXRlJik7Cisg
ICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVkS2V5KCkgeyByZXR1cm4gbV9jYWNoZWRL
ZXk7IH0KKyAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBjYWNoZWRQcmltYXJ5S2V5KCkgeyBy
ZXR1cm4gbV9jYWNoZWRQcmltYXJ5S2V5OyB9CisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYg
Y2FjaGVkVmFsdWUoKSB7IHJldHVybiBtX2NhY2hlZFZhbHVlOyB9CiAKICAgICBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gYWR2YW5jZSh1bnNpZ25lZCk7CkBAIC05MiwxNCArOTgs
MTUgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9nb3RWYWx1ZSB7IGZhbHNlIH07CiAKKyAgICBS
ZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50
UHJpbWFyeUtleTsKICAgICBJREJLZXlEYXRhIG1fY3VycmVudEtleURhdGE7CiAgICAgSURCS2V5
RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKKyAgICBJREJWYWx1ZSBtX2N1cnJlbnRWYWx1
ZTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHVzZXMgb2YgSlNDOjpTdHJvbmcgYXJl
IGluY29ycmVjdCBhbmQgY2FuIGxlYWQgdG8gc3RvcmFnZSBsZWFrcwotICAgIC8vIGR1ZSB0byBy
ZWZlcmVuY2UgY3ljbGVzOyB3ZSBzaG91bGQgdXNlIEpTVmFsdWVJbldyYXBwZWRPYmplY3QgaW5z
dGVhZC4KLSAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fY3VycmVudEtleTsKLSAgICBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fY3VycmVudFByaW1hcnlLZXk7Ci0gICAgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRWYWx1ZTsKKyAgICBKU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0IG1fY2FjaGVkS2V5OworICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QgbV9jYWNoZWRQ
cmltYXJ5S2V5OworICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QgbV9jYWNoZWRWYWx1ZTsKIH07
CiAKIApAQCAtMTEzLDIxICsxMjAsNiBAQCBpbmxpbmUgSURCQ3Vyc29yRGlyZWN0aW9uIElEQkN1
cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9pbmZvLmN1cnNvckRpcmVjdGlv
bigpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIElEQkN1cnNvcjo6a2V5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9jdXJyZW50S2V5LmdldCgpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVl
IElEQkN1cnNvcjo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFBy
aW1hcnlLZXkuZ2V0KCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgSURCQ3Vyc29yOjp2YWx1
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFZhbHVlLmdldCgpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4
IGZjY2IzMGZlZTBmODkzMGRhY2ZmYzIwNTgyMTdhOGFiODU4ZWEyNDQuLjA2ZTNhNTAzZDI3Y2Vk
OTRkOTQzNTM2Y2E0ZjNlY2ExMjQxZTFkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMzEsOCArMzEsOCBAQAogXSBpbnRlcmZhY2Ug
SURCQ3Vyc29yIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgKElEQk9iamVjdFN0b3JlIG9yIElE
QkluZGV4KSBzb3VyY2U7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkN1cnNvckRpcmVjdGlv
biBkaXJlY3Rpb247Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSBrZXk7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIGFueSBwcmltYXJ5S2V5OworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBhbnkga2V5OworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBhbnkgcHJpbWFyeUtleTsKIAogICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhj
ZXB0aW9uXSBJREJSZXF1ZXN0IHVwZGF0ZShhbnkgdmFsdWUpOwogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gdm9pZCBhZHZhbmNlKFtFbmZvcmNlUmFuZ2VdIHVuc2lnbmVkIGxvbmcgY291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0
aFZhbHVlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldp
dGhWYWx1ZS5pZGwKaW5kZXggNWIwNDdkNTFiMTZiNjUxYTA3YTg2NjJmYmRhNzcwMzVjNGZjYWRi
Zi4uYmE1MmM0YzA1NzY1NGZmOTA4YjFlYTgzN2E3YTJkYzg3NDZiMmYxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUu
aWRsCkBAIC0yOCw1ICsyOCw1IEBACiAgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24sCiAgICAgSlND
dXN0b21NYXJrRnVuY3Rpb24sCiBdIGludGVyZmFjZSBJREJDdXJzb3JXaXRoVmFsdWUgOiBJREJD
dXJzb3IgewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgdmFsdWU7CisgICAgW0N1c3RvbUdl
dHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2YWx1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDY3MTc4NzI3ZjgwZDI0
NDEyNDY5ZjgzNzQ3OGJlMTU0NjU2NGY2NjUuLjIyMjM0ZDVlZDE2NGEyODJhNzUwNGZjMzI1YzAz
YWU2YmFhN2RhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwCkBAIC04NSw2ICs4NSw3IEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uCiAg
ICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcihjb25uZWN0aW9uUHJveHkpCiAgICAgLCBtX2Nvbm5l
Y3Rpb25Qcm94eShjb25uZWN0aW9uUHJveHkpCiB7CisgICAgbV9yZXN1bHQgPSBPdGhlclJlc3Vs
dFR5cGU6OkVtcHR5OwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCkBAIC05NSw2ICs5Niw3
IEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0CiAgICAgLCBtX3NvdXJjZSgmb2JqZWN0U3RvcmUp
CiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNvbm5lY3Rp
b25Qcm94eSgpKQogeworICAgIG1fcmVzdWx0ID0gT3RoZXJSZXN1bHRUeXBlOjpFbXB0eTsKICAg
ICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIApAQCAtMTExLDYgKzExMyw3IEBAIElEQlJlcXVlc3Q6
OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ3Vyc29yJiBj
dXJzb3IsIElEQlRyCiAgICAgICAgIFt0aGlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsgdGhpcy0+
bV9zb3VyY2UgPSBJREJSZXF1ZXN0OjpTb3VyY2UgeyB2YWx1ZSB9OyB9CiAgICAgKTsKIAorICAg
IG1fcmVzdWx0ID0gT3RoZXJSZXN1bHRUeXBlOjpFbXB0eTsKICAgICBjdXJzb3Iuc2V0UmVxdWVz
dCgqdGhpcyk7CiB9CiAKQEAgLTEyMSw2ICsxMjQsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSURCVHJh
bgogICAgICwgbV9zb3VyY2UoJmluZGV4KQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKKyAgICBtX3Jlc3VsdCA9IE90
aGVyUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKQEAgLTEz
MiwxMiArMTM2LDE0IEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0CiAgICAgLCBtX3JlcXVlc3Rl
ZE9iamVjdFN0b3JlUmVjb3JkVHlwZSh0eXBlKQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5jb25uZWN0aW9uUHJveHkoKSkKIHsKKyAgICBtX3Jlc3VsdCA9
IE90aGVyUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKIElE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURC
SW5kZXgmIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNvcmRU
eXBlLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiAgICAgOiBJREJSZXF1ZXN0KGNvbnRl
eHQsIGluZGV4LCB0cmFuc2FjdGlvbikKIHsKKyAgICBtX3Jlc3VsdCA9IE90aGVyUmVzdWx0VHlw
ZTo6RW1wdHk7CiAgICAgbV9yZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUgPSByZXF1ZXN0ZWRSZWNv
cmRUeXBlOwogfQogCkBAIC0xNDUsMjAgKzE1MSwxOCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCgpCiB7CiAgICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkp
OwogCi0gICAgaWYgKG1fcmVzdWx0KSB7Ci0gICAgICAgIFdURjo6c3dpdGNoT24obV9yZXN1bHQu
dmFsdWUoKSwKLSAgICAgICAgICAgIFtdIChSZWZQdHI8SURCQ3Vyc29yPiYgY3Vyc29yKSB7IGN1
cnNvci0+Y2xlYXJSZXF1ZXN0KCk7IH0sCi0gICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsg
fQotICAgICAgICApOwotICAgIH0KKyAgICBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LAorICAgICAg
ICBbXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNvcikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgp
OyB9LAorICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsgfQorICAgICk7CiB9CiAKLUV4Y2VwdGlv
bk9yPE9wdGlvbmFsPElEQlJlcXVlc3Q6OlJlc3VsdD4+IElEQlJlcXVlc3Q6OnJlc3VsdCgpIGNv
bnN0CitFeGNlcHRpb25PcjxJREJSZXF1ZXN0OjpSZXN1bHQ+IElEQlJlcXVlc3Q6OnJlc3VsdCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFpc0RvbmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5
IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiJfcyB9Owog
Ci0gICAgcmV0dXJuIE9wdGlvbmFsPElEQlJlcXVlc3Q6OlJlc3VsdD4geyBtX3Jlc3VsdCB9Owor
ICAgIHJldHVybiBJREJSZXF1ZXN0OjpSZXN1bHQgeyBtX3Jlc3VsdCB9OwogfQogCiBFeGNlcHRp
b25PcjxET01FeGNlcHRpb24qPiBJREJSZXF1ZXN0OjplcnJvcigpIGNvbnN0CkBAIC0zNTgsMTEg
KzM2MiwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhKQogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1F
OiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVk
cyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAotICAgIC8vIG9mIHRoZSBJREJS
ZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFs
T2JqZWN0LgogICAgIFZNJiB2bSA9IGNvbnRleHQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiB7IHZtLCB0b0pTPElETElEQktleURhdGE+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhKSB9IH07CisgICAg
bV9yZXN1bHQgPSBrZXlEYXRhOworICAgIG1fY2FjaGVkUmVzdWx0ID0geyB9OwogfQogCiB2b2lk
IElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGtleURhdGFz
KQpAQCAtMzc3LDExICszODAsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3Qg
VmVjdG9yPElEQktleURhdGE+JiBrZXlEYXRhcykKICAgICBpZiAoIXN0YXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxh
emlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmpl
Y3QKLSAgICAvLyBvZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIg
dGhhbiB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICBWTSYgdm0gPSBjb250ZXh0LT52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyB2bSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJREJLZXlE
YXRhPj4oKnN0YXRlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIGtleURhdGFzKSB9IH07CisgICAgbV9yZXN1bHQgPSBrZXlEYXRhczsK
KyAgICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1
bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgdmFsdWVzKQpAQCAtMzk2LDExICszOTgsMTAgQEAg
dm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgdmFsdWVz
KQogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBUaGlz
IGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUg
SlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAotICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0
IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0
LgogICAgIFZNJiB2bSA9IGNvbnRleHQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IHZt
LCB0b0pTPElETFNlcXVlbmNlPElETElEQlZhbHVlPj4oKnN0YXRlLCAqanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHZhbHVlcykgfSB9Owor
ICAgIG1fcmVzdWx0ID0gdmFsdWVzOworICAgIG1fY2FjaGVkUmVzdWx0ID0geyB9OwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCkBAIC00MTEsNyArNDEy
LDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+KG51bWJlcikgfSB9OworICAgIG1fcmVzdWx0ID0gbnVtYmVyOworICAgIG1f
Y2FjaGVkUmVzdWx0ID0geyB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3Ry
dWN0dXJlZENsb25lKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKQEAgLTQyOCwzMiArNDMwLDI1IEBA
IHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFs
dWUmIHZhbHVlKQogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBu
ZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAotICAgIC8vIG9mIHRoZSBJ
REJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xv
YmFsT2JqZWN0LgogICAgIFZNJiB2bSA9IGNvbnRleHQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPiB7IHZtLCB0b0pTPElETElEQlZhbHVlPigqc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgdmFsdWUpIH0gfTsKKyAgICBt
X3Jlc3VsdCA9IHZhbHVlOworICAgIG1fY2FjaGVkUmVzdWx0ID0geyB9OwogfQogCiB2b2lkIElE
QlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKIHsKICAgICBBU1NFUlQoJm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAKLSAgICBhdXRvKiBjb250ZXh0ID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsg
Y29udGV4dC0+dm0oKSwgSlNDOjpqc1VuZGVmaW5lZCgpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IE90
aGVyUmVzdWx0VHlwZTo6VW5kZWZpbmVkOworICAgIG1fY2FjaGVkUmVzdWx0ID0geyB9OwogfQog
CiBJREJDdXJzb3IqIElEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcigpCiB7CiAgICAgQVNTRVJUKCZv
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogCi0gICAgaWYgKCFtX3Jlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3Jlc3VsdC52YWx1ZSgpLAorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LAogICAg
ICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkN1cnNvcj4mIGN1cnNvcikgLT4gSURCQ3Vyc29yKiB7
IHJldHVybiBjdXJzb3IuZ2V0KCk7IH0sCiAgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gSURC
Q3Vyc29yKiB7IHJldHVybiBudWxscHRyOyB9CiAgICAgKTsKQEAgLTQ3MCw3ICs0NjUsOCBAQCB2
b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29yKQogCiAg
ICAgbV9wZW5kaW5nQ3Vyc29yID0gJmN1cnNvcjsKICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9
IHRydWU7Ci0gICAgbV9yZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9yZXN1bHQgPSBPdGhl
clJlc3VsdFR5cGU6OkVtcHR5OworICAgIG1fY2FjaGVkUmVzdWx0ID0geyB9OwogICAgIG1fcmVh
ZHlTdGF0ZSA9IFJlYWR5U3RhdGU6OlBlbmRpbmc7CiAgICAgbV9kb21FcnJvciA9IG51bGxwdHI7
CiAgICAgbV9pZGJFcnJvciA9IElEQkVycm9yIHsgfTsKQEAgLTQ4MSwxMiArNDc3LDEzIEBAIHZv
aWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQogICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKICAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKIAotICAgIG1fcmVzdWx0ID0g
V1RGOjpudWxsb3B0OworICAgIG1fcmVzdWx0ID0gT3RoZXJSZXN1bHRUeXBlOjpFbXB0eTsKKyAg
ICBtX2NhY2hlZFJlc3VsdCA9IHsgfTsKIAogICAgIGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJ
REJSZXN1bHRUeXBlOjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9
PSBJREJSZXN1bHRUeXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewogICAgICAgICBtX3BlbmRpbmdD
dXJzb3ItPnNldEdldFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRSZXN1bHQoKSk7CiAgICAg
ICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgpKQotICAgICAgICAgICAg
bV9yZXN1bHQgPSBSZXN1bHQgeyBtX3BlbmRpbmdDdXJzb3IgfTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gbV9wZW5kaW5nQ3Vyc29yOwogICAgIH0KIAogICAgIG1fcGVuZGluZ0N1cnNvciA9IG51
bGxwdHI7CkBAIC01MjksNyArNTI2LDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoUmVm
PElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogewogICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkg
PT0gJlRocmVhZDo6Y3VycmVudCgpKTsKIAotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgUmVmUHRy
PElEQkRhdGFiYXNlPiB7IFdURk1vdmUoZGF0YWJhc2UpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IFJl
ZlB0cjxJREJEYXRhYmFzZT4geyBXVEZNb3ZlKGRhdGFiYXNlKSB9OworICAgIG1fY2FjaGVkUmVz
dWx0ID0geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKaW5kZXggYTM0MzNhNTkyNjk5M2ZlOGY3
OTIwZDI2M2ViYWRkYmRhYWY1ZjZiMy4uY2ZiMzI1YjU2NzYzMjllODdiYzk1MzM1ODU3NTkzN2Vh
OWYyMjdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaApAQCAtMzEsOCArMzEsMTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1
ZGUgIklEQkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIklEQkVycm9yLmgiCisjaW5jbHVk
ZSAiSURCS2V5RGF0YS5oIgogI2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgIklEQlZhbHVlLmgiCiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCisjaW5jbHVkZSAiSlNW
YWx1ZUluV3JhcHBlZE9iamVjdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZy5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgpAQCAt
NDUsMTEgKzQ4LDkgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBJREJDdXJzb3I7CiBjbGFzcyBJREJE
YXRhYmFzZTsKIGNsYXNzIElEQkluZGV4OwotY2xhc3MgSURCS2V5RGF0YTsKIGNsYXNzIElEQk9i
amVjdFN0b3JlOwogY2xhc3MgSURCUmVzdWx0RGF0YTsKIGNsYXNzIElEQlRyYW5zYWN0aW9uOwot
Y2xhc3MgSURCVmFsdWU7CiBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAogbmFtZXNwYWNl
IElEQkNsaWVudCB7CkBAIC01OSw2ICs2MCwxMSBAQCBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXI7CiAKIGNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0
YSwgcHVibGljIElEQkFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVz
dD4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJREJSZXF1ZXN0PiB7CiBwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBPdGhlclJlc3VsdFR5cGUgeworICAgICAgICBFbXB0eSwKKyAgICAgICAgVW5kZWZp
bmVkCisgICAgfTsKKwogICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0aW9uJik7CiAgICAg
c3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElE
QkN1cnNvciYsIElEQlRyYW5zYWN0aW9uJik7CiAgICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSURCVHJhbnNhY3Rpb24m
KTsKQEAgLTY5LDEwICs3NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfklEQlJlcXVlc3Qo
KTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIHVzZSBvZiBKU0M6OlN0cm9uZyBpcyBp
bmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIHN0b3JhZ2UgbGVha3MKLSAgICAvLyBkdWUgdG8gcmVm
ZXJlbmNlIGN5Y2xlczsgd2Ugc2hvdWxkIHVzZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0IGluc3Rl
YWQuCi0gICAgdXNpbmcgUmVzdWx0ID0gVmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRy
PElEQkRhdGFiYXNlPiwgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj47Ci0gICAgRXhjZXB0aW9u
T3I8T3B0aW9uYWw8UmVzdWx0Pj4gcmVzdWx0KCkgY29uc3Q7CisgICAgdXNpbmcgUmVzdWx0ID0g
VmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSURCS2V5RGF0
YSwgVmVjdG9yPElEQktleURhdGE+LCBJREJWYWx1ZSwgVmVjdG9yPElEQlZhbHVlPiwgdWludDY0
X3QsIE90aGVyUmVzdWx0VHlwZT47CisgICAgRXhjZXB0aW9uT3I8UmVzdWx0PiByZXN1bHQoKSBj
b25zdDsKKyAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JiBjYWNoZWRSZXN1bHQoKSB7IHJldHVy
biBtX2NhY2hlZFJlc3VsdDsgfQogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8
SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CiAg
ICAgY29uc3QgT3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2U7IH0KQEAgLTgwLDcgKzg1LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPERPTUV4Y2Vw
dGlvbio+IGVycm9yKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uKCkgY29uc3Q7Ci0gICAgCisKICAgICBlbnVtIGNsYXNzIFJlYWR5U3RhdGUgeyBQZW5k
aW5nLCBEb25lIH07CiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9yZWFkeVN0YXRlOyB9CiAKQEAgLTE2NSw3ICsxNzAsOCBAQCBwcml2YXRlOgogICAgIElEQkVy
cm9yIG1faWRiRXJyb3I7CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVzb3VyY2VJZGVu
dGlmaWVyOwogCi0gICAgT3B0aW9uYWw8UmVzdWx0PiBtX3Jlc3VsdDsKKyAgICBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0IG1fY2FjaGVkUmVzdWx0OworICAgIFJlc3VsdCBtX3Jlc3VsdDsKICAgICBP
cHRpb25hbDxTb3VyY2U+IG1fc291cmNlOwogCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0
eSB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5pZGwKaW5kZXggNzc1MWUyMDUyODJiOGU4YTU4ODk1MTU1ZjRiNTRlMGFhYWJiMDRhZC4u
ODViYmRlOTE2OGI1MGNlYzQyZmQxNGMzZGQ2NWI5ZDlmZWYyMjQ4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKQEAgLTMxLDkgKzMxLDEw
IEBACiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAorICAgIEpTQ3VzdG9tTWFya0Z1bmN0
aW9uLAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCA6
IEV2ZW50VGFyZ2V0IHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgKElEQkN1cnNvciBvciBJREJE
YXRhYmFzZSBvciBhbnkpPyByZXN1bHQ7CisgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0
cmlidXRlIChJREJDdXJzb3Igb3IgSURCRGF0YWJhc2Ugb3IgYW55KSByZXN1bHQ7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTUV4Y2VwdGlvbj8gZXJyb3I7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIChJREJPYmplY3RTdG9yZSBvciBJREJJbmRleCBvciBJREJDdXJzb3IpPyBzb3VyY2U7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCAzNzhjMDY1M2I4MDkwY2YwMWMzYjBkYWRjYTM5NTkxMzBlN2Y4NTg0Li5iOTQ5
NDFhNmEwZjc4M2I1ZDkxZWNlNzcwNGRmNWNiZGExNDhjODk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
NDg4LDYgKzQ4OCw3IEBAIGJpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAogYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9KU0lEQklu
ZGV4Q3VzdG9tLmNwcAogYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKK2Jp
bmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pTSURCVHJhbnNh
Y3Rpb25DdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKIGJpbmRp
bmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZDkxNzRk
ZWU2ZmEyNjIyMDQ3OWM0YTAzNmUxYzRlZmMyMzgzYjYxLi5mMjBmNWEwOTY1YjEwMDY1NjRlNGE5
MjBmNTUzYTBiMGU3NTg3MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDQzLDYgKzQwNDMsNyBAQAogCQlDOUQ4NTFGMDFC
MzlEQzc4MDA4NTA2MkUgLyogTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM5RDg1MUVFMUIzOURDNzgwMDg1MDYyRSAv
KiBNZWRpYVNlc3Npb25NZXRhZGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUM5Rjg3Q0ZFMUIyOEY0MEUwMDk3OUI4MyAvKiBNZWRpYVNlc3Np
b25FdmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM5Rjg3Q0ZEMUIyOEU1RjYwMDk3OUI4MyAvKiBNZWRpYVNlc3Npb25FdmVudHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDQTNCRjY3RTEwRDk5
QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxB
bmltYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUNBNkMxNTMwMjIwQjk4Q0MwMDU1Q0JGQyAvKiBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzFBRTNCODFG
QjgwRUFFMDBGNUVGQjIgLyogSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNBRTlGOTEwMTQ2NDQxRjAwMEMy
NDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDQUU5RjkwRTE0NjQ0MUYwMDBDMjQ1QjAgLyogQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oICovOyB9OwogCQlDQjM4RkQ1MjFDQ0Y5Mzk0MDA1OTJBM0YgLyogSlNQZXJm
b3JtYW5jZUVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDQjM4RkQ0RTFDQ0Y5MzdFMDA1OTJBM0YgLyogSlNQZXJmb3JtYW5jZUVudHJ5LmggKi87
IH07CiAJCUNCMzhGRDVCMUNEMjMyNUIwMDU5MkEzRiAvKiBKU1BlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENC
MzhGRDU5MUNEMjMxNDUwMDU5MkEzRiAvKiBKU1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCAq
LzsgfTsKQEAgLTEzNTI4LDYgKzEzNTI5LDcgQEAKIAkJQ0ExNjM1REMyMDcyRTc2OTAwRTdEMkNF
IC8qIFJlZmVycmVyUG9saWN5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlZmVycmVyUG9saWN5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Ez
QkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1h
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBNkMxNTJGMjIwQjRBNTUwMDU1Q0JGQyAv
KiBKU0lEQlJlcXVlc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0FFOUY5MEQxNDY0NDFGMDAwQzI0NUIwIC8qIENTU0FzcGVjdFJhdGlvVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQXNwZWN0UmF0aW9WYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBRTlGOTBFMTQ2NDQxRjAwMEMyNDVC
MCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0FzcGVjdFJhdGlvVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0IzOEZENEExQ0NDRjJERDAwNTkyQTNGIC8qIFBlcmZvcm1hbmNlRW50cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VFbnRyeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDk1Myw2ICsyMDk1NSw3IEBACiAJCQkJODMxQzQ2
QzMxRjlFRTVFMDAwRUJENDUwIC8qIEpTRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudEN1c3RvbS5jcHAg
Ki8sCiAJCQkJNDEzMUYzQjExRjk1NTI4MTAwNTk5OTVBIC8qIEpTRmV0Y2hFdmVudEN1c3RvbS5j
cHAgKi8sCiAJCQkJQkNFN0IxOTIwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5j
cHAgKi8sCisJCQkJQ0E2QzE1MkYyMjBCNEE1NTAwNTVDQkZDIC8qIEpTSURCUmVxdWVzdEN1c3Rv
bS5jcHAgKi8sCiAJCQkJNDEwQjdFNzExMDQ1RkFCMDAwRDgyMjRGIC8qIEpTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcCAqLywKIAkJCQlBMTY3N0UyNDIxNDQ1MzI4MDBBMDhDMzQgLyogSlNQYXltZW50
TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwICovLAogCQkJCUExMEQ2RTk0MjE0NEM5OTgwMEZE
RDE0RCAvKiBKU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAgKi8sCkBAIC0zMDQ2Niw2ICszMDQ2
OSw3IEBACiAJCQkJN0M3M0ZCMEQxOTFFRjVBODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcyQjQwMkMyMTc2OTAyMDAwMEFE
NDNFIC8qIEpTVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNUM3NzA5MzEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDQTZDMTUzMDIyMEI5OENDMDA1NUNCRkMgLyogSlNWYWx1ZUluV3JhcHBlZE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFDOTAxNDAwOUI0OEMzIC8qIEpT
VmlkZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMz
IC8qIEpTVmlkZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RTc5MTQ5MUY5N0Uw
MUEwMDE5OTczOSAvKiBKU1Zpc2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKaW5kZXggYmFm
ZTJmZTBiZjQyN2FmOWMxNGEyMTc5NDViNmIyM2JkMDZjOWI5My4uNmI5MmZhOWJiYjJmZTQzZWMy
NWQ0ZGQ1YjBhODUwZDgzMGI0Nzg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNJREJDdXJzb3JXaXRoVmFsdWUu
aCIKIApAQCAtMzUsMTEgKzM2LDI3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCitKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OmtleShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUs
ICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkS2V5KCksIFsmXSB7CisgICAgICAgIHJldHVybiB3cmFw
cGVkKCkua2V5KHN0YXRlKTsKKyAgICB9KTsKK30KKworSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29y
OjpwcmltYXJ5S2V5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2FjaGVkUHJvcGVydHlWYWx1ZShzdGF0ZSwgKnRoaXMsIHdyYXBwZWQoKS5jYWNoZWRQcmltYXJ5
S2V5KCksIFsmXSB7CisgICAgICAgIHJldHVybiB3cmFwcGVkKCkucHJpbWFyeUtleShzdGF0ZSk7
CisgICAgfSk7Cit9CisKIHZvaWQgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8mIGN1cnNvciA9IHdyYXBwZWQoKTsK
ICAgICBpZiAoYXV0byogcmVxdWVzdCA9IGN1cnNvci5yZXF1ZXN0KCkpCiAgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChyZXF1ZXN0KTsKKyAgICBjdXJzb3IuY2FjaGVkS2V5KCkudmlzaXQo
dmlzaXRvcik7CisgICAgY3Vyc29yLmNhY2hlZFByaW1hcnlLZXkoKS52aXNpdCh2aXNpdG9yKTsK
IH0KIAogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1
c3RvbS5jcHAKaW5kZXggOGMzMjNiNjAxMGY1NmUyNDAwN2VkZGY3ZWUyM2QwMDI1YzQ2YzU0Yi4u
ZTliZjRhZWQ3NTUyYjY3ODdkYWM2Zjg5NjdkNWZhM2JhYTc3ZTIxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9t
LmNwcApAQCAtMjgsMTUgKzI4LDI0IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
IAorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJDdXJzb3JX
aXRoVmFsdWUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwSW5saW5lcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCitKU0M6OkpTVmFsdWUg
SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gY2FjaGVkUHJvcGVydHlWYWx1ZShzdGF0ZSwgKnRoaXMsIHdyYXBwZWQo
KS5jYWNoZWRWYWx1ZSgpLCBbJl0geworICAgICAgICByZXR1cm4gd3JhcHBlZCgpLnZhbHVlKHN0
YXRlKTsKKyAgICB9KTsKK30KKwogdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOworICAgIHdyYXBwZWQoKS5jYWNoZWRW
YWx1ZSgpLnZpc2l0KHZpc2l0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NGM2NzEwNTc5ZmI0NGNhZTBhMGE0YTlkNTI2NzhjOWQ3OGRlMGI4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9t
LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTSURCUmVxdWVzdC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJKU0lE
QkRhdGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK0pTQzo6SlNWYWx1ZSBKU0lEQlJlcXVlc3Q6OnJlc3VsdChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlz
LCB3cmFwcGVkKCkuY2FjaGVkUmVzdWx0KCksIFsmXSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
d3JhcHBlZCgpLnJlc3VsdCgpOworICAgICAgICBpZiAoVU5MSUtFTFkocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgICAgIH0KKworICAgICAgICBJREJSZXF1ZXN0OjpSZXN1bHQgcmVz
dWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKHJlc3VsdFZhbHVlLCBbJnN0YXRlXSAoUmVmUHRyPElEQkN1cnNvcj4mIGN1
cnNvcikgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxJREJD
dXJzb3I+PihzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxH
bG9iYWxPYmplY3QoKSksIHRocm93U2NvcGUsIGN1cnNvci5nZXQoKSk7CisgICAgICAgIH0sIFsm
c3RhdGVdIChSZWZQdHI8SURCRGF0YWJhc2U+JiBkYXRhYmFzZSkgeworICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0b0pTPElETEludGVyZmFjZTxJREJEYXRhYmFzZT4+KHN0YXRlLCAqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgdGhyb3dT
Y29wZSwgZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICB9LCBbJnN0YXRlXSAoSURCS2V5RGF0YSBr
ZXlEYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gdG9KUzxJRExJREJLZXlEYXRhPihzdGF0ZSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSks
IGtleURhdGEpOworICAgICAgICB9LCBbJnN0YXRlXSAoVmVjdG9yPElEQktleURhdGE+IGtleURh
dGFzKSB7CisgICAgICAgICAgICByZXR1cm4gdG9KUzxJRExTZXF1ZW5jZTxJRExJREJLZXlEYXRh
Pj4oc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCBrZXlEYXRhcyk7CisgICAgICAgIH0sIFsmc3RhdGVdIChJREJWYWx1ZSB2YWx1
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURMSURCVmFsdWU+KHN0YXRlLCAqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgdmFsdWUp
OworICAgICAgICB9LCBbJnN0YXRlXSAoVmVjdG9yPElEQlZhbHVlPiB2YWx1ZXMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0b0pTPElETFNlcXVlbmNlPElETElEQlZhbHVlPj4oc3RhdGUsICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1
ZXMpOworICAgICAgICB9LCBbXSAodWludDY0X3QgbnVtYmVyKSB7CisgICAgICAgICAgICByZXR1
cm4gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihudW1iZXIpOworICAgICAgICB9LCBbXSAoSURC
UmVxdWVzdDo6T3RoZXJSZXN1bHRUeXBlIG90aGVyKSB7CisgICAgICAgICAgICBpZiAob3RoZXIg
PT0gSURCUmVxdWVzdDo6T3RoZXJSZXN1bHRUeXBlOjpFbXB0eSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVk
KCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byYgcmVx
dWVzdCA9IHdyYXBwZWQoKTsKKyAgICByZXF1ZXN0LmNhY2hlZFJlc3VsdCgpLnZpc2l0KHZpc2l0
b3IpOworfQorCit9CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwCmluZGV4IDZkNTg4MWVhMGU2NjRjYmJjZTJhODVmOGQ5ZGUwOTNmYjQzY2Nh
YzAuLmFkZTBlMTMwNjZjODE2MTZmOWRhNWU2MGZjYzRhNzllNTQ5OThhMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwCkBAIC0xMzcsMTIgKzEzNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAog
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwot
ICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0
cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZSkpIHsK
ICAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCku
c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gV1RGOjpnZXQ8
UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CisgICAgICAgIGF1dG8g
ZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1
ZSk7CiAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZSgqZGF0YWJhc2VS
ZXN1bHQpOwogICAgICAgICBkYXRhYmFzZVJlc3VsdC0+Y2xvc2UoKTsKICAgICB9CkBAIC0zNjMs
NyArMzYzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGhpcyA9PSAmb3RoZXI7CiAgICAg
fQogCi0gICAgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXZlbnQm
IGV2ZW50KSBvdmVycmlkZQorICAgIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgRXZlbnQmIGV2ZW50KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7CiAgICAgICAgICAg
ICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgZXZlbnQgdHlwZS4i
KTsKQEAgLTM3OSwxMiArMzc5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAg
ICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZSkpIHsKICAgICAg
ICAgICAgIGVuZChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGN1cnNvciA9IFdURjo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1
ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBjdXJzb3IgPSBXVEY6OmdldDxSZWZQdHI8SURCQ3Vy
c29yPj4ocmVzdWx0VmFsdWUpOwogCiAgICAgICAgIGlmIChtX3NraXBDb3VudCkgewogICAgICAg
ICAgICAgaWYgKGN1cnNvci0+YWR2YW5jZShtX3NraXBDb3VudCkuaGFzRXhjZXB0aW9uKCkpCkBA
IC00MDQsMTAgKzQwNCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBhdXRvKiBzdGF0ZSA9IGNvbnRleHQuZXhlY1N0YXRlKCk7CiAgICAgICAg
IGF1dG8gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldEtl
eShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY3Vyc29yLT5rZXkoKSwgU3RyaW5nKCksIHRy
dWUpKQotICAgICAgICAgICAgLnNldFByaW1hcnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2Jq
ZWN0KGN1cnNvci0+cHJpbWFyeUtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAu
c2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+dmFsdWUoKSwgU3Ry
aW5nKCksIHRydWUpKQorICAgICAgICAgICAgLnNldEtleShtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoY3Vyc29yLT5rZXkoKnN0YXRlKSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAg
LnNldFByaW1hcnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+cHJpbWFy
eUtleSgqc3RhdGUpLCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0VmFsdWUobV9p
bmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+dmFsdWUoKnN0YXRlKSwgU3RyaW5nKCks
IHRydWUpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9yZXN1bHQtPmFkZEl0
ZW0oV1RGTW92ZShkYXRhRW50cnkpKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361483</attachid>
            <date>2019-02-07 18:31:54 -0800</date>
            <delta_ts>2019-02-08 09:05:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189435-20190207183153.patch</filename>
            <type>text/plain</type>
            <size>44735</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYwMjg4M2Q5N2NhMWY3
M2ExYzAzYTQ2MjVkMmM3ODU0OTkzYzM2YS4uMTdlMTBkZGQyZmQ5ZWI1NGFmNDcxZTI1YzRjMTgx
OTUxY2VjODUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE5LTAyLTA3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQiB0ZXN0cyBs
ZWFrIGRvY3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg5NDM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDI0MDA0Mz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdXNlIG9mIEpT
Qzo6U3Ryb25nIGluIEluZGV4ZWREYXRhYmFzZS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlUHJpbWFyeUtleSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmtleSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmtleVdyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpwcmltYXJ5S2V5V3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OmtleSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6
OnByaW1hcnlLZXkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
Ojp2YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXRGb3JDdXJzb3JVcGRhdGUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6On5JREJS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlc3VsdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRp
ZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlc3VsdFdyYXBwZXIpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0lEQkN1cnNvcjo6a2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURC
Q3Vyc29yOjpwcmltYXJ5S2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJD
dXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JX
aXRoVmFsdWU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yV2l0
aFZhbHVlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJREJSZXF1ZXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0lEQlJl
cXVlc3Q6OnJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlJlcXVlc3Q6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKwogMjAxOS0wMi0wNyAgU2lodWkgTGl1ICA8c2lodWlf
bGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMzk4ODcpOiBDcmFzaCB1bmRl
ciBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZERlbGV0ZURhdGFiYXNlKFdlYkNvcmU6OklEQlJl
c3VsdERhdGEgY29uc3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKaW5kZXggOWI1OWNmZmNlNTQ2NjY5ZThmY2UzZjQ2NDJmZTFhMWJiNzQwYzkz
YS4uMjUzYTNiMTU4YmY1MDQxYWYxYWViODY1MDExZWNmYmNmMjA2ZjNjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xMjQsMTEgKzEy
NCwxMSBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkN1cnNvcjo6dXBkYXRlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7
CiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBvcHRpb25hbEtleVBhdGgudmFs
dWUoKSk7CiAgICAgICAgIElEQktleURhdGEga2V5UGF0aEtleURhdGEoa2V5UGF0aEtleS5nZXQo
KSk7Ci0gICAgICAgIGlmICgha2V5UGF0aEtleSB8fCBrZXlQYXRoS2V5RGF0YSAhPSBtX2N1cnJl
bnRQcmltYXJ5S2V5RGF0YSkKKyAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8IGtleVBhdGhLZXlE
YXRhICE9IG1fcHJpbWFyeUtleURhdGEpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
RGF0YUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRo
ZSBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIG9mIHRoaXMgY3Vyc29yIHVzZXMgaW4tbGluZSBrZXlz
IGFuZCBldmFsdWF0aW5nIHRoZSBrZXkgcGF0aCBvZiB0aGUgdmFsdWUgcGFyYW1ldGVyIHJlc3Vs
dHMgaW4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgY3Vyc29yJ3MgZWZmZWN0aXZlIGtleS4i
X3MgfTsKICAgICB9CiAKLSAgICBhdXRvIHB1dFJlc3VsdCA9IGVmZmVjdGl2ZU9iamVjdFN0b3Jl
KCkucHV0Rm9yQ3Vyc29yVXBkYXRlKHN0YXRlLCB2YWx1ZSwgbV9jdXJyZW50UHJpbWFyeUtleS5n
ZXQoKSk7CisgICAgYXV0byBwdXRSZXN1bHQgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1dEZv
ckN1cnNvclVwZGF0ZShzdGF0ZSwgdmFsdWUsIG1fcHJpbWFyeUtleS5jb3B5UmVmKCkpOwogICAg
IGlmIChwdXRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBwdXRSZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOwogCkBAIC0xOTcsMTYgKzE5NywxNiBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlUHJpbWFyeUtleShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIGtleVZhbAogICAgIElEQktleURhdGEga2V5RGF0YSA9IHsga2V5LmdldCgpIH07CiAgICAg
SURCS2V5RGF0YSBwcmltYXJ5S2V5RGF0YSA9IHsgcHJpbWFyeUtleS5nZXQoKSB9OwogCi0gICAg
aWYgKGtleURhdGEgPCBtX2N1cnJlbnRLZXlEYXRhICYmIGRpcmVjdGlvbiA9PSBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbjo6TmV4dCkKKyAgICBpZiAoa2V5RGF0YSA8IG1fa2V5RGF0YSAmJiBk
aXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQ
cmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBsZXNzIHRo
YW4gdGhpcyBjdXJzb3IncyBwb3NpdGlvbiBhbmQgdGhpcyBjdXJzb3IncyBkaXJlY3Rpb24gaXMg
XCJuZXh0XCIuIl9zIH07CiAKLSAgICBpZiAoa2V5RGF0YSA+IG1fY3VycmVudEtleURhdGEgJiYg
ZGlyZWN0aW9uID09IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpQcmV2KQorICAgIGlmIChr
ZXlEYXRhID4gbV9rZXlEYXRhICYmIGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbjo6UHJldikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFFcnJvciwgIkZhaWxl
ZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgZmly
c3QgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiB0aGlzIGN1cnNvcidzIHBvc2l0aW9uIGFuZCB0
aGlzIGN1cnNvcidzIGRpcmVjdGlvbiBpcyBcInByZXZcIi4iX3MgfTsKIAotICAgIGlmIChrZXlE
YXRhID09IG1fY3VycmVudEtleURhdGEpIHsKLSAgICAgICAgaWYgKHByaW1hcnlLZXlEYXRhIDw9
IG1fY3VycmVudFByaW1hcnlLZXlEYXRhICYmIGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbjo6TmV4dCkKKyAgICBpZiAoa2V5RGF0YSA9PSBtX2tleURhdGEpIHsKKyAgICAg
ICAgaWYgKHByaW1hcnlLZXlEYXRhIDw9IG1fcHJpbWFyeUtleURhdGEgJiYgZGlyZWN0aW9uID09
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0KQogICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IERhdGFFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlL
ZXknIG9uICdJREJDdXJzb3InOiBUaGUga2V5IHBhcmFtZXRlcnMgcmVwcmVzZW50IGEgcG9zaXRp
b24gbGVzcy10aGFuLW9yLWVxdWFsLXRvIHRoaXMgY3Vyc29yJ3MgcG9zaXRpb24gYW5kIHRoaXMg
Y3Vyc29yJ3MgZGlyZWN0aW9uIGlzIFwibmV4dFwiLiJfcyB9OwotICAgICAgICBpZiAocHJpbWFy
eUtleURhdGEgPj0gbV9jdXJyZW50UHJpbWFyeUtleURhdGEgJiYgZGlyZWN0aW9uID09IEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpQcmV2KQorICAgICAgICBpZiAocHJpbWFyeUtleURhdGEg
Pj0gbV9wcmltYXJ5S2V5RGF0YSAmJiBkaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb246OlByZXYpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUVycm9yLCAi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRo
ZSBrZXkgcGFyYW1ldGVycyByZXByZXNlbnQgYSBwb3NpdGlvbiBncmVhdGVyLXRoYW4tb3ItZXF1
YWwtdG8gdGhpcyBjdXJzb3IncyBwb3NpdGlvbiBhbmQgdGhpcyBjdXJzb3IncyBkaXJlY3Rpb24g
aXMgXCJwcmV2XCIuIl9zIH07CiAgICAgfQogCkBAIC0yNDcsMTAgKzI0NywxMCBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5RGF0YSYg
a2V5KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUVycm9yLCAiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2
YWxpZCBrZXkuIl9zIH07CiAKICAgICBpZiAobV9pbmZvLmlzRGlyZWN0aW9uRm9yd2FyZCgpKSB7
Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fY3VycmVudEtleURh
dGEpIDw9IDApCisgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fa2V5
RGF0YSkgPD0gMCkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhRXJyb3IsICJG
YWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgcGFyYW1ldGVy
IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGlzIGN1cnNvcidzIHBvc2l0aW9uLiJfcyB9Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1f
Y3VycmVudEtleURhdGEpID49IDApCisgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5j
b21wYXJlKG1fa2V5RGF0YSkgPj0gMCkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBE
YXRhRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBU
aGUgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzIGN1cnNvcidzIHBv
c2l0aW9uLiJfcyB9OwogICAgIH0KIApAQCAtMjk5LDcgKzI5OSw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxXZWJDb3JlOjpJREJSZXF1ZXN0Pj4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihFeGVjU3Rh
dGUmIHN0YXRlCiAgICAgaWYgKCFpc0tleUN1cnNvcldpdGhWYWx1ZSgpKQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVs
ZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBjdXJzb3IuIl9zIH07CiAK
LSAgICBhdXRvIHJlc3VsdCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkuZGVsZXRlRnVuY3Rpb24o
c3RhdGUsIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUoKS5kZWxldGVGdW5jdGlvbihzdGF0ZSwgSURCS2V5UmFuZ2U6OmNy
ZWF0ZShtX3ByaW1hcnlLZXkuY29weVJlZigpKS5wdHIoKSk7CiAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAK
QEAgLTMwOSw0MyArMzA5LDMzIEBAIEV4Y2VwdGlvbk9yPFJlZjxXZWJDb3JlOjpJREJSZXF1ZXN0
Pj4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAgICAgcmV0dXJu
IFdURk1vdmUocmVxdWVzdCk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURC
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCit2b2lkIElE
QkN1cnNvcjo6c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmLCBjb25zdCBJREJHZXRSZXN1bHQmIGdl
dFJlc3VsdCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQg
LSBjdXJyZW50IGtleSAlcyIsIGdldFJlc3VsdC5rZXlEYXRhKCkubG9nZ2luZ1N0cmluZygpLnN1
YnN0cmluZygwLCAxMDApLnV0ZjgoKS5kYXRhKCkpOwogICAgIEFTU0VSVCgmZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRo
cmVhZDo6Y3VycmVudCgpKTsKIAotICAgIGF1dG8qIGNvbnRleHQgPSByZXF1ZXN0LnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKLSAgICBpZiAoIWV4ZWMpCi0g
ICAgICAgIHJldHVybjsKKyAgICBtX2tleVdyYXBwZXIgPSB7IH07CisgICAgbV9wcmltYXJ5S2V5
V3JhcHBlciA9IHsgfTsKKyAgICBtX3ZhbHVlV3JhcHBlciA9IHsgfTsKIAogICAgIGlmICghZ2V0
UmVzdWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fY3VycmVudEtleSA9IHsgfTsKLSAgICAg
ICAgbV9jdXJyZW50S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9
IHsgfTsKLSAgICAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSB7IH07Ci0gICAgICAgIG1f
Y3VycmVudFZhbHVlID0geyB9OworICAgICAgICBtX2tleURhdGEgPSB7IH07CisgICAgICAgIG1f
a2V5ID0gbnVsbHB0cjsKKyAgICAgICAgbV9wcmltYXJ5S2V5RGF0YSA9IHsgfTsKKyAgICAgICAg
bV9wcmltYXJ5S2V5ID0gbnVsbHB0cjsKKyAgICAgICAgbV92YWx1ZSA9IHsgfTsKIAogICAgICAg
ICBtX2dvdFZhbHVlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
JiB2bSA9IGNvbnRleHQtPnZtKCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNo
b3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0
aGF0IGdsb2JhbCBvYmplY3QKLSAgICAvLyBvZiB0aGUgSURCQ3Vyc29yIHdyYXBwZXIgY2FuIGJl
IHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgotICAgIG1fY3VycmVu
dEtleSA9IHsgdm0sIHRvSlMoKmV4ZWMsICpleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdl
dFJlc3VsdC5rZXlEYXRhKCkubWF5YmVDcmVhdGVJREJLZXkoKS5nZXQoKSkgfTsKLSAgICBtX2N1
cnJlbnRLZXlEYXRhID0gZ2V0UmVzdWx0LmtleURhdGEoKTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5ID0geyB2bSwgdG9KUygqZXhlYywgKmV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0
UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkubWF5YmVDcmVhdGVJREJLZXkoKS5nZXQoKSkgfTsKLSAg
ICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpOwor
ICAgIG1fa2V5RGF0YSA9IGdldFJlc3VsdC5rZXlEYXRhKCk7CisgICAgbV9rZXkgPSBtX2tleURh
dGEubWF5YmVDcmVhdGVJREJLZXkoKTsKKyAgICBtX3ByaW1hcnlLZXlEYXRhID0gZ2V0UmVzdWx0
LnByaW1hcnlLZXlEYXRhKCk7CisgICAgbV9wcmltYXJ5S2V5ID0gbV9wcmltYXJ5S2V5RGF0YS5t
YXliZUNyZWF0ZUlEQktleSgpOwogCiAgICAgaWYgKGlzS2V5Q3Vyc29yV2l0aFZhbHVlKCkpCi0g
ICAgICAgIG1fY3VycmVudFZhbHVlID0geyB2bSwgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1
ZSgqZXhlYywgZ2V0UmVzdWx0LnZhbHVlKCkpIH07Ci0gICAgZWxzZQotICAgICAgICBtX2N1cnJl
bnRWYWx1ZSA9IHsgfTsKKyAgICAgICAgbV92YWx1ZSA9IGdldFJlc3VsdC52YWx1ZSgpOwogCiAg
ICAgbV9nb3RWYWx1ZSA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oCmluZGV4IDliYTI3ZjM3MDM2MWIxZGYzNTAyYjRjYzZjNTcyZDVkNzUw
MTViYmMuLjAzZTZiMWViMjRmZTQxNGRmN2E3YWY2MDIwNTVhM2M0NGU3NTNhOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC0zMCw2ICszMCw4
IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJJREJDdXJzb3JEaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJJREJDdXJzb3JJbmZvLmgiCisjaW5jbHVkZSAiSURCVmFsdWUuaCIK
KyNpbmNsdWRlICJKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgpAQCAtNTIsOSArNTQsMTMgQEAgcHVibGljOgogCiAgICAgY29uc3QgU291cmNl
JiBzb3VyY2UoKSBjb25zdDsKICAgICBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29u
c3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIGtleSgpIGNvbnN0OwotICAgIEpTQzo6SlNWYWx1ZSBwcmlt
YXJ5S2V5KCkgY29uc3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIHZhbHVlKCkgY29uc3Q7CisKKyAgICBJ
REJLZXkqIGtleSgpIHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9OworICAgIElEQktleSogcHJpbWFy
eUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleS5nZXQoKTsgfTsKKyAgICBJREJWYWx1ZSB2YWx1
ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH07CisgICAgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYga2V5
V3JhcHBlcigpIHsgcmV0dXJuIG1fa2V5V3JhcHBlcjsgfQorICAgIEpTVmFsdWVJbldyYXBwZWRP
YmplY3QmIHByaW1hcnlLZXlXcmFwcGVyKCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5V3JhcHBlcjsg
fQorICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIHZhbHVlV3JhcHBlcigpIHsgcmV0dXJuIG1f
dmFsdWVXcmFwcGVyOyB9CiAKICAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IHVwZGF0
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
YWR2YW5jZSh1bnNpZ25lZCk7CkBAIC05MiwxNCArOTgsMTUgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9nb3RWYWx1ZSB7IGZhbHNlIH07CiAKLSAgICBJREJLZXlEYXRhIG1fY3VycmVudEtleURh
dGE7Ci0gICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKKyAgICBSZWZQdHI8
SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7CisgICAgSURC
S2V5RGF0YSBtX2tleURhdGE7CisgICAgSURCS2V5RGF0YSBtX3ByaW1hcnlLZXlEYXRhOworICAg
IElEQlZhbHVlIG1fdmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyB1c2VzIG9m
IEpTQzo6U3Ryb25nIGFyZSBpbmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIHN0b3JhZ2UgbGVha3MK
LSAgICAvLyBkdWUgdG8gcmVmZXJlbmNlIGN5Y2xlczsgd2Ugc2hvdWxkIHVzZSBKU1ZhbHVlSW5X
cmFwcGVkT2JqZWN0IGluc3RlYWQuCi0gICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1
cnJlbnRLZXk7Ci0gICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRQcmltYXJ5
S2V5OwotICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJyZW50VmFsdWU7CisgICAg
SlNWYWx1ZUluV3JhcHBlZE9iamVjdCBtX2tleVdyYXBwZXI7CisgICAgSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdCBtX3ByaW1hcnlLZXlXcmFwcGVyOworICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3Qg
bV92YWx1ZVdyYXBwZXI7CiB9OwogCiAKQEAgLTExMywyMSArMTIwLDYgQEAgaW5saW5lIElEQkN1
cnNvckRpcmVjdGlvbiBJREJDdXJzb3I6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1f
aW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKIH0KIAotaW5saW5lIEpTQzo6SlNWYWx1ZSBJREJDdXJz
b3I6OmtleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudEtleS5nZXQoKTsKLX0KLQot
aW5saW5lIEpTQzo6SlNWYWx1ZSBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAg
IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpOwotfQotCi1pbmxpbmUgSlNDOjpKU1Zh
bHVlIElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRWYWx1
ZS5nZXQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmlkbAppbmRleCBmY2NiMzBmZWUwZjg5MzBkYWNmZmMyMDU4MjE3YThhYjg1OGVh
MjQ0Li4wNmUzYTUwM2QyN2NlZDk0ZDk0MzUzNmNhNGYzZWNhMTI0MWUxZDQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTMxLDggKzMx
LDggQEAKIF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIChJ
REJPYmplY3RTdG9yZSBvciBJREJJbmRleCkgc291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBh
bnkga2V5OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgcHJpbWFyeUtleTsKKyAgICBbQ3Vz
dG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGtleTsKKyAgICBbQ3VzdG9tR2V0dGVy
XSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHByaW1hcnlLZXk7CiAKICAgICBbQ2FsbFdpdGg9RXhl
Y1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCB1cGRhdGUoYW55IHZhbHVlKTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgYWR2YW5jZShbRW5mb3JjZVJhbmdlXSB1bnNp
Z25lZCBsb25nIGNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDViMDQ3ZDUxYjE2YjY1MWEwN2E4
NjYyZmJkYTc3MDM1YzRmY2FkYmYuLmJhNTJjNGMwNTc2NTRmZjkwOGIxZWE4MzdhN2EyZGM4NzQ2
YjJmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAtMjgsNSArMjgsNSBAQAogICAgIFNraXBWVGFibGVW
YWxpZGF0aW9uLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogXSBpbnRlcmZhY2UgSURCQ3Vy
c29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZh
bHVlOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgdmFsdWU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCmluZGV4IGI5NmNmZDAxMjUwYWZlZGNhNmYzMDNmMGYwMzc0YzFkZTdlYmUwM2QuLmMx
NzVkZWUxMTU5NzVlNDhhOWM5ZGI3OGU2YTJkZTk4YjZkZjQzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTI4NSw5
ICsyODUsOSBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpw
dXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUgdgogICAgIHJldHVybiBwdXRPckFkZChl
eGVjU3RhdGUsIHZhbHVlLCBpZGJLZXksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlOjpPdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3JtKTsKIH0KIAotRXhjZXB0aW9u
T3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUga2V5KQorRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxJREJLZXk+IGtleSkKIHsKLSAgICBy
ZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBzY3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRlLCBr
ZXkpLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vy
c29yLCBJbmxpbmVLZXlDaGVjazo6RG9Ob3RQZXJmb3JtKTsKKyAgICByZXR1cm4gcHV0T3JBZGQo
c3RhdGUsIHZhbHVlLCBXVEZNb3ZlKGtleSksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IsIElubGluZUtleUNoZWNrOjpEb05vdFBlcmZvcm0p
OwogfQogCiBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRP
ckFkZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8SURCS2V5PiBrZXks
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIElubGlu
ZUtleUNoZWNrIGlubGluZUtleUNoZWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggY2ZjN2RmNzIwY2NhNjk3NDhmZGM2NTUx
MmI5ZjI2MjUyZjZkNmYxOS4uZGRmNzY4ZjU1NzcyYTgyOWMzZTA4ZDQ1NGU0ZTVhMDQ0YmZmZDZm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IGdldEFsbEtleXMoSlNDOjpFeGVjU3RhdGUmLCBSZWZQdHI8SURCS2V5UmFuZ2U+
LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOwogICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1
ZXN0Pj4gZ2V0QWxsS2V5cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXksIE9wdGlv
bmFsPHVpbnQzMl90PiBjb3VudCk7CiAKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+
IHB1dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBwdXRGb3JDdXJz
b3JVcGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxJREJLZXk+KTsK
IAogICAgIHZvaWQgbWFya0FzRGVsZXRlZCgpOwogICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWxldGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDY3MTc4NzI3ZjgwZDI0NDEyNDY5ZjgzNzQ3OGJlMTU0
NjU2NGY2NjUuLmNlYzdjOWE0Zjg5ODYyOGVmZjE2OGJjN2ZhNTRiMDc5OWMxOGMwMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC04
NSw2ICs4NSw3IEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uCiAgICAgLCBtX3Jlc291cmNlSWRl
bnRpZmllcihjb25uZWN0aW9uUHJveHkpCiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eShjb25uZWN0
aW9uUHJveHkpCiB7CisgICAgbV9yZXN1bHQgPSBOdWxsUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAg
c3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKQEAgLTk1LDYgKzk2LDcgQEAgSURCUmVxdWVzdDo6SURC
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYg
b2JqZWN0U3QKICAgICAsIG1fc291cmNlKCZvYmplY3RTdG9yZSkKICAgICAsIG1fY29ubmVjdGlv
blByb3h5KHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuY29ubmVjdGlvblByb3h5KCkpCiB7CisgICAg
bV9yZXN1bHQgPSBOdWxsUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7
CiB9CiAKQEAgLTExMSw2ICsxMTMsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYgY3Vyc29yLCBJREJUcgogICAgICAg
ICBbdGhpc10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7IHRoaXMtPm1fc291cmNlID0gSURCUmVxdWVz
dDo6U291cmNlIHsgdmFsdWUgfTsgfQogICAgICk7CiAKKyAgICBtX3Jlc3VsdCA9IE51bGxSZXN1
bHRUeXBlOjpFbXB0eTsKICAgICBjdXJzb3Iuc2V0UmVxdWVzdCgqdGhpcyk7CiB9CiAKQEAgLTEy
MSw2ICsxMjQsNyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSURCVHJhbgogICAgICwgbV9zb3VyY2UoJmlu
ZGV4KQogICAgICwgbV9jb25uZWN0aW9uUHJveHkodHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5jb25u
ZWN0aW9uUHJveHkoKSkKIHsKKyAgICBtX3Jlc3VsdCA9IE51bGxSZXN1bHRUeXBlOjpFbXB0eTsK
ICAgICBzdXNwZW5kSWZOZWVkZWQoKTsKIH0KIApAQCAtMTMyLDEyICsxMzYsMTQgQEAgSURCUmVx
dWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmpl
Y3RTdG9yZSYgb2JqZWN0U3QKICAgICAsIG1fcmVxdWVzdGVkT2JqZWN0U3RvcmVSZWNvcmRUeXBl
KHR5cGUpCiAgICAgLCBtX2Nvbm5lY3Rpb25Qcm94eSh0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmNv
bm5lY3Rpb25Qcm94eSgpKQogeworICAgIG1fcmVzdWx0ID0gTnVsbFJlc3VsdFR5cGU6OkVtcHR5
OwogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uKQogICAgIDogSURCUmVxdWVzdChjb250ZXh0LCBpbmRleCwgdHJhbnNhY3Rpb24p
CiB7CisgICAgbV9yZXN1bHQgPSBOdWxsUmVzdWx0VHlwZTo6RW1wdHk7CiAgICAgbV9yZXF1ZXN0
ZWRJbmRleFJlY29yZFR5cGUgPSByZXF1ZXN0ZWRSZWNvcmRUeXBlOwogfQogCkBAIC0xNDUsMjAg
KzE1MSwxOCBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCgpCiB7CiAgICAgQVNTRVJUKCZvcmln
aW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogCi0gICAgaWYgKG1fcmVzdWx0KSB7
Ci0gICAgICAgIFdURjo6c3dpdGNoT24obV9yZXN1bHQudmFsdWUoKSwKLSAgICAgICAgICAgIFtd
IChSZWZQdHI8SURCQ3Vyc29yPiYgY3Vyc29yKSB7IGN1cnNvci0+Y2xlYXJSZXF1ZXN0KCk7IH0s
Ci0gICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsgfQotICAgICAgICApOwotICAgIH0KKyAg
ICBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LAorICAgICAgICBbXSAoUmVmUHRyPElEQkN1cnNvcj4m
IGN1cnNvcikgeyBjdXJzb3ItPmNsZWFyUmVxdWVzdCgpOyB9LAorICAgICAgICBbXSAoY29uc3Qg
YXV0byYpIHsgfQorICAgICk7CiB9CiAKLUV4Y2VwdGlvbk9yPE9wdGlvbmFsPElEQlJlcXVlc3Q6
OlJlc3VsdD4+IElEQlJlcXVlc3Q6OnJlc3VsdCgpIGNvbnN0CitFeGNlcHRpb25PcjxJREJSZXF1
ZXN0OjpSZXN1bHQ+IElEQlJlcXVlc3Q6OnJlc3VsdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0Rv
bmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFp
bGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUg
cmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiJfcyB9OwogCi0gICAgcmV0dXJuIE9wdGlvbmFsPElE
QlJlcXVlc3Q6OlJlc3VsdD4geyBtX3Jlc3VsdCB9OworICAgIHJldHVybiBJREJSZXF1ZXN0OjpS
ZXN1bHQgeyBtX3Jlc3VsdCB9OwogfQogCiBFeGNlcHRpb25PcjxET01FeGNlcHRpb24qPiBJREJS
ZXF1ZXN0OjplcnJvcigpIGNvbnN0CkBAIC0zNTgsMTEgKzM2MiwxMCBAQCB2b2lkIElEQlJlcXVl
c3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogICAgIGlmICghc3RhdGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxk
IGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQg
Z2xvYmFsIG9iamVjdAotICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVz
ZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgogICAgIFZNJiB2bSA9IGNv
bnRleHQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIG1fcmVzdWx0ID0g
UmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IHZtLCB0b0pTPElETElEQktleURh
dGE+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLCBrZXlEYXRhKSB9IH07CisgICAgbV9yZXN1bHQgPSBrZXlEYXRhOworICAg
IG1fcmVzdWx0V3JhcHBlciA9IHsgfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
Y29uc3QgVmVjdG9yPElEQktleURhdGE+JiBrZXlEYXRhcykKQEAgLTM3NywxMSArMzgwLDEwIEBA
IHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYga2V5
RGF0YXMpCiAgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6
IFRoaXMgY29udmVyc2lvbiBzaG91bGQgYmUgZG9uZSBsYXppbHksIHdoZW4gc2NyaXB0IG5lZWRz
IHRoZSBKU1ZhbHVlcywgc28gdGhhdCBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhlIElEQlJl
cXVlc3Qgd3JhcHBlciBjYW4gYmUgdXNlZCwgcmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9iYWxP
YmplY3QuCiAgICAgVk0mIHZtID0gY29udGV4dC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7Ci0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
IHsgdm0sIHRvSlM8SURMU2VxdWVuY2U8SURMSURCS2V5RGF0YT4+KCpzdGF0ZSwgKmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRh
cykgfSB9OworICAgIG1fcmVzdWx0ID0ga2V5RGF0YXM7CisgICAgbV9yZXN1bHRXcmFwcGVyID0g
eyB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBWZWN0b3I8SURCVmFs
dWU+JiB2YWx1ZXMpCkBAIC0zOTYsMTEgKzM5OCwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdChjb25zdCBWZWN0b3I8SURCVmFsdWU+JiB2YWx1ZXMpCiAgICAgaWYgKCFzdGF0ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoaXMgY29udmVyc2lvbiBzaG91bGQgYmUg
ZG9uZSBsYXppbHksIHdoZW4gc2NyaXB0IG5lZWRzIHRoZSBKU1ZhbHVlcywgc28gdGhhdCBnbG9i
YWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhlIElEQlJlcXVlc3Qgd3JhcHBlciBjYW4gYmUgdXNlZCwg
cmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9iYWxPYmplY3QuCiAgICAgVk0mIHZtID0gY29udGV4
dC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgbV9yZXN1bHQgPSBSZXN1
bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgdm0sIHRvSlM8SURMU2VxdWVuY2U8SURM
SURCVmFsdWU+Pigqc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKSwgdmFsdWVzKSB9IH07CisgICAgbV9yZXN1bHQgPSB2YWx1ZXM7
CisgICAgbV9yZXN1bHRXcmFwcGVyID0geyB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdCh1aW50NjRfdCBudW1iZXIpCkBAIC00MTEsNyArNDEyLDggQEAgdm9pZCBJREJSZXF1ZXN0
OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQogICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25v
d24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KG51bWJlcikg
fSB9OworICAgIG1fcmVzdWx0ID0gbnVtYmVyOworICAgIG1fcmVzdWx0V3JhcHBlciA9IHsgfTsK
IH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJ
REJWYWx1ZSYgdmFsdWUpCkBAIC00MjgsMzIgKzQzMCwyNSBAQCB2b2lkIElEQlJlcXVlc3Q6OnNl
dFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICBpZiAo
IXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9u
IHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBz
byB0aGF0IGdsb2JhbCBvYmplY3QKLSAgICAvLyBvZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNh
biBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICBWTSYg
dm0gPSBjb250ZXh0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBtX3Jl
c3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyB2bSwgdG9KUzxJRExJ
REJWYWx1ZT4oKnN0YXRlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSksIHZhbHVlKSB9IH07CisgICAgbV9yZXN1bHQgPSB2YWx1ZTsKKyAg
ICBtX3Jlc3VsdFdyYXBwZXIgPSB7IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0
VG9VbmRlZmluZWQoKQogewogICAgIEFTU0VSVCgmb3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6
Y3VycmVudCgpKTsKIAotICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc3VsdCA9
IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBKU0M6
OmpzVW5kZWZpbmVkKCkgfSB9OworICAgIG1fcmVzdWx0ID0gTnVsbFJlc3VsdFR5cGU6OlVuZGVm
aW5lZDsKKyAgICBtX3Jlc3VsdFdyYXBwZXIgPSB7IH07CiB9CiAKIElEQkN1cnNvciogSURCUmVx
dWVzdDo6cmVzdWx0Q3Vyc29yKCkKIHsKICAgICBBU1NFUlQoJm9yaWdpblRocmVhZCgpID09ICZU
aHJlYWQ6OmN1cnJlbnQoKSk7CiAKLSAgICBpZiAoIW1fcmVzdWx0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcmVzdWx0LnZhbHVlKCksCisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9yZXN1bHQsCiAgICAgICAgIFtdIChjb25zdCBSZWZQ
dHI8SURCQ3Vyc29yPiYgY3Vyc29yKSAtPiBJREJDdXJzb3IqIHsgcmV0dXJuIGN1cnNvci5nZXQo
KTsgfSwKICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBJREJDdXJzb3IqIHsgcmV0dXJuIG51
bGxwdHI7IH0KICAgICApOwpAQCAtNDcwLDcgKzQ2NSw4IEBAIHZvaWQgSURCUmVxdWVzdDo6d2ls
bEl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IpCiAKICAgICBtX3BlbmRpbmdDdXJzb3Ig
PSAmY3Vyc29yOwogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsKLSAgICBtX3Jlc3Vs
dCA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3Jlc3VsdCA9IE51bGxSZXN1bHRUeXBlOjpFbXB0eTsK
KyAgICBtX3Jlc3VsdFdyYXBwZXIgPSB7IH07CiAgICAgbV9yZWFkeVN0YXRlID0gUmVhZHlTdGF0
ZTo6UGVuZGluZzsKICAgICBtX2RvbUVycm9yID0gbnVsbHB0cjsKICAgICBtX2lkYkVycm9yID0g
SURCRXJyb3IgeyB9OwpAQCAtNDgxLDEyICs0NzcsMTMgQEAgdm9pZCBJREJSZXF1ZXN0OjpkaWRP
cGVuT3JJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiAgICAg
QVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogICAgIEFTU0VS
VChtX3BlbmRpbmdDdXJzb3IpOwogCi0gICAgbV9yZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAg
bV9yZXN1bHQgPSBOdWxsUmVzdWx0VHlwZTo6RW1wdHk7CisgICAgbV9yZXN1bHRXcmFwcGVyID0g
eyB9OwogCiAgICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6Okl0ZXJh
dGVDdXJzb3JTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6Ok9w
ZW5DdXJzb3JTdWNjZXNzKSB7CiAgICAgICAgIG1fcGVuZGluZ0N1cnNvci0+c2V0R2V0UmVzdWx0
KCp0aGlzLCByZXN1bHREYXRhLmdldFJlc3VsdCgpKTsKICAgICAgICAgaWYgKHJlc3VsdERhdGEu
Z2V0UmVzdWx0KCkuaXNEZWZpbmVkKCkpCi0gICAgICAgICAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7
IG1fcGVuZGluZ0N1cnNvciB9OworICAgICAgICAgICAgbV9yZXN1bHQgPSBtX3BlbmRpbmdDdXJz
b3I7CiAgICAgfQogCiAgICAgbV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKQEAgLTUyOSw3ICs1
MjYsOCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChSZWY8SURCRGF0YWJhc2U+JiYgZGF0
YWJhc2UpCiB7CiAgICAgQVNTRVJUKCZvcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50
KCkpOwogCi0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBSZWZQdHI8SURCRGF0YWJhc2U+IHsgV1RG
TW92ZShkYXRhYmFzZSkgfSB9OworICAgIG1fcmVzdWx0ID0gUmVmUHRyPElEQkRhdGFiYXNlPiB7
IFdURk1vdmUoZGF0YWJhc2UpIH07CisgICAgbV9yZXN1bHRXcmFwcGVyID0geyB9OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmgKaW5kZXggYTM0MzNhNTkyNjk5M2ZlOGY3OTIwZDI2M2ViYWRkYmRhYWY1
ZjZiMy4uNjEzNTEyYjY3Zjc1NmNjMWQ3MDhlMGJkZWJjYjI2Y2VmNzQ0ZjYzMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaApAQCAtMzEsOCArMzEs
MTEgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIklEQkFjdGl2ZURPTU9i
amVjdC5oIgogI2luY2x1ZGUgIklEQkVycm9yLmgiCisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgog
I2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklEQlZhbHVlLmgi
CiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCisjaW5jbHVkZSAiSlNWYWx1ZUluV3JhcHBlZE9iamVj
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZy5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgpAQCAtNDUsMTEgKzQ4LDkgQEAgY2xh
c3MgRXZlbnQ7CiBjbGFzcyBJREJDdXJzb3I7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElE
QkluZGV4OwotY2xhc3MgSURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3Mg
SURCUmVzdWx0RGF0YTsKIGNsYXNzIElEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURCVmFsdWU7CiBj
bGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC01
OSw2ICs2MCwxMSBAQCBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2ZXI7CiAKIGNsYXNzIElEQlJl
cXVlc3QgOiBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIElEQkFjdGl2
ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4sIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxJREJSZXF1ZXN0PiB7CiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBOdWxsUmVzdWx0
VHlwZSB7CisgICAgICAgIEVtcHR5LAorICAgICAgICBVbmRlZmluZWQKKyAgICB9OworCiAgICAg
c3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElE
Qk9iamVjdFN0b3JlJiwgSURCVHJhbnNhY3Rpb24mKTsKICAgICBzdGF0aWMgUmVmPElEQlJlcXVl
c3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCQ3Vyc29yJiwgSURCVHJhbnNh
Y3Rpb24mKTsKICAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgSURCSW5kZXgmLCBJREJUcmFuc2FjdGlvbiYpOwpAQCAtNjksMTAgKzc1LDkg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAgLy8gRklYTUU6
IFRoZSBmb2xsb3dpbmcgdXNlIG9mIEpTQzo6U3Ryb25nIGlzIGluY29ycmVjdCBhbmQgY2FuIGxl
YWQgdG8gc3RvcmFnZSBsZWFrcwotICAgIC8vIGR1ZSB0byByZWZlcmVuY2UgY3ljbGVzOyB3ZSBz
aG91bGQgdXNlIEpTVmFsdWVJbldyYXBwZWRPYmplY3QgaW5zdGVhZC4KLSAgICB1c2luZyBSZXN1
bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+PjsKLSAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxSZXN1bHQ+
PiByZXN1bHQoKSBjb25zdDsKKyAgICB1c2luZyBSZXN1bHQgPSBWYXJpYW50PFJlZlB0cjxJREJD
dXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBJREJLZXlEYXRhLCBWZWN0b3I8SURCS2V5RGF0
YT4sIElEQlZhbHVlLCBWZWN0b3I8SURCVmFsdWU+LCB1aW50NjRfdCwgTnVsbFJlc3VsdFR5cGU+
OworICAgIEV4Y2VwdGlvbk9yPFJlc3VsdD4gcmVzdWx0KCkgY29uc3Q7CisgICAgSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdCYgcmVzdWx0V3JhcHBlcigpIHsgcmV0dXJuIG1fcmVzdWx0V3JhcHBlcjsg
fQogCiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBS
ZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CiAgICAgY29uc3QgT3B0aW9uYWw8
U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTE2NSw3ICsx
NzAsOCBAQCBwcml2YXRlOgogICAgIElEQkVycm9yIG1faWRiRXJyb3I7CiAgICAgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyIG1fcmVzb3VyY2VJZGVudGlmaWVyOwogCi0gICAgT3B0aW9uYWw8UmVzdWx0
PiBtX3Jlc3VsdDsKKyAgICBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0IG1fcmVzdWx0V3JhcHBlcjsK
KyAgICBSZXN1bHQgbV9yZXN1bHQ7CiAgICAgT3B0aW9uYWw8U291cmNlPiBtX3NvdXJjZTsKIAog
ICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHkgeyB0cnVlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCmluZGV4IDc3NTFlMjA1MjgyYjhl
OGE1ODg5NTE1NWY0YjU0ZTBhYWFiYjA0YWQuLjg1YmJkZTkxNjhiNTBjZWM0MmZkMTRjM2RkNjVi
OWQ5ZmVmMjI0ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuaWRsCkBAIC0zMSw5ICszMSwxMCBAQAogICAgIEFjdGl2ZURPTU9iamVjdCwKICAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9
SW1wbCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKICAgICBTa2lwVlRhYmxlVmFsaWRhdGlv
biwKIF0gaW50ZXJmYWNlIElEQlJlcXVlc3QgOiBFdmVudFRhcmdldCB7Ci0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIChJREJDdXJzb3Igb3IgSURCRGF0YWJhc2Ugb3IgYW55KT8gcmVzdWx0OworICAg
IFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCQ3Vyc29yIG9yIElEQkRhdGFi
YXNlIG9yIGFueSkgcmVzdWx0OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01FeGNlcHRpb24/
IGVycm9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSAoSURCT2JqZWN0U3RvcmUgb3IgSURCSW5k
ZXggb3IgSURCQ3Vyc29yKT8gc291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggN2RmMWU1NmFhMmQxZjhjNmM1
MDM1OWY1MmU4ODJkOWQ5YjA5ZTA3OC4uN2FlY2NmNzAwZmUzYmU1NjRjYWYwMmVhOGM0MWQ5YTMw
Y2QzOGRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTQ4OSw2ICs0ODksNyBAQCBiaW5kaW5ncy9qcy9K
U0lEQkN1cnNvckN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcAogYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pT
SURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCitiaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RDdXN0b20u
Y3BwCiBiaW5kaW5ncy9qcy9KU0lEQlRyYW5zYWN0aW9uQ3VzdG9tLmNwcAogYmluZGluZ3MvanMv
SlNJbWFnZURhdGFDdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnlDdXN0b20uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYWEzYjQxZDhkYThmNDBkZmUzZWQzZmVhNjQwODUzZmZlZGU1
YzM2Ny4uMGQwOGUzYTdiNmNiNzNiZTRmYjc4YTc3YzI2NWMxOGMwOGNkYTk0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA0
Nyw2ICs0MDQ3LDcgQEAKIAkJQzlEODUxRjAxQjM5REM3ODAwODUwNjJFIC8qIE1lZGlhU2Vzc2lv
bk1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDOUQ4NTFFRTFCMzlEQzc4MDA4NTA2MkUgLyogTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDOUY4N0NGRTFC
MjhGNDBFMDA5NzlCODMgLyogTWVkaWFTZXNzaW9uRXZlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOUY4N0NGRDFCMjhFNUY2MDA5NzlCODMgLyog
TWVkaWFTZXNzaW9uRXZlbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3
RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDQTZDMTUzMDIyMEI5OENDMDA1NUNCRkMg
LyogSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMxQUUzQjgxRkI4MEVBRTAwRjVFRkIyIC8qIEpTVmFsdWVJbldy
YXBwZWRPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDQUU5RjkxMDE0NjQ0MUYwMDBDMjQ1QjAgLyogQ1NTQXNwZWN0UmF0aW9WYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0FFOUY5MEUx
NDY0NDFGMDAwQzI0NUIwIC8qIENTU0FzcGVjdFJhdGlvVmFsdWUuaCAqLzsgfTsKIAkJQ0IzOEZE
NTIxQ0NGOTM5NDAwNTkyQTNGIC8qIEpTUGVyZm9ybWFuY2VFbnRyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IzOEZENEUxQ0NGOTM3RTAwNTkyQTNG
IC8qIEpTUGVyZm9ybWFuY2VFbnRyeS5oICovOyB9OwogCQlDQjM4RkQ1QjFDRDIzMjVCMDA1OTJB
M0YgLyogSlNQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjM4RkQ1OTFDRDIzMTQ1MDA1OTJBM0YgLyogSlNQ
ZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggKi87IH07CkBAIC04MTE2LDcgKzgxMTcsNiBAQAog
CQk1MTIzQUYxQzE4OTE4QUU0MDAzMUNEQzkgLyogSURCR2V0UmVzdWx0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkdldFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTJCREI0ODFDNDU2RkFCMDA2NDk0REYgLyogU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkJEQjQ5MUM0
NTZGQUIwMDY0OTRERiAvKiBTUUxpdGVJREJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlSURCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxMkJEQjRDMUM0NkIwRkYwMDY0OTRERiAvKiBKU0lEQkN1cnNvckN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNv
ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkREOEUyMEQ5MUUy
QjQwMDBGODlFRSAvKiBTaGFyZWRCdWZmZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaGFyZWRCdWZmZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMkREOEVBMEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hpdmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJERDhFQjBEOTFFNkFGMDAwRjg5RUUg
LyogTGVnYWN5V2ViQXJjaGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZWdhY3lXZWJBcmNoaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTM0LDcg
KzgxMzQsNiBAQAogCQk1MTNGMTQ1MjBBQjYzNEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbkxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTQwNUM4NjE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNl
bGVjdGlvblJlY3RHYXRoZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NDA1Qzg3MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNDEyOThEMUM1RkQ3RTkwMDU5RTcxNCAvKiBKU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNDEyOTk2MUM2OTc2MTUwMDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxl
dGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlJl
cXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTQxMjk5NzFDNjk3NjE1MDA1OUU3MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDEyOTlBMUM2QzE2NkQwMDU5RTcx
NCAvKiBKU0lEQkluZGV4Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTSURCSW5kZXhDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTM1MzgsNiArMTM1MzcsOSBAQAogCQlDQTE2MzVEQzIwNzJFNzY5MDBFN0QyQ0UgLyogUmVm
ZXJyZXJQb2xpY3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVm
ZXJyZXJQb2xpY3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDQTNCRjY3QjEw
RDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0E2QzE1MkYyMjBCNEE1NTAwNTVDQkZDIC8qIEpTSURC
UmVxdWVzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0lEQlJlcXVlc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTZD
MTUzNzIyMEQxRUIzMDA1NUNCRkMgLyogSlNJREJDdXJzb3JDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJDdXJzb3JDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDQTZDMTUzODIyMEQxRUIzMDA1NUNCRkMgLyogSlNJREJD
dXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDQUU5RjkwRDE0NjQ0MUYwMDBDMjQ1QjAgLyogQ1NTQXNwZWN0UmF0aW9WYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NBc3BlY3RSYXRp
b1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0FFOUY5MEUxNDY0NDFG
MDAwQzI0NUIwIC8qIENTU0FzcGVjdFJhdGlvVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDQjM4RkQ0QTFDQ0NGMkREMDA1OTJBM0YgLyogUGVyZm9ybWFuY2VFbnRyeS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZUVudHJ5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwODQ1LDggKzIwODQ3LDYgQEAKIAkJ
CQlCQ0NCQUQzQTBDMThCRkY4MDBDRTg5MEYgLyogSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Ki8sCiAJCQkJQkM1MTU4MEEwQzAzRDQwNDAwOEJCMEVFIC8qIEpTSFRNTERvY3VtZW50Q3VzdG9t
LmNwcCAqLywKIAkJCQlENkY3OTYwQzE2NkZGRUNFMDA3NkREMTggLyogSlNIVE1MVGVtcGxhdGVF
bGVtZW50Q3VzdG9tLmNwcCAqLywKLQkJCQk1MTJCREI0QzFDNDZCMEZGMDA2NDk0REYgLyogSlNJ
REJDdXJzb3JDdXN0b20uY3BwICovLAotCQkJCTUxNDEyOThEMUM1RkQ3RTkwMDU5RTcxNCAvKiBK
U0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgKi8sCiAJCQkJNTE0MTI5OUExQzZDMTY2RDAw
NTlFNzE0IC8qIEpTSURCSW5kZXhDdXN0b20uY3BwICovLAogCQkJCTUxMUVGMkNFMTdGMEZERjEw
MEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCAqLywKIAkJCQk1MUUyNjkzMjFE
RDNCQzQzMDA2QjZBNTggLyogSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0yMDk4
MSw2ICsyMDk4MSw5IEBACiAJCQkJODMxQzQ2QzMxRjlFRTVFMDAwRUJENDUwIC8qIEpTRXh0ZW5k
YWJsZU1lc3NhZ2VFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJNDEzMUYzQjExRjk1NTI4MTAwNTk5
OTVBIC8qIEpTRmV0Y2hFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIwRDRFODY5NjAw
NzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgKi8sCisJCQkJQ0E2QzE1MzcyMjBEMUVCMzAw
NTVDQkZDIC8qIEpTSURCQ3Vyc29yQ3VzdG9tLmNwcCAqLywKKwkJCQlDQTZDMTUzODIyMEQxRUIz
MDA1NUNCRkMgLyogSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwICovLAorCQkJCUNBNkMx
NTJGMjIwQjRBNTUwMDU1Q0JGQyAvKiBKU0lEQlJlcXVlc3RDdXN0b20uY3BwICovLAogCQkJCTQx
MEI3RTcxMTA0NUZBQjAwMEQ4MjI0RiAvKiBKU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAgKi8sCiAJ
CQkJQTE2NzdFMjQyMTQ0NTMyODAwQTA4QzM0IC8qIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
Q3VzdG9tLmNwcCAqLywKIAkJCQlBMTBENkU5NDIxNDRDOTk4MDBGREQxNEQgLyogSlNQYXltZW50
UmVzcG9uc2VDdXN0b20uY3BwICovLApAQCAtMzA1MDQsNiArMzA1MDcsNyBAQAogCQkJCTdDNzNG
QjBEMTkxRUY1QTgwMDdERTA2MSAvKiBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTU3MkI0MDJDMjE3NjkwMjAwMDBBRDQzRSAvKiBKU1VzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NB
ODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0E2QzE1
MzAyMjBCOThDQzAwNTVDQkZDIC8qIEpTVmFsdWVJbldyYXBwZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJFOEVGMDRCMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJFOEVGMDREMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2tM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkU3OTE0OTFGOTdFMDFBMDAxOTk3MzkgLyogSlNW
aXNpYmlsaXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCmluZGV4IGJhZmUyZmUwYmY0MjdhZjljMTRh
MjE3OTQ1YjZiMjNiZDA2YzliOTMuLjk2MTY1ZWNkMzQ3ZWU0OThjYjJlMjgzNDg3MjE0NWU4ZTE2
Y2YyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29y
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1
c3RvbS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAKQEAgLTM1LDExICsz
NiwyNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorSlND
OjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjprZXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAor
eworICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKHN0YXRlLCAqdGhpcywgd3JhcHBlZCgp
LmtleVdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsICpzdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHdyYXBwZWQoKS5rZXkoKSk7CisgICAgfSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU0lEQkN1cnNvcjo6cHJpbWFyeUtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3
cmFwcGVkKCkucHJpbWFyeUtleVdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIHRvSlMo
c3RhdGUsICpzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHdyYXBwZWQoKS5wcmltYXJ5S2V5
KCkpOworICAgIH0pOworfQorCiB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvJiBjdXJzb3IgPSB3cmFwcGVk
KCk7CiAgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJzb3IucmVxdWVzdCgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVxdWVzdCk7CisgICAgY3Vyc29yLmtleVdyYXBwZXIoKS52
aXNpdCh2aXNpdG9yKTsKKyAgICBjdXJzb3IucHJpbWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNp
dG9yKTsKIH0KIAogSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1
ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAKaW5kZXggOGMzMjNiNjAxMGY1NmUyNDAwN2VkZGY3ZWUyM2QwMDI1YzQ2
YzU0Yi4uZjQzNTAxY2Y5NGI0MTFmOGVkOTZjZGI4ZDc2YzZmMDU4ZDUxNTcwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVl
Q3VzdG9tLmNwcApAQCAtMjgsMTUgKzI4LDI0IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJD
dXJzb3JXaXRoVmFsdWUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwSW5saW5lcy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCitKU0M6OkpT
VmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY2FjaGVkUHJvcGVydHlWYWx1ZShzdGF0ZSwgKnRoaXMsIHdy
YXBwZWQoKS52YWx1ZVdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXpl
SURCVmFsdWVUb0pTVmFsdWUoc3RhdGUsIHdyYXBwZWQoKS52YWx1ZSgpKTsKKyAgICB9KTsKK30K
Kwogdm9pZCBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKHZpc2l0b3IpOworICAgIHdyYXBwZWQoKS52YWx1ZVdyYXBwZXIoKS52aXNpdCh2aXNp
dG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmU3MTBhMTYw
OWFkNWQwZDUzNTM4ODhjYzBhOWM1NzVkZjIxMDhhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0lEQlJl
cXVlc3QuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgor
I2luY2x1ZGUgIkpTSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSlNJREJEYXRhYmFzZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCitKU0M6OkpTVmFsdWUg
SlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAoreworICAg
IHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKHN0YXRlLCAqdGhpcywgd3JhcHBlZCgpLnJlc3Vs
dFdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB3cmFwcGVkKCkucmVzdWx0
KCk7CisgICAgICAgIGlmIChVTkxJS0VMWShyZXN1bHQuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAg
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkp
OworICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIElEQlJlcXVlc3Q6OlJlc3VsdCByZXN1bHRWYWx1ZSA9IHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24ocmVz
dWx0VmFsdWUsIFsmc3RhdGVdIChSZWZQdHI8SURCQ3Vyc29yPiYgY3Vyc29yKSB7CisgICAgICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPElEQkN1cnNvcj4+KHN0YXRlLCAq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwg
dGhyb3dTY29wZSwgY3Vyc29yLmdldCgpKTsKKyAgICAgICAgfSwgWyZzdGF0ZV0gKFJlZlB0cjxJ
REJEYXRhYmFzZT4mIGRhdGFiYXNlKSB7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlM8
SURMSW50ZXJmYWNlPElEQkRhdGFiYXNlPj4oc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB0aHJvd1Njb3BlLCBkYXRhYmFzZS5n
ZXQoKSk7CisgICAgICAgIH0sIFsmc3RhdGVdIChJREJLZXlEYXRhIGtleURhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0b0pTPElETElEQktleURhdGE+KHN0YXRlLCAqanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YSk7CisgICAg
ICAgIH0sIFsmc3RhdGVdIChWZWN0b3I8SURCS2V5RGF0YT4ga2V5RGF0YXMpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0b0pTPElETFNlcXVlbmNlPElETElEQktleURhdGE+PihzdGF0ZSwgKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleURh
dGFzKTsKKyAgICAgICAgfSwgWyZzdGF0ZV0gKElEQlZhbHVlIHZhbHVlKSB7CisgICAgICAgICAg
ICByZXR1cm4gdG9KUzxJRExJREJWYWx1ZT4oc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZSk7CisgICAgICAgIH0sIFsm
c3RhdGVdIChWZWN0b3I8SURCVmFsdWU+IHZhbHVlcykgeworICAgICAgICAgICAgcmV0dXJuIHRv
SlM8SURMU2VxdWVuY2U8SURMSURCVmFsdWU+PihzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSksIHZhbHVlcyk7CisgICAgICAgIH0s
IFtdICh1aW50NjRfdCBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiB0b0pTPElETFVuc2ln
bmVkTG9uZ0xvbmc+KG51bWJlcik7CisgICAgICAgIH0sIFtdIChJREJSZXF1ZXN0OjpOdWxsUmVz
dWx0VHlwZSBvdGhlcikgeworICAgICAgICAgICAgaWYgKG90aGVyID09IElEQlJlcXVlc3Q6Ok51
bGxSZXN1bHRUeXBlOjpFbXB0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCit2b2lkIEpTSURCUmVxdWVzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byYgcmVxdWVzdCA9IHdyYXBwZWQoKTsK
KyAgICByZXF1ZXN0LnJlc3VsdFdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKK30KKworfQorI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRl
eCA2ZDU4ODFlYTBlNjY0Y2JiY2UyYTg1ZjhkOWRlMDkzZmI0M2NjYWMwLi5lNDQ0M2RiYWZlZjA0
MWFhMTVkNDQxZGVlNTUxZGM0NzU5OWFjZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAt
MTM3LDEyICsxMzcsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXN1
bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1
bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+Pihy
ZXN1bHRWYWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUpKSB7CiAgICAgICAgICAgICBtX2V4
ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJVbmV4
cGVjdGVkIHJlc3VsdCB0eXBlLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IFdURjo6Z2V0PFJlZlB0cjxJREJEYXRhYmFz
ZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0g
V1RGOjpnZXQ8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUpOwogICAgICAgICBtX2V4
ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNlUmVzdWx0KTsKICAgICAgICAg
ZGF0YWJhc2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMzYzLDcgKzM2Myw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwogICAgIH0KIAotICAgIHZvaWQgaGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV2ZW50JiBldmVudCkgb3ZlcnJpZGUK
KyAgICB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV2
ZW50JiBldmVudCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChldmVudC50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJh
Y2stPnNlbmRGYWlsdXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7CkBAIC0zNzksMTIgKzM3
OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0
VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3Vs
dFZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUpKSB7CiAgICAgICAgICAgICBlbmQoZmFsc2Up
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJzb3Ig
PSBXVEY6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CisgICAg
ICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVl
KTsKIAogICAgICAgICBpZiAobV9za2lwQ291bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3It
PmFkdmFuY2UobV9za2lwQ291bnQpLmhhc0V4Y2VwdGlvbigpKQpAQCAtNDA0LDEwICs0MDQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0
byogc3RhdGUgPSBjb250ZXh0LmV4ZWNTdGF0ZSgpOworICAgICAgICBhdXRvIGtleSA9ICB0b0pT
KCpzdGF0ZSwgKnN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGN1cnNvci0+a2V5KCkpOwor
ICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCpzdGF0ZSwgKnN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGN1cnNvci0+cHJpbWFyeUtleSgpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKnN0YXRlLCBjdXJzb3ItPnZhbHVlKCkpOwog
ICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IERhdGFFbnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAg
IC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGN1cnNvci0+a2V5KCksIFN0cmlu
ZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChjdXJzb3ItPnByaW1hcnlLZXkoKSwgU3RyaW5nKCksIHRydWUpKQotICAgICAg
ICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjdXJzb3ItPnZhbHVl
KCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3RlZFNjcmlw
dC53cmFwT2JqZWN0KGtleSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAgLnNldFByaW1h
cnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHByaW1hcnlLZXksIFN0cmluZygpLCB0
cnVlKSkKKyAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
dmFsdWUsIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAg
IG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUoZGF0YUVudHJ5KSk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>