<?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>127866</bug_id>
          
          <creation_ts>2014-01-29 16:27:12 -0800</creation_ts>
          <short_desc>IDB: ObjectStore cursor advance() support</short_desc>
          <delta_ts>2014-01-30 14:22:54 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>973516</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2014-01-29 16:27:12 -0800</bug_when>
    <thetext>IDB: ObjectStore cursor advance() support

&lt;rdar://problem/15779645&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973921</commentid>
    <comment_count>1</comment_count>
      <attachid>222714</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 12:54:57 -0800</bug_when>
    <thetext>Created attachment 222714
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973968</commentid>
    <comment_count>2</comment_count>
      <attachid>222725</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 13:31:18 -0800</bug_when>
    <thetext>Created attachment 222725
Patch v2 - build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973986</commentid>
    <comment_count>3</comment_count>
      <attachid>222725</attachid>
    <who name="Martin Hock">mhock</who>
    <bug_when>2014-01-30 13:59:51 -0800</bug_when>
    <thetext>Comment on attachment 222725
Patch v2 - build fix

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:887
&gt; +        // There&apos;s no way to indicate an error to SQLite - we have to return a sorting decision.
&gt; +        // We arbitrarily choose &quot;A &gt; B&quot;
&gt; +        return 1;

I would suggest that even if the data is not deserializable, you still write a collation function that obeys the properties here: http://www.sqlite.org/c3ref/create_collation.html
Otherwise, &quot;the behavior of SQLite is undefined&quot;.
I think it would be best if you put all un-deserializable things together, maybe before everything else.  So you would always try to deserialize both things, even if the first one can&apos;t be deserialized.  When comparing two un-deserializable things, just call memcmp.

You may also want to consider performing sqlite3_interrupte():
http://sqlite.1065341.n5.nabble.com/Signaling-errors-from-collation-functions-td43419.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973988</commentid>
    <comment_count>4</comment_count>
      <attachid>222725</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-30 14:04:07 -0800</bug_when>
    <thetext>Comment on attachment 222725
Patch v2 - build fix

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBIdentifier.h:84
&gt; +    DatabaseProcessIDBConnection&amp; connection() const { return *m_connection; }

You should ASSERT(m_connection) here.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:43
&gt; +    std::unique_ptr&lt;SQLiteIDBCursor&gt; cursor = std::unique_ptr&lt;SQLiteIDBCursor&gt;(new SQLiteIDBCursor(transaction, cursorIdentifier, objectStoreID, indexID, cursorDirection, cursorType, taskType, keyRange));

This should use auto and make_unique&lt;&gt;

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.cpp:41
&gt; +SQLiteIDBTransaction::SQLiteIDBTransaction(UniqueIDBDatabaseBackingStoreSQLite* backingStore, const IDBIdentifier&amp; transactionIdentifier, IndexedDB::TransactionMode mode)

Could backingStore be a reference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973996</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 14:19:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 222725 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222725&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/IDBIdentifier.h:84
&gt; &gt; +    DatabaseProcessIDBConnection&amp; connection() const { return *m_connection; }
&gt; 
&gt; You should ASSERT(m_connection) here.

Fixed.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:43
&gt; &gt; +    std::unique_ptr&lt;SQLiteIDBCursor&gt; cursor = std::unique_ptr&lt;SQLiteIDBCursor&gt;(new SQLiteIDBCursor(transaction, cursorIdentifier, objectStoreID, indexID, cursorDirection, cursorType, taskType, keyRange));
&gt; 
&gt; This should use auto and make_unique&lt;&gt;

Using auto.

To use make_unique&lt;&gt; requires a public constructor or finding the right syntax for friending std::make_unique.

I can&apos;t figure out that syntax...  Will skip this for now.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.cpp:41
&gt; &gt; +SQLiteIDBTransaction::SQLiteIDBTransaction(UniqueIDBDatabaseBackingStoreSQLite* backingStore, const IDBIdentifier&amp; transactionIdentifier, IndexedDB::TransactionMode mode)
&gt; 
&gt; Could backingStore be a reference?

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973997</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 14:19:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974000</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 14:22:54 -0800</bug_when>
    <thetext>Sorry I&apos;d missed this comment before landing.

(In reply to comment #3)
&gt; (From update of attachment 222725 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222725&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:887
&gt; &gt; +        // There&apos;s no way to indicate an error to SQLite - we have to return a sorting decision.
&gt; &gt; +        // We arbitrarily choose &quot;A &gt; B&quot;
&gt; &gt; +        return 1;
&gt; 
&gt; I would suggest that even if the data is not deserializable, you still write a collation function that obeys the properties here: http://www.sqlite.org/c3ref/create_collation.html
&gt; Otherwise, &quot;the behavior of SQLite is undefined&quot;.

If the data coming in is bogus, then the behavior of the Indexed Database API is &quot;undefined&quot;, so we&apos;re not losing anything by being undefined in SQLite terms as well.

&gt; I think it would be best if you put all un-deserializable things together, maybe before everything else.  So you would always try to deserialize both things, even if the first one can&apos;t be deserialized.  When comparing two un-deserializable things, just call memcmp.

I think memcmp on blobs that are supposed to represent a complex object would be just as much of an undefined &quot;lie&quot; as this arbitrary decision.

&gt; You may also want to consider performing sqlite3_interrupte():
&gt; http://sqlite.1065341.n5.nabble.com/Signaling-errors-from-collation-functions-td43419.html

This is an interesting option that I wasn&apos;t aware of!  Definitely outside the scope of this patch (as bogus data already means IDB is acting in an undefined manner) but an interesting improvement in the future to give better error reporting.

Thanks for suggesting it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222714</attachid>
            <date>2014-01-30 12:54:57 -0800</date>
            <delta_ts>2014-01-30 13:31:18 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>47460</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTNmMTg4Li4xNWNhYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQjogT2JqZWN0U3RvcmUgY3Vyc29yIGFkdmFuY2UoKSBzdXBwb3J0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xNTc3OTY0NT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjc4NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgSURCS2V5RGF0YSBzb3J0aW5nIGZvciBkYXRhYmFzZSBjb2xsYXRpb246
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjpjb21wYXJlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmg6CisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlVHJhbnNhY3Rpb246OmRhdGFiYXNlKToKKwogMjAxNC0wMS0zMCAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFyeVNu
YXBzaG90dGVkUGx1Z0luIGlzIHNsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5RGF0YS5jcHAKaW5kZXggZWU3ZjVlNy4uYzg4ODNiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKQEAgLTIwMCw2ICsy
MDAsNTIgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBJ
REJLZXlEYXRhJiByZXN1bHQpCiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJy
YXkiLCByZXN1bHQuYXJyYXlWYWx1ZSwgYXJyYXlGdW5jdGlvbik7CiB9CiAKK2ludCBJREJLZXlE
YXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKQoreworICAgIGlmICh0eXBlID09
IElEQktleTo6SW52YWxpZFR5cGUpIHsKKyAgICAgICAgaWYgKG90aGVyLnR5cGUgIT0gSURCS2V5
OjpJbnZhbGlkVHlwZSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG90aGVy
LnR5cGUgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0gZWxzZSBpZiAob3RoZXIudHlwZSA9PSBJREJLZXk6OkludmFsaWRUeXBlKQorICAgICAgICBy
ZXR1cm4gMTsKKworICAgIC8vIFRoZSBJREJLZXk6OlR5cGUgZW51bSBpcyBpbiByZXZlcnNlIHNv
cnQgb3JkZXIuCisgICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkKKyAgICAgICAgcmV0dXJuIHR5
cGUgPCBvdGhlci50eXBlID8gMSA6IC0xOworCisgICAgLy8gVGhlIHR5cGVzIGFyZSB0aGUgc2Ft
ZSwgc28gaGFuZGxlIGFjdHVhbCB2YWx1ZSBjb21wYXJpc29uLgorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgSURCS2V5OjpJbnZhbGlkVHlwZToKKyAgICAgICAgLy8gSW52YWxpZFR5cGUg
c2hvdWxkIGhhdmUgYmVlbiBmdWxseSBoYW5kbGVkIGFib3ZlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIElEQktleTo6QXJyYXlUeXBl
OgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5VmFsdWUuc2l6ZSgpICYmIGkg
PCBvdGhlci5hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaW50IHJl
c3VsdCA9IGFycmF5VmFsdWVbaV0uY29tcGFyZShvdGhlci5hcnJheVZhbHVlW2ldKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheVZh
bHVlLnNpemUoKSA8IG90aGVyLmFycmF5VmFsdWUuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBpZiAoYXJyYXlWYWx1ZS5zaXplKCkgPiBvdGhlci5hcnJheVZhbHVlLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3Ry
aW5nVmFsdWUsIG90aGVyLnN0cmluZ1ZhbHVlKTsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6
CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIGlmIChudW1iZXJWYWx1ZSA9
PSBvdGhlci5udW1iZXJWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVtYmVyVmFsdWUgPiBvdGhlci5udW1iZXJWYWx1ZSA/IDEgOiAtMTsKKyAgICBjYXNlIElE
QktleTo6TWluVHlwZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA2YTRmNjRhLi5h
ZTgzZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0
YS5oCkBAIC01Miw2ICs1MiwxMiBAQCBzdHJ1Y3QgSURCS2V5RGF0YSB7CiAgICAgdm9pZCBlbmNv
ZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVj
b2RlciYsIElEQktleURhdGEmKTsKIAorICAgIC8vIGNvbXBhcmUoKSBoYXMgdGhlIHNhbWUgc2Vt
YW50aWNzIGFzIHN0cmNtcCgpLgorICAgIC8vICAgLSBSZXR1cm5zIG5lZ2F0aXZlIGlmIHRoaXMg
SURCS2V5RGF0YSBpcyBsZXNzIHRoYW4gb3RoZXIuCisgICAgLy8gICAtIFJldHVybnMgcG9zaXRp
dmUgaWYgdGhpcyBJREJLZXlEYXRhIGlzIGdyZWF0ZXIgdGhhbiBvdGhlci4KKyAgICAvLyAgIC0g
UmV0dXJucyB6ZXJvIGlmIHRoaXMgSURCS2V5RGF0YSBpcyBlcXVhbCB0byBvdGhlci4KKyAgICBp
bnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcik7CisKICAgICBJREJLZXk6OlR5cGUg
dHlwZTsKICAgICBWZWN0b3I8SURCS2V5RGF0YT4gYXJyYXlWYWx1ZTsKICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDNmMzFlMWQuLmVjOTU1NzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCkBAIC0zMDg1LDYgKzMwODUsNyBAQCBfX1pOSzdXZWJDb3JlMTFJREJL
ZXlSYW5nZTlpc09ubHlLZXlFdgogX19aTks3V2ViQ29yZTE1SURCS2V5UmFuZ2VEYXRhMjJtYXli
ZUNyZWF0ZUlEQktleVJhbmdlRXYKIF9fWk5LN1dlYkNvcmU2SURCS2V5N2lzVmFsaWRFdgogX19a
TjdXZWJDb3JlMTBJREJLZXlEYXRhNmRlY29kZUVSTlNfMTJLZXllZERlY29kZXJFUlMwXworX19a
TjdXZWJDb3JlMTBJREJLZXlEYXRhN2NvbXBhcmVFUktTMF8KIF9fWk43V2ViQ29yZTEwSURCS2V5
RGF0YUMxRVBLTlNfNklEQktleUUKIF9fWk43V2ViQ29yZTEwSURCS2V5UGF0aEMxRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMTBJREJLZXlQYXRoQzFFUktOM1dURjZWZWN0b3JJTlMxXzZT
dHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaAppbmRleCAwNTQ2ZjRmLi43NzdjN2VhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaApA
QCAtNDYsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpblByb2dyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9pblByb2dyZXNzOyB9CiAgICAgYm9vbCB3YXNSb2xsZWRCYWNrQnlTcWxp
dGUoKSBjb25zdDsKKworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGI7IH0KKwogcHJpdmF0ZToKICAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYjsKICAgICBi
b29sIG1faW5Qcm9ncmVzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1MWJjMjViLi45ZGZjYWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDUgKzEsNjcgQEAKIDIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCisgICAgICAgIElEQjogT2JqZWN0U3RvcmUgY3Vyc29yIGFkdmFuY2UoKSBz
dXBwb3J0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTc3OTY0NT4gYW5kIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4NjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQbHVtYiBjYWxscyB0aHJvdWdoIHRvIHRoZSBi
YWNraW5nIHN0b3JlOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvckluQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJh
c2U6OmFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1
ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUpOgorCisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
OgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFk
YXRhKTogVXBkYXRlIHNjaGVtYQorICAgICAgICAgIGZvciBSZWNvcmRzIHRhYmxlLgorICAgICAg
ICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3Rh
Ymxpc2hNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjplc3RhYmxpc2hUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpyZXNldFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dFJl
Y29yZCk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlOjpvcGVuQ3Vyc29yKTogQ3JlYXRlIGEgU1FMaXRlSURCQ3Vyc29yIG9iamVjdC4KKyAgICAg
ICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmFkdmFuY2VD
dXJzb3IpOiBDYWxsIHRocm91Z2ggdG8gdGhhdCBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjppdGVyYXRlQ3Vyc29yKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpp
ZGJLZXlDb2xsYXRlKTogUmVuYW1lZCBmb3IgY2xhcml0eS4KKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnVucmVnaXN0ZXJDdXJzb3IpOiBDbGVh
bnVwIG9wZW4gY3Vyc29ycy4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oOgorCisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6bWF5YmVDcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OlNRTGl0ZUlEQkN1cnNvcik6CisgICAgICAg
IChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6ZXN0YWJsaXNoU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCk6IFN0
dWJiZWQgZm9yIG5vdy4KKyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVP
YmplY3RTdG9yZUN1cnNvclN0YXRlbWVudCk6IENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgcXVlcnkg
Zm9yCisgICAgICAgICAgdGhlIHBhc3NlZCBpbiBJREJLZXlSYW5nZS4KKyAgICAgICAgKFdlYktp
dDo6U1FMaXRlSURCQ3Vyc29yOjphZHZhbmNlKTogU3RlcCB0aHJvdWdoIHRoYXQgcXVlcnkuCisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6aXRlcmF0ZSk6IFN0dWJiZWQgZm9yIG5v
dy4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJD
dXJzb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6aWRlbnRp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnRLZXkpOgorICAgICAgICAo
V2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnRQcmltYXJ5S2V5KToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjdXJyZW50VmFsdWUpOgorCisgICAgICAgIEFkZCBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBTUUxpdGVJREJUcmFuc2FjdGlvbiB0byBrZWVwIHRyYWNrIG9mIChh
bmQgY2xlYW4gdXApIGl0cyBvcGVuIGN1cnNvcnM6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6U1FMaXRlSURCVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6flNRTGl0ZUlEQlRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y2xlYXJDdXJzb3JzKToKKyAgICAgICAgKiBEYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5oOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246OnNxbGl0ZVRyYW5zYWN0aW9uKToKKworICAgICAg
ICBBZGQgYWNjZXNzb3JzIGZvciB0aGUgdHdvIGZpZWxkczoKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0lEQklkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYktpdDo6SURCSWRl
bnRpZmllcjo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OklEQklkZW50aWZpZXI6Omlk
KToKKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAx
NC0wMS0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAgSURC
OiBBZGQgbm8tb3AgcGx1bWJpbmcgZm9yIGRlbGV0ZURhdGFiYXNlIGFuZCBkZWxldGVSYW5nZQog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTEyCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURC
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9J
REJJZGVudGlmaWVyLmgKaW5kZXggYWIxMzEzOS4uZDFjYzQ2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJJZGVudGlmaWVyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJJZGVudGlmaWVyLmgK
QEAgLTgxLDYgKzgxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIW1fY29ubmVjdGlvbiAm
JiBtX2lkZW50aWZpZXIgPT0gLTE7CiAgICAgfQogCisgICAgRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbiYgY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX2Nvbm5lY3Rpb247IH0KKyAg
ICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKIHByaXZhdGU6
CiAgICAgLy8gSWYgYW55IG1lbWJlcnMgYXJlIGFkZGVkIHRoYXQgY2Fubm90IGJlIHNhZmVseSBj
b3BpZWQgYWNyb3NzIHRocmVhZHMsIGlzb2xhdGVkQ29weSgpIG11c3QgYmUgdXBkYXRlZC4KICAg
ICBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiBtX2Nvbm5lY3Rpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCmluZGV4IDhmMzM2YzEuLjhmMzdhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKICNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGllci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURC
RGF0YWJhc2VCYWNrZW5kLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0lEQktleURhdGEuaD4KQEAgLTg3NywxMSArODc2LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25z
dCBJCiAgICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KHJlc3VsdCwgZXJyb3JDb2RlLCBlcnJv
ck1lc3NhZ2UpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29ySW5CYWNr
aW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
Y3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBr
ZXlSYW5nZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKworICAgIGludDY0X3QgY3Vy
c29ySUQgPSAwOworICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwgY3Vyc29yRGlyZWN0
aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwga2V5UmFuZ2UsIGN1cnNvcklEKTsKKworICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICBlcnJvckNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIlVua25v
d24gZXJyb3Igb3BlbmluZyBjdXJzb3IgaW4gYmFja2luZyBzdG9yZSIpOworICAgIH0KIAotICAg
IHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIDAsIElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiYWR2YW5jaW5nIGN1cnNv
cnMgaW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIpKSk7CisgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY3Vyc29ySUQsIGVycm9yQ29kZSwg
ZXJyb3JNZXNzYWdlKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5DdXJz
b3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIHVp
bnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCkBAIC04OTQsOSAr
OTA0LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5DdXJzb3JJbkJhY2tpbmdT
dG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6YWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQpCiB7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudAorICAgIElEQktleURhdGEga2V5OworICAgIElEQktleURhdGEg
cHJpbWFyeUtleTsKKyAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAgaW50MzJfdCBlcnJvckNv
ZGUgPSAwOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmFkdmFuY2VDdXJzb3IoY3Vyc29ySWRlbnRpZmllciwgY291bnQsIGtleSwg
cHJpbWFyeUtleSwgdmFsdWUpOworCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVycm9y
Q29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIGVycm9y
TWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBlcnJvciBhZHZhbmNpbmcgY3Vyc29yIGlu
IGJhY2tpbmcgc3RvcmUiKTsKKyAgICB9CiAKLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
QXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJbkJh
Y2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCksIElEQktleURhdGEoKSwgVmVjdG9y
PGNoYXI+KCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiYWR2YW5jaW5nIGN1cnNvcnMgaW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIp
KSk7CisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRBZHZhbmNlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwg
a2V5LCBwcmltYXJ5S2V5LCB2YWx1ZSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKIH0KIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRh
JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCB1aW50MzJfdCBlcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQpAQCAtOTA3LDExICs5MjcsMjEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QKICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qoa2V5LCBw
cmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUo
KSksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiBpdGVyYXRlS2V5KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICBJ
REJLZXlEYXRhIGtleTsKKyAgICBJREJLZXlEYXRhIHByaW1hcnlLZXk7CisgICAgVmVjdG9yPGNo
YXI+IHZhbHVlOworICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29y
KGN1cnNvcklkZW50aWZpZXIsIGl0ZXJhdGVLZXksIGtleSwgcHJpbWFyeUtleSwgdmFsdWUpOwor
CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVycm9yQ29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiVW5rbm93biBlcnJvciBpdGVyYXRpbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKKyAg
ICB9CiAKLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZEl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElE
LCBJREJLZXlEYXRhKCksIElEQktleURhdGEoKSwgVmVjdG9yPGNoYXI+KCksIElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiaXRlcmF0aW5nIGN1cnNvcnMg
aW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIpKSk7CisgICAgcG9zdE1haW5UaHJl
YWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRJdGVy
YXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1
ZSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkSXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
CmluZGV4IDQzNWZiMDkuLjA4NGFkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlLmgKQEAgLTcxLDYgKzcxLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBnZXRLZXlSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNv
cmU6OklEQktleSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mIHJlc3VsdCwgUmVmUHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgPSAwOwor
CisgICAgdmlydHVhbCBib29sIG9wZW5DdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwg
V2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6
Q3Vyc29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJiwgaW50NjRfdCYgY3Vyc29ySUQpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgYWR2YW5jZUN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCB1aW50NjRfdCBjb3VudCwgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklE
QktleURhdGEmLCBWZWN0b3I8Y2hhcj4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJREJLZXlEYXRh
JiwgVmVjdG9yPGNoYXI+JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9T
UUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMGY1MTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMCww
ICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FM
aXRlSURCQ3Vyc29yLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJJREJTZXJpYWxpemF0aW9uLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUlEQlRyYW5zYWN0aW9uLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0
ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8c3FsaXRlMy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJ
REJDdXJzb3I+IFNRTGl0ZUlEQkN1cnNvcjo6bWF5YmVDcmVhdGUoU1FMaXRlSURCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29y
PiBjdXJzb3IgPSBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPihuZXcgU1FMaXRlSURC
Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JJZGVudGlmaWVyLCBvYmplY3RTdG9yZUlELCBpbmRl
eElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBrZXlSYW5nZSkpOwor
CisgICAgaWYgKCFjdXJzb3ItPmVzdGFibGlzaFN0YXRlbWVudCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBjdXJzb3I7Cit9CisKK1NRTGl0ZUlEQkN1cnNvcjo6U1FM
aXRlSURCQ3Vyc29yKFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURC
SWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2
NF90IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAsIG1fY3Vyc29ySWRlbnRpZmllcihjdXJzb3JJZGVudGlmaWVyKQorICAgICwg
bV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSUQpCisgICAgLCBtX2luZGV4SUQoaW5kZXhJRCkK
KyAgICAsIG1fY3Vyc29yRGlyZWN0aW9uKGN1cnNvckRpcmVjdGlvbikKKyAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCisgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlEKTsKK30KKworYm9vbCBTUUxpdGVJREJDdXJzb3I6OmVzdGFibGlzaFN0YXRl
bWVudCgpCit7CisgICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpCisgICAgICAgIHJldHVybiBjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCgpOworCisgICAg
cmV0dXJuIGNyZWF0ZU9iamVjdFN0b3JlQ3Vyc29yU3RhdGVtZW50KCk7Cit9CisKK2Jvb2wgU1FM
aXRlSURCQ3Vyc29yOjpjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCgpCit7CisgICAgTE9HX0VS
Uk9SKCJJbmRleCBjdXJzb3Igbm90IHlldCBzdXBwb3J0ZWQgKGluZGV4IGlkIGlzICVsbGkpIiwg
bV9pbmRleElEKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU1FMaXRlSURCQ3Vyc29y
OjpjcmVhdGVPYmplY3RTdG9yZUN1cnNvclN0YXRlbWVudCgpCit7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRh
YmFzZSA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCk7CisK
KyAgICBTdHJpbmcgbG93ZXJTUUw7CisgICAgaWYgKCFtX2tleVJhbmdlLmxvd2VyS2V5LmlzTnVs
bCkKKyAgICAgICAgbG93ZXJTUUwgPSBtX2tleVJhbmdlLmxvd2VyT3BlbiA/IEFTQ0lJTGl0ZXJh
bCgiQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkiKSA6IEFTQ0lJTGl0ZXJhbCgiQU5EIGtleSA+
IENBU1QoPyBBUyBURVhUKSIpOworCisgICAgU3RyaW5nIHVwcGVyU1FMOworICAgIGlmICghbV9r
ZXlSYW5nZS51cHBlcktleS5pc051bGwpCisgICAgICAgIGxvd2VyU1FMID0gbV9rZXlSYW5nZS51
cHBlck9wZW4gPyBBU0NJSUxpdGVyYWwoIkFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIikgOiBB
U0NJSUxpdGVyYWwoIkFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkiKTsKKworICAgIFN0cmluZyBv
cmRlclNRTDsKKyAgICBpZiAobV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246Ok5leHQgfHwgbV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSkKKyAgICAgICAgb3JkZXJTUUwgPSBBU0NJSUxpdGVy
YWwoIiBPUkRFUiBCWSBrZXk7Iik7CisgICAgZWxzZQorICAgICAgICBvcmRlclNRTCA9IEFTQ0lJ
TGl0ZXJhbCgiIE9SREVSIEJZIGtleSBERVNDOyIpOworCisgICAgU3RyaW5nIHNxbCA9IEFTQ0lJ
TGl0ZXJhbCgiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IikgKyBsb3dlclNRTCArIHVwcGVyU1FMICsgb3JkZXJTUUw7CisKKyAgICBMT0coSURC
LCAiQ3JlYXRpbmcgY3Vyc29yIHdpdGggU1FMIHF1ZXJ5OiBcIiVzXCIiLCBzcWwudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBtX3N0YXRlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihkYXRhYmFzZSwgc3FsKTsKKworICAgIGlmIChtX3N0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rCisgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgbV9vYmpl
Y3RTdG9yZUlEKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgY3Vyc29yIHN0YXRlbWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IG5leHRCaW5kQXJndW1lbnQgPSAyOworCisgICAgaWYgKCFsb3dlclNRTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc2VyaWFs
aXplSURCS2V5RGF0YShtX2tleVJhbmdlLmxvd2VyS2V5KTsKKyAgICAgICAgaWYgKG1fc3RhdGVt
ZW50LT5iaW5kQmxvYihuZXh0QmluZEFyZ3VtZW50KyssIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXIt
PnNpemUoKSkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCF1cHBlclNRTC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc2VyaWFsaXplSURCS2V5RGF0YShtX2tl
eVJhbmdlLnVwcGVyS2V5KTsKKyAgICAgICAgaWYgKG1fc3RhdGVtZW50LT5iaW5kQmxvYihuZXh0
QmluZEFyZ3VtZW50LCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vyc29yIHN0
YXRlbWVudCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlSURCQ3Vyc29yOjphZHZhbmNlKHVp
bnQ2NF90IGNvdW50KQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2Fj
dGlvbigpKTsKKyAgICBBU1NFUlQobV9zdGF0ZW1lbnQpOworCisgICAgaWYgKG1fY29tcGxldGVk
KSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGEgY29tcGxldGVkIGN1
cnNvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9
IG1fc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7
CisgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgU1FMaXRlRGF0
YWJhc2UmIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0
YWJhc2UoKTsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIC0gKCVp
KSAlcyIsIHJlc3VsdCwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX2NvbXBs
ZXRlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8
Y2hhcj4ga2V5RGF0YTsKKyAgICBtX3N0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDAs
IGtleURhdGEpOworCisgICAgSURCS2V5RGF0YSBrZXk7CisgICAgaWYgKCFkZXNlcmlhbGl6ZUlE
QktleURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5RGF0YS5kYXRhKCkp
LCBrZXlEYXRhLnNpemUoKSwga2V5KSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBk
ZXNlcmlhbGl6ZSBrZXkgZGF0YSBmcm9tIGRhdGFiYXNlIHdoaWxlIGFkdmFuY2luZyBjdXJzb3Ii
KTsKKyAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbV9zdGF0ZW1lbnQtPmdldENvbHVtbkJsb2JBc1ZlY3RvcigxLCBrZXlEYXRh
KTsKKworICAgIG1fY3VycmVudEtleSA9IGtleTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0g
a2V5OworICAgIG1fY3VycmVudFZhbHVlID0ga2V5RGF0YTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFNRTGl0ZUlEQkN1cnNvcjo6aXRlcmF0ZShjb25zdCBXZWJDb3JlOjpJREJLZXlE
YXRhJiB0YXJnZXRLZXkpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5z
YWN0aW9uKCkpOworICAgIEFTU0VSVChtX3N0YXRlbWVudCk7CisKKyAgICBMT0dfRVJST1IoIklE
QkN1cnNvci5pdGVyYXRlIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5o
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRl
SURCQ3Vyc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxOTk1NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2lmbmRlZiBTUUxpdGVJREJDdXJzb3JfaAorI2RlZmluZSBTUUxpdGVJREJDdXJzb3JfaAorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiSURCSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJh
c2VCYWNrZW5kLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JREJLZXlEYXRhLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JREJLZXlSYW5nZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRl
bWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBDdXJzb3JEaXJlY3Rpb247
CitlbnVtIGNsYXNzIEN1cnNvclR5cGU7Cit9CisKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOworCitjbGFzcyBTUUxpdGVJREJDdXJzb3Igewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNRTGl0ZUlEQkN1cnNvcik7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+IG1heWJlQ3JlYXRlKFNRTGl0
ZUlEQlRyYW5zYWN0aW9uKiwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
aW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIFdlYkNvcmU6OkluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uLCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvclR5cGUsIFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIGNvbnN0IFdlYkNvcmU6OklEQktleVJh
bmdlRGF0YSYpOworCisgICAgY29uc3QgSURCSWRlbnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1fY3Vyc29ySWRlbnRpZmllcjsgfQorICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KKworICAgIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmIGN1cnJlbnRLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRLZXk7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBjdXJyZW50UHJpbWFy
eUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0KKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVl
OyB9CisKKyAgICBib29sIGFkdmFuY2UodWludDY0X3QgY291bnQpOworICAgIGJvb2wgaXRlcmF0
ZShjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiB0YXJnZXRLZXkpOworCitwcml2YXRlOgorICAg
IFNRTGl0ZUlEQkN1cnNvcihTUUxpdGVJREJUcmFuc2FjdGlvbiosIGNvbnN0IElEQklkZW50aWZp
ZXImIGN1cnNvcklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRl
eElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6SW5kZXhl
ZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBj
b25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsKKworICAgIGJvb2wgZXN0YWJsaXNoU3Rh
dGVtZW50KCk7CisgICAgYm9vbCBjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCgpOworICAgIGJv
b2wgY3JlYXRlT2JqZWN0U3RvcmVDdXJzb3JTdGF0ZW1lbnQoKTsKKworICAgIFNRTGl0ZUlEQlRy
YW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOworICAgIElEQklkZW50aWZpZXIgbV9jdXJzb3JJZGVu
dGlmaWVyOworICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGludDY0X3QgbV9pbmRl
eElEOworICAgIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1fY3Vyc29yRGly
ZWN0aW9uOworICAgIFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSBtX2tleVJhbmdlOworCisgICAg
V2ViQ29yZTo6SURCS2V5RGF0YSBtX2N1cnJlbnRLZXk7CisgICAgV2ViQ29yZTo6SURCS2V5RGF0
YSBtX2N1cnJlbnRQcmltYXJ5S2V5OworICAgIFZlY3RvcjxjaGFyPiBtX2N1cnJlbnRWYWx1ZTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RhdGVt
ZW50OworCisgICAgYm9vbCBtX2NvbXBsZXRlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQorI2VuZGlmIC8vIFNRTGl0ZUlEQkN1cnNvcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFu
c2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZDgyMzg2ZS4uNjI2ZTc2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
U1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcApAQCAtMjcsMTYg
KzI3LDIxIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFC
QVNFX1BST0NFU1MpCiAKKyNpbmNsdWRlICJTUUxpdGVJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SW5kZXhlZERCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIGludDY0X3QgbmV4dEN1cnNvcklEID0g
MTsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpTUUxpdGVJ
REJUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCitTUUxpdGVJREJUcmFuc2FjdGlvbjo6
U1FMaXRlSURCVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUq
IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQogICAgIDogbV9pZGVudGlmaWVyKHRy
YW5zYWN0aW9uSWRlbnRpZmllcikKICAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9iYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlKQogewogfQogCkBAIC00NCw2ICs0OSw5IEBAIFNRTGl0ZUlEQlRy
YW5zYWN0aW9uOjp+U1FMaXRlSURCVHJhbnNhY3Rpb24oKQogewogICAgIGlmIChpblByb2dyZXNz
KCkpCiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisKKyAgICAvLyBF
eHBsaWNpdGx5IGNsZWFyIGN1cnNvcnMsIGFzIHRoYXQgYWxzbyB1bnJlZ2lzdGVycyB0aGVtIGZy
b20gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgY2xlYXJDdXJzb3JzKCk7CiB9CiAKIApAQCAtNzEs
NiArNzksNyBAQCBib29sIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQoKQogYm9vbCBTUUxp
dGVJREJUcmFuc2FjdGlvbjo6cmVzZXQoKQogewogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBu
dWxscHRyOworICAgIGNsZWFyQ3Vyc29ycygpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04
NCw2ICs5MywzNiBAQCBib29sIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK1NRTGl0ZUlEQkN1cnNvciogU1FMaXRlSURCVHJhbnNhY3Rpb246
Om9wZW5DdXJzb3IoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCit7CisgICAgQVNTRVJUKG1fc3FsaXRlVHJh
bnNhY3Rpb24pOworICAgIGlmICghbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIElEQklkZW50aWZpZXIgY3Vyc29ySWRlbnRp
ZmllcihtX2lkZW50aWZpZXIuY29ubmVjdGlvbigpLCBuZXh0Q3Vyc29ySUQrKyk7CisKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fY3Vyc29ycy5hZGQoY3Vyc29ySWRlbnRpZmllciwgU1FMaXRlSURC
Q3Vyc29yOjptYXliZUNyZWF0ZSh0aGlzLCBjdXJzb3JJZGVudGlmaWVyLCBvYmplY3RTdG9yZUlE
LCBpbmRleElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBrZXlSYW5n
ZSkpOworCisgICAgQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIC8vIEl0IGlz
IHBvc3NpYmxlIHRoZSBjdXJzb3IgZmFpbGVkIHRvIGNyZWF0ZSBhbmQgd2UganVzdCBzdG9yZWQg
YSBudWxsIHZhbHVlLgorICAgIGlmICghYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkgeworICAg
ICAgICBtX2N1cnNvcnMucmVtb3ZlKGFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOworfQorCit2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjbGVhckN1cnNvcnMoKQor
eworICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBpbnN0ZWFkIG9mIGVhY2gga2V5L3ZhbHVl
IHBhaXIgYmVjYXVzZSBzdGQ6OnVuaXF1ZV9wdHI8PiBjYW4ndCBiZSBpdGVyYXRlZCBvdmVyIGRp
cmVjdGx5LgorICAgIGZvciAoYXV0byBrZXkgOiBtX2N1cnNvcnMua2V5cygpKQorICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+dW5yZWdpc3RlckN1cnNvcihtX2N1cnNvcnMuZ2V0KGtleSkpOworCisg
ICAgbV9jdXJzb3JzLmNsZWFyKCk7Cit9CisKIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246Omlu
UHJvZ3Jlc3MoKSBjb25zdAogewogICAgIHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxp
dGVJREJUcmFuc2FjdGlvbi5oCmluZGV4IGI5MDUwYjUuLjQ5ZjgzMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRy
YW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uaApAQCAtMjksNiArMjksOCBAQAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAogI2lu
Y2x1ZGUgIklEQklkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlQmFj
a2VuZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDE5ICszOSwyNiBAQCBjbGFzcyBT
UUxpdGVEYXRhYmFzZTsKIGNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwogCiBuYW1lc3BhY2UgSW5k
ZXhlZERCIHsKK2VudW0gY2xhc3MgQ3Vyc29yRGlyZWN0aW9uOworZW51bSBjbGFzcyBDdXJzb3JU
eXBlOwogZW51bSBjbGFzcyBUcmFuc2FjdGlvbk1vZGU7CiB9CiAKK3N0cnVjdCBJREJLZXlSYW5n
ZURhdGE7CisKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFNRTGl0ZUlEQkN1cnNv
cjsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOworCiBjbGFzcyBT
UUxpdGVJREJUcmFuc2FjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRlSURC
VHJhbnNhY3Rpb24pOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRl
SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4gY3JlYXRlKFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUgbW9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
U1FMaXRlSURCVHJhbnNhY3Rpb24+KG5ldyBTUUxpdGVJREJUcmFuc2FjdGlvbih0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG1vZGUpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTUUxp
dGVJREJUcmFuc2FjdGlvbj4obmV3IFNRTGl0ZUlEQlRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSwg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtb2RlKSk7CiAgICAgfQogCiAgICAgflNRTGl0ZUlEQlRy
YW5zYWN0aW9uKCk7CkBAIC02MSwxNiArNzAsMjQgQEAgcHVibGljOgogICAgIGJvb2wgcmVzZXQo
KTsKICAgICBib29sIHJvbGxiYWNrKCk7CiAKKyAgICBTUUxpdGVJREJDdXJzb3IqIG9wZW5DdXJz
b3IoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIFdlYkNvcmU6OkluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvclR5cGUsIFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIGNvbnN0IFdlYkNvcmU6OklEQktl
eVJhbmdlRGF0YSYpOworCiAgICAgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaW5Qcm9ncmVzcygpIGNv
bnN0OwogCisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24qIHNxbGl0ZVRyYW5zYWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlvbi5nZXQoKTsgfQorCiBwcml2YXRl
OgotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAg
IFNRTGl0ZUlEQlRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
KiwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBXZWJDb3JlOjpJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CisKKyAgICB2b2lkIGNsZWFyQ3Vyc29ycygpOwog
CiAgICAgSURCSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6SW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOwogCisgICAgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUqIG1fYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlvbjsKKyAgICBIYXNoTWFwPElE
QklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+PiBtX2N1cnNvcnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcAppbmRleCBm
MmUyM2Y0Li4zYWQ3NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJJREJTZXJpYWxpemF0
aW9uLmgiCisjaW5jbHVkZSAiU1FMaXRlSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURC
VHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KQEAgLTkyLDcgKzkzLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlOjpjcmVhdGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
aWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFJlY29yZHMgKG9i
amVjdFN0b3JlSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgQkxPQiBD
T0xMQVRFIElEQktFWSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Cisg
ICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFJlY29yZHMg
KG9iamVjdFN0b3JlSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgVEVY
VCBDT0xMQVRFIElEQktFWSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05G
TElDVCBSRVBMQUNFLCB2YWx1ZSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgewogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yNTQsOSArMjU1LDggQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNl
TWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckUKICAg
ICBpZiAoIW1fc3FsaXRlREIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRy
PFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlPiBwcm90ZWN0b3IodGhpcyk7CiAg
ICAgbV9zcWxpdGVEQi0+c2V0Q29sbGF0aW9uRnVuY3Rpb24oIklEQktFWSIsIFt0aGlzXShpbnQg
YUxlbmd0aCwgY29uc3Qgdm9pZCogYSwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGIpIHsKLSAg
ICAgICAgcmV0dXJuIGNvbGxhdGUoYUxlbmd0aCwgYSwgYkxlbmd0aCwgYik7CisgICAgICAgIHJl
dHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIpOwogICAgIH0pOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gZXh0cmFj
dEV4aXN0aW5nTWV0YWRhdGEoKTsKQEAgLTI3Niw3ICsyNzYsNyBAQCBib29sIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjplc3RhYmxpc2hUcmFuc2FjdGlvbihjb25zdCBJREJJ
ZGVudGlmaQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFtX3Ry
YW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBTUUxpdGVJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbW9kZSkpLmlzTmV3RW50cnkpIHsKKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtb2RlKSku
aXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZXN0YWJsaXNoIHRy
YW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGU6OnJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmll
ciYKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50
aWZpZXIpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24gPSBtX3RyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAg
aWYgKCF0cmFuc2FjdGlvbikgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcmVzZXQg
YSB0cmFuc2FjdGlvbiB0aGF0IGhhc24ndCBiZWVuIGVzdGFibGlzaGVkIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTY4NCw3ICs2ODQsNyBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlOjpwdXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhYwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZB
TFVFUyAoPywgPywgPyk7IikpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCBDQVNUKD8g
QVMgVEVYVCksID8pOyIpKTsKICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FM
UmVzdWx0T2sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigyLCBrZXlCdWZmZXItPmRhdGEo
KSwga2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTFJlc3VsdE9rCkBAIC03OTgsMTAgKzc5OCwxMDkg
QEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0S2V5UmFuZ2VS
ZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjb2xsYXRlKGludCBhTGVuZ3RoLCBj
b25zdCB2b2lkKiBhLCBpbnQgYkxlbmd0aCwgY29uc3Qgdm9pZCogYikKK2Jvb2wgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Om9wZW5DdXJzb3IoY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3Qg
aW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJbmRl
eGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlw
ZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSwgaW50NjRfdCYgY3Vy
c29ySUQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBTUUxpdGVJ
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rp
b25JZGVudGlmaWVyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Q
cm9ncmVzcygpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBvcGVuIGEgY3Vyc29y
IGluIGRhdGFiYXNlIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0
aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTUUxpdGVJREJDdXJz
b3IqIGN1cnNvciA9IHRyYW5zYWN0aW9uLT5vcGVuQ3Vyc29yKG9iamVjdFN0b3JlSUQsIGluZGV4
SUQsIGN1cnNvckRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGtleVJhbmdlKTsKKyAg
ICBpZiAoIWN1cnNvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jdXJzb3JzLnNl
dChjdXJzb3ItPmlkZW50aWZpZXIoKSwgY3Vyc29yKTsKKyAgICBjdXJzb3JJRCA9IGN1cnNvci0+
aWRlbnRpZmllcigpLmlkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6YWR2YW5jZUN1cnNvcihjb25zdCBJREJJZGVu
dGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCB1aW50NjRfdCBjb3VudCwgSURCS2V5RGF0YSYga2V5
LCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQoreworICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NF
UlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworCisgICAgU1FMaXRlSURCQ3Vyc29yKiBjdXJzb3Ig
PSBtX2N1cnNvcnMuZ2V0KGN1cnNvcklkZW50aWZpZXIpOworICAgIGlmICghY3Vyc29yKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGEgY3Vyc29yIHRoYXQgZG9lc24n
dCBleGlzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghY3Vyc29y
LT50cmFuc2FjdGlvbigpIHx8ICFjdXJzb3ItPnRyYW5zYWN0aW9uKCktPmluUHJvZ3Jlc3MoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gYWR2YW5jZSBhIGN1cnNvciB3aXRob3V0
IGFuIGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjdXJzb3ItPmFkdmFuY2UoY291bnQpKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGN1cnNvciAlbGxpIHN0ZXBzIGZh
aWxlZCIsIGNvdW50KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGtleSA9
IGN1cnNvci0+Y3VycmVudEtleSgpOworICAgIHByaW1hcnlLZXkgPSBjdXJzb3ItPmN1cnJlbnRQ
cmltYXJ5S2V5KCk7CisgICAgdmFsdWUgPSBjdXJzb3ItPmN1cnJlbnRWYWx1ZSgpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYgdGFyZ2V0S2V5LCBJREJLZXlEYXRhJiBrZXksIElEQktleURhdGEm
IHByaW1hcnlLZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURC
LT5pc09wZW4oKSk7CisKKyAgICBTUUxpdGVJREJDdXJzb3IqIGN1cnNvciA9IG1fY3Vyc29ycy5n
ZXQoY3Vyc29ySWRlbnRpZmllcik7CisgICAgaWYgKCFjdXJzb3IpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJBdHRlbXB0IHRvIGl0ZXJhdGUgYSBjdXJzb3IgdGhhdCBkb2Vzbid0IGV4aXN0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFjdXJzb3ItPnRyYW5zYWN0aW9u
KCkgfHwgIWN1cnNvci0+dHJhbnNhY3Rpb24oKS0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIExP
R19FUlJPUigiQXR0ZW1wdCB0byBpdGVyYXRlIGEgY3Vyc29yIHdpdGhvdXQgYW4gZXN0YWJsaXNo
ZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIWN1cnNvci0+aXRlcmF0ZSh0YXJnZXRLZXkpKSB7CisgICAgICAgIExP
R19FUlJPUigiQXR0ZW1wdCB0byBpdGVyYXRlIGN1cnNvciBmYWlsZWQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGtleSA9IGN1cnNvci0+Y3VycmVudEtleSgpOworICAg
IHByaW1hcnlLZXkgPSBjdXJzb3ItPmN1cnJlbnRQcmltYXJ5S2V5KCk7CisgICAgdmFsdWUgPSBj
dXJzb3ItPmN1cnJlbnRWYWx1ZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6aWRiS2V5Q29sbGF0ZShpbnQgYUxlbmd0
aCwgY29uc3Qgdm9pZCogYUJ1ZmZlciwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGJCdWZmZXIp
Cit7CisgICAgSURCS2V5RGF0YSBhLCBiOworICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlEYXRh
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhQnVmZmVyKSwgYUxlbmd0aCwgYSkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZGVzZXJpYWxpemUga2V5IEEgaW4gY29sbGF0aW9u
IGZ1bmN0aW9uLiIpOworCisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGluZGljYXRlIGFu
IGVycm9yIHRvIFNRTGl0ZSAtIHdlIGhhdmUgdG8gcmV0dXJuIGEgc29ydGluZyBkZWNpc2lvbi4K
KyAgICAgICAgLy8gV2UgYXJiaXRyYXJpbHkgY2hvb3NlICJBID4gQiIKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlEYXRhKHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihiQnVmZmVyKSwgYkxlbmd0aCwgYikpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gZGVzZXJpYWxpemUga2V5IEIgaW4gY29sbGF0aW9uIGZ1bmN0aW9uLiIpOwor
CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGluZGljYXRlIGFuIGVycm9yIHRvIFNRTGl0
ZSAtIHdlIGhhdmUgdG8gcmV0dXJuIGEgc29ydGluZyBkZWNpc2lvbi4KKyAgICAgICAgLy8gV2Ug
YXJiaXRyYXJpbHkgY2hvb3NlICJBID4gQiIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg
ICAgcmV0dXJuIGEuY29tcGFyZShiKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZTo6dW5yZWdpc3RlckN1cnNvcihTUUxpdGVJREJDdXJzb3IqIGN1cnNvcikK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKG1f
Y3Vyc29ycy5jb250YWlucyhjdXJzb3ItPmlkZW50aWZpZXIoKSkpOworICAgIG1fY3Vyc29ycy5y
ZW1vdmUoY3Vyc29yLT5pZGVudGlmaWVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3Fs
aXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZS5oCmluZGV4IDVjNjJmN2IuLjEzZTA0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aApAQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK2NsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNzIFNRTGl0ZUlEQlRy
YW5zYWN0aW9uOwogCiBjbGFzcyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSBm
aW5hbCA6IHB1YmxpYyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZSB7CkBAIC03Niw2ICs3
NywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldEtleVJlY29yZEZyb21PYmplY3RT
dG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5JiwgUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGdldEtleVJh
bmdlUmVjb3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXlS
YW5nZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQsIFJlZlB0cjxXZWJD
b3JlOjpJREJLZXk+JiByZXN1bHRLZXkpIG92ZXJyaWRlOwogCisgICAgdmlydHVhbCBib29sIG9w
ZW5DdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgV2ViQ29yZTo6SW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VE
YXRhJiwgaW50NjRfdCYgY3Vyc29ySUQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBhZHZh
bmNlQ3Vyc29yKGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90
IGNvdW50LCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFZlY3Rv
cjxjaGFyPiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQktleURh
dGEmLCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFZlY3Rvcjxj
aGFyPiYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1
cnNvciopOworCiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VEaXJlY3RvcnkpOwogCkBAIC04Myw3ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IGV4dHJhY3RFeGlzdGluZ01l
dGFkYXRhKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRh
dGE+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCk7CiAKLSAgICBpbnQgY29sbGF0
ZShpbnQgYUxlbmd0aCwgY29uc3Qgdm9pZCogYSwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGIp
OworICAgIGludCBpZGJLZXlDb2xsYXRlKGludCBhTGVuZ3RoLCBjb25zdCB2b2lkKiBhLCBpbnQg
Ykxlbmd0aCwgY29uc3Qgdm9pZCogYik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIFN0cmluZyBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnk7
CkBAIC05MSw2ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURCOwogCiAgICAgSGFzaE1hcDxJREJJZGVudGlmaWVy
LCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rpb24+PiBtX3RyYW5zYWN0aW9uczsK
KyAgICBIYXNoTWFwPElEQklkZW50aWZpZXIsIFNRTGl0ZUlEQkN1cnNvcio+IG1fY3Vyc29yczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMwYjU5MGEuLjQ5ZDlkNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTYwNCw2ICs2MDQsOCBAQAogCQk1MTAzMkYxOTE4MEY3M0JCMDA5NjFCQjcgLyogV2ViVG9EYXRh
YmFzZVByb2Nlc3NDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTAzMkYxNzE4MEY3M0JCMDA5NjFCQjcgLyogV2ViVG9EYXRhYmFzZVBy
b2Nlc3NDb25uZWN0aW9uLmggKi87IH07CiAJCTUxMDMyRjFEMTgwRjc5MTcwMDk2MUJCNyAvKiBE
YXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzJGMUIxODBGNzkxNzAw
OTYxQkI3IC8qIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCTUxMDMyRjFFMTgwRjc5MTcwMDk2MUJCNyAvKiBEYXRhYmFzZVRvV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMzJGMUMxODBGNzkxNzAwOTYxQkI3IC8qIERhdGFiYXNlVG9XZWJQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CisJCTUxMDY0RDM1MTg5NzgxQzQwMDRC
MkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwNjREMzMxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1
cnNvci5jcHAgKi87IH07CisJCTUxMDY0RDM2MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJD
dXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MDY0RDM0MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCAqLzsgfTsKIAkJNTEw
QUZGQjkxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEFGRkI3MTY1NDIwNDgwMDFC
QTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CiAJCTUxMEFGRkJBMTY1NDIwNDgw
MDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQUZGQjgxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291
cmNlTG9hZGVyLmggKi87IH07CiAJCTUxMENDODQ5MTYxM0M4NUMwMEQwM0VEMyAvKiBOZXR3b3Jr
UHJvY2Vzcy5hcHAgaW4gQ29weSBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTBDQzgwRTE2MTNDNzk5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuYXBwICovOyB9
OwpAQCAtMjI4Myw2ICsyMjg1LDggQEAKIAkJNTEwNUIwRDQxNjJGN0E3QTAwRTI3NzA5IC8qIE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBwYXRoID0gTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTA1QjBENTE2MkY3QTdBMDBFMjc3MDkgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5o
OyBwYXRoID0gTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNUIwRjMxNjMwODcyRTAwRTI3NzA5IC8qIE5ldHdvcmtQcm9j
ZXNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwNjREMzMxODk3ODFDNDAwNEIyRkVC
IC8qIFNRTGl0ZUlEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTUUxpdGVJREJDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTA2NEQzNDE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZUlEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTBBRkZCNzE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2Fk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VM
b2FkZXIuY3BwOyBwYXRoID0gTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEFGRkI4MTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNv
dXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJSZXNvdXJj
ZUxvYWRlci5oOyBwYXRoID0gTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTBBRkZDRTE2NTQyQ0JEMDAxQkEwNUUgLyogV2ViUmVzb3Vy
Y2VMb2FkZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW47
IHBhdGggPSBOZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDQ4MSw2ICs0NDg1LDggQEAKIAkJNTE2NTRFRjAxODRFRjI0
MTAwN0RDODM3IC8qIHNxbGl0ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTEwNjREMzMxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1cnNvci5j
cHAgKi8sCisJCQkJNTEwNjREMzQxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1cnNvci5o
ICovLAogCQkJCTUxMUQ4MjAwMTg1QkMyMTcwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlv
bi5jcHAgKi8sCiAJCQkJNTExRDgxRkQxODVCQkRFRTAwMUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uLmggKi8sCiAJCQkJNTE2NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAqLywKQEAgLTY0NjUsNiArNjQ3MSw3IEBACiAJ
CQkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkQ3QjEwRjQzNzhEMDA1OEMxNUEgLyogV2Vi
RHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMEVGOUYxMjMzMjY0MjAwN0QzQ0ZC
IC8qIFdlYkVkaXRDb21tYW5kUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMDY0RDM2MTg5
NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDMyRDdEMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJFZGl0b3JDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTk0N0E4MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTZBNEE1RDEyMEEyQ0NEMDBDMDVC
N0YgLyogQVBJRXJyb3IuaCBpbiBIZWFkZXJzICovLApAQCAtNzg4Miw2ICs3ODg5LDcgQEAKIAkJ
CQlCQzFCRTFFMTEyRDU0QTQxMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwRTVGRTYxMkQ2OTcxNjAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0
aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjA2MTEyRDZCQTkxMDAxMkE3
MkEgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxMDY0RDM1MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NENBQ0MxMkQ2NDI5MTAwNUM2N0IwIC8qIFdlYkdlb2xv
Y2F0aW9uTWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MTgyMTJENkNC
MUQwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjA3NDEyRDZCQzIwMDAxMkE3MkEgLyogV2ViR2Vv
bG9jYXRpb25Qb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222725</attachid>
            <date>2014-01-30 13:31:18 -0800</date>
            <delta_ts>2014-01-30 14:04:06 -0800</delta_ts>
            <desc>Patch v2 - build fix</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>47414</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTNmMTg4Li4xNWNhYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQjogT2JqZWN0U3RvcmUgY3Vyc29yIGFkdmFuY2UoKSBzdXBwb3J0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xNTc3OTY0NT4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjc4NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgSURCS2V5RGF0YSBzb3J0aW5nIGZvciBkYXRhYmFzZSBjb2xsYXRpb246
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjpjb21wYXJlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmg6CisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlVHJhbnNhY3Rpb246OmRhdGFiYXNlKToKKwogMjAxNC0wMS0zMCAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFyeVNu
YXBzaG90dGVkUGx1Z0luIGlzIHNsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5RGF0YS5jcHAKaW5kZXggZWU3ZjVlNy4uYzg4ODNiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKQEAgLTIwMCw2ICsy
MDAsNTIgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBJ
REJLZXlEYXRhJiByZXN1bHQpCiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJy
YXkiLCByZXN1bHQuYXJyYXlWYWx1ZSwgYXJyYXlGdW5jdGlvbik7CiB9CiAKK2ludCBJREJLZXlE
YXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKQoreworICAgIGlmICh0eXBlID09
IElEQktleTo6SW52YWxpZFR5cGUpIHsKKyAgICAgICAgaWYgKG90aGVyLnR5cGUgIT0gSURCS2V5
OjpJbnZhbGlkVHlwZSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG90aGVy
LnR5cGUgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0gZWxzZSBpZiAob3RoZXIudHlwZSA9PSBJREJLZXk6OkludmFsaWRUeXBlKQorICAgICAgICBy
ZXR1cm4gMTsKKworICAgIC8vIFRoZSBJREJLZXk6OlR5cGUgZW51bSBpcyBpbiByZXZlcnNlIHNv
cnQgb3JkZXIuCisgICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkKKyAgICAgICAgcmV0dXJuIHR5
cGUgPCBvdGhlci50eXBlID8gMSA6IC0xOworCisgICAgLy8gVGhlIHR5cGVzIGFyZSB0aGUgc2Ft
ZSwgc28gaGFuZGxlIGFjdHVhbCB2YWx1ZSBjb21wYXJpc29uLgorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgSURCS2V5OjpJbnZhbGlkVHlwZToKKyAgICAgICAgLy8gSW52YWxpZFR5cGUg
c2hvdWxkIGhhdmUgYmVlbiBmdWxseSBoYW5kbGVkIGFib3ZlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIElEQktleTo6QXJyYXlUeXBl
OgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5VmFsdWUuc2l6ZSgpICYmIGkg
PCBvdGhlci5hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaW50IHJl
c3VsdCA9IGFycmF5VmFsdWVbaV0uY29tcGFyZShvdGhlci5hcnJheVZhbHVlW2ldKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChhcnJheVZh
bHVlLnNpemUoKSA8IG90aGVyLmFycmF5VmFsdWUuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBpZiAoYXJyYXlWYWx1ZS5zaXplKCkgPiBvdGhlci5hcnJheVZhbHVlLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3Ry
aW5nVmFsdWUsIG90aGVyLnN0cmluZ1ZhbHVlKTsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6
CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIGlmIChudW1iZXJWYWx1ZSA9
PSBvdGhlci5udW1iZXJWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVtYmVyVmFsdWUgPiBvdGhlci5udW1iZXJWYWx1ZSA/IDEgOiAtMTsKKyAgICBjYXNlIElE
QktleTo6TWluVHlwZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA2YTRmNjRhLi5h
ZTgzZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0
YS5oCkBAIC01Miw2ICs1MiwxMiBAQCBzdHJ1Y3QgSURCS2V5RGF0YSB7CiAgICAgdm9pZCBlbmNv
ZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVj
b2RlciYsIElEQktleURhdGEmKTsKIAorICAgIC8vIGNvbXBhcmUoKSBoYXMgdGhlIHNhbWUgc2Vt
YW50aWNzIGFzIHN0cmNtcCgpLgorICAgIC8vICAgLSBSZXR1cm5zIG5lZ2F0aXZlIGlmIHRoaXMg
SURCS2V5RGF0YSBpcyBsZXNzIHRoYW4gb3RoZXIuCisgICAgLy8gICAtIFJldHVybnMgcG9zaXRp
dmUgaWYgdGhpcyBJREJLZXlEYXRhIGlzIGdyZWF0ZXIgdGhhbiBvdGhlci4KKyAgICAvLyAgIC0g
UmV0dXJucyB6ZXJvIGlmIHRoaXMgSURCS2V5RGF0YSBpcyBlcXVhbCB0byBvdGhlci4KKyAgICBp
bnQgY29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcik7CisKICAgICBJREJLZXk6OlR5cGUg
dHlwZTsKICAgICBWZWN0b3I8SURCS2V5RGF0YT4gYXJyYXlWYWx1ZTsKICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDNmMzFlMWQuLmVjOTU1NzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCkBAIC0zMDg1LDYgKzMwODUsNyBAQCBfX1pOSzdXZWJDb3JlMTFJREJL
ZXlSYW5nZTlpc09ubHlLZXlFdgogX19aTks3V2ViQ29yZTE1SURCS2V5UmFuZ2VEYXRhMjJtYXli
ZUNyZWF0ZUlEQktleVJhbmdlRXYKIF9fWk5LN1dlYkNvcmU2SURCS2V5N2lzVmFsaWRFdgogX19a
TjdXZWJDb3JlMTBJREJLZXlEYXRhNmRlY29kZUVSTlNfMTJLZXllZERlY29kZXJFUlMwXworX19a
TjdXZWJDb3JlMTBJREJLZXlEYXRhN2NvbXBhcmVFUktTMF8KIF9fWk43V2ViQ29yZTEwSURCS2V5
RGF0YUMxRVBLTlNfNklEQktleUUKIF9fWk43V2ViQ29yZTEwSURCS2V5UGF0aEMxRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMTBJREJLZXlQYXRoQzFFUktOM1dURjZWZWN0b3JJTlMxXzZT
dHJpbmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaAppbmRleCAwNTQ2ZjRmLi43NzdjN2VhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uaApA
QCAtNDYsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpblByb2dyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9pblByb2dyZXNzOyB9CiAgICAgYm9vbCB3YXNSb2xsZWRCYWNrQnlTcWxp
dGUoKSBjb25zdDsKKworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGI7IH0KKwogcHJpdmF0ZToKICAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYjsKICAgICBi
b29sIG1faW5Qcm9ncmVzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1MWJjMjViLi45ZGZjYWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDUgKzEsNjcgQEAKIDIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCisgICAgICAgIElEQjogT2JqZWN0U3RvcmUgY3Vyc29yIGFkdmFuY2UoKSBz
dXBwb3J0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTc3OTY0NT4gYW5kIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4NjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQbHVtYiBjYWxscyB0aHJvdWdoIHRvIHRoZSBi
YWNraW5nIHN0b3JlOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvckluQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJh
c2U6OmFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1
ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUpOgorCisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
OgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFk
YXRhKTogVXBkYXRlIHNjaGVtYQorICAgICAgICAgIGZvciBSZWNvcmRzIHRhYmxlLgorICAgICAg
ICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3Rh
Ymxpc2hNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjplc3RhYmxpc2hUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpyZXNldFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dFJl
Y29yZCk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlOjpvcGVuQ3Vyc29yKTogQ3JlYXRlIGEgU1FMaXRlSURCQ3Vyc29yIG9iamVjdC4KKyAgICAg
ICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmFkdmFuY2VD
dXJzb3IpOiBDYWxsIHRocm91Z2ggdG8gdGhhdCBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjppdGVyYXRlQ3Vyc29yKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpp
ZGJLZXlDb2xsYXRlKTogUmVuYW1lZCBmb3IgY2xhcml0eS4KKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnVucmVnaXN0ZXJDdXJzb3IpOiBDbGVh
bnVwIG9wZW4gY3Vyc29ycy4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oOgorCisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6bWF5YmVDcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OlNRTGl0ZUlEQkN1cnNvcik6CisgICAgICAg
IChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6ZXN0YWJsaXNoU3RhdGVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCk6IFN0
dWJiZWQgZm9yIG5vdy4KKyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjcmVhdGVP
YmplY3RTdG9yZUN1cnNvclN0YXRlbWVudCk6IENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgcXVlcnkg
Zm9yCisgICAgICAgICAgdGhlIHBhc3NlZCBpbiBJREJLZXlSYW5nZS4KKyAgICAgICAgKFdlYktp
dDo6U1FMaXRlSURCQ3Vyc29yOjphZHZhbmNlKTogU3RlcCB0aHJvdWdoIHRoYXQgcXVlcnkuCisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6aXRlcmF0ZSk6IFN0dWJiZWQgZm9yIG5v
dy4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJD
dXJzb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6aWRlbnRp
Zmllcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQkN1cnNvcjo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnRLZXkpOgorICAgICAgICAo
V2ViS2l0OjpTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnRQcmltYXJ5S2V5KToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlSURCQ3Vyc29yOjpjdXJyZW50VmFsdWUpOgorCisgICAgICAgIEFkZCBpbmZy
YXN0cnVjdHVyZSBmb3IgYSBTUUxpdGVJREJUcmFuc2FjdGlvbiB0byBrZWVwIHRyYWNrIG9mIChh
bmQgY2xlYW4gdXApIGl0cyBvcGVuIGN1cnNvcnM6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6U1FMaXRlSURCVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6flNRTGl0ZUlEQlRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y2xlYXJDdXJzb3JzKToKKyAgICAgICAgKiBEYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5oOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246OnNxbGl0ZVRyYW5zYWN0aW9uKToKKworICAgICAg
ICBBZGQgYWNjZXNzb3JzIGZvciB0aGUgdHdvIGZpZWxkczoKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0lEQklkZW50aWZpZXIuaDoKKyAgICAgICAgKFdlYktpdDo6SURCSWRl
bnRpZmllcjo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OklEQklkZW50aWZpZXI6Omlk
KToKKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAx
NC0wMS0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAgSURC
OiBBZGQgbm8tb3AgcGx1bWJpbmcgZm9yIGRlbGV0ZURhdGFiYXNlIGFuZCBkZWxldGVSYW5nZQog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTEyCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURC
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9J
REJJZGVudGlmaWVyLmgKaW5kZXggYWIxMzEzOS4uZDFjYzQ2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJJZGVudGlmaWVyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJJZGVudGlmaWVyLmgK
QEAgLTgxLDYgKzgxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIW1fY29ubmVjdGlvbiAm
JiBtX2lkZW50aWZpZXIgPT0gLTE7CiAgICAgfQogCisgICAgRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbiYgY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuICptX2Nvbm5lY3Rpb247IH0KKyAg
ICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKIHByaXZhdGU6
CiAgICAgLy8gSWYgYW55IG1lbWJlcnMgYXJlIGFkZGVkIHRoYXQgY2Fubm90IGJlIHNhZmVseSBj
b3BpZWQgYWNyb3NzIHRocmVhZHMsIGlzb2xhdGVkQ29weSgpIG11c3QgYmUgdXBkYXRlZC4KICAg
ICBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiBtX2Nvbm5lY3Rpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCmluZGV4IDhmMzM2YzEuLjhmMzdhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKICNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGllci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURC
RGF0YWJhc2VCYWNrZW5kLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0lEQktleURhdGEuaD4KQEAgLTg3NywxMSArODc2LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25z
dCBJCiAgICAgcmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KHJlc3VsdCwgZXJyb3JDb2RlLCBlcnJv
ck1lc3NhZ2UpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29ySW5CYWNr
aW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
Y3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBr
ZXlSYW5nZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKworICAgIGludDY0X3QgY3Vy
c29ySUQgPSAwOworICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwgY3Vyc29yRGlyZWN0
aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwga2V5UmFuZ2UsIGN1cnNvcklEKTsKKworICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICBlcnJvckNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIlVua25v
d24gZXJyb3Igb3BlbmluZyBjdXJzb3IgaW4gYmFja2luZyBzdG9yZSIpOworICAgIH0KIAotICAg
IHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIDAsIElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiYWR2YW5jaW5nIGN1cnNv
cnMgaW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIpKSk7CisgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY3Vyc29ySUQsIGVycm9yQ29kZSwg
ZXJyb3JNZXNzYWdlKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5DdXJz
b3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIHVp
bnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCkBAIC04OTQsOSAr
OTA0LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5DdXJzb3JJbkJhY2tpbmdT
dG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6YWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQpCiB7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudAorICAgIElEQktleURhdGEga2V5OworICAgIElEQktleURhdGEg
cHJpbWFyeUtleTsKKyAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAgaW50MzJfdCBlcnJvckNv
ZGUgPSAwOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmFkdmFuY2VDdXJzb3IoY3Vyc29ySWRlbnRpZmllciwgY291bnQsIGtleSwg
cHJpbWFyeUtleSwgdmFsdWUpOworCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVycm9y
Q29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIGVycm9y
TWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBlcnJvciBhZHZhbmNpbmcgY3Vyc29yIGlu
IGJhY2tpbmcgc3RvcmUiKTsKKyAgICB9CiAKLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
QXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJbkJh
Y2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCksIElEQktleURhdGEoKSwgVmVjdG9y
PGNoYXI+KCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiYWR2YW5jaW5nIGN1cnNvcnMgaW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIp
KSk7CisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRBZHZhbmNlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwg
a2V5LCBwcmltYXJ5S2V5LCB2YWx1ZSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKIH0KIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRh
JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCB1aW50MzJfdCBlcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQpAQCAtOTA3LDExICs5MjcsMjEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2
NF90IHJlcXVlc3RJRCwgY29uc3QKICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qoa2V5LCBw
cmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUo
KSksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiBpdGVyYXRlS2V5KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICBJ
REJLZXlEYXRhIGtleTsKKyAgICBJREJLZXlEYXRhIHByaW1hcnlLZXk7CisgICAgVmVjdG9yPGNo
YXI+IHZhbHVlOworICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29y
KGN1cnNvcklkZW50aWZpZXIsIGl0ZXJhdGVLZXksIGtleSwgcHJpbWFyeUtleSwgdmFsdWUpOwor
CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVycm9yQ29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiVW5rbm93biBlcnJvciBpdGVyYXRpbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKKyAg
ICB9CiAKLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZEl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElE
LCBJREJLZXlEYXRhKCksIElEQktleURhdGEoKSwgVmVjdG9yPGNoYXI+KCksIElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiaXRlcmF0aW5nIGN1cnNvcnMg
aW4gYmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIHlldCIpKSk7CisgICAgcG9zdE1haW5UaHJl
YWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRJdGVy
YXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1
ZSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkSXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
CmluZGV4IDQzNWZiMDkuLjA4NGFkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlLmgKQEAgLTcxLDYgKzcxLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBnZXRLZXlSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNv
cmU6OklEQktleSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mIHJlc3VsdCwgUmVmUHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgPSAwOwor
CisgICAgdmlydHVhbCBib29sIG9wZW5DdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwg
V2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6
Q3Vyc29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJiwgaW50NjRfdCYgY3Vyc29ySUQpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgYWR2YW5jZUN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCB1aW50NjRfdCBjb3VudCwgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklE
QktleURhdGEmLCBWZWN0b3I8Y2hhcj4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJREJLZXlEYXRh
JiwgVmVjdG9yPGNoYXI+JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9T
UUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40M2E0NDgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMCww
ICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FM
aXRlSURCQ3Vyc29yLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJJREJTZXJpYWxpemF0aW9uLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUlEQlRyYW5zYWN0aW9uLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0
ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8c3FsaXRlMy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJ
REJDdXJzb3I+IFNRTGl0ZUlEQkN1cnNvcjo6bWF5YmVDcmVhdGUoU1FMaXRlSURCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29y
PiBjdXJzb3IgPSBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPihuZXcgU1FMaXRlSURC
Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JJZGVudGlmaWVyLCBvYmplY3RTdG9yZUlELCBpbmRl
eElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBrZXlSYW5nZSkpOwor
CisgICAgaWYgKCFjdXJzb3ItPmVzdGFibGlzaFN0YXRlbWVudCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBjdXJzb3I7Cit9CisKK1NRTGl0ZUlEQkN1cnNvcjo6U1FM
aXRlSURCQ3Vyc29yKFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURC
SWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2
NF90IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQorICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAsIG1fY3Vyc29ySWRlbnRpZmllcihjdXJzb3JJZGVudGlmaWVyKQorICAgICwg
bV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSUQpCisgICAgLCBtX2luZGV4SUQoaW5kZXhJRCkK
KyAgICAsIG1fY3Vyc29yRGlyZWN0aW9uKGN1cnNvckRpcmVjdGlvbikKKyAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCisgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9v
YmplY3RTdG9yZUlEKTsKK30KKworYm9vbCBTUUxpdGVJREJDdXJzb3I6OmVzdGFibGlzaFN0YXRl
bWVudCgpCit7CisgICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpCisgICAgICAgIHJldHVybiBjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCgpOworCisgICAg
cmV0dXJuIGNyZWF0ZU9iamVjdFN0b3JlQ3Vyc29yU3RhdGVtZW50KCk7Cit9CisKK2Jvb2wgU1FM
aXRlSURCQ3Vyc29yOjpjcmVhdGVJbmRleEN1cnNvclN0YXRlbWVudCgpCit7CisgICAgTE9HX0VS
Uk9SKCJJbmRleCBjdXJzb3Igbm90IHlldCBzdXBwb3J0ZWQgKGluZGV4IGlkIGlzICVsbGkpIiwg
bV9pbmRleElEKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU1FMaXRlSURCQ3Vyc29y
OjpjcmVhdGVPYmplY3RTdG9yZUN1cnNvclN0YXRlbWVudCgpCit7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCkpOworICAgIFNRTGl0ZURhdGFiYXNlJiBkYXRh
YmFzZSA9IG1fdHJhbnNhY3Rpb24tPnNxbGl0ZVRyYW5zYWN0aW9uKCktPmRhdGFiYXNlKCk7CisK
KyAgICBTdHJpbmcgbG93ZXJTUUw7CisgICAgaWYgKCFtX2tleVJhbmdlLmxvd2VyS2V5LmlzTnVs
bCkKKyAgICAgICAgbG93ZXJTUUwgPSBtX2tleVJhbmdlLmxvd2VyT3BlbiA/IEFTQ0lJTGl0ZXJh
bCgiQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkiKSA6IEFTQ0lJTGl0ZXJhbCgiQU5EIGtleSA+
IENBU1QoPyBBUyBURVhUKSIpOworCisgICAgU3RyaW5nIHVwcGVyU1FMOworICAgIGlmICghbV9r
ZXlSYW5nZS51cHBlcktleS5pc051bGwpCisgICAgICAgIGxvd2VyU1FMID0gbV9rZXlSYW5nZS51
cHBlck9wZW4gPyBBU0NJSUxpdGVyYWwoIkFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIikgOiBB
U0NJSUxpdGVyYWwoIkFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkiKTsKKworICAgIFN0cmluZyBv
cmRlclNRTDsKKyAgICBpZiAobV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246Ok5leHQgfHwgbV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSkKKyAgICAgICAgb3JkZXJTUUwgPSBBU0NJSUxpdGVy
YWwoIiBPUkRFUiBCWSBrZXk7Iik7CisgICAgZWxzZQorICAgICAgICBvcmRlclNRTCA9IEFTQ0lJ
TGl0ZXJhbCgiIE9SREVSIEJZIGtleSBERVNDOyIpOworCisgICAgU3RyaW5nIHNxbCA9IEFTQ0lJ
TGl0ZXJhbCgiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IikgKyBsb3dlclNRTCArIHVwcGVyU1FMICsgb3JkZXJTUUw7CisKKyAgICBMT0coSURC
LCAiQ3JlYXRpbmcgY3Vyc29yIHdpdGggU1FMIHF1ZXJ5OiBcIiVzXCIiLCBzcWwudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBtX3N0YXRlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlU3RhdGVt
ZW50PihkYXRhYmFzZSwgc3FsKTsKKworICAgIGlmIChtX3N0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rCisgICAgICAgIHx8IG1fc3RhdGVtZW50LT5iaW5kSW50NjQoMSwgbV9vYmpl
Y3RTdG9yZUlEKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgY3Vyc29yIHN0YXRlbWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaW50IG5leHRCaW5kQXJndW1lbnQgPSAyOworCisgICAgaWYgKCFsb3dlclNRTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc2VyaWFs
aXplSURCS2V5RGF0YShtX2tleVJhbmdlLmxvd2VyS2V5KTsKKyAgICAgICAgaWYgKG1fc3RhdGVt
ZW50LT5iaW5kQmxvYihuZXh0QmluZEFyZ3VtZW50KyssIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXIt
PnNpemUoKSkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCF1cHBlclNRTC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gc2VyaWFsaXplSURCS2V5RGF0YShtX2tl
eVJhbmdlLnVwcGVyS2V5KTsKKyAgICAgICAgaWYgKG1fc3RhdGVtZW50LT5iaW5kQmxvYihuZXh0
QmluZEFyZ3VtZW50LCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vyc29yIHN0
YXRlbWVudCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlSURCQ3Vyc29yOjphZHZhbmNlKHVp
bnQ2NF90IGNvdW50KQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2Fj
dGlvbigpKTsKKyAgICBBU1NFUlQobV9zdGF0ZW1lbnQpOworCisgICAgaWYgKG1fY29tcGxldGVk
KSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGEgY29tcGxldGVkIGN1
cnNvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9
IG1fc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7
CisgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIC0gKCVpKSAlcyIsIHJlc3VsdCwgbV90cmFuc2FjdGlv
bi0+c3FsaXRlVHJhbnNhY3Rpb24oKS0+ZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIFZlY3RvcjxjaGFyPiBrZXlEYXRhOworICAgIG1fc3RhdGVtZW50LT5nZXRDb2x1bW5CbG9i
QXNWZWN0b3IoMCwga2V5RGF0YSk7CisKKyAgICBJREJLZXlEYXRhIGtleTsKKyAgICBpZiAoIWRl
c2VyaWFsaXplSURCS2V5RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlE
YXRhLmRhdGEoKSksIGtleURhdGEuc2l6ZSgpLCBrZXkpKSB7CisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGRlc2VyaWFsaXplIGtleSBkYXRhIGZyb20gZGF0YWJhc2Ugd2hpbGUgYWR2YW5j
aW5nIGN1cnNvciIpOworICAgICAgICBtX2NvbXBsZXRlZCA9IHRydWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX3N0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDEsIGtleURhdGEpOworCisgICAgbV9jdXJyZW50S2V5ID0ga2V5OworICAgIG1fY3VycmVudFBy
aW1hcnlLZXkgPSBrZXk7CisgICAgbV9jdXJyZW50VmFsdWUgPSBrZXlEYXRhOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlSURCQ3Vyc29yOjppdGVyYXRlKGNvbnN0IFdlYkNv
cmU6OklEQktleURhdGEmIHRhcmdldEtleSkKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+
c3FsaXRlVHJhbnNhY3Rpb24oKSk7CisgICAgQVNTRVJUKG1fc3RhdGVtZW50KTsKKworICAgIExP
R19FUlJPUigiSURCQ3Vyc29yLml0ZXJhdGUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRl
SURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9TUUxpdGVJREJDdXJzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zMDE5OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmgKQEAgLTAsMCArMSw5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIFNRTGl0ZUlEQkN1cnNvcl9oCisjZGVmaW5lIFNRTGl0ZUlEQkN1
cnNvcl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCisKKyNpbmNsdWRlICJJREJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVJhbmdlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIEluZGV4ZWREQiB7CitlbnVtIGNsYXNzIEN1cnNv
ckRpcmVjdGlvbjsKK2VudW0gY2xhc3MgQ3Vyc29yVHlwZTsKK30KKworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU1FMaXRlSURCVHJhbnNhY3Rpb247CisKK2NsYXNzIFNRTGl0ZUlE
QkN1cnNvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRlSURCQ3Vyc29yKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQkN1cnNvcj4gbWF5YmVD
cmVhdGUoU1FMaXRlSURCVHJhbnNhY3Rpb24qLCBjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJ
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgV2ViQ29y
ZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29y
VHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5UmFuZ2VEYXRhJik7CisKKyAgICBjb25zdCBJREJJZGVudGlmaWVyJiBpZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JJZGVudGlmaWVyOyB9CisgICAgU1FMaXRlSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsg
fQorCisgICAgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgY3VycmVudEtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGN1
cnJlbnRQcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFyeUtleTsgfQor
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgY3VycmVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50VmFsdWU7IH0KKworICAgIGJvb2wgYWR2YW5jZSh1aW50NjRfdCBjb3VudCk7CisgICAg
Ym9vbCBpdGVyYXRlKGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIHRhcmdldEtleSk7CisKK3By
aXZhdGU6CisgICAgU1FMaXRlSURCQ3Vyc29yKFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiwgY29uc3Qg
SURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBp
bnQ2NF90IGluZGV4SUQsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBXZWJD
b3JlOjpJbmRleGVkREI6OkN1cnNvclR5cGUsIFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYpOworCisgICAgYm9vbCBl
c3RhYmxpc2hTdGF0ZW1lbnQoKTsKKyAgICBib29sIGNyZWF0ZUluZGV4Q3Vyc29yU3RhdGVtZW50
KCk7CisgICAgYm9vbCBjcmVhdGVPYmplY3RTdG9yZUN1cnNvclN0YXRlbWVudCgpOworCisgICAg
U1FMaXRlSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CisgICAgSURCSWRlbnRpZmllciBt
X2N1cnNvcklkZW50aWZpZXI7CisgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgaW50
NjRfdCBtX2luZGV4SUQ7CisgICAgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
bV9jdXJzb3JEaXJlY3Rpb247CisgICAgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhIG1fa2V5UmFu
Z2U7CisKKyAgICBXZWJDb3JlOjpJREJLZXlEYXRhIG1fY3VycmVudEtleTsKKyAgICBXZWJDb3Jl
OjpJREJLZXlEYXRhIG1fY3VycmVudFByaW1hcnlLZXk7CisgICAgVmVjdG9yPGNoYXI+IG1fY3Vy
cmVudFZhbHVlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4gbV9zdGF0ZW1lbnQ7CisKKyAgICBib29sIG1fY29tcGxldGVkOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5B
QkxFKERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYgLy8gU1FMaXRlSURCQ3Vyc29yX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NR
TGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBkODIzODZlLi42
MjZlNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3Bw
CkBAIC0yNywxNiArMjcsMjEgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBF
TkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAorI2luY2x1ZGUgIlNRTGl0ZUlEQkN1cnNvci5oIgor
I2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbmRleGVkREIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0
aW9uLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgaW50NjRfdCBuZXh0
Q3Vyc29ySUQgPSAxOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotU1FMaXRlSURCVHJhbnNhY3Rp
b246OlNRTGl0ZUlEQlRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKK1NRTGl0ZUlEQlRy
YW5zYWN0aW9uOjpTUUxpdGVJREJUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiAgICAgOiBtX2lk
ZW50aWZpZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyKQogICAgICwgbV9tb2RlKG1vZGUpCisgICAg
LCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiB7CiB9CiAKQEAgLTQ0LDYgKzQ5LDkgQEAg
U1FMaXRlSURCVHJhbnNhY3Rpb246On5TUUxpdGVJREJUcmFuc2FjdGlvbigpCiB7CiAgICAgaWYg
KGluUHJvZ3Jlc3MoKSkKICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsK
KworICAgIC8vIEV4cGxpY2l0bHkgY2xlYXIgY3Vyc29ycywgYXMgdGhhdCBhbHNvIHVucmVnaXN0
ZXJzIHRoZW0gZnJvbSB0aGUgYmFja2luZyBzdG9yZS4KKyAgICBjbGVhckN1cnNvcnMoKTsKIH0K
IAogCkBAIC03MSw2ICs3OSw3IEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OmNvbW1pdCgp
CiBib29sIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpyZXNldCgpCiB7CiAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbiA9IG51bGxwdHI7CisgICAgY2xlYXJDdXJzb3JzKCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTg0LDYgKzkzLDM2IEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJvbGxi
YWNrKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorU1FMaXRlSURCQ3Vyc29yKiBTUUxpdGVJREJU
cmFuc2FjdGlvbjo6b3BlbkN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5k
ZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0
YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBBU1NFUlQo
bV9zcWxpdGVUcmFuc2FjdGlvbik7CisgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblBy
b2dyZXNzKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSURCSWRlbnRpZmllciBj
dXJzb3JJZGVudGlmaWVyKG1faWRlbnRpZmllci5jb25uZWN0aW9uKCksIG5leHRDdXJzb3JJRCsr
KTsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3JzLmFkZChjdXJzb3JJZGVudGlmaWVy
LCBTUUxpdGVJREJDdXJzb3I6Om1heWJlQ3JlYXRlKHRoaXMsIGN1cnNvcklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSUQsIGluZGV4SUQsIGN1cnNvckRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5
cGUsIGtleVJhbmdlKSk7CisKKyAgICBBU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworCisg
ICAgLy8gSXQgaXMgcG9zc2libGUgdGhlIGN1cnNvciBmYWlsZWQgdG8gY3JlYXRlIGFuZCB3ZSBq
dXN0IHN0b3JlZCBhIG51bGwgdmFsdWUuCisgICAgaWYgKCFhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKSB7CisgICAgICAgIG1fY3Vyc29ycy5yZW1vdmUoYWRkUmVzdWx0Lml0ZXJhdG9yKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3ZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OmNsZWFy
Q3Vyc29ycygpCit7CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGluc3RlYWQgb2YgZWFj
aCBrZXkvdmFsdWUgcGFpciBiZWNhdXNlIHN0ZDo6dW5pcXVlX3B0cjw+IGNhbid0IGJlIGl0ZXJh
dGVkIG92ZXIgZGlyZWN0bHkuCisgICAgZm9yIChhdXRvIGtleSA6IG1fY3Vyc29ycy5rZXlzKCkp
CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT51bnJlZ2lzdGVyQ3Vyc29yKG1fY3Vyc29ycy5nZXQo
a2V5KSk7CisKKyAgICBtX2N1cnNvcnMuY2xlYXIoKTsKK30KKwogYm9vbCBTUUxpdGVJREJUcmFu
c2FjdGlvbjo6aW5Qcm9ncmVzcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3FsaXRlVHJhbnNh
Y3Rpb24gJiYgbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
c3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKaW5kZXggYjkwNTBiNS4uNDlmODMwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
U1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5oCkBAIC0yOSw2ICsyOSw4
IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9D
RVNTKQogCiAjaW5jbHVkZSAiSURCSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSURC
RGF0YWJhc2VCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMTkgKzM5LDI2
IEBAIGNsYXNzIFNRTGl0ZURhdGFiYXNlOwogY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247CiAKIG5h
bWVzcGFjZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBDdXJzb3JEaXJlY3Rpb247CitlbnVtIGNs
YXNzIEN1cnNvclR5cGU7CiBlbnVtIGNsYXNzIFRyYW5zYWN0aW9uTW9kZTsKIH0KIAorc3RydWN0
IElEQktleVJhbmdlRGF0YTsKKwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgU1FM
aXRlSURCQ3Vyc29yOworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU7
CisKIGNsYXNzIFNRTGl0ZUlEQlRyYW5zYWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTUUxpdGVJREJUcmFuc2FjdGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4gY3JlYXRlKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZSkKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQlRyYW5zYWN0aW9uPiBj
cmVhdGUoVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUqIGJhY2tpbmdTdG9yZSwg
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBXZWJDb3JlOjpJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4obmV3IFNRTGl0ZUlEQlRyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbW9kZSkpOworICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFNRTGl0ZUlEQlRyYW5zYWN0aW9uPihuZXcgU1FMaXRlSURCVHJhbnNhY3Rpb24oYmFj
a2luZ1N0b3JlLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG1vZGUpKTsKICAgICB9CiAKICAgICB+
U1FMaXRlSURCVHJhbnNhY3Rpb24oKTsKQEAgLTYxLDE2ICs3MCwyNCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCByZXNldCgpOwogICAgIGJvb2wgcm9sbGJhY2soKTsKIAorICAgIFNRTGl0ZUlEQkN1cnNv
ciogb3BlbkN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgV2Vi
Q29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vy
c29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3QgV2Vi
Q29yZTo6SURCS2V5UmFuZ2VEYXRhJik7CisKICAgICBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpblBy
b2dyZXNzKCkgY29uc3Q7CiAKKyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiogc3FsaXRl
VHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uLmdldCgpOyB9
CisKIHByaXZhdGU6Ci0gICAgU1FMaXRlSURCVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSk7CisgICAgU1FMaXRlSURCVHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUqLCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKKworICAgIHZvaWQgY2xlYXJD
dXJzb3JzKCk7CiAKICAgICBJREJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBXZWJDb3Jl
OjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtX21vZGU7CiAKKyAgICBVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSogbV9iYWNraW5nU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOworICAg
IEhhc2hNYXA8SURCSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQkN1cnNvcj4+
IG1fY3Vyc29yczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwCmluZGV4IGYyZTIzZjQuLjNhZDc2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIklE
QlNlcmlhbGl6YXRpb24uaCIKKyNpbmNsdWRlICJTUUxpdGVJREJDdXJzb3IuaCIKICNpbmNsdWRl
ICJTUUxpdGVJREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgpAQCAtOTIsNyArOTMs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUg
UmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUws
IGtleSBCTE9CIENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCk7IikpIHsKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFC
TEUgUmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5J
UVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
OyIpKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBSZWNvcmRzIHRhYmxl
IGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI1NCw5ICsyNTUsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
OmdldE9yRQogICAgIGlmICghbV9zcWxpdGVEQikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU+IHByb3RlY3Rv
cih0aGlzKTsKICAgICBtX3NxbGl0ZURCLT5zZXRDb2xsYXRpb25GdW5jdGlvbigiSURCS0VZIiwg
W3RoaXNdKGludCBhTGVuZ3RoLCBjb25zdCB2b2lkKiBhLCBpbnQgYkxlbmd0aCwgY29uc3Qgdm9p
ZCogYikgewotICAgICAgICByZXR1cm4gY29sbGF0ZShhTGVuZ3RoLCBhLCBiTGVuZ3RoLCBiKTsK
KyAgICAgICAgcmV0dXJuIGlkYktleUNvbGxhdGUoYUxlbmd0aCwgYSwgYkxlbmd0aCwgYik7CiAg
ICAgfSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gbWV0YWRh
dGEgPSBleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSgpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIGJvb2wg
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmVzdGFibGlzaFRyYW5zYWN0aW9u
KGNvbnN0IElEQklkZW50aWZpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAg
ICBpZiAoIW1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjpjcmVhdGUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtb2RlKSkuaXNOZXdF
bnRyeSkgeworICAgIGlmICghbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgU1FMaXRlSURCVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG1vZGUpKS5pc05ld0VudHJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBl
c3RhYmxpc2ggdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGFscmVhZHkgZXhpc3RzIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cmVzZXRUcmFuc2FjdGlvbihjb25zdCBJ
REJJZGVudGlmaWVyJgogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgU1FM
aXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSWRlbnRpZmllcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1w
dCB0byByZXNldCBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzbid0IGJlZW4gZXN0YWJsaXNoZWQiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg0LDcgKzY4NCw3IEBAIGJvb2wgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dFJlY29yZChjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgewotICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRP
IFJlY29yZHMgVkFMVUVTICg/LCA/LCA/KTsiKSk7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMg
KD8sIENBU1QoPyBBUyBURVhUKSwgPyk7IikpOwogICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPawogICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9y
ZUlEKSAhPSBTUUxSZXN1bHRPawogICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDIsIGtleUJ1
ZmZlci0+ZGF0YSgpLCBrZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMUmVzdWx0T2sKQEAgLTc5OCwx
MCArNzk4LDEwOSBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpn
ZXRLZXlSYW5nZVJlY29yZEZyb21PYmplY3RTdG9yZShjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbnQgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNvbGxhdGUoaW50
IGFMZW5ndGgsIGNvbnN0IHZvaWQqIGEsIGludCBiTGVuZ3RoLCBjb25zdCB2b2lkKiBiKQorYm9v
bCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6b3BlbkN1cnNvcihjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaW50NjRfdCBpbmRleElELCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlLCBp
bnQ2NF90JiBjdXJzb3JJRCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKwor
ICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIG9w
ZW4gYSBjdXJzb3IgaW4gZGF0YWJhc2Ugd2l0aG91dCBhbiBlc3RhYmxpc2hlZCwgaW4tcHJvZ3Jl
c3MgdHJhbnNhY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFNR
TGl0ZUlEQkN1cnNvciogY3Vyc29yID0gdHJhbnNhY3Rpb24tPm9wZW5DdXJzb3Iob2JqZWN0U3Rv
cmVJRCwgaW5kZXhJRCwgY3Vyc29yRGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwga2V5
UmFuZ2UpOworICAgIGlmICghY3Vyc29yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2N1cnNvcnMuc2V0KGN1cnNvci0+aWRlbnRpZmllcigpLCBjdXJzb3IpOworICAgIGN1cnNvcklE
ID0gY3Vyc29yLT5pZGVudGlmaWVyKCkuaWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjphZHZhbmNlQ3Vyc29yKGNv
bnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50LCBJREJL
ZXlEYXRhJiBrZXksIElEQktleURhdGEmIHByaW1hcnlLZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3FsaXRlREIp
OworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBTUUxpdGVJREJDdXJz
b3IqIGN1cnNvciA9IG1fY3Vyc29ycy5nZXQoY3Vyc29ySWRlbnRpZmllcik7CisgICAgaWYgKCFj
dXJzb3IpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGFkdmFuY2UgYSBjdXJzb3Ig
dGhhdCBkb2Vzbid0IGV4aXN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFjdXJzb3ItPnRyYW5zYWN0aW9uKCkgfHwgIWN1cnNvci0+dHJhbnNhY3Rpb24oKS0+aW5Q
cm9ncmVzcygpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGEgY3Vy
c29yIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWN1cnNvci0+YWR2YW5jZShj
b3VudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGFkdmFuY2UgY3Vyc29yICVs
bGkgc3RlcHMgZmFpbGVkIiwgY291bnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAga2V5ID0gY3Vyc29yLT5jdXJyZW50S2V5KCk7CisgICAgcHJpbWFyeUtleSA9IGN1cnNv
ci0+Y3VycmVudFByaW1hcnlLZXkoKTsKKyAgICB2YWx1ZSA9IGN1cnNvci0+Y3VycmVudFZhbHVl
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiB0YXJnZXRLZXksIElEQktleURhdGEmIGtleSwg
SURCS2V5RGF0YSYgcHJpbWFyeUtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKKworICAgIFNRTGl0ZUlEQkN1cnNvciogY3Vyc29yID0g
bV9jdXJzb3JzLmdldChjdXJzb3JJZGVudGlmaWVyKTsKKyAgICBpZiAoIWN1cnNvcikgeworICAg
ICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gaXRlcmF0ZSBhIGN1cnNvciB0aGF0IGRvZXNuJ3Qg
ZXhpc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWN1cnNvci0+
dHJhbnNhY3Rpb24oKSB8fCAhY3Vyc29yLT50cmFuc2FjdGlvbigpLT5pblByb2dyZXNzKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGl0ZXJhdGUgYSBjdXJzb3Igd2l0aG91dCBh
biBlc3RhYmxpc2hlZCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmICghY3Vyc29yLT5pdGVyYXRlKHRhcmdldEtleSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGl0ZXJhdGUgY3Vyc29yIGZhaWxlZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAga2V5ID0gY3Vyc29yLT5jdXJyZW50
S2V5KCk7CisgICAgcHJpbWFyeUtleSA9IGN1cnNvci0+Y3VycmVudFByaW1hcnlLZXkoKTsKKyAg
ICB2YWx1ZSA9IGN1cnNvci0+Y3VycmVudFZhbHVlKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW50IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjppZGJLZXlDb2xsYXRl
KGludCBhTGVuZ3RoLCBjb25zdCB2b2lkKiBhQnVmZmVyLCBpbnQgYkxlbmd0aCwgY29uc3Qgdm9p
ZCogYkJ1ZmZlcikKK3sKKyAgICBJREJLZXlEYXRhIGEsIGI7CisgICAgaWYgKCFkZXNlcmlhbGl6
ZUlEQktleURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFCdWZmZXIpLCBhTGVuZ3Ro
LCBhKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSBrZXkgQSBp
biBjb2xsYXRpb24gZnVuY3Rpb24uIik7CisKKyAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8g
aW5kaWNhdGUgYW4gZXJyb3IgdG8gU1FMaXRlIC0gd2UgaGF2ZSB0byByZXR1cm4gYSBzb3J0aW5n
IGRlY2lzaW9uLgorICAgICAgICAvLyBXZSBhcmJpdHJhcmlseSBjaG9vc2UgIkEgPiBCIgorICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleURhdGEoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJCdWZmZXIpLCBiTGVuZ3RoLCBiKSkgeworICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSBrZXkgQiBpbiBjb2xsYXRpb24gZnVu
Y3Rpb24uIik7CisKKyAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8gaW5kaWNhdGUgYW4gZXJy
b3IgdG8gU1FMaXRlIC0gd2UgaGF2ZSB0byByZXR1cm4gYSBzb3J0aW5nIGRlY2lzaW9uLgorICAg
ICAgICAvLyBXZSBhcmJpdHJhcmlseSBjaG9vc2UgIkEgPiBCIgorICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICByZXR1cm4gYS5jb21wYXJlKGIpOworfQorCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjp1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1cnNv
ciogY3Vyc29yKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKKyAg
ICBBU1NFUlQobV9jdXJzb3JzLmNvbnRhaW5zKGN1cnNvci0+aWRlbnRpZmllcigpKSk7CisgICAg
bV9jdXJzb3JzLnJlbW92ZShjdXJzb3ItPmlkZW50aWZpZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKaW5kZXggNWM2MmY3Yi4uMTNlMDQxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5oCkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRh
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgU1FMaXRlSURCQ3Vyc29yOwogY2xhc3Mg
U1FMaXRlSURCVHJhbnNhY3Rpb247CiAKIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlIGZpbmFsIDogcHVibGljIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIHsK
QEAgLTc2LDYgKzc3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5UmVjb3Jk
RnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNv
cmU6OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJlc3VsdCwg
UmVmUHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgb3ZlcnJpZGU7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgb3BlbkN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBXZWJDb3JlOjpJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBl
LCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBXZWJDb3JlOjpJ
REJLZXlSYW5nZURhdGEmLCBpbnQ2NF90JiBjdXJzb3JJRCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGFkdmFuY2VDdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmll
ciwgdWludDY0X3QgY291bnQsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJREJLZXlE
YXRhJiwgVmVjdG9yPGNoYXI+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJREJLZXlEYXRh
JiwgVmVjdG9yPGNoYXI+Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVucmVnaXN0ZXJDdXJzb3Io
U1FMaXRlSURCQ3Vyc29yKik7CisKIHByaXZhdGU6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CiAKQEAgLTgzLDcgKzkwLDcgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZXh0cmFj
dEV4aXN0aW5nTWV0YWRhdGEoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0
YWJhc2VNZXRhZGF0YT4gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKIAotICAg
IGludCBjb2xsYXRlKGludCBhTGVuZ3RoLCBjb25zdCB2b2lkKiBhLCBpbnQgYkxlbmd0aCwgY29u
c3Qgdm9pZCogYik7CisgICAgaW50IGlkYktleUNvbGxhdGUoaW50IGFMZW5ndGgsIGNvbnN0IHZv
aWQqIGEsIGludCBiTGVuZ3RoLCBjb25zdCB2b2lkKiBiKTsKIAogICAgIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fYWJzb2x1dGVEYXRhYmFz
ZURpcmVjdG9yeTsKQEAgLTkxLDYgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fc3FsaXRlREI7CiAKICAgICBIYXNoTWFwPElE
QklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4+IG1fdHJh
bnNhY3Rpb25zOworICAgIEhhc2hNYXA8SURCSWRlbnRpZmllciwgU1FMaXRlSURCQ3Vyc29yKj4g
bV9jdXJzb3JzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzBiNTkwYS4uNDlk
OWQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjA0LDYgKzYwNCw4IEBACiAJCTUxMDMyRjE5MTgwRjczQkIwMDk2MUJCNyAv
KiBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMyRjE3MTgwRjczQkIwMDk2MUJCNyAvKiBXZWJU
b0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLzsgfTsKIAkJNTEwMzJGMUQxODBGNzkxNzAw
OTYxQkI3IC8qIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAzMkYx
QjE4MEY3OTE3MDA5NjFCQjcgLyogRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTEwMzJGMUUxODBGNzkxNzAwOTYxQkI3IC8qIERhdGFi
YXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAzMkYxQzE4MEY3OTE3MDA5NjFCQjcgLyogRGF0
YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKKwkJNTEwNjREMzUx
ODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2NEQzMzE4OTc4MUM0MDA0QjJGRUIgLyog
U1FMaXRlSURCQ3Vyc29yLmNwcCAqLzsgfTsKKwkJNTEwNjREMzYxODk3ODFDNDAwNEIyRkVCIC8q
IFNRTGl0ZUlEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwNjREMzQxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1cnNvci5oICov
OyB9OwogCQk1MTBBRkZCOTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQUZGQjcx
NjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNwcCAqLzsgfTsKIAkJNTEwQUZG
QkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBRkZCODE2NTQyMDQ4MDAxQkEwNUUg
LyogV2ViUmVzb3VyY2VMb2FkZXIuaCAqLzsgfTsKIAkJNTEwQ0M4NDkxNjEzQzg1QzAwRDAzRUQz
IC8qIE5ldHdvcmtQcm9jZXNzLmFwcCBpbiBDb3B5IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMENDODBFMTYxM0M3OTkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vz
cy5hcHAgKi87IH07CkBAIC0yMjgzLDYgKzIyODUsOCBAQAogCQk1MTA1QjBENDE2MkY3QTdBMDBF
Mjc3MDkgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHA7IHBhdGggPSBO
ZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMDVCMEQ1MTYyRjdBN0EwMEUyNzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmg7IHBhdGggPSBOZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA1QjBGMzE2MzA4NzJFMDBFMjc3MDkgLyog
TmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTA2NEQzMzE4OTc4
MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNRTGl0ZUlEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxMDY0RDM0MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlSURCQ3Vyc29yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEFGRkI3MTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJS
ZXNvdXJjZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJSZXNvdXJjZUxvYWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQUZGQjgxNjU0MjA0ODAwMUJBMDVF
IC8qIFdlYlJlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYlJlc291cmNlTG9hZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEFGRkNFMTY1NDJDQkQwMDFCQTA1RSAv
KiBXZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRlci5t
ZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDYgKzQ0ODUsOCBAQAogCQk1MTY1
NEVGMDE4NEVGMjQxMDA3REM4MzcgLyogc3FsaXRlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTA2NEQzMzE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRl
SURCQ3Vyc29yLmNwcCAqLywKKwkJCQk1MTA2NEQzNDE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRl
SURCQ3Vyc29yLmggKi8sCiAJCQkJNTExRDgyMDAxODVCQzIxNzAwMUFFRDU2IC8qIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uLmNwcCAqLywKIAkJCQk1MTFEODFGRDE4NUJCREVFMDAxQUVENTYgLyogU1FM
aXRlSURCVHJhbnNhY3Rpb24uaCAqLywKIAkJCQk1MTY1NEVGQjE4NEVGMzNGMDA3REM4MzcgLyog
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwICovLApAQCAtNjQ2NSw2ICs2
NDcxLDcgQEAKIAkJCQk1MTY1NEYwMDE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDdCMTBGNDM3OEQwMDU4
QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EwRUY5RjEyMzMy
NjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTEwNjREMzYxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlEQkN1cnNvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwMzJEN0QxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkVkaXRvckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3QTgxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNkE0QTVEMTIw
QTJDQ0QwMEMwNUI3RiAvKiBBUElFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODgyLDYgKzc4
ODksNyBAQAogCQkJCUJDMUJFMUUxMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNUZFNjEyRDY5NzE2MDAxMkE3MkEgLyog
V2ViR2VvbG9jYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MDYxMTJE
NkJBOTEwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTEwNjREMzUxODk3ODFDNDAwNEIyRkVCIC8qIFNRTGl0ZUlE
QkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU0Q0FDQzEyRDY0MjkxMDA1QzY3QjAg
LyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMw
RTYxODIxMkQ2Q0IxRDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MDc0MTJENkJDMjAwMDEyQTcy
QSAvKiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="246737"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>