<?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>126099</bug_id>
          
          <creation_ts>2013-12-20 17:40:38 -0800</creation_ts>
          <short_desc>DatabaseProcess: Implement version changing</short_desc>
          <delta_ts>2013-12-25 16:25:46 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>962133</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-20 17:40:38 -0800</bug_when>
    <thetext>DatabaseProcess: Implement version changing

This includes some WebCore tweaks, moving responsibilities currently in the LevelDB implementation that belong in the cross platform backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962136</commentid>
    <comment_count>1</comment_count>
      <attachid>219818</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-20 17:50:28 -0800</bug_when>
    <thetext>Created attachment 219818
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962137</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-20 17:52:27 -0800</bug_when>
    <thetext>Attachment 219818 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:303:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp:180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962157</commentid>
    <comment_count>3</comment_count>
      <attachid>219818</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-12-20 18:33:38 -0800</bug_when>
    <thetext>Comment on attachment 219818
Patch v1

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

&gt; Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:307
&gt; +        completionCallback(IDBDatabaseError::create(IDBDatabaseException::UnknownError, &quot;Unknown error occured changing database version&quot;));

When there is a &quot;literal string&quot; that turns into a WTF::String you can use ASCIILiteral(&quot;literal&quot;) for more efficient construction:
&lt;http://trac.webkit.org/wiki/EfficientStrings&gt;

You could do that here with error strings and SQLStatements, since that constructor also takes WTF::String and not a char*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962210</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-20 22:40:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 219818 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219818&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:307
&gt; &gt; +        completionCallback(IDBDatabaseError::create(IDBDatabaseException::UnknownError, &quot;Unknown error occured changing database version&quot;));
&gt; 
&gt; When there is a &quot;literal string&quot; that turns into a WTF::String you can use ASCIILiteral(&quot;literal&quot;) for more efficient construction:
&gt; &lt;http://trac.webkit.org/wiki/EfficientStrings&gt;
&gt; 
&gt; You could do that here with error strings and SQLStatements, since that constructor also takes WTF::String and not a char*.

Sure, sometimes I remember this and sometimes I forget.  Easy to forget when nobody else using a coding pattern (SQLite code) has done it before.

Last time this came up in a review I lamented that style bot doesn&apos;t capture it.  I know it&apos;s just a python script and doesn&apos;t understand the underlying C++...  but anything that *CAN* be statically caught in a review *SHOULD* be automatically caught.

So I filed https://bugs.webkit.org/show_bug.cgi?id=126112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962917</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-25 16:25:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/161076</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219818</attachid>
            <date>2013-12-20 17:50:28 -0800</date>
            <delta_ts>2013-12-21 15:35:48 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43754</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNjcwMmQ3Li5jOTdjN2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMTItMjAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIERhdGFiYXNlUHJvY2VzczogSW1wbGVtZW50IHZlcnNpb24gY2hhbmdpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjA5OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoTm8g
Y2hhbmdlIGluIFdlYkNvcmUgYmVoYXZpb3IpLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZDo6Y29tbWl0KTogVXBkYXRlIHNvbWUgbG9nZ2luZy4KKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKTogTW92ZSBzb21lIHRoaW5ncyB0aGF0IHVzZWQgdG8gYmUgaW4KKyAgICAg
ICAgICBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uIHRv
IHRoaXMgY3Jvc3MtcGxhdGZvcm0gbG9jYXRpb24uCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp0cmFuc2FjdGlvbik6
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCOjpjaGFuZ2VEYXRhYmFzZVZlcnNpb24pOiBNb3ZlIHRoZSBhY3R1YWwgdXBkYXRpbmcgb2Yg
dGhlIGRhdGFiYXNlIGJhY2tlbmQKKyAgICAgICAgICBtZXRhZGF0YSB0byB0aGUgVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbi4KKwogMjAxMy0xMi0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEdpdmUgdGhlIENvbW1hbmRMaW5l
QVBJTW9kdWxlIGl0cyBvd24gSG9zdCBvYmplY3QsIG1ha2luZyBJbmplY3RlZFNjcmlwdEhvc3Qg
dmlhYmxlIGZvciBhIEpTIENvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCmluZGV4IDI5YTViYzQu
LjFmZTE0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzdGFydCgpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpjb21taXQoKQogewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpjb21taXQiKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6Y29tbWl0IChUcmFuc2FjdGlvbiAlbGxpKSIsIG1faWQpOwogCiAgICAgLy8gSW4gbXVsdGlw
cm9jZXNzIHBvcnRzLCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBh
biBhYm9ydCBoYXMgYWxyZWFkeQogICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5
IGJ5IHRoZSBiYWNrLWVuZC4KQEAgLTIxMyw4ICsyMTMsMTAgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmNvbW1pdCgpCiAKICAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVlc3RlZCBhIGNv
bW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNoCiAgICAg
Ly8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBidXQgYXJlIHBy
b2Nlc3NlZCBhc3luY2hyb25vdXNseS4KLSAgICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkpCisgICAg
aWYgKGhhc1BlbmRpbmdUYXNrcygpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjpjb21taXQgLSBOb3QgY29tbWl0dGluZyBub3csIHRyYW5zYWN0aW9u
IHN0aWxsIGhhcyBwZW5kaW5nIHRhc2tzIChUcmFuc2FjdGlvbiAlbGxpKSIsIG1faWQpOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMg
b2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQogICAgIC8vIGNvbW1p
dCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVw
IG91cnNlbHZlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCA4
NDFmZjdjLi5jNmQ4MWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNw
cApAQCAtMTczLDggKzE3MywyMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNo
YW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYwogewogICAgIExP
RyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZU9wZXJhdGlvbiIpOwogCisgICAgdWludDY0X3Qg
b2xkVmVyc2lvbiA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKS52ZXJzaW9u
OwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24+
IG9wZXJhdGlvbih0aGlzKTsKLSAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmVyc2lvbikgPiBvbGRWZXJzaW9u
KTsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBbb2xkVmVyc2lvbiwgb3BlcmF0aW9uLCB0aGlzLCBjb21w
bGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsK
KyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7CisgICAg
ICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmhhc1Bl
bmRpbmdTZWNvbmRIYWxmT3BlbigpKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV92ZXJzaW9uKTsKKyAgICAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVu
Q2FsbDo6Y3JlYXRlKCptX2NhbGxiYWNrcywgKm1fZGF0YWJhc2VDYWxsYmFja3MsIG1fdHJhbnNh
Y3Rpb24tPmlkKCksIG1fdmVyc2lvbikpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uVXBn
cmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSwgbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICBjb21w
bGV0aW9uQ2FsbGJhY2soKTsKKyAgICB9OwogCiAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2hhbmdlRGF0YWJhc2VWZXJzaW9uKCptX3RyYW5zYWN0aW9u
LCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucy5oCmluZGV4IDkyYmFhMzAuLmY3MTNhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRPcGVyYXRpb25zLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBP
VkVSUklERSBGSU5BTDsKIAorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAgICAgaW50NjRfdCB2ZXJz
aW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQogICAgIElEQkRhdGFi
YXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJh
c2VDYWxsYmFja3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2
ZWxEQi5jcHAKaW5kZXggNGViNmY0MC4uYjhmNDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKQEAgLTU2MiwyMCArNTYyLDEyIEBAIHZvaWQgSURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQmIHRyCiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNlID0gdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKTsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS5pZCgp
OwotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb247
CiAKLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2
NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJUKG9wZXJhdGlv
bi52ZXJzaW9uKCkgPiAoaW50NjRfdClvbGRWZXJzaW9uKTsKLSAgICBkYXRhYmFzZS5zZXRDdXJy
ZW50VmVyc2lvbihvcGVyYXRpb24udmVyc2lvbigpKTsKICAgICBpZiAoIW1fYmFja2luZ1N0b3Jl
LT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24oKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb24pKSB7CiAgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJs
ZSBzdG9yYWdlIHdoZW4gdXBkYXRpbmcgdmVyc2lvbi4iKTsKLSAgICAgICAgb3BlcmF0aW9uLmNh
bGxiYWNrcygpLT5vbkVycm9yKGVycm9yKTsKICAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxM
QkFDS19XSVRIX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2ssIGVycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBBU1NFUlQoIWRhdGFiYXNlLmhhc1BlbmRpbmdTZWNvbmRIYWxmT3Blbigp
KTsKLSAgICBkYXRhYmFzZS5zZXRQZW5kaW5nU2Vjb25kSGFsZk9wZW4oSURCUGVuZGluZ09wZW5D
YWxsOjpjcmVhdGUoKm9wZXJhdGlvbi5jYWxsYmFja3MoKSwgKm9wZXJhdGlvbi5kYXRhYmFzZUNh
bGxiYWNrcygpLCB0cmFuc2FjdGlvbi5pZCgpLCBvcGVyYXRpb24udmVyc2lvbigpKSk7Ci0gICAg
b3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgJmRhdGFi
YXNlLCBkYXRhYmFzZS5tZXRhZGF0YSgpKTsKIAogICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJB
Q0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDZk
M2Y2NjYuLmEyMWI1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxMy0xMi0yMCAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzOiBJbXBsZW1lbnQgdmVyc2lvbiBjaGFuZ2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVBy
b2Nlc3NJREJDb25uZWN0aW9uOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOiBB
ZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bjo6b3BlblRyYW5zYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb246OmJlZ2luVHJhbnNhY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Y29tbWl0VHJhbnNhY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6cmVz
ZXRUcmFuc2FjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uOjpyb2xsYmFja1RyYW5zYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmNoYW5nZURhdGFiYXNlVmVyc2lvbik6
IEltcGxlbWVudCB0aGlzIQorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKworICAg
ICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd24pOiBDbGVhbiB1cCBh
bGwgcmVxdWVzdHMsIGFuZCBhbHNvIGNsZWFudXAgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAg
ICBvbiB0aGUgZGF0YWJhc2UgcXVldWUuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpzaHV0ZG93bkJhY2tpbmdTdG9yZSk6IFNodXRkb3duIHRoZSBiYWNraW5nIHN0b3JlLgor
ICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0YWJhc2VW
ZXJzaW9uKTogUGFzcyBhbG9uZyB0aGUgbmV3IHZlcnNpb24gdG8gdGhlIGRhdGFiYXNlIHF1ZXVl
LgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ2hhbmdlRGF0YWJhc2VW
ZXJzaW9uKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFi
YXNlVmVyc2lvbkluQmFja2luZ1N0b3JlKTogU2V0IHRoZSBuZXcgdmVyc2lvbiBpbiB0aGUgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3RNYWlu
VGhyZWFkVGFzayk6IEFkZCBhIHJlZigpIHRvIGtlZXAgdGhlIGRhdGFiYXNlIGFsaXZlIGluY2Fz
ZSBpdCBpcyBiZWluZworICAgICAgICAgIHNodXRkb3duIG9uIHRoZSBtYWluIHRocmVhZC4KKyAg
ICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRh
c2spOiBCYWxhbmNlIHRoZSByZWYoKSBmcm9tIHBvc3RNYWluVGhyZWFkVGFzaywgYW5kCisgICAg
ICAgICAgYWNjZXB0IGFuIGVtcHR5IG1haW5UaHJlYWRUYXNrIHF1ZXVlLgorICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKworICAgICAgICAq
IERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUu
aDogQWRkIGNoYW5nZURhdGFiYXNlVmVyc2lvbi4KKworICAgICAgICBGbGVzaCBvdXQgU1FMaXRl
SURCVHJhbnNhY3Rpb24gdG8gYWN0dWFsbHkgb3BlcmF0aW9uIG9uIGEgU1FMaXRlVHJhbnNhY3Rp
b24gaW4gYSByZWFsIFNRTGl0ZURhdGFiYXNlOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6U1FMaXRlSURCVHJhbnNhY3Rpb246OlNRTGl0ZUlEQlRyYW5zYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlSURCVHJhbnNhY3Rpb246On5TUUxpdGVJREJUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChX
ZWJLaXQ6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViS2l0OjpT
UUxpdGVJREJUcmFuc2FjdGlvbjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVJREJU
cmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVJREJUcmFuc2Fj
dGlvbjo6aW5Qcm9ncmVzcyk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9z
cWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlSURC
VHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZUlEQlRyYW5zYWN0
aW9uOjptb2RlKToKKworICAgICAgICBSZW5hbWUgbV9tZXRhZGF0YURCIHRvIG1fc3FsaXRlREIs
IAorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFk
YXRhKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU6OmV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Om9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aCk6IERp
c2FibGUgdGhyZWFkaW5nIGNoZWNrcyBvbiB0aGUgREIKKyAgICAgICAgICBhcyB3b3JrIHF1ZXVl
cyBjYW4gY2hhbmdlIHRocmVhZHMuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRhKToKKyAgICAgICAgKFdl
YktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmVzdGFibGlzaFRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKTogQWZ0ZXIgdmFs
aWRhdGluZyB0aGUgdHJhbnNhY3Rpb24sIGFjdHVhbGx5CisgICAgICAgICAgdXBkYXRlIHRoZSB2
ZXJzaW9uIG51bWJlciBvbiBkaXNrLgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg6CisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlNlcnZlckNvbm5lY3Rpb246On5XZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uKTogTWFrZSBzdXJlIHRvIGFib3J0IGluLWZsaWdodCByZXF1ZXN0cy4K
KyAgICAgICAgKFdlYktpdDo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y2hhbmdlRGF0YWJhc2VW
ZXJzaW9uKTogCisgICAgICAgIChXZWJLaXQ6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZENo
YW5nZURhdGFiYXNlVmVyc2lvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKwog
MjAxMy0xMi0yMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDaGFuZ2UgInRocmVhZGVkIHNjcm9sbGluZyIgdGVybWlub2xvZ3kgdG8gImFzeW5jaHJv
bm91cyBzY3JvbGxpbmciCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcAppbmRleCA5NzcxM2Y1Li4xZGM3YmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkRhdGFiYXNlUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtNjgsNiArNjksOCBAQCB2b2lkIERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb246OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50
NjRfdCByZQogewogICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKIAorICAgIExPRyhJ
REIsICJEYXRhYmFzZVByb2Nlc3MgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhIHJl
cXVlc3QgSUQgJWxsdSIsIHJlcXVlc3RJRCk7CisKICAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKICAgICBtX3VuaXF1ZUlEQkRhdGFiYXNl
LT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoW2Nvbm5lY3Rpb24sIHJlcXVlc3RJ
RF0oYm9vbCBzdWNjZXNzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkgewog
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
OjpEaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEocmVxdWVzdElELCBzdWNjZXNz
LCBtZXRhZGF0YSkpOwpAQCAtNzgsNiArODEsOCBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb246Om9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdAog
ewogICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKIAorICAgIExPRyhJREIsICJEYXRh
YmFzZVByb2Nlc3Mgb3BlblRyYW5zYWN0aW9uIHJlcXVlc3QgSUQgJWxsdSIsIHJlcXVlc3RJRCk7
CisKICAgICBpZiAoaW50TW9kZSA+IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlTWF4aW11bSkg
ewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWRPcGVu
VHJhbnNhY3Rpb24ocmVxdWVzdElELCBmYWxzZSkpOwogICAgICAgICByZXR1cm47CkBAIC05NCw2
ICs5OSw4IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6YmVnaW5UcmFuc2Fj
dGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QKIHsKICAgICBBU1NFUlQobV91bmlxdWVJ
REJEYXRhYmFzZSk7CiAKKyAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGJlZ2luVHJhbnNh
Y3Rpb24gcmVxdWVzdCBJRCAlbGx1IiwgcmVxdWVzdElEKTsKKwogICAgIFJlZlB0cjxEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOwogICAgIG1fdW5pcXVlSURC
RGF0YWJhc2UtPmJlZ2luVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyKCp0aGlz
LCB0cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7
CiAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rp
b246OkRpZEJlZ2luVHJhbnNhY3Rpb24ocmVxdWVzdElELCBzdWNjZXNzKSk7CkBAIC0xMDQsNiAr
MTExLDggQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpjb21taXRUcmFuc2Fj
dGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QKIHsKICAgICBBU1NFUlQobV91bmlxdWVJ
REJEYXRhYmFzZSk7CiAKKyAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGNvbW1pdFRyYW5z
YWN0aW9uIHJlcXVlc3QgSUQgJWxsdSIsIHJlcXVlc3RJRCk7CisKICAgICBSZWZQdHI8RGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKICAgICBtX3VuaXF1ZUlE
QkRhdGFiYXNlLT5jb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbklkZW50aWZpZXIoKnRo
aXMsIHRyYW5zYWN0aW9uSUQpLCBbY29ubmVjdGlvbiwgcmVxdWVzdElEXShib29sIHN1Y2Nlc3Mp
IHsKICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVj
dGlvbjo6RGlkQ29tbWl0VHJhbnNhY3Rpb24ocmVxdWVzdElELCBzdWNjZXNzKSk7CkBAIC0xMTQs
NiArMTIzLDggQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpyZXNldFRyYW5z
YWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdAogewogICAgIEFTU0VSVChtX3VuaXF1
ZUlEQkRhdGFiYXNlKTsKIAorICAgIExPRyhJREIsICJEYXRhYmFzZVByb2Nlc3MgcmVzZXRUcmFu
c2FjdGlvbiByZXF1ZXN0IElEICVsbHUiLCByZXF1ZXN0SUQpOworCiAgICAgUmVmUHRyPERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7CiAgICAgbV91bmlxdWVJ
REJEYXRhYmFzZS0+cmVzZXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbklkZW50aWZpZXIoKnRo
aXMsIHRyYW5zYWN0aW9uSUQpLCBbY29ubmVjdGlvbiwgcmVxdWVzdElEXShib29sIHN1Y2Nlc3Mp
IHsKICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVj
dGlvbjo6RGlkUmVzZXRUcmFuc2FjdGlvbihyZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKQEAgLTEyNCwx
MiArMTM1LDI2IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6cm9sbGJhY2tU
cmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0CiB7CiAgICAgQVNTRVJUKG1fdW5p
cXVlSURCRGF0YWJhc2UpOwogCisgICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2VzcyByb2xsYmFj
a1RyYW5zYWN0aW9uIHJlcXVlc3QgSUQgJWxsdSIsIHJlcXVlc3RJRCk7CisKICAgICBSZWZQdHI8
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKICAgICBtX3Vu
aXF1ZUlEQkRhdGFiYXNlLT5yb2xsYmFja1RyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uSWRlbnRp
ZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wg
c3VjY2VzcykgewogICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uOjpEaWRSb2xsYmFja1RyYW5zYWN0aW9uKHJlcXVlc3RJRCwgc3VjY2Vzcykp
OwogICAgIH0pOwogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmNoYW5n
ZURhdGFiYXNlVmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25J
RCwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFz
ZSk7CisKKyAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGNoYW5nZURhdGFiYXNlVmVyc2lv
biByZXF1ZXN0IElEICVsbHUsIG5ldyB2ZXJzaW9uICVsbHUiLCByZXF1ZXN0SUQsIG5ld1ZlcnNp
b24pOworCisgICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rp
b24odGhpcyk7CisgICAgbV91bmlxdWVJREJEYXRhYmFzZS0+Y2hhbmdlRGF0YWJhc2VWZXJzaW9u
KElEQlRyYW5zYWN0aW9uSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIG5ld1ZlcnNp
b24sIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wgc3VjY2VzcykgeworICAgICAgICBjb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWRDaGFuZ2VE
YXRhYmFzZVZlcnNpb24ocmVxdWVzdElELCBzdWNjZXNzKSk7CisgICAgfSk7Cit9CisKIENvcmVJ
UEM6OkNvbm5lY3Rpb24qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkKIHsKICAgICByZXR1cm4gbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0Rh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oCmluZGV4IGEyODMw
NjMuLmFkNjJlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5oCkBAIC02OCw2ICs2OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21taXRUcmFuc2FjdGlv
bih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9pZCBy
ZXNldFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklE
KTsKICAgICB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2
NF90IHRyYW5zYWN0aW9uSUQpOworICAgIHZvaWQgY2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2
NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50NjRfdCBuZXdWZXJzaW9u
KTsKKwogCiAgICAgUmVmPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOwogICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
aW5kZXggMGI4ZTE2ZC4uZGE2ZTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMzEsNiArMzEsOCBAQCBtZXNz
YWdlcyAtPiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKICAg
ICBDb21taXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rp
b25JRCkKICAgICBSZXNldFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0
cmFuc2FjdGlvbklEKQogICAgIFJvbGxiYWNrVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElE
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCisgICAgCisgICAgQ2hhbmdlRGF0YWJhc2VWZXJzaW9u
KHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50NjRfdCBuZXdW
ZXJzaW9uKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJM
RShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCAyZWQ3
YTNjLi5hZTE2ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTIyLDEwICsx
MjIsMzYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd24oKQogICAgICAgICBtX21h
aW5UaHJlYWRUYXNrcy5jbGVhcigpOwogICAgIH0KIAotICAgIHdoaWxlICghbV9wZW5kaW5nTWV0
YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5k
aW5nTWV0YWRhdGFSZXF1ZXN0cy50YWtlRmlyc3QoKTsKLSAgICAgICAgcmVxdWVzdC0+cmVxdWVz
dEFib3J0ZWQoKTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fcGVuZGluZ01l
dGFkYXRhUmVxdWVzdHMpCisgICAgICAgIGl0LT5yZXF1ZXN0QWJvcnRlZCgpOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBpdCA6IG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMpCisgICAgICAg
IGl0LnZhbHVlLT5yZXF1ZXN0QWJvcnRlZCgpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IG1fcGVuZGluZ0RhdGFiYXNlVGFza3MpCisgICAgICAgIGl0LnZhbHVlLT5yZXF1ZXN0QWJvcnRl
ZCgpOworICAgICAgICAKKyAgICAvLyBCYWxhbmNlZCBieSBhbiBhZG9wdFJlZiBpbiA6OmRpZFNo
dXRkb3duQmFja2luZ1N0b3JlKCkKKyAgICByZWYoKTsKKworICAgIERhdGFiYXNlUHJvY2Vzczo6
c2hhcmVkKCkucXVldWUoKS5kaXNwYXRjaChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRv
d25CYWNraW5nU3RvcmUsIHRoaXMpKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1
dGRvd25CYWNraW5nU3RvcmUoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKKwor
ICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFNodXRkb3duQmFja2luZ1N0b3JlLCB0aGlzKSk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFNodXRkb3duQmFja2luZ1N0b3JlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgLy8gQmFsYW5jZWQgYnkgYSByZWYgaW4gOjpzaHV0ZG93bigpCisgICAgUmVm
UHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0b3IoYWRvcHRSZWYodGhpcykpOwogfQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEo
c3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKT4gY29t
cGxldGlvbkNhbGxiYWNrKQpAQCAtMjU4LDYgKzI4NCw0MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9u
SWRlbgogICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKIH0KIAordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQlRyYW5zYWN0
aW9uSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5j
dGlvbjx2b2lkKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBz
dWNjZXNzQ2FsbGJhY2soZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWlu
dDY0X3Qgb2xkVmVyc2lvbiA9IG1fbWV0YWRhdGEtPnZlcnNpb247CisgICAgbV9tZXRhZGF0YS0+
dmVyc2lvbiA9IG5ld1ZlcnNpb247CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0
ID0gQXN5bmNSZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKFt0aGlzLCBvbGRWZXJzaW9uLCBzdWNj
ZXNzQ2FsbGJhY2tdKGJvb2wgc3VjY2VzcykgeworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgICAgICBtX21ldGFkYXRhLT52ZXJzaW9uID0gb2xkVmVyc2lvbjsKKyAgICAgICAgc3VjY2Vz
c0NhbGxiYWNrKHN1Y2Nlc3MpOworICAgIH0sIFt0aGlzLCBvbGRWZXJzaW9uLCBzdWNjZXNzQ2Fs
bGJhY2tdKCkgeworICAgICAgICBtX21ldGFkYXRhLT52ZXJzaW9uID0gb2xkVmVyc2lvbjsKKyAg
ICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKKyAgICB9KTsKKworICAgIHVpbnQ2NF90IHJl
cXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOworICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFz
a3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOworCisgICAgcG9zdERhdGFiYXNl
VGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0
YWJhc2VWZXJzaW9uSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgaWRlbnRpZmllciwgbmV3VmVy
c2lvbikpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDaGFuZ2VEYXRhYmFzZVZl
cnNpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCit7CisgICAgUmVmUHRyPEFz
eW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0
SUQpOworICAgIEFTU0VSVChyZXF1ZXN0KTsKKworICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVz
dChzdWNjZXNzKTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYgaWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlEcywgV2ViQ29yZTo6SW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
QEAgLTMwOCw2ICszNjksMTYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cm9sbGJhY2tCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbklkZW4KICAgICBwb3N0TWFp
blRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24sIGlkZW50aWZpZXIsIHN1Y2Nlc3MpKTsKIH0K
IAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uSW5CYWNraW5n
U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXIm
IGlkZW50aWZpZXIsIHVpbnQ2NF90IG5ld1ZlcnNpb24pCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKworICAgIGJvb2wgc3VjY2Vz
cyA9IG1fYmFja2luZ1N0b3JlLT5jaGFuZ2VEYXRhYmFzZVZlcnNpb24oaWRlbnRpZmllciwgbmV3
VmVyc2lvbik7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZENoYW5nZURhdGFiYXNlVmVyc2lvbiwgcmVxdWVzdElE
LCBzdWNjZXNzKSk7Cit9CisKIFN0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1dGVEYXRh
YmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAg
LTMyNSw2ICszOTYsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0TWFpblRocmVhZFRh
c2soc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gdGFzaykKIAogICAgIG1fbWFpblRocmVhZFRh
c2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOwogCisgICAgLy8gQmFsYW5jZWQgYnkgYW4gYWRv
cHRSZWYoKSBpbiA6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2sKKyAgICByZWYoKTsKICAgICBS
dW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
TmV4dE1haW5UaHJlYWRUYXNrLCB0aGlzKSk7CiB9CiAKQEAgLTMzMiwxMCArNDA1LDE3IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2soKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyAgICAvLyBCYWxhbmNlZCBieSBhIHJlZigpIGlu
IDo6cG9zdE1haW5UaHJlYWRUYXNrCisgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90
ZWN0b3IoYWRvcHRSZWYodGhpcykpOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4g
dGFzazsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX21haW5UaHJlYWRUYXNr
TXV0ZXgpOwotICAgICAgICBBU1NFUlQoIW1fbWFpblRocmVhZFRhc2tzLmlzRW1wdHkoKSk7CisK
KyAgICAgICAgLy8gVGhpcyBkYXRhYmFzZSBtaWdodCBiZSBzaHV0dGluZyBkb3duLCBpbiB3aGlj
aCBjYXNlIHRoZSB0YXNrIHF1ZXVlIG1pZ2h0IGJlIGVtcHR5LgorICAgICAgICBpZiAobV9tYWlu
VGhyZWFkVGFza3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHRh
c2sgPSBtX21haW5UaHJlYWRUYXNrcy50YWtlRmlyc3QoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuaAppbmRleCBhYThjZmIxLi5hMmE1N2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZS5oCkBAIC03Myw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0VHJhbnNhY3Rpb24o
Y29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiwgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wp
PiBzdWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihjb25zdCBJ
REJUcmFuc2FjdGlvbklkZW50aWZpZXImLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjayk7CiAKKyAgICB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lvbihjb25zdCBJREJU
cmFuc2FjdGlvbklkZW50aWZpZXImLCB1aW50NjRfdCBuZXdWZXJzaW9uLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7CisKIHByaXZhdGU6CiAgICAgVW5pcXVlSURC
RGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAKQEAgLTExMCwx
NSArMTEyLDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYpOwogICAgIHZvaWQgcm9sbGJhY2tC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImKTsK
IAorICAgIHZvaWQgY2hhbmdlRGF0YWJhc2VWZXJzaW9uSW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImLCB1aW50NjRfdCBuZXdW
ZXJzaW9uKTsKKworICAgIHZvaWQgc2h1dGRvd25CYWNraW5nU3RvcmUoKTsKKwogICAgIC8vIENh
bGxiYWNrcyBmcm9tIHRoZSBkYXRhYmFzZSB3b3JrcXVldWUgdGhyZWFkLCB0byBiZSBwZXJmb3Jt
ZWQgb24gdGhlIG1haW4gdGhyZWFkIG9ubHkKICAgICB2b2lkIHBlcmZvcm1OZXh0TWFpblRocmVh
ZFRhc2soKTsKICAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29u
c3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7CiAgICAgdm9p
ZCBkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRl
bnRpZmllciYsIGJvb2wgc3VjY2Vzcyk7CisgICAgdm9pZCBkaWRDaGFuZ2VEYXRhYmFzZVZlcnNp
b24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpOworICAgIHZvaWQgZGlkU2h1dGRv
d25CYWNraW5nU3RvcmUoKTsKIAogICAgIGJvb2wgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0czsKIAog
ICAgIERlcXVlPFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3Rz
OwogICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8QXN5bmNSZXF1
ZXN0Pj4gbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0czsKKyAgICBIYXNoTWFwPHVpbnQ2NF90
LCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nRGF0YWJhc2VUYXNrczsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBtX21ldGFkYXRhOwog
ICAgIGJvb2wgbV9kaWRHZXRNZXRhZGF0YUZyb21CYWNraW5nU3RvcmU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKaW5kZXggOTI5N2UxNC4uZGUwYzY2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9Vbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaApAQCAtNTAs
NiArNTAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNvbW1pdFRyYW5zYWN0aW9uKGNv
bnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVz
ZXRUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIHJvbGxiYWNrVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyJikgPSAwOworCisgICAgdmlydHVhbCBib29sIGNoYW5nZURhdGFiYXNlVmVyc2lvbihj
b25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImLCB1aW50NjRfdCBuZXdWZXJzaW9uKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0
ZUlEQlRyYW5zYWN0aW9uLmNwcAppbmRleCAxYzcwMzg2Li4xZDNlNDkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJU
cmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNywzMSArMjcsNjYgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VT
UykKIAorI2luY2x1ZGUgPFdlYkNvcmUvSW5kZXhlZERCLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
UUxpdGVUcmFuc2FjdGlvbi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLVNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpTUUxpdGVJREJUcmFuc2FjdGlv
bihjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImIGlkZW50aWZpZXIpCitTUUxpdGVJREJU
cmFuc2FjdGlvbjo6U1FMaXRlSURCVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQogICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX21vZGUobW9kZSkKK3sKK30KKwor
U1FMaXRlSURCVHJhbnNhY3Rpb246On5TUUxpdGVJREJUcmFuc2FjdGlvbigpCiB7CisgICAgaWYg
KGluUHJvZ3Jlc3MoKSkKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsK
IH0KIAotYm9vbCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6YmVnaW4oKQorCitib29sIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjpiZWdpbihTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiB7Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CisgICAgbV9zcWxp
dGVUcmFuc2FjdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlVHJhbnNhY3Rpb24+KGRhdGFi
YXNlLCBtX21vZGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKKwor
ICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CisKKyAgICByZXR1cm4gbV9zcWxpdGVU
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpOwogfQogCiBib29sIFNRTGl0ZUlEQlRyYW5zYWN0aW9u
Ojpjb21taXQoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFu
c2FjdGlvbik7CisgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgp
OworCisgICAgcmV0dXJuICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCk7CiB9CiAK
IGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KCkKIHsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogewotICAgIHJldHVy
biBmYWxzZTsKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlvbik7CisgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZUlEQlRy
YW5zYWN0aW9uOjppblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zcWxpdGVUcmFu
c2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5zYWN0aW9u
LmgKaW5kZXggMWRlNmQxNC4uZjZmOGM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJ
REJUcmFuc2FjdGlvbi5oCkBAIC0zMSwyNyArMzEsNDYgQEAKICNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTUUxpdGVEYXRhYmFzZTsKK2NsYXNzIFNRTGl0ZVRyYW5z
YWN0aW9uOworCituYW1lc3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgVHJhbnNhY3Rpb25N
b2RlOworfQorCit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTUUxpdGVJREJUcmFu
c2FjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMaXRlSURCVHJhbnNhY3Rpb24p
OwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rp
b24+IGNyZWF0ZShjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImIGlkZW50aWZpZXIpCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJUcmFuc2FjdGlvbj4gY3JlYXRlKGNv
bnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYgaWRlbnRpZmllciwgV2ViQ29yZTo6SW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rpb24+KG5ldyBTUUxpdGVJREJUcmFuc2FjdGlvbihp
ZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJh
bnNhY3Rpb24+KG5ldyBTUUxpdGVJREJUcmFuc2FjdGlvbihpZGVudGlmaWVyLCBtb2RlKSk7CiAg
ICAgfQogCisgICAgflNRTGl0ZUlEQlRyYW5zYWN0aW9uKCk7CisKICAgICBjb25zdCBJREJUcmFu
c2FjdGlvbklkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KIAotICAgIGJvb2wgYmVnaW4oKTsKKyAgICBib29sIGJlZ2luKFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlJik7CiAgICAgYm9vbCBjb21taXQoKTsKICAgICBib29sIHJlc2V0KCk7CiAgICAg
Ym9vbCByb2xsYmFjaygpOwogCisgICAgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGJvb2wgaW5Qcm9ncmVzcygp
IGNvbnN0OworCiBwcml2YXRlOgotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKGNvbnN0IElEQlRy
YW5zYWN0aW9uSWRlbnRpZmllciYpOworICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKGNvbnN0IElE
QlRyYW5zYWN0aW9uSWRlbnRpZmllciYsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlKTsKIAogICAgIElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAg
V2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2RlOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKaW5kZXgg
NzJkODNmNS4uOWRiYzgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRl
L1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcApAQCAtNjYsNDQgKzY2LDQ0
IEBAIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjp+VW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUoKQogc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVB
bmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGFEQik7Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGFEQi0+
aXNPcGVuKCkpOworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NFUlQobV9zcWxpdGVE
Qi0+aXNPcGVuKCkpOwogCi0gICAgaWYgKCFtX21ldGFkYXRhREItPmV4ZWN1dGVDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSURCRGF0YWJhc2VJbmZvIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBURVhUIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBJREJEYXRhYmFzZUluZm8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9tZXRhZGF0
YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
IG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7CisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIElEQkRhdGFiYXNlSW5mbyAoa2V5IFRFWFQgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgVEVYVCBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgSURCRGF0YWJhc2VJbmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIklO
U0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsi
KTsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRP
IElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiKTsKICAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKICAgICAgICAgICAgIHx8IHNxbC5i
aW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0YVZlcnNpb24pICE9IFNRTFJlc3VsdE9rCiAgICAgICAg
ICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGluc2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURC
RGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCks
IG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgbV9tZXRhZGF0YURC
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkYXRh
YmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAl
cyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgfQogICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9tZXRhZGF0YURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAo
J0RhdGFiYXNlTmFtZScsID8pOyIpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3Nx
bGl0ZURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFt
ZScsID8pOyIpOwogICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPawogICAg
ICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkg
IT0gU1FMUmVzdWx0T2sKICAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9u
ZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5h
bWUgaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9tZXRhZGF0YURCLT5s
YXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBt
X21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
aW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVz
IiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAgICAgewogICAgICAgICAvLyBEYXRhYmFzZSB2ZXJz
aW9ucyBhcmUgZGVmaW5lZCB0byBiZSBhIHVpbjY0X3QgaW4gdGhlIHNwZWMgYnV0IHNxbGl0ZTMg
ZG9lc24ndCBzdXBwb3J0IG5hdGl2ZSBiaW5kaW5nIG9mIHVuc2lnbmVkIGludGVnZXJzLgogICAg
ICAgICAvLyBUaGVyZWZvcmUgd2UnbGwgc3RvcmUgdGhlIHZlcnNpb24gYXMgYSBTdHJpbmcuCi0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIklOU0VSVCBJTlRPIElE
QkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiKTsKKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNl
SW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiKTsKICAgICAgICAgaWYgKHNxbC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBT
dHJpbmc6Om51bWJlcigwKSkgIT0gU1FMUmVzdWx0T2sKICAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
aW5zZXJ0IGRlZmF1bHQgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0g
JXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7CisgICAgICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJh
c2VJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE5LDIw
ICsxMTksMjAgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+
IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXQKIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0
cmFjdEV4aXN0aW5nTWV0YWRhdGEoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
ICAgIEFTU0VSVChtX21ldGFkYXRhREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKIAotICAg
IGlmICghbV9tZXRhZGF0YURCLT50YWJsZUV4aXN0cygiSURCRGF0YWJhc2VJbmZvIikpCisgICAg
aWYgKCFtX3NxbGl0ZURCLT50YWJsZUV4aXN0cygiSURCRGF0YWJhc2VJbmZvIikpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
SURCRGF0YWJhc2VNZXRhZGF0YT4oKTsKICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fbWV0YWRhdGFEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVS
RSBrZXkgPSAnTWV0YWRhdGFWZXJzaW9uJzsiKTsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNx
bCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBr
ZXkgPSAnTWV0YWRhdGFWZXJzaW9uJzsiKTsKICAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwo
MCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgbWV0YWRhdGEtPnZlcnNp
b24gPSBzcWwuZ2V0Q29sdW1uSW50KDApOwogICAgIH0KICAgICB7Ci0gICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNl
SW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBX
SEVSRSBrZXkgPSAnRGF0YWJhc2VOYW1lJzsiKTsKICAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51
bGwoMCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgbWV0YWRhdGEtPm5h
bWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgwKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OmV4dHJhYwogICAgICAgICB9CiAgICAgfQogICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJ
bmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyIpOworICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyIpOwogICAgICAgICBpZiAoc3FsLmlzQ29s
dW1uTnVsbCgwKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBTdHJpbmcg
c3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOwpAQCAtMTY4LDYgKzE2OCwxMCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlRGF0YWJhc2U+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpvcGVuU1FMaXRlRAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKKyAgICAvLyBTaW5jZSBhIFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBhIHNwZWNpZmljIHRo
cmVhZCwgd2UgaGF2ZSB0byBkaXNhYmxlIHRocmVhZGluZyBjaGVja3MKKyAgICAvLyBldmVuIHRo
b3VnaCB3ZSBuZXZlciBhY2Nlc3MgdGhlIGRhdGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMg
c2ltdWx0YW5lb3VzbHkuCisgICAgc3FsaXRlRGF0YWJhc2UtPmRpc2FibGVUaHJlYWRpbmdDaGVj
a3MoKTsKKwogICAgIHJldHVybiBzcWxpdGVEYXRhYmFzZTsKIH0KIApAQCAtMTc1LDkgKzE3OSw5
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAKLSAgICBTdHJpbmcgbWV0YWRhdGFEQkZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSwgIklEQk1ldGFkYXRhLnNxbGl0ZTMi
KTsKLSAgICBtX21ldGFkYXRhREIgPSBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgobWV0YWRhdGFE
QkZpbGVuYW1lKTsKLSAgICBpZiAoIW1fbWV0YWRhdGFEQikKKyAgICBTdHJpbmcgZGJGaWxlbmFt
ZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnks
ICJJbmRleGVkREIuc3FsaXRlMyIpOworICAgIG1fc3FsaXRlREIgPSBvcGVuU1FMaXRlRGF0YWJh
c2VBdFBhdGgoZGJGaWxlbmFtZSk7CisgICAgaWYgKCFtX3NxbGl0ZURCKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBt
ZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CkBAIC0xODUsNyArMTg5LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlOjpnZXRPckUKICAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1
bGF0ZUluaXRpYWxNZXRhZGF0YSgpOwogCiAgICAgaWYgKCFtZXRhZGF0YSkKLSAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIElEQiBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBt
ZXRhZGF0YURCRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIGVzdGFibGlzaCBJREIgZGF0YWJhc2UgYXQgcGF0aCAnJXMnIiwgZGJGaWxlbmFtZS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIFRoZSBkYXRhYmFzZSBpZCBpcyBhIHJ1bnRpbWUgY29u
Y2VwdCBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIHN0b3JlZCBpbiB0aGUgbWV0YWRhdGEgZGF0YWJh
c2UuCiAgICAgbWV0YWRhdGEtPmlkID0gZ2VuZXJhdGVEYXRhYmFzZUlkKCk7CkBAIC0xOTMsMTEg
KzE5NywxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldE9yRQogICAgIHJldHVybiBtZXRhZGF0YTsK
IH0KIAotYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXN0YWJsaXNo
VHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSkKK2Jvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmVzdGFibGlzaFRy
YW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICghbV90cmFu
c2FjdGlvbnMuYWRkKGlkZW50aWZpZXIsIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjcmVhdGUoaWRl
bnRpZmllcikpLmlzTmV3RW50cnkpIHsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25zLmFkZChpZGVu
dGlmaWVyLCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIG1vZGUpKS5p
c05ld0VudHJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBlc3RhYmxpc2ggdHJh
bnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGFscmVhZHkgZXhpc3RzIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC0yMTUsNyArMjE5LDcgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlv
bkkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB0cmFuc2FjdGlv
bi0+YmVnaW4oKTsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24tPmJlZ2luKCptX3NxbGl0ZURCKTsK
IH0KIAogYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y29tbWl0VHJh
bnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiBpZGVudGlmaWVyKQpAQCAt
MjU3LDYgKzI2MSwzNSBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
Ojpyb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aQogICAgIHJldHVybiB0cmFu
c2FjdGlvbi0+cm9sbGJhY2soKTsKIH0KIAorYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSWRl
bnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKKworICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldChpZGVudGlmaWVyKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIExPR19FUlJPUigi
QXR0ZW1wdCB0byBjaGFuZ2UgZGF0YWJhc2UgdmVyc2lvbiB3aXRoIGFuIGVzdGFibGlzaCwgaW4t
cHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6
VmVyc2lvbkNoYW5nZSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gY2hhbmdlIGRh
dGFiYXNlIHZlcnNpb24gZHVyaW5nIGEgbm9uIHZlcnNpb24tY2hhbmdlIHRyYW5zYWN0aW9uIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJVUERBVEUgSURCRGF0YWJhc2VJbmZvIFNFVCB2YWx1
ZSA9ID8gd2hlcmUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7Iik7CisgICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwg
U3RyaW5nOjpudW1iZXIobmV3VmVyc2lvbikpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IHVwZGF0ZSBkYXRhYmFzZSB2ZXJzaW9uIGluIElEQkRhdGFiYXNlSW5mbyB0YWJs
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxp
dGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlLmgKaW5kZXggNGVmZDNkMC4uYjM1Njc3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5o
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIiAKICNp
bmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC01OSw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgcmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbklkZW50aWZpZXImKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGJvb2wgcm9sbGJhY2tUcmFuc2FjdGlvbihjb25zdCBJREJUcmFu
c2FjdGlvbklkZW50aWZpZXImKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VE
YXRhYmFzZVZlcnNpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JZGVudGlmaWVyJiwgdWludDY0X3Qg
bmV3VmVyc2lvbikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CiAKQEAgLTY5LDcgKzcyLDcgQEAgcHJpdmF0
ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIFN0
cmluZyBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fbWV0YWRhdGFEQjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fc3FsaXRlREI7CiAKICAgICBIYXNoTWFwPElE
QlRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQlRyYW5zYWN0
aW9uPj4gbV90cmFuc2FjdGlvbnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZl
ckNvbm5lY3Rpb24uY3BwCmluZGV4IDJjYjJhYmUuLmY1OWY1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTcxLDYgKzcxLDkgQEAgV2ViSURC
U2VydmVyQ29ubmVjdGlvbjo6V2ViSURCU2VydmVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgY29uc3QKIFdlYklEQlNlcnZlckNvbm5lY3Rpb246On5XZWJJREJTZXJ2ZXJD
b25uZWN0aW9uKCkKIHsKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJUb0RhdGFiYXNlUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV2ViSURCU2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbV9zZXJ2ZXJSZXF1ZXN0cykKKyAgICAgICAgaXQu
dmFsdWUtPnJlcXVlc3RBYm9ydGVkKCk7CiB9CiAKIGJvb2wgV2ViSURCU2VydmVyQ29ubmVjdGlv
bjo6aXNDbG9zZWQoKQpAQCAtMjk2LDggKzI5OSwzMyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERl
bAogewogfQogCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmNoYW5nZURhdGFiYXNlVmVy
c2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZl
cnNpb25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3ZvaWQgV2ViSURCU2VydmVyQ29u
bmVjdGlvbjo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiYgb3BlcmF0aW9u
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykKIHsKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0
ID0gQXN5bmNSZXF1ZXN0SW1wbDxQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+Pjo6Y3JlYXRl
KGNvbXBsZXRpb25DYWxsYmFjayk7CisKKyAgICBzZXJ2ZXJSZXF1ZXN0LT5zZXRBYm9ydEhhbmRs
ZXIoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBjaGFuZ2luZyBkYXRhYmFzZSB2ZXJzaW9uIikpOwor
ICAgIH0pOworCisgICAgdWludDY0X3QgcmVxdWVzdElEID0gc2VydmVyUmVxdWVzdC0+cmVxdWVz
dElEKCk7CisgICAgQVNTRVJUKCFtX3NlcnZlclJlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3RJRCkp
OworICAgIG1fc2VydmVyUmVxdWVzdHMuYWRkKHJlcXVlc3RJRCwgc2VydmVyUmVxdWVzdC5yZWxl
YXNlKCkpOworCisgICAgTE9HKElEQiwgIldlYlByb2Nlc3MgY2hhbmdlRGF0YWJhc2VWZXJzaW9u
IHJlcXVlc3QgSUQgJWxsdSIsIHJlcXVlc3RJRCk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpDaGFuZ2VEYXRhYmFzZVZlcnNpb24ocmVxdWVzdElE
LCBvcGVyYXRpb24udHJhbnNhY3Rpb24oKS0+aWQoKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG9w
ZXJhdGlvbi52ZXJzaW9uKCkpKSk7Cit9CisKK3ZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6
ZGlkQ2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNz
KQoreworICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGRpZENoYW5nZURhdGFiYXNlVmVyc2lvbiBy
ZXF1ZXN0IElEICVsbHUiLCByZXF1ZXN0SUQpOworCisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4g
c2VydmVyUmVxdWVzdCA9IG1fc2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOworCisgICAg
aWYgKCFzZXJ2ZXJSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBzZXJ2ZXJSZXF1ZXN0
LT5jb21wbGV0ZVJlcXVlc3Qoc3VjY2VzcyA/IG51bGxwdHIgOiBJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Ig
b2NjdXJlZCBjaGFuZ2luZyBkYXRhYmFzZSB2ZXJzaW9uIikpOwogfQogCiB2b2lkIFdlYklEQlNl
cnZlckNvbm5lY3Rpb246OmN1cnNvckFkdmFuY2UoSURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IEN1
cnNvckFkdmFuY2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXgg
OTc4M2VjMC4uN2RiNWFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVj
dGlvbi5oCkBAIC05OSw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDb21taXRUcmFu
c2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7CiAgICAgdm9pZCBkaWRS
ZXNldFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKICAgICB2
b2lkIGRpZFJvbGxiYWNrVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nl
c3MpOworICAgIHZvaWQgZGlkQ2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCBzdWNjZXNzKTsKIAogICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50
aWZpZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KaW5kZXggNjExMTBkMC4uNDFhYWExOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTMwLDYg
KzMwLDggQEAgbWVzc2FnZXMgLT4gV2ViSURCU2VydmVyQ29ubmVjdGlvbiBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgRGlkQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1
Y2Nlc3MpCiAgICAgRGlkUmVzZXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
c3VjY2VzcykKICAgICBEaWRSb2xsYmFja1RyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCBzdWNjZXNzKQorCisgICAgRGlkQ2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJl
cXVlc3RJRCwgYm9vbCBzdWNjZXNzKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQo=
</data>
<flag name="review"
          id="243483"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>