<?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>203934</bug_id>
          
          <creation_ts>2019-11-06 17:26:40 -0800</creation_ts>
          <short_desc>Re-enable NSURLSession isolation after r252116</short_desc>
          <delta_ts>2019-11-07 09:05:41 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201822</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1588016</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 17:26:40 -0800</bug_when>
    <thetext>Re-enable NSURLSession isolation after r252116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588023</commentid>
    <comment_count>1</comment_count>
      <attachid>382991</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 17:35:43 -0800</bug_when>
    <thetext>Created attachment 382991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588024</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 17:35:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/56921584&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588037</commentid>
    <comment_count>3</comment_count>
      <attachid>382991</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2019-11-06 17:59:03 -0800</bug_when>
    <thetext>Comment on attachment 382991
Patch

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

Nice! See my comments. I&apos;d like someone else to have a look to, who&apos;s more familiar with task identifiers.

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:122
&gt; +    SessionWrapper m_ephemeralStatelessSession;

To make sure I understand, you&apos;re changing it so that stateless is now WithoutCredentialStorage and ephemeralStatelessCookieless is now ephemeralStateless?

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:544
&gt; +            ASSERT_NOT_REACHED();

This we need to test manually after you land since layout tests don&apos;t support HSTS.

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1140
&gt; +    m_ephemeralStatelessSession.initialize(configuration, *this, WebCore::StoredCredentialsPolicy::EphemeralStatelessCookieless);

Maybe we should rename StoredCredentialsPolicy::EphemeralStatelessCookieless to StoredCredentialsPolicy::EphemeralStateless to match the member naming?

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1144
&gt;  {

#if ENABLE(RESOURCE_LOAD_STATISTICS)

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1150
&gt; +        ASSERT_NOT_REACHED();

#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588038</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-06 17:59:36 -0800</bug_when>
    <thetext>I refactored this code quite a bit after the huge regression so your patch definitely will not apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588048</commentid>
    <comment_count>5</comment_count>
      <attachid>382999</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 18:21:18 -0800</bug_when>
    <thetext>Created attachment 382999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588054</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 18:26:48 -0800</bug_when>
    <thetext>(In reply to John Wilander from comment #3)
&gt; Comment on attachment 382991 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=382991&amp;action=review
&gt; 
&gt; Nice! See my comments. I&apos;d like someone else to have a look to, who&apos;s more
&gt; familiar with task identifiers.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:122
&gt; &gt; +    SessionWrapper m_ephemeralStatelessSession;
&gt; 
&gt; To make sure I understand, you&apos;re changing it so that stateless is now
&gt; WithoutCredentialStorage and ephemeralStatelessCookieless is now
&gt; ephemeralStateless?
Correct.  Stateless implies cookieless, and what we called &quot;stateless&quot; before was leftover from when we tried to make it actually stateless and learned that it needs to be just without credentials.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588061</commentid>
    <comment_count>7</comment_count>
      <attachid>383002</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 18:37:51 -0800</bug_when>
    <thetext>Created attachment 383002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588073</commentid>
    <comment_count>8</comment_count>
      <attachid>383004</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-06 19:00:00 -0800</bug_when>
    <thetext>Created attachment 383004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588105</commentid>
    <comment_count>9</comment_count>
      <attachid>383004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-06 21:03:47 -0800</bug_when>
    <thetext>Comment on attachment 383004
Patch

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

&gt; Source/WebKit/NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:76
&gt; +    cocoaSession.m_sessionWithCredentialStorage.downloadMap.add(taskIdentifier, m_downloadID);

I think we should avoid interacting with network session data members directly, this is bad practice.

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:66
&gt; +    friend class Download;

Let&apos;s avoid this. I think we should strive to remove friends, not add more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588106</commentid>
    <comment_count>10</comment_count>
      <attachid>383004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-06 21:11:02 -0800</bug_when>
    <thetext>Comment on attachment 383004
Patch

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

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:54
&gt; +    WeakPtr&lt;NetworkSessionCocoa&gt; sessionCocoa;

Including this here seems wasteful:
- NetworkDataTaskCocoa already has access to this via m_session.
- This IsolatedSession struct has 2 SessionWrapper members, so ends up with 2 identical pointers to the NetworkSessionCocoa.

I think we should extra this member out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588108</commentid>
    <comment_count>11</comment_count>
      <attachid>383004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-06 21:14:51 -0800</bug_when>
    <thetext>Comment on attachment 383004
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:54
&gt;&gt; +    WeakPtr&lt;NetworkSessionCocoa&gt; sessionCocoa;
&gt; 
&gt; Including this here seems wasteful:
&gt; - NetworkDataTaskCocoa already has access to this via m_session.
&gt; - This IsolatedSession struct has 2 SessionWrapper members, so ends up with 2 identical pointers to the NetworkSessionCocoa.
&gt; 
&gt; I think we should extra this member out.

No to mention that the NetworkSessionCocoa has these data members:
SessionWrapper m_sessionWithCredentialStorage;
SessionWrapper m_sessionWithoutCredentialStorage;
SessionWrapper m_ephemeralStatelessSession;

So ends up with 3 unnecessary WeakPtrs to itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588109</commentid>
    <comment_count>12</comment_count>
      <attachid>383004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-06 21:24:45 -0800</bug_when>
    <thetext>Comment on attachment 383004
Patch

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

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:537
&gt; +        if (auto sessionCocoa = _sessionWrapper ? _sessionWrapper-&gt;sessionCocoa.get() : nullptr) {

Could use [self sessionCocoa].

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:573
&gt; +        if (auto sessionCocoa = _sessionWrapper ? _sessionWrapper-&gt;sessionCocoa.get() : nullptr) {

Could use [self sessionCocoa].

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:897
&gt; +    ASSERT(!_sessionWrapper-&gt;downloadMap.contains(downloadTask.taskIdentifier));

RELEASE_ASSERT ?

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1370
&gt; +    ASSERT(!m_sessionWithCredentialStorage.webSocketDataTaskMap.contains(task.identifier()));

RELEASE_ASSERT?

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1376
&gt; +    ASSERT(m_sessionWithCredentialStorage.webSocketDataTaskMap.contains(task.identifier()));

RELEASE_ASSERT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588187</commentid>
    <comment_count>13</comment_count>
      <attachid>383004</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 06:22:35 -0800</bug_when>
    <thetext>Comment on attachment 383004
Patch

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

&gt;&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:54
&gt;&gt;&gt; +    WeakPtr&lt;NetworkSessionCocoa&gt; sessionCocoa;
&gt;&gt; 
&gt;&gt; Including this here seems wasteful:
&gt;&gt; - NetworkDataTaskCocoa already has access to this via m_session.
&gt;&gt; - This IsolatedSession struct has 2 SessionWrapper members, so ends up with 2 identical pointers to the NetworkSessionCocoa.
&gt;&gt; 
&gt;&gt; I think we should extra this member out.
&gt; 
&gt; No to mention that the NetworkSessionCocoa has these data members:
&gt; SessionWrapper m_sessionWithCredentialStorage;
&gt; SessionWrapper m_sessionWithoutCredentialStorage;
&gt; SessionWrapper m_ephemeralStatelessSession;
&gt; 
&gt; So ends up with 3 unnecessary WeakPtrs to itself.

These WeakPtrs are actually necessary right now to get from the download delegate callbacks to the NetworkSession because Downloads are owned by the DownloadManager and only have an identifier, no reference to their NetworkSession.  We could fix this in a further refactoring, but I think that should not be in the same patch as the rest of this.  I&apos;ll put a fixme for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588189</commentid>
    <comment_count>14</comment_count>
      <attachid>383043</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 06:29:30 -0800</bug_when>
    <thetext>Created attachment 383043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588202</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-07 06:53:33 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #13)
&gt; Comment on attachment 383004 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383004&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h:54
&gt; &gt;&gt;&gt; +    WeakPtr&lt;NetworkSessionCocoa&gt; sessionCocoa;
&gt; &gt;&gt; 
&gt; &gt;&gt; Including this here seems wasteful:
&gt; &gt;&gt; - NetworkDataTaskCocoa already has access to this via m_session.
&gt; &gt;&gt; - This IsolatedSession struct has 2 SessionWrapper members, so ends up with 2 identical pointers to the NetworkSessionCocoa.
&gt; &gt;&gt; 
&gt; &gt;&gt; I think we should extra this member out.
&gt; &gt; 
&gt; &gt; No to mention that the NetworkSessionCocoa has these data members:
&gt; &gt; SessionWrapper m_sessionWithCredentialStorage;
&gt; &gt; SessionWrapper m_sessionWithoutCredentialStorage;
&gt; &gt; SessionWrapper m_ephemeralStatelessSession;
&gt; &gt; 
&gt; &gt; So ends up with 3 unnecessary WeakPtrs to itself.
&gt; 
&gt; These WeakPtrs are actually necessary right now to get from the download
&gt; delegate callbacks to the NetworkSession because Downloads are owned by the
&gt; DownloadManager and only have an identifier, no reference to their
&gt; NetworkSession.  We could fix this in a further refactoring, but I think
&gt; that should not be in the same patch as the rest of this.  I&apos;ll put a fixme
&gt; for now.

Whoever needs it, can store it separately. It does not need and should not be in this structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588208</commentid>
    <comment_count>16</comment_count>
      <attachid>383043</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-07 06:58:21 -0800</bug_when>
    <thetext>Comment on attachment 383043
Patch

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

&gt; Source/WebKit/NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:73
&gt; +    m_downloadTask = [cocoaSession.sessionWrapperForDownloads().session downloadTaskWithResumeData:updatedData];

Download seems to have access to its session here, so what do you mean?

I don’t think there is a rush to re-land me so I do not understand the need to land a FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588222</commentid>
    <comment_count>17</comment_count>
      <attachid>383046</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 07:34:44 -0800</bug_when>
    <thetext>Created attachment 383046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588227</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 08:05:23 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #16)
&gt; Comment on attachment 383043 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383043&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:73
&gt; &gt; +    m_downloadTask = [cocoaSession.sessionWrapperForDownloads().session downloadTaskWithResumeData:updatedData];
&gt; 
&gt; Download seems to have access to its session here, so what do you mean?
Once we have a Download that&apos;s easy.  It&apos;s getting from the WKNetworkSessionDelegate to the Download that&apos;s hard because we only have a DownloadID, and the Downloads must be gotten through the DownloadManager right now.  I fixed it by adding a WeakPtr&lt;NetworkProcess&gt; in DownloadData that is made only when we make a Download and used only for Downloads.  I think that was a lot of work just to remove the 3-WeakPtr initialization cost addition to creating a NetworkSession (which is a heavy object).  I don&apos;t think it was worth that work right now, but it&apos;s done and ready for review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588233</commentid>
    <comment_count>19</comment_count>
      <attachid>383046</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-07 08:24:13 -0800</bug_when>
    <thetext>Comment on attachment 383046
Patch

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

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:399
&gt; +    WeakPtr&lt;WebKit::SessionWrapper&gt; _sessionWrapper;

I think this should have a WeakPtr to the NetworkSessionCocoa and another WeakPtr to the sessionWrapper.
Then you can get the network process from the NetworkSessionCocoa, like we used to. And you don&apos;t need to have a WeakPtr to the NetworkProcess in the DownloadData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588239</commentid>
    <comment_count>20</comment_count>
      <attachid>383053</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 08:37:39 -0800</bug_when>
    <thetext>Created attachment 383053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588240</commentid>
    <comment_count>21</comment_count>
      <attachid>383053</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-07 08:38:58 -0800</bug_when>
    <thetext>Comment on attachment 383053
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588242</commentid>
    <comment_count>22</comment_count>
      <attachid>383054</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 08:48:45 -0800</bug_when>
    <thetext>Created attachment 383054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588246</commentid>
    <comment_count>23</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-07 09:05:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/r252185</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382991</attachid>
            <date>2019-11-06 17:35:43 -0800</date>
            <delta_ts>2019-11-06 18:21:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107013542.patch</filename>
            <type>text/plain</type>
            <size>60383</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIxMzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5T
VVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjI1MjExNiB3YXMgYSByb2xsb3V0IG9mIHIyNDg2
NDAsIHdoaWNoIGludHJvZHVjZWQgY2FzZXMgd2hlcmUgZGF0YSB0YXNrcyBmcm9tIGRpZmZlcmVu
dCBOU1VSTFNlc3Npb25zCisgICAgICAgIHdoaWNoIGNhbiBoYXZlIHRoZSBzYW1lIHRhc2sgaWRl
bnRpZmllcnMgd2VyZSBwdXQgaW50byB0aGUgc2FtZSBtYXBzLiAgVGhpcyBrZXkgY29sbGlzaW9u
IGNhdXNlZCBkYXRhIGZyb20gdGhlIHdyb25nCisgICAgICAgIHRhc2tzIHRvIGJlIHNlbnQgdG8g
TmV0d29ya1Jlc291cmNlTG9hZGVyLCBjYXVzaW5nIHJhcmUgYW5kIHN0cmFuZ2UgbG9hZGluZyBi
dWdzLiAgSW4gb3JkZXIgdG8gcHJldmVudCBpbnNlcnRpb24gaW50bworICAgICAgICB3cm9uZyBt
YXBzIGFnYWluLCBJIG1hZGUgYSBuZXcgYWJzdHJhY3Rpb24sIFNlc3Npb25XcmFwcGVyLCB3aGlj
aCB3cmFwcyBhIE5TVVJMU2Vzc2lvbiwgaXRzIGRlbGVnYXRlLCBhbmQgYWxsIG1hcHMKKyAgICAg
ICAgdGhhdCBhcmUgc2NvcGVkIHRvIHRoYXQgTlNVUkxTZXNzaW9uLiAgQWxvbmcgdGhlIHdheSBJ
IGZvdW5kIGEgZmV3IG90aGVyIHBsYWNlcyB3aGVyZSB3ZSBoYWQgbWFkZSBzaW1pbGFyIG1pc3Rh
a2VzLgorCisgICAgICAgIENvdmVyZWQgYnkgYW4gQVBJIHRlc3Qgd2hpY2ggd291bGQndmUgZmFp
bGVkIGJlZm9yZSByMjUyMTE2IGJlY2F1c2UgaXQgZXhlcmNpc2VzIHRoZSBrZXkgY29sbGlzaW9u
IGNvbmRpdGlvbiwKKyAgICAgICAgYW5kIGJ5IHRlc3RzIHdoaWNoIHdlcmUgc2tpcHBlZCBpbiBy
MjUyMTE2IGFuZCBJIG5vdyB1bnNraXBwZWQuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OnJlc3VtZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdv
cmtEYXRhVGFza0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6
On5OZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZSBpbml0V2l0aFNlc3Npb25XcmFwcGVyOndpdGhDcmVkZW50aWFsczpdKToKKyAgICAgICAgKC1b
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgZXhpc3RpbmdUYXNrOl0pOgorICAgICAgICAoLVtX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkNvY29hXSk6CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6
XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6
d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb246bmV3UmVxdWVzdDpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpf
c2NoZW1lVXBncmFkZWQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29y
a1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOndpbGxDYWNoZVJlc3BvbnNlOmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAocHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlv
bik6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6
ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tO
ZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhFcnJv
cjpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93
bmxvYWRUYXNrOmRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6XSk6CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFzazpkaWRXcml0ZURhdGE6
dG90YWxCeXRlc1dyaXR0ZW46dG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTpdKToKKyAgICAgICAg
KC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93bmxvYWRUYXNrOmRpZFJl
c3VtZUF0T2Zmc2V0OmV4cGVjdGVkVG90YWxCeXRlczpdKToKKyAgICAgICAgKC1bV0tOZXR3b3Jr
U2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkQmVjb21lRG93bmxvYWRUYXNr
Ol0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgZXhpc3RpbmdXZWJTb2Nr
ZXRUYXNrOl0pOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uV3JhcHBlcjo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29j
b2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBo
ZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q29jb2E6OnNlc3Npb25XcmFwcGVyRm9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmludmFsaWRhdGVBbmRDYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGVXZWJTb2NrZXRUYXNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkV2ViU29ja2V0VGFzayk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnJlbW92ZVdlYlNvY2tldFRhc2spOgor
ICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgaW5pdFdpdGhOZXR3b3JrU2Vzc2lv
bjp3aXRoQ3JlZGVudGlhbHM6XSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRh
VGFza0ZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vz
c2lvbkNvY29hOjpkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjp3ZWJTb2Nr
ZXREYXRhVGFza0ZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRh
U3RvcmUgX2xvZ1VzZXJJbnRlcmFjdGlvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKwogMjAx
OS0xMS0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gSW1wbGVtZW50IHN1cHBvcnQgZm9yIFBvaW50ZXIgTG9jayBBUEkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkocmV2aXNpb24gMjUyMTM0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtNzAsOCArNzAsMTAgQEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0
IElQQzo6RGF0YVJlZgogICAgIE5TRGF0YSAqdXBkYXRlZERhdGEgPSBbTlNQcm9wZXJ0eUxpc3RT
ZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0OmRpY3Rpb25hcnkgZm9ybWF0Ok5TUHJv
cGVydHlMaXN0WE1MRm9ybWF0X3YxXzAgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwogI2VuZGlm
CiAKLSAgICBtX2Rvd25sb2FkVGFzayA9IGNvY29hU2Vzc2lvbi5kb3dubG9hZFRhc2tXaXRoUmVz
dW1lRGF0YSh1cGRhdGVkRGF0YSk7Ci0gICAgY29jb2FTZXNzaW9uLmFkZERvd25sb2FkSUQobV9k
b3dubG9hZFRhc2suZ2V0KCkudGFza0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CisgICAgbV9k
b3dubG9hZFRhc2sgPSBbY29jb2FTZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZS5zZXNzaW9uIGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhOnVwZGF0ZWREYXRhXTsKKyAgICBh
dXRvIHRhc2tJZGVudGlmaWVyID0gW21fZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXTsKKyAg
ICBBU1NFUlQoIWNvY29hU2Vzc2lvbi5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZG93
bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKKyAgICBjb2NvYVNlc3Npb24ubV9z
ZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmll
ciwgbV9kb3dubG9hZElEKTsKICAgICBtX2Rvd25sb2FkVGFzay5nZXQoKS5fcGF0aFRvRG93bmxv
YWRUYXNrRmlsZSA9IHBhdGg7CiAKICAgICBbbV9kb3dubG9hZFRhc2sgcmVzdW1lXTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmgJKHJldmlzaW9uIDI1MjEzNCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWQ7CiBj
bGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hOworc3RydWN0IFNlc3Npb25XcmFwcGVyOwogCiBjbGFz
cyBOZXR3b3JrRGF0YVRhc2tDb2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrRGF0YVRhc2sgewog
ICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hOwpAQCAtODksNiArOTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgaXNUaGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBjb25zdDsKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0OwogCisgICAgU2Vzc2lvbldyYXBwZXImIG1fc2Vzc2lvbldyYXBwZXI7CiAgICAgUmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8
TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKICAgICBXZWJDb3JlOjpOZXR3b3JrTG9hZE1l
dHJpY3MgbV9uZXR3b3JrTG9hZE1ldHJpY3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJl
dmlzaW9uIDI1MjEzNCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgY29tcHV0ZUlzQWx3YXlzT25Mb2dnCiAKIE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0
d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1Nu
aWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIFByZWNvbm5lY3RPbmx5IHNob3VsZFByZWNv
bm5lY3RPbmx5LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uLCBib29sIGRh
dGFUYXNrSXNGb3JNYWluUmVzb3VyY2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUsIE9wdGlvbmFsPE5l
dHdvcmtBY3Rpdml0eVRyYWNrZXI+IG5ldHdvcmtBY3Rpdml0eVRyYWNrZXIpCiAgICAgOiBOZXR3
b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCwgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pCisgICAgLCBtX3Nlc3Npb25X
cmFwcGVyKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPihzZXNzaW9uKS5zZXNzaW9u
V3JhcHBlckZvclRhc2socmVxdWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3kpKQogICAgICwgbV9mcmFtZUlEKGZyYW1lSUQpCiAgICAgLCBtX3BhZ2VJRChwYWdlSUQp
CiAgICAgLCBtX2lzRm9yTWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKGRhdGFUYXNr
SXNGb3JNYWluUmVzb3VyY2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUpCkBAIC0yMDYsMTQgKzIwNywx
MSBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jCiAjZW5kaWYKIAog
ICAgIGJvb2wgc2hvdWxkQmxvY2tDb29raWVzID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkc0lzb2xh
dGVkU2Vzc2lvbiA9IGZhbHNlOwotICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6
RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKICAgICBpZiAoYXV0byogbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uID0gc2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkgewogICAgICAgICBp
ZiAoIXNob3VsZEJsb2NrQ29va2llcykKICAgICAgICAgICAgIHNob3VsZEJsb2NrQ29va2llcyA9
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIGZyYW1l
SUQsIHBhZ2VJRCk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTY5MjE1ODQ+
IG5lZWRzSXNvbGF0ZWRTZXNzaW9uIHNob3VsZCBiZSBzZXQgaGVyZS4KICAgICB9CiAjZW5kaWYK
ICAgICByZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQocmVxdWVzdCk7CkBA
IC0yMjEsMjggKzIxOSwxMSBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNr
Q29jCiAgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSByZXF1ZXN0Lm5zVVJMUmVxdWVzdChX
ZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOwogICAgIGFwcGx5
U25pZmZpbmdQb2xpY2llc0FuZEJpbmRSZXF1ZXN0VG9JbmZlcmZhY2VJZk5lZWRlZChuc1JlcXVl
c3QsIHNob3VsZENvbnRlbnRTbmlmZiA9PSBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3k6
OlNuaWZmQ29udGVudCAmJiAhdXJsLmlzTG9jYWxGaWxlKCksIHNob3VsZENvbnRlbnRFbmNvZGlu
Z1NuaWZmID09IFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5OjpTbmlmZik7
CiAKLSAgICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNv
Y29hJj4oKm1fc2Vzc2lvbik7Ci0gICAgaWYgKG5lZWRzSXNvbGF0ZWRTZXNzaW9uKQotICAgICAg
ICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLmlzb2xhdGVkU2Vzc2lvbihzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgZmlyc3RQYXJ0eSkgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAg
IGVsc2UKLSAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9uKHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5KSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgc3dpdGNo
IChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgQVNTRVJUKCFjb2NvYVNlc3Npb24ubV9kYXRh
VGFza01hcFdpdGhDcmVkZW50aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkp
OwotICAgICAgICBjb2NvYVNlc3Npb24ubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5hZGQo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwotICAgICAgICBMT0coTmV0d29ya1Nlc3Np
b24sICIlbGx1IENyZWF0aW5nIHN0YXRlZnVsIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIs
IFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVU
RjhTdHJpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5OjpEb05vdFVzZToKLSAgICAgICAgQVNTRVJUKCFjb2NvYVNlc3Npb24ubV9k
YXRhVGFza01hcFdpdGhvdXRTdGF0ZS5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkp
OwotICAgICAgICBjb2NvYVNlc3Npb24ubV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZS5hZGQoW21f
dGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwotICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24s
ICIlbGx1IENyZWF0aW5nIHN0YXRlbGVzcyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBVUkwgJXMiLCBb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4
U3RyaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAgICAgQVNTRVJU
KCFjb2NvYVNlc3Npb24ubV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3Mu
Y29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKLSAgICAgICAgY29jb2FTZXNzaW9u
Lm1fZGF0YVRhc2tNYXBFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzLmFkZChbbV90YXNrIHRh
c2tJZGVudGlmaWVyXSwgdGhpcyk7Ci0gICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUg
Q3JlYXRpbmcgZXBoZW1lcmFsLCBzdGF0ZWxlc3MsIGNvb2tpZWxlc3MgTmV0d29ya0RhdGFUYXNr
IHdpdGggVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5VUkwuYWJz
b2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBtX3Rh
c2sgPSBbbV9zZXNzaW9uV3JhcHBlci5zZXNzaW9uIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1
ZXN0XTsKKworICAgIEFTU0VSVCghbV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5jb250YWlu
cyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAgIG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRh
c2tNYXAuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICBMT0coTmV0d29y
a1Nlc3Npb24sICIlbGx1IENyZWF0aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIsIFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdLCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhT
dHJpbmcpOwogCiAgICAgaWYgKHNob3VsZFByZWNvbm5lY3RPbmx5ID09IFByZWNvbm5lY3RPbmx5
OjpZZXMpIHsKICNpZiBFTkFCTEUoU0VSVkVSX1BSRUNPTk5FQ1QpCkBAIC0yODAsMjEgKzI2MSw4
IEBAIE5ldHdvcmtEYXRhVGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ28KICAgICBpZiAoIW1f
dGFzayB8fCAhbV9zZXNzaW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBjb2NvYVNl
c3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4oKm1fc2Vzc2lvbik7Ci0g
ICAgc3dpdGNoIChtX3N0b3JlZENyZWRlbnRpYWxzUG9saWN5KSB7Ci0gICAgY2FzZSBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlOgotICAgICAgICBBU1NFUlQoY29jb2FTZXNz
aW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdKSA9PSB0aGlzKTsKLSAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3Jl
ZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6Ci0g
ICAgICAgIEFTU0VSVChjb2NvYVNlc3Npb24ubV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZS5nZXQo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICBjb2NvYVNlc3Npb24u
bV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZS5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOgotICAgICAgICBBU1NFUlQoY29jb2FT
ZXNzaW9uLm1fZGF0YVRhc2tNYXBFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzLmdldChbbV90
YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgIGNvY29hU2Vzc2lvbi5tX2Rh
dGFUYXNrTWFwRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcy5yZW1vdmUoW21fdGFzayB0YXNr
SWRlbnRpZmllcl0pOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgQVNTRVJUKG1fc2Vzc2lv
bldyYXBwZXIuZGF0YVRhc2tNYXAuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlz
KTsKKyAgICBtX3Nlc3Npb25XcmFwcGVyLmRhdGFUYXNrTWFwLnJlbW92ZShbbV90YXNrIHRhc2tJ
ZGVudGlmaWVyXSk7CiB9CiAKIHZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnJlc3RyaWN0UmVx
dWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaAkocmV2aXNpb24gMjUyMTM0KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIE9CSkNfQ0xBU1MgRE1GV2Vic2l0ZVBvbGljeU1v
bml0b3I7CiBPQkpDX0NMQVNTIE5TRGF0YTsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOworT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBOU1VSTFNlc3Np
b25Eb3dubG9hZFRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBPQkpDX0NMQVNT
IFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKQEAgLTQ1LDE2ICs0NiwzMSBAQCBPQkpDX0NMQVNT
IFdLTmV0d29ya1Nlc3Npb25XZWJTb2NrZXREZWxlCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2Nv
YTsKKworc3RydWN0IFNlc3Npb25XcmFwcGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFNlc3Np
b25XcmFwcGVyPiB7CisgICAgdm9pZCBpbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRp
b24gKiwgTmV0d29ya1Nlc3Npb25Db2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5KTsKKworICAgIFdlYWtQdHI8TmV0d29ya1Nlc3Npb25Db2NvYT4gc2Vzc2lvbkNvY29hOwor
ICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IHNlc3Npb247CisgICAgUmV0YWluUHRyPFdLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZT4gZGVsZWdhdGU7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gZGF0YVRhc2tN
YXA7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERv
d25sb2FkSUQ+IGRvd25sb2FkTWFwOworI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkK
KyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViU29j
a2V0VGFzayo+IHdlYlNvY2tldERhdGFUYXNrTWFwOworI2VuZGlmCit9OwogCiBjbGFzcyBOZXR3
b3JrU2Vzc2lvbkNvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKICAgICBmcmll
bmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2E7CisgICAgZnJpZW5kIGNsYXNzIERvd25sb2Fk
OwogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+IGNy
ZWF0ZShOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYp
OwogCiAgICAgTmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkNvY29hKCk7CiAK
LSAgICB2b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKIAogICAg
IGNvbnN0IFN0cmluZyYgYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgY29u
c3QgU3RyaW5nJiBzb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25zdDsKQEAg
LTYzLDE4ICs3OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGRhdGFDb25uZWN0aW9u
U2VydmljZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7
IH0KICNlbmRpZgogCi0gICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFUYXNrRm9ySWRlbnRp
ZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25s
b2FkVGFza1dpdGhSZXN1bWVEYXRhKE5TRGF0YSopOwotCi0gICAgV2ViU29ja2V0VGFzayogd2Vi
U29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRhc2s6OlRhc2tJZGVudGlmaWVy
KTsKLQotICAgIHZvaWQgYWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lk
ZW50aWZpZXIsIERvd25sb2FkSUQpOwotICAgIERvd25sb2FkSUQgZG93bmxvYWRJRChOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIpOwotICAgIERvd25sb2FkSUQgdGFrZURvd25s
b2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKLQogICAgIHN0YXRp
YyBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKIAotICAgIHZvaWQgY29udGludWVEaWRSZWNl
aXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSos
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYpOworICAgIHZvaWQgY29u
dGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKFNlc3Npb25XcmFwcGVyJiwgY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50
aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJL
aXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNy
ZWRlbnRpYWwmKT4mJik7CiAKICAgICBib29sIGZhc3RTZXJ2ZXJUcnVzdEV2YWx1YXRpb25FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZDsg
fQogICAgIGJvb2wgZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2RldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkOyB9CkBAIC04Myw4
ICs5MCw2IEBAIHB1YmxpYzoKIAogICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUNvbmZpZ3VyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Byb3h5Q29uZmlndXJhdGlvbi5nZXQoKTsgfQogCi0gICAg
TlNVUkxTZXNzaW9uKiBzZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsK
LSAgICBOU1VSTFNlc3Npb24qIGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pOwogICAgIGJvb2wg
aGFzSXNvbGF0ZWRTZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFySXNvbGF0ZWRTZXNzaW9ucygpIG92ZXJyaWRlOwog
CkBAIC05Myw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkg
b3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb247IH0KICAgICBTZWNv
bmRzIGxvYWRUaHJvdHRsZUxhdGVuY3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvYWRU
aHJvdHRsZUxhdGVuY3k7IH0KKyAgICBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JU
YXNrKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5KTsKKyAgICBTZXNzaW9uV3JhcHBlciYgaXNvbGF0ZWRTZXNzaW9uKFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbik7CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENo
YW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKSBmaW5hbDsKQEAgLTEwMCwzMCArMTA3LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZW1vdmVXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smKSBmaW5hbDsKICNlbmRpZgogCi0gICAg
SGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRh
VGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5l
dHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2Eq
PiBtX2RhdGFUYXNrTWFwV2l0aG91dFN0YXRlOwotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tN
YXBFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOwotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFU
YXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwotI2lm
IEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViU29ja2V0VGFzayo+IG1fd2ViU29ja2V0RGF0YVRh
c2tNYXA7Ci0jZW5kaWYKLQogICAgIHN0cnVjdCBJc29sYXRlZFNlc3Npb24gewotICAgICAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBzZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAg
ICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBzZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlRGVsZWdhdGU7Ci0gICAgICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IHN0
YXRlbGVzc1Nlc3Npb247Ci0gICAgICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+IHN0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZTsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBTZXNzaW9uV3JhcHBlciBzZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlOworICAgICAgICBTZXNzaW9uV3JhcHBlciBzZXNzaW9uV2l0aG91dENy
ZWRlbnRpYWxTdG9yYWdlOwogICAgICAgICBXYWxsVGltZSBsYXN0VXNlZDsKICAgICB9OwogCi0g
ICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgSXNvbGF0ZWRTZXNzaW9uPiBt
X2lzb2xhdGVkU2Vzc2lvbnM7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biwgc3RkOjp1bmlxdWVfcHRyPElzb2xhdGVkU2Vzc2lvbj4+IG1faXNvbGF0ZWRTZXNzaW9uczsK
IAotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25X
aXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9u
PiBtX3N0YXRlbGVzc1Nlc3Npb247Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxl
Z2F0ZT4gbV9zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vz
c2lvbj4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbjsKLSAgICBSZXRhaW5Q
dHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxl
c3NTZXNzaW9uRGVsZWdhdGU7CisgICAgU2Vzc2lvbldyYXBwZXIgbV9zZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlOworICAgIFNlc3Npb25XcmFwcGVyIG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50
aWFsU3RvcmFnZTsKKyAgICBTZXNzaW9uV3JhcHBlciBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Np
b247CiAKICAgICBTdHJpbmcgbV9ib3VuZEludGVyZmFjZUlkZW50aWZpZXI7CiAgICAgU3RyaW5n
IG1fc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQkocmV2aXNpb24gMjUyMTM0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsMjQgKzM5
NSwyNCBAQCBAaW50ZXJmYWNlIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSA6IE5TCiAgICAgLCBO
U1VSTFNlc3Npb25XZWJTb2NrZXREZWxlZ2F0ZQogI2VuZGlmCiA+IHsKLSAgICBXZWFrUHRyPFdl
YktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYT4gX3Nlc3Npb247CisgICAgV2Vha1B0cjxXZWJLaXQ6
OlNlc3Npb25XcmFwcGVyPiBfc2Vzc2lvbldyYXBwZXI7CiAgICAgYm9vbCBfd2l0aENyZWRlbnRp
YWxzOwogfQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFs
czsKKy0gKGlkKWluaXRXaXRoU2Vzc2lvbldyYXBwZXI6KFdlYktpdDo6U2Vzc2lvbldyYXBwZXIm
KXNlc3Npb25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHM7CiAt
ICh2b2lkKXNlc3Npb25JbnZhbGlkYXRlZDsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tO
ZXR3b3JrU2Vzc2lvbkRlbGVnYXRlCiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wp
d2l0aENyZWRlbnRpYWxzCistIChpZClpbml0V2l0aFNlc3Npb25XcmFwcGVyOihXZWJLaXQ6OlNl
c3Npb25XcmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENy
ZWRlbnRpYWxzCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHNlc3Npb24p
OworICAgIF9zZXNzaW9uV3JhcHBlciA9IG1ha2VXZWFrUHRyKHNlc3Npb25XcmFwcGVyKTsKICAg
ICBfd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzOwogCiAgICAgcmV0dXJuIHNlbGY7
CkBAIC00MjAsMjQgKzQyMCwzMCBAQCAtIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJL
aXQ6Ok5lCiAKIC0gKHZvaWQpc2Vzc2lvbkludmFsaWRhdGVkCiB7Ci0gICAgX3Nlc3Npb24gPSBu
dWxscHRyOworICAgIF9zZXNzaW9uV3JhcHBlciA9IG51bGxwdHI7CiB9CiAKIC0gKE5ldHdvcmtE
YXRhVGFza0NvY29hKilleGlzdGluZ1Rhc2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrCiB7Ci0g
ICAgaWYgKCFfc2Vzc2lvbikKKyAgICBpZiAoIV9zZXNzaW9uV3JhcHBlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIXRhc2spCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IF93aXRoQ3JlZGVudGlhbHMgPyBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIHJldHVybiBfc2Vzc2lvbi0+ZGF0YVRhc2tG
b3JJZGVudGlmaWVyKHRhc2sudGFza0lkZW50aWZpZXIsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
KTsKKyAgICByZXR1cm4gX3Nlc3Npb25XcmFwcGVyLT5kYXRhVGFza01hcC5nZXQodGFzay50YXNr
SWRlbnRpZmllcik7Cit9CisKKy0gKE5ldHdvcmtTZXNzaW9uQ29jb2EgKilzZXNzaW9uQ29jb2EK
K3sKKyAgICBpZiAoIV9zZXNzaW9uV3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIF9zZXNzaW9uV3JhcHBlci0+c2Vzc2lvbkNvY29hLmdldCgpOwogfQogCiAtICh2
b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGlkQmVjb21lSW52YWxpZFdp
dGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7Ci0gICAgQVNTRVJUKCFfc2Vzc2lvbik7CisgICAg
QVNTRVJUKCFfc2Vzc2lvbldyYXBwZXIpOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkU2VuZEJv
ZHlEYXRhOihpbnQ2NF90KWJ5dGVzU2VudCB0b3RhbEJ5dGVzU2VudDooaW50NjRfdCl0b3RhbEJ5
dGVzU2VudCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQ6KGludDY0X3QpdG90YWxCeXRlc0V4cGVj
dGVkVG9TZW5kCkBAIC01MjcsMTIgKzUzMywxNSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3NpCiAKICAgICAgICAgYm9vbCBzaG91bGRJZ25vcmVIU1RTID0gZmFsc2U7
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgc2hvdWxkSWdu
b3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBf
c2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lv
bklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29ya0RhdGFUYXNrLT5mcmFt
ZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOwotICAgICAgICBpZiAoc2hvdWxkSWdu
b3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVz
dCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJp
bmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3du
Z3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVS
TC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0
byBzZXNzaW9uQ29jb2EgPSBfc2Vzc2lvbldyYXBwZXIgPyBfc2Vzc2lvbldyYXBwZXItPnNlc3Np
b25Db2NvYS5nZXQoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNob3VsZElnbm9yZUhTVFMg
PSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVzdCkgJiYgc2Vzc2lvbkNv
Y29hLT5uZXR3b3JrUHJvY2VzcygpLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25Db2NvYS0+c2Vzc2lv
bklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29ya0RhdGFUYXNrLT5mcmFt
ZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZElnbm9yZUhTVFMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZG93bmdyYWRlUmVxdWVz
dChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3QuVVJMLnNjaGVtZSBp
c0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOworICAgICAgICAgICAgICAgIExPRyhOZXR3b3JrU2Vz
c2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0dHAiLCB0YXNrSWRlbnRp
ZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAj
ZW5kaWYKIAogICAgICAgICBuZXR3b3JrRGF0YVRhc2stPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0
aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBbY29tcGxldGlvbkhhbmRsZXJDb3B5LCB0YXNrSWRlbnRp
Zmllciwgc2hvdWxkSWdub3JlSFNUU10oYXV0byYmIHJlcXVlc3QpIHsKQEAgLTU2MCwxMiArNTY5
LDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICAgICBpZiAo
YXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdKSB7CiAgICAg
ICAgIGJvb2wgc2hvdWxkSWdub3JlSFNUUyA9IGZhbHNlOwogI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHNob3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdy
YWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVzdCkgJiYgX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNz
KCkuc3RvcmFnZVNlc3Npb24oX3Nlc3Npb24tPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxvY2tDb29r
aWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRhc2st
PnBhZ2VJRCgpKTsKLSAgICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKLSAgICAgICAgICAg
IHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgQVNTRVJU
KFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKLSAgICAgICAg
ICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRv
IGh0dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0
cmluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gc2Vzc2lvbkNvY29hID0gX3Nlc3Np
b25XcmFwcGVyID8gX3Nlc3Npb25XcmFwcGVyLT5zZXNzaW9uQ29jb2EuZ2V0KCkgOiBudWxscHRy
KSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2NoZW1lV2FzVXBncmFkZWREdWVU
b0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Npb25Db2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5z
dG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxvY2tDb29r
aWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRhc2st
PnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVIU1RTKSB7CisgICAgICAg
ICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJd
KTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IERvd25ncmFkZWQg
JXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIsIHJlcXVlc3QuVVJMLmFic29s
dXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAKICAgICAgICAgYXV0byBj
b21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVyKTsKQEAg
LTU4OCwxMSArNjAwLDYgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6
KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgd2lsbENhY2hlUmVzcG9uc2U6KE5TQ2Fj
aGVkVVJMUmVzcG9uc2UgKilwcm9wb3NlZFJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb25zZSkpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5p
bCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogcmVtb3ZlIGlmIDxy
ZGFyOi8vcHJvYmxlbS8yMDAwMTk4NT4gaXMgZXZlciByZXNvbHZlZC4KICAgICBpZiAoW3Byb3Bv
c2VkUmVzcG9uc2UucmVzcG9uc2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihhbGxIZWFk
ZXJGaWVsZHMpXQogICAgICAgICAmJiBbWyhpZClwcm9wb3NlZFJlc3BvbnNlLnJlc3BvbnNlIGFs
bEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1SYW5nZSJdKQpAQCAtNjAyLDkg
KzYwOSw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIH0KIAog
I2lmIEhBVkUoQ0ZORVRXT1JLX05TVVJMU0VTU0lPTl9TVFJJQ1RSVVNURVZBTFVBVEUpCi1zdGF0
aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlvbihOZXR3b3JrU2Vzc2lv
bkNvY29hICpzZXNzaW9uLCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2Us
IE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgTmV0
d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFzaywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJM
Q3JlZGVudGlhbCAqY3JlZGVudGlhbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgaW5s
aW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlvbihOZXR3b3JrU2Vzc2lvbkNvY29h
ICpzZXNzaW9uLCBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXIsIE5TVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVu
dGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29ya0RhdGFU
YXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNw
b3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVDaGFsbGVu
Z2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5Q
dHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgeworICAgIHNlc3Npb24tPmNvbnRpbnVl
RGlkUmVjZWl2ZUNoYWxsZW5nZShzZXNzaW9uV3JhcHBlciwgY2hhbGxlbmdlLCB0YXNrSWRlbnRp
ZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
IG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogVUlQcm9jZXNzIHNob3VsZCBzZW5kIHVzIGJh
Y2sgbm9uIG5pbCBjcmVkZW50aWFscyBidXQgdGhlIGNyZWRlbnRpYWwgSVBDIGVuY29kZXIgY3Vy
cmVudGx5IG9ubHkgc2VyaWFsaXplcyBucyBjcmVkZW50aWFscyBmb3IgdXNlcm5hbWUvcGFzc3dv
cmQuCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwubnNDcmVkZW50
aWFsKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVz
dDogc2VjVHJ1c3QuZ2V0KCldKTsKQEAgLTYxNyw3ICs2MjQsOCBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhCiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNz
aW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRSZWNlaXZlQ2hh
bGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24g
ZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uIHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VSTFNlc3Npb25U
YXNrU3RhdGVDYW5jZWxpbmcpIHsKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNz
aW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hIHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VS
TFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
TlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBu
aWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjM3LDE4ICs2NDUsMjEgQEAgLSAodm9p
ZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBb
TlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVjdGlvblNw
YWNlLnNlcnZlclRydXN0XSk7CiAKICAgICAgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFs
dWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMgYW5kIHRvIHVzZSBBVFMgZGVmYXVsdHMuCi0gICAgICAgIGlmIChfc2Vzc2lvbi0+ZmFz
dFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc2Vzc2lvbkNv
Y29hLT5mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpKSB7CiAjaWYgSEFWRShDRk5F
VFdPUktfTlNVUkxTRVNTSU9OX1NUUklDVFJVU1RFVkFMVUFURSkKICAgICAgICAgICAgIGF1dG8q
IG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXTsKICAgICAgICAgICAg
IEFTU0VSVChuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoW19zZXNzaW9uID0gbWFrZVdlYWtQdHIoX3Nlc3Npb24uZ2V0KCkp
LCBjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlciksIHRh
c2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29j
b2E+KG5ldHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxs
ZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBk
ZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tO
ZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPihzZWxmKSwgc2Vzc2lvbkNvY29hID0gbWFrZVdlYWtQdHIo
c2Vzc2lvbkNvY29hKSwgY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrID0gUmVmUHRyPE5ldHdv
cmtEYXRhVGFza0NvY29hPihuZXR3b3JrRGF0YVRhc2spXShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlICpjaGFsbGVuZ2UsIE9TU3RhdHVzIHRydXN0UmVzdWx0KSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UsIG5pbCk7CiAgICAgICAgICAgICAgICAgYXV0byB0YXNrID0gV1RGTW92ZShuZXR3
b3JrRGF0YVRhc2spOwotICAgICAgICAgICAgICAgIGF1dG8qIHNlc3Npb24gPSBfc2Vzc2lvbi5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzZXNzaW9uID0gc2Vzc2lvbkNvY29hLmdldCgp
OwogICAgICAgICAgICAgICAgIGlmICh0cnVzdFJlc3VsdCA9PSBub0VyciB8fCAhc2Vzc2lvbikg
ewogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRo
Q2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5kbGluZywgbmlsKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Npb24sIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIsIHRh
c2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBw
cm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Npb24sICpzdHJvbmdTZWxmLT5fc2Vzc2lv
bldyYXBwZXIsIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgW05TVVJM
U2Vzc2lvbiBfc3RyaWN0VHJ1c3RFdmFsdWF0ZTpjaGFsbGVuZ2UgcXVldWU6W05TT3BlcmF0aW9u
UXVldWUgbWFpblF1ZXVlXS51bmRlcmx5aW5nUXVldWUgY29tcGxldGlvbkhhbmRsZXI6ZGVjaXNp
b25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY1NywxNCArNjY4LDE1
IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICNlbmRpZgogICAg
ICAgICB9CiAgICAgfQotICAgIF9zZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2Uo
Y2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICBzZXNzaW9uQ29j
b2EtPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZSgqX3Nlc3Npb25XcmFwcGVyLCBjaGFsbGVu
Z2UsIHRhc2tJZGVudGlmaWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcih0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiks
IGNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpOwogICAgIH0pOwogfQogCiAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRh
c2sgZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIGlmICghX3Nl
c3Npb24pCisgICAgYXV0byogc2Vzc2lvbkNvY29hID0gW3NlbGYgc2Vzc2lvbkNvY29hXTsKKyAg
ICBpZiAoIXNlc3Npb25Db2NvYSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9HKE5ldHdvcmtT
ZXNzaW9uLCAiJWxsdSBkaWRDb21wbGV0ZVdpdGhFcnJvciAlQCIsIHRhc2sudGFza0lkZW50aWZp
ZXIsIGVycm9yKTsKQEAgLTY3OSw5ICs2OTEsOSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3NpCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4
aXN0aW5nVGFzazp0YXNrXSkKICAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5kaWRDb21wbGV0ZVdp
dGhFcnJvcihlcnJvciwgbmV0d29ya0RhdGFUYXNrLT5uZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAg
ICAgZWxzZSBpZiAoZXJyb3IpIHsKLSAgICAgICAgYXV0byBkb3dubG9hZElEID0gX3Nlc3Npb24t
PnRha2VEb3dubG9hZElEKHRhc2sudGFza0lkZW50aWZpZXIpOworICAgICAgICBhdXRvIGRvd25s
b2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLnRha2UodGFzay50YXNrSWRlbnRp
Zmllcik7CiAgICAgICAgIGlmIChkb3dubG9hZElELmRvd25sb2FkSUQoKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxv
YWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBkb3dubG9hZCA9IHNlc3Npb25Db2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFn
ZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkgewogICAgICAgICAgICAgICAgIE5TRGF0YSAqcmVz
dW1lRGF0YSA9IG5pbDsKICAgICAgICAgICAgICAgICBpZiAoaWQgdXNlckluZm8gPSBlcnJvci51
c2VySW5mbykgewogICAgICAgICAgICAgICAgICAgICBpZiAoW3VzZXJJbmZvIGlzS2luZE9mQ2xh
c3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CkBAIC04MzYsNjAgKzg0OCw2NSBAQCAtICh2b2lk
KVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjoo
TlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2Fk
VGFzayAqKWRvd25sb2FkVGFzayBkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOihOU1VSTCAqKWxv
Y2F0aW9uCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBb
c2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25sb2FkSUQoW2Rv
d25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IF9z
ZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25s
b2FkSUQpKQorICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRN
YXAudGFrZShbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgaWYgKGF1dG8qIGRv
d25sb2FkID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigp
LmRvd25sb2FkKGRvd25sb2FkSUQpKQogICAgICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9
CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkb3dubG9hZFRh
c2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFzayBkaWRXcml0ZURhdGE6
KGludDY0X3QpYnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNXcml0dGVuOihpbnQ2NF90KXRvdGFsQnl0
ZXNXcml0dGVuIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6KGludDY0X3QpdG90YWxCeXRlc0V4
cGVjdGVkVG9Xcml0ZQogewotICAgIGlmICghX3Nlc3Npb24pCisgICAgYXV0byogc2Vzc2lvbkNv
Y29hID0gW3NlbGYgc2Vzc2lvbkNvY29hXTsKKyAgICBpZiAoIXNlc3Npb25Db2NvYSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghW3NlbGYgZXhpc3RpbmdUYXNr
OmRvd25sb2FkVGFza10sICJUaGUgTmV0d29ya0RhdGFUYXNrIHNob3VsZCBiZSBkZXN0cm95ZWQg
aW1tZWRpYXRlbHkgYWZ0ZXIgZGlkQmVjb21lRG93bmxvYWRUYXNrIHJldHVybnMiKTsKIAotICAg
IGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uLT5kb3dubG9hZElEKFtkb3dubG9hZFRhc2sgdGFz
a0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29y
a1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkKKyAgICBh
dXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLmdldChbZG93bmxv
YWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gc2Vzc2lv
bkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25s
b2FkSUQpKQogICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsK
IH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2Fk
VGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFJlc3VtZUF0
T2Zmc2V0OihpbnQ2NF90KWZpbGVPZmZzZXQgZXhwZWN0ZWRUb3RhbEJ5dGVzOihpbnQ2NF90KWV4
cGVjdGVkVG90YWxCeXRlcwogewotICAgIGlmICghX3Nlc3Npb24pCi0gICAgICAgIHJldHVybjsK
LQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxT
ZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFz
ayBkaWRCZWNvbWVEb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25s
b2FkVGFzawogewotICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGlu
Z1Rhc2s6ZGF0YVRhc2tdKSB7Ci0gICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJv
dGVjdGVkTmV0d29ya0RhdGFUYXNrKCpuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICBhdXRvIGRv
d25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7Ci0gICAgICAg
IGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25s
b2FkTWFuYWdlcigpOwotICAgICAgICBhdXRvIGRvd25sb2FkID0gbWFrZVVuaXF1ZTxXZWJLaXQ6
OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRvd25sb2FkSUQsIGRvd25sb2FkVGFzaywgKl9z
ZXNzaW9uLCBuZXR3b3JrRGF0YVRhc2stPnN1Z2dlc3RlZEZpbGVuYW1lKCkpOwotICAgICAgICBu
ZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoKmRvd25s
b2FkKTsKLSAgICAgICAgQVNTRVJUKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobmV0d29ya0RhdGFU
YXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpKSk7Ci0gICAgICAgIGRvd25sb2FkLT5kaWRD
cmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KCkpOwotICAgICAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2so
ZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFz
ayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza107CisgICAgaWYgKCFuZXR3b3JrRGF0YVRh
c2spCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNz
aW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgX3Nlc3Npb24tPmFkZERvd25sb2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmll
cl0sIGRvd25sb2FkSUQpOwotICAgIH0KKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQ29jb2E+IHBy
b3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29ya0RhdGFUYXNrKTsKKyAgICBhdXRvIGRvd25s
b2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7CisgICAgYXV0byYg
ZG93bmxvYWRNYW5hZ2VyID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2Fk
TWFuYWdlcigpOworICAgIGF1dG8gZG93bmxvYWQgPSBtYWtlVW5pcXVlPFdlYktpdDo6RG93bmxv
YWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwgZG93bmxvYWRUYXNrLCAqW3NlbGYgc2Vz
c2lvbkNvY29hXSwgbmV0d29ya0RhdGFUYXNrLT5zdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICBu
ZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoKmRvd25s
b2FkKTsKKyAgICBBU1NFUlQoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhuZXR3b3JrRGF0YVRhc2st
PnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpKTsKKyAgICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVz
dGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpKTsKKyAg
ICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soZG93bmxvYWRJRCwg
V1RGTW92ZShkb3dubG9hZCkpOworCisgICAgQVNTRVJUKCFfc2Vzc2lvbldyYXBwZXItPmRvd25s
b2FkTWFwLmNvbnRhaW5zKGRvd25sb2FkVGFzay50YXNrSWRlbnRpZmllcikpOworICAgIF9zZXNz
aW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuYWRkKGRvd25sb2FkVGFzay50YXNrSWRlbnRpZmllciwg
ZG93bmxvYWRJRCk7CiB9CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAtIChX
ZWJTb2NrZXRUYXNrKilleGlzdGluZ1dlYlNvY2tldFRhc2s6KE5TVVJMU2Vzc2lvbldlYlNvY2tl
dFRhc2sgKil0YXNrCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBpZiAoIV9zZXNzaW9uV3Jh
cHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIXRhc2spCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIF9zZXNzaW9uLT53ZWJTb2NrZXREYXRhVGFz
a0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmllcik7CisgICAgcmV0dXJuIF9zZXNzaW9u
V3JhcHBlci0+d2ViU29ja2V0RGF0YVRhc2tNYXAuZ2V0KHRhc2sudGFza0lkZW50aWZpZXIpOwog
fQogCiAKQEAgLTk3Miw2ICs5ODksMTMgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcHJveHlEaWN0
aW9uYXJ5KGNvbgogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCit2
b2lkIFNlc3Npb25XcmFwcGVyOjppbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb24sIE5ldHdvcmtTZXNzaW9uQ29jb2EmIGNvY29hU2Vzc2lvbiwgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCit7Cisg
ICAgdGhpcy0+c2Vzc2lvbkNvY29hID0gbWFrZVdlYWtQdHIoY29jb2FTZXNzaW9uKTsKKyAgICB0
aGlzLT5kZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRXaXRoU2Vzc2lvbldyYXBwZXI6KnRoaXMgd2l0aENyZWRlbnRpYWxzOnN0b3JlZENyZWRl
bnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2VdKTsK
KyAgICB0aGlzLT5zZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKSBkZWxlZ2F0ZVF1ZXVlOltO
U09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOworfQorCiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpO
ZXR3b3JrU2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIDogTmV0d29ya1Nl
c3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMpCiAgICAgLCBtX2JvdW5kSW50ZXJmYWNl
SWRlbnRpZmllcihwYXJhbWV0ZXJzLmJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcikKQEAgLTEwNjMs
OCArMTA4Nyw3IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2EKICAg
ICAgICAgY29va2llU3RvcmFnZS5fb3ZlcnJpZGVTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5ID0g
WUVTOwogI2VuZGlmCiAKLSAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0
d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOnRydWVdKTsKLSAgICBtX3Nlc3Npb25X
aXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRp
b25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
aW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OlVzZSk7CiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiQ3JlYXRlZCBOZXR3b3Jr
U2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2VwdFBvbGljeSAlbHUiLCBjb25maWd1cmF0aW9uLkhUVFBD
b29raWVTdG9yYWdlLmNvb2tpZUFjY2VwdFBvbGljeSk7CiAKICAgICBjb25maWd1cmF0aW9uLlVS
TENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTA3Myw4ICsxMDk2LDcgQEAgTmV0d29ya1Nl
c3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQogICAgIC8vIGNvbmZpZ3VyYXRpb24uSFRU
UENvb2tpZVN0b3JhZ2UgPSBuaWw7CiAgICAgLy8gY29uZmlndXJhdGlvbi5IVFRQQ29va2llQWNj
ZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI7CiAKLSAgICBtX3N0YXRl
bGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNl
XSk7Ci0gICAgbV9zdGF0ZWxlc3NTZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9zdGF0
ZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVl
dWUgbWFpblF1ZXVlXV07CisgICAgbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5OjpEb05vdFVzZSk7CiAKICAgICBtX2RldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNF
bmFibGVkID0gcGFyYW1ldGVycy5kZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRW5hYmxlZDsK
ICAgICBtX2FsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0ZvclRl
c3RpbmcgPSBwYXJhbWV0ZXJzLmFsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3Ry
aWN0aW9uc0ZvclRlc3Rpbmc7CkBAIC0xMDk3LDEwICsxMTE5LDEwIEBAIE5ldHdvcmtTZXNzaW9u
Q29jb2E6On5OZXR3b3JrU2Vzc2lvbkNvY28KIHsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lv
bigpCiB7CiAgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtO
U1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGVwaGVtZXJhbFNlc3Npb25Db25maWd1cmF0aW9uXTsK
LSAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSBt
X3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbjsKKyAgICBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uICpleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uOwogCiAgICAgY29uZmln
dXJhdGlvbi5IVFRQQ29va2llQWNjZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
TmV2ZXI7CiAgICAgY29uZmlndXJhdGlvbi5VUkxDcmVkZW50aWFsU3RvcmFnZSA9IG5pbDsKQEAg
LTExMTUsNDQgKzExMzcsNDYgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXpl
RXBoZQogICAgIGNvbmZpZ3VyYXRpb24uX0NURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSA9IGV4
aXN0aW5nQ29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlOwogI2VuZGlm
CiAKLSAgICBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUgPSBh
ZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczpmYWxzZV0pOwotICAgIG1fZXBoZW1lcmFsU3Rh
dGVsZXNzQ29va2llbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX2VwaGVtZXJh
bFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6
W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CisgICAgbV9lcGhlbWVyYWxTdGF0ZWxlc3NT
ZXNzaW9uLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzKTsKIH0KIAotTlNV
UkxTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQorU2Vzc2lvbldyYXBwZXIm
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Npb25XcmFwcGVyRm9yVGFzayhjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQogeworICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0
eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIGlmIChzdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KSkKKyAgICAgICAg
ICAgIHJldHVybiBpc29sYXRlZFNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGZpcnN0
UGFydHkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwogICAg
IHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIHsKICAgICBjYXNlIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2U6Ci0gICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2U7CiAgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eTo6RG9Ob3RVc2U6Ci0gICAgICAgIHJldHVybiBtX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCk7Cisg
ICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgY2Fz
ZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29v
a2llbGVzczoKLSAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNz
aW9uKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NT
ZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NT
ZXNzaW9uLmdldCgpOworICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5z
ZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24o
KTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9
CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBhcnR5RG9tYWluKQorU2Vzc2lv
bldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbikKIHsKLSAgICBhdXRvIGVu
dHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShmaXJzdFBhcnR5RG9tYWluLCBbdGhpc10g
ewotICAgICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50cnkgeyB9OwotICAgICAgICBuZXdFbnRy
eS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdp
dGhDcmVkZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3Nl
c3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpz
dGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVn
YXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwot
Ci0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRo
aXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nl
c3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3N0YXRlbGVz
c1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3
RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09w
ZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAgYXV0byYgZW50cnkgPSBtX2lzb2xhdGVk
U2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4sIFt0aGlzXSB7CisgICAgICAgIGF1dG8g
bmV3RW50cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vzc2lvbj4oKTsKKyAgICAgICAgbmV3RW50
cnktPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uLCAqdGhpcywgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSk7CisgICAgICAgIG5ld0VudHJ5LT5z
ZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUobV9zZXNzaW9uV2l0aG91
dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiwgKnRoaXMsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSk7CiAgICAgICAgIHJldHVy
biBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICBlbnRyeS5sYXN0VXNl
ZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93
KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25zLnNpemUoKSA+IG1heE51bWJlck9mSXNv
bGF0ZWRTZXNzaW9ucykgewogICAgICAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBrZXlU
b1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCk7
CiAgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9pc29sYXRlZFNlc3Npb25zLmtleXMoKSkgewot
ICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSku
bGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVzdGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9u
cy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgb2xkZXN0
VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xkZXN0VGltZXN0YW1wID0gdGltZXN0YW1w
OwogICAgICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0ga2V5OwpAQCAtMTE2NywxNCArMTE5MSwx
NCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhCiAgICAgc3dpdGNo
IChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcg
aXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVudGlhbCBzdG9yYWdlLiIpOwotICAgICAg
ICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwogICAgIGNhc2Ug
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOgogICAgICAgICBMT0co
TmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBOU1VSTFNlc3Npb24gd2l0aG91dCBjcmVk
ZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVybiBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9u
LmdldCgpOworICAgICAgICByZXR1cm4gZW50cnktPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0
b3JhZ2U7CiAgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1l
cmFsU3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3NTZXNzaW9uKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRl
bGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRl
bGVzc0Nvb2tpZWxlc3NTZXNzaW9uLmdldCgpOworICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3Rh
dGVsZXNzU2Vzc2lvbi5zZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vz
c2lvbjsKICAgICB9CiB9CiAKQEAgLTExOTIsMTYgKzEyMTYsMTggQEAgdm9pZCBOZXR3b3JrU2Vz
c2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQwogewogICAgIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlk
YXRlQW5kQ2FuY2VsKCk7CiAKLSAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGlu
dmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX3N0YXRlbGVzc1Nlc3Npb24gaW52YWxpZGF0ZUFu
ZENhbmNlbF07Ci0gICAgW21fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24gaW52
YWxpZGF0ZUFuZENhbmNlbF07Ci0gICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Ci0gICAgW21fc3RhdGVsZXNzU2Vzc2lvbkRlbGVn
YXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Ci0gICAgW21fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2ll
bGVzc1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOworICAgIFttX3Nlc3Npb25X
aXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBb
bV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24gaW52YWxpZGF0ZUFuZENh
bmNlbF07CisgICAgW21fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9uIGludmFsaWRh
dGVBbmRDYW5jZWxdOworICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdh
dGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxT
dG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CisgICAgW21fZXBoZW1lcmFsU3Rh
dGVsZXNzU2Vzc2lvbi5kZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwogCiAgICAgZm9yIChh
dXRvJiBzZXNzaW9uIDogbV9pc29sYXRlZFNlc3Npb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIFtz
ZXNzaW9uLnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNlbF07
Ci0gICAgICAgIFtzZXNzaW9uLnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSBz
ZXNzaW9uSW52YWxpZGF0ZWRdOworICAgICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgICAgICBbc2Vzc2lv
bi0+c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0
ZWRdOworICAgICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5z
ZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldp
dGhvdXRDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwogICAg
IH0KICAgICBtX2lzb2xhdGVkU2Vzc2lvbnMuY2xlYXIoKTsKIH0KQEAgLTEyMjAsNDEgKzEyNDYs
NiBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNsZWFyQ3JlZGVudGlhCiAjZW5kaWYKIH0K
IAotTmV0d29ya0RhdGFUYXNrQ29jb2EqIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRhdGFUYXNrRm9y
SWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50
aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpV
c2UpCi0gICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdldCh0YXNr
SWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1fZGF0YVRhc2tNYXBXaXRob3V0U3RhdGUuZ2V0KHRh
c2tJZGVudGlmaWVyKTsKLX0KLQotTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YShOU0RhdGEqIHJlc3VtZURhdGEp
Ci17Ci0gICAgcmV0dXJuIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgZG93bmxvYWRU
YXNrV2l0aFJlc3VtZURhdGE6cmVzdW1lRGF0YV07Ci19Ci0KLXZvaWQgTmV0d29ya1Nlc3Npb25D
b2NvYTo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCkKLXsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgQVNTRVJUKCFtX2Rvd25sb2FkTWFwLmNvbnRhaW5zKHRhc2tJZGVudGlmaWVyKSk7Ci0g
ICAgZm9yIChhdXRvIGlkSW5NYXAgOiBtX2Rvd25sb2FkTWFwLnZhbHVlcygpKQotICAgICAgICBB
U1NFUlQoaWRJbk1hcCAhPSBkb3dubG9hZElEKTsKLSNlbmRpZgotICAgIG1fZG93bmxvYWRNYXAu
YWRkKHRhc2tJZGVudGlmaWVyLCBkb3dubG9hZElEKTsKLX0KLQotRG93bmxvYWRJRCBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciB0YXNrSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9kb3dubG9hZE1hcC5nZXQodGFz
a0lkZW50aWZpZXIpLmRvd25sb2FkSUQoKSk7Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRNYXAuZ2V0
KHRhc2tJZGVudGlmaWVyKTsKLX0KLQotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbkNvY29hOjp0
YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lk
ZW50aWZpZXIpCi17Ci0gICAgYXV0byBkb3dubG9hZElEID0gbV9kb3dubG9hZE1hcC50YWtlKHRh
c2tJZGVudGlmaWVyKTsKLSAgICByZXR1cm4gZG93bmxvYWRJRDsKLX0KLQogc3RhdGljIGJvb2wg
Y2VydGlmaWNhdGVzTWF0Y2goU2VjVHJ1c3RSZWYgdHJ1c3QxLCBTZWNUcnVzdFJlZiB0cnVzdDIp
CiB7CiAgICAgaWYgKCF0cnVzdDEgfHwgIXRydXN0MikKQEAgLTEyOTUsMTggKzEyODYsMTAgQEAg
Ym9vbCBOZXR3b3JrU2Vzc2lvbkNvY29hOjphbGxvd3NTcGVjaWZpYwogICAgIHJldHVybiBjZXJ0
aWZpY2F0ZXNNYXRjaCh0cnVzdC5nZXQoKSwgY2hhbGxlbmdlLm5zVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoKS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1c3QpOwogfQogCi12b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBu
ZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlk
UmVjZWl2ZUNoYWxsZW5nZShTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXIsIGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29j
b2EqIG5ldHdvcmtEYXRhVGFzaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIW5ldHdvcmtEYXRhVGFzaykgewot
I2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKLSAgICAgICAgaWYgKGF1dG8qIHdlYlNv
Y2tldFRhc2sgPSB3ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIodGFza0lkZW50aWZpZXIp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGNoYWxsZW5nZXMgZm9yIHdlYiBzb2Nr
ZXQuCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLCB7IH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSB0
aGlzLT5kb3dubG9hZElEKHRhc2tJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBkb3dubG9hZElE
ID0gc2Vzc2lvbldyYXBwZXIuZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKTsKICAgICAg
ICAgaWYgKGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byog
ZG93bmxvYWQgPSBuZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRv
d25sb2FkSUQpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgeyBjaGFsbGVuZ2UgfTsKQEAgLTEzNjgsMjYg
KzEzNTEsMjIgQEAgRE1GV2Vic2l0ZVBvbGljeU1vbml0b3IgKk5ldHdvcmtTZXNzaW9uQwogc3Rk
Ojp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZVdl
YlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKIHsKICAg
ICAvLyBGSVhNRTogVXNlIHByb3RvY29sLgotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25XZWJT
b2NrZXRUYXNrPiB0YXNrID0gW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKSB3
ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhU
VFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KV07CisgICAgUmV0YWluUHRy
PE5TVVJMU2Vzc2lvbldlYlNvY2tldFRhc2s+IHRhc2sgPSBbbV9zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlLnNlc3Npb24gd2ViU29ja2V0VGFza1dpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxS
ZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5
KV07CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2ViU29ja2V0VGFzaz4oY2hhbm5lbCwgV1RGTW92
ZSh0YXNrKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkV2ViU29ja2V0VGFz
ayhXZWJTb2NrZXRUYXNrJiB0YXNrKQogewotICAgIEFTU0VSVCghbV93ZWJTb2NrZXREYXRhVGFz
a01hcC5jb250YWlucyh0YXNrLmlkZW50aWZpZXIoKSkpOwotICAgIG1fd2ViU29ja2V0RGF0YVRh
c2tNYXAuYWRkKHRhc2suaWRlbnRpZmllcigpLCAmdGFzayk7CisgICAgQVNTRVJUKCFtX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFz
ay5pZGVudGlmaWVyKCkpKTsKKyAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2Vi
U29ja2V0RGF0YVRhc2tNYXAuYWRkKHRhc2suaWRlbnRpZmllcigpLCAmdGFzayk7CiB9CiAKIHZv
aWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6cmVtb3ZlV2ViU29ja2V0VGFzayhXZWJTb2NrZXRUYXNr
JiB0YXNrKQogewotICAgIEFTU0VSVChtX3dlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRh
c2suaWRlbnRpZmllcigpKSk7Ci0gICAgbV93ZWJTb2NrZXREYXRhVGFza01hcC5yZW1vdmUodGFz
ay5pZGVudGlmaWVyKCkpOworICAgIEFTU0VSVChtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3Jh
Z2Uud2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsKKyAg
ICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAucmVt
b3ZlKHRhc2suaWRlbnRpZmllcigpKTsKIH0KIAotV2ViU29ja2V0VGFzayogTmV0d29ya1Nlc3Np
b25Db2NvYTo6d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRhc2s6OlRh
c2tJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIG1fd2ViU29ja2V0RGF0YVRh
c2tNYXAuZ2V0KGlkZW50aWZpZXIpOwotfQorI2VuZGlmIC8vIEhBVkUoTlNVUkxTRVNTSU9OX1dF
QlNPQ0tFVCkKIAotI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDI1MjEz
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsMTcgQEAgLSAodm9pZClfc2NoZWR1
bGVDb29raWVCbG9ja2luZ1VwZGF0ZToodgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX2xvZ1VzZXJJ
bnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbiwg
W2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworI2Vsc2UKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworI2VuZGlmCit9CisKIC0gKHZvaWQpX3NldFByZXZhbGVudERvbWFpbjoo
TlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjUyMTM0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdl
ciwgX1dLV2Vic2l0CiAtIChib29sKV9oYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIAogLSAodm9pZClfc2NoZWR1bGVD
b29raWVCbG9ja2luZ1VwZGF0ZToodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZv
aWQpX2xvZ1VzZXJJbnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9zZXRQcmV2YWxlbnREb21h
aW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogLSAodm9pZClfZ2V0SXNQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWlu
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZClfY2xlYXJQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTYyKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMTEtMDYgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZS1l
bmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bRGF0YVRh
c2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIHdhaXRGb3JNZXNz
YWdlczpdKToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUg
d2ViVmlldzpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgIChURVNUKToKKwogMjAxOS0xMS0wNiAgS2VpdGggUm9sbGluICA8a3Jv
bGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXg6IGZpeCBUZXN0
V2ViS2l0QVBJIGluIG1hY0NhdGFseXN0LCB0dk9TLCBhbmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDI1MjEzNCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0TmF2
aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tGb3VuZGF0aW9uLmg+CkBAIC00NzQsNiArNDc1LDEwNSBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lRmxhZyk7CiB9CiAKK0BpbnRlcmZhY2UgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9u
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0ZT4K
Ky0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCljb3VudDsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIERhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVn
YXRlIHsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4+IF9tZXNzYWdl
czsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZy
YW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfbWVzc2FnZXMgYWRkT2JqZWN0Om1lc3NhZ2Vd
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4g
Kil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCltZXNzYWdlQ291bnQKK3sKKyAgICBfbWVzc2FnZXMg
PSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTptZXNzYWdlQ291bnRd
KTsKKyAgICB3aGlsZSAoW19tZXNzYWdlcyBjb3VudF0gPCBtZXNzYWdlQ291bnQpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdl
cy5hdXRvcmVsZWFzZSgpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNl
c3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlh
bCAqIGNyZWRlbnRpYWwpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENyZWRlbnRp
YWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1
c3RdKTsKK30KKworQGVuZAorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIERhdGFUYXNr
SWRlbnRpZmllckNvbGxpc2lvbikKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
STsKKworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBzZXJ2ZXJzQ29ubmVjdGVkIHsgMCB9Owor
ICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9ICJIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5n
dGg6IDI3XHJcblxyXG4iOworCisgICAgVENQU2VydmVyIGh0dHBzU2VydmVyKFRDUFNlcnZlcjo6
UHJvdG9jb2w6OkhUVFBTUHJveHksIFsmXSAoU1NMKiBzc2wpIHsKKyAgICAgICAgc2VydmVyc0Nv
bm5lY3RlZCsrOworICAgICAgICB3aGlsZSAoc2VydmVyc0Nvbm5lY3RlZCA8IDIpCisgICAgICAg
ICAgICB1c2xlZXAoMTAwMDAwKTsKKyAgICAgICAgVENQU2VydmVyOjpyZWFkKHNzbCk7CisgICAg
ICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBoZWFkZXIsIHN0cmxlbihoZWFkZXIpKTsKKyAgICAg
ICAgY29uc3QgY2hhciogYm9keSA9ICI8c2NyaXB0PmFsZXJ0KCcxJyk8L3NjcmlwdD4iOworICAg
ICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNzbCwgYm9keSwgc3RybGVuKGJvZHkpKTsKKyAgICB9KTsK
KworICAgIFRDUFNlcnZlciBodHRwU2VydmVyKFsmXSAoaW50IHNvY2tldCkgeworICAgICAgICBz
ZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2ZXJzQ29ubmVjdGVkIDwgMikK
KyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBUQ1BTZXJ2ZXI6OnJlYWQoc29j
a2V0KTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2NrZXQsIGhlYWRlciwgc3RybGVuKGhl
YWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+YWxlcnQoJzInKTwv
c2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBib2R5LCBzdHJsZW4o
Ym9keSkpOworICAgIH0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KnN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgc3RvcmVDb25maWd1cmF0aW9uLmh0dHBzUHJveHkgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8v
MTI3LjAuMC4xOiVkLyIsIGh0dHBzU2VydmVyLnBvcnQoKV1dOworICAgIFdLV2Vic2l0ZURhdGFT
dG9yZSAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOnN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8g
dmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10p
OworICAgIFt2aWV3Q29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3JlOmRhdGFTdG9yZV07
CisKKyAgICBhdXRvIHdlYlZpZXcxID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJhdGlvbjp2aWV3
Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MgYW5kIGluaXRpYWxpemUgZGF0YSBzdG9y
ZSJdOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtEYXRhVGFza0lkZW50aWZpZXJDb2xs
aXNpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkg
Y29uZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzEgc2V0TmF2aWdhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQ6WUVTXTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlOllFU107CisKKyAgICBfX2Jsb2NrIGJvb2wgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0g
ZmFsc2U7CisgICAgX19ibG9jayBOU1VSTCAqcHJldmFsZW50RXhhbXBsZSA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhhbXBsZS5jb20vIl07CisgICAgW2RhdGFT
dG9yZSBfbG9nVXNlckludGVyYWN0aW9uOnByZXZhbGVudEV4YW1wbGUgY29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UHJldmFsZW50RG9tYWluOnByZXZhbGVudEV4
YW1wbGUgY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAgICAgW2RhdGFTdG9y
ZSBfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZTpeeworICAgICAgICAgICAgICAgIGlzb2xh
dGVkU2Vzc2lvbkRvbWFpbiA9IHRydWU7CisgICAgICAgICAgICB9XTsKKyAgICAgICAgfV07Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc29sYXRlZFNlc3Npb25Eb21h
aW4pOworCisgICAgW3dlYlZpZXcxIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJo
dHRwOi8vMTI3LjAuMC4xOiVkLyIsIGh0dHBTZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICBbd2ViVmll
dzIgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vcHJldmFsZW50LWV4YW1wbGUuY29tLyJdXV07CisKKyAgICBOU0Fy
cmF5PE5TU3RyaW5nICo+ICptZXNzYWdlcyA9IFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZXM6Ml07
CisgICAgYXV0byBjb250YWlucyA9IFtdIChOU0FycmF5PE5TU3RyaW5nICo+ICphcnJheSwgTlNT
dHJpbmcgKmV4cGVjdGVkKSB7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKnMgaW4gYXJyYXkpIHsK
KyAgICAgICAgICAgIGlmIChbcyBpc0VxdWFsVG9TdHJpbmc6ZXhwZWN0ZWRdKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1lc3NhZ2VzLCBAIjEiKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udGFpbnMobWVzc2FnZXMsIEAiMiIpKTsKK30KKwogVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBOb01lc3NhZ2VzV2hlbk5vdFRlc3RpbmcpCiB7CiAgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjEzNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5TVVJM
U2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBSZS1lbmFibGUgc2tp
cHBlZCB0ZXN0cy4KKwogMjAxOS0xMS0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gSW1wbGVtZW50IHN1cHBvcnQgZm9yIFBvaW50
ZXIgTG9jayBBUEkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRp
b25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRp
b25zCShyZXZpc2lvbiAyNTIxMzQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4
cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDEwICs3NDYsNiBAQCBodHRwL3Rlc3Rz
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZG8tbm90CiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZXMtY2FuLWFjY2Vzcy1jb29raWVzLWluLWEt
dGhpcmQtcGFydHktY29udGV4dC5odG1sIFsgU2tpcCBdCiBodHRwL3Rlc3RzL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvY2FwLWNhY2hlLW1heC1hZ2UtZm9yLXByZXZhbGVudC1yZXNvdXJjZS5odG1s
IFsgU2tpcCBdCiAKLSMgcmRhcjovL3Byb2JsZW0vNTY5MjE1ODQKLWh0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZhbGVu
dC13aXRoLWludGVyYWN0aW9uLnBocCBbIFNraXAgXQotaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3N3aXRjaC1zZXNzaW9uLW9uLW5hdmlnYXRpb24tdG8tcHJldmFsZW50LXdpdGgt
aW50ZXJhY3Rpb24tZGF0YWJhc2UucGhwIFsgU2tpcCBdCi0KICMgVGhpcyBmZWF0dXJlIGlzIGN1
cnJlbnRseSBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCB1bmZpbmlzaGVkIDxyZGFyOi8vcHJvYmxl
bS8zODkyNTA3Nz4uCiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcHJvY2Vzcy1zd2FwLXdpbmRvdy1v
cGVuLmh0bWwgWyBTa2lwIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382999</attachid>
            <date>2019-11-06 18:21:18 -0800</date>
            <delta_ts>2019-11-06 18:37:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107022116.patch</filename>
            <type>text/plain</type>
            <size>60305</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIxNjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5T
VVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjI1MjExNiB3YXMgYSByb2xsb3V0IG9mIHIyNDg2
NDAsIHdoaWNoIGludHJvZHVjZWQgY2FzZXMgd2hlcmUgZGF0YSB0YXNrcyBmcm9tIGRpZmZlcmVu
dCBOU1VSTFNlc3Npb25zCisgICAgICAgIHdoaWNoIGNhbiBoYXZlIHRoZSBzYW1lIHRhc2sgaWRl
bnRpZmllcnMgd2VyZSBwdXQgaW50byB0aGUgc2FtZSBtYXBzLiAgVGhpcyBrZXkgY29sbGlzaW9u
IGNhdXNlZCBkYXRhIGZyb20gdGhlIHdyb25nCisgICAgICAgIHRhc2tzIHRvIGJlIHNlbnQgdG8g
TmV0d29ya1Jlc291cmNlTG9hZGVyLCBjYXVzaW5nIHJhcmUgYW5kIHN0cmFuZ2UgbG9hZGluZyBi
dWdzLiAgSW4gb3JkZXIgdG8gcHJldmVudCBpbnNlcnRpb24gaW50bworICAgICAgICB3cm9uZyBt
YXBzIGFnYWluLCBJIG1hZGUgYSBuZXcgYWJzdHJhY3Rpb24sIFNlc3Npb25XcmFwcGVyLCB3aGlj
aCB3cmFwcyBhIE5TVVJMU2Vzc2lvbiwgaXRzIGRlbGVnYXRlLCBhbmQgYWxsIG1hcHMKKyAgICAg
ICAgdGhhdCBhcmUgc2NvcGVkIHRvIHRoYXQgTlNVUkxTZXNzaW9uLiAgQWxvbmcgdGhlIHdheSBJ
IGZvdW5kIGEgZmV3IG90aGVyIHBsYWNlcyB3aGVyZSB3ZSBoYWQgbWFkZSBzaW1pbGFyIG1pc3Rh
a2VzLgorCisgICAgICAgIENvdmVyZWQgYnkgYW4gQVBJIHRlc3Qgd2hpY2ggd291bGQndmUgZmFp
bGVkIGJlZm9yZSByMjUyMTE2IGJlY2F1c2UgaXQgZXhlcmNpc2VzIHRoZSBrZXkgY29sbGlzaW9u
IGNvbmRpdGlvbiwKKyAgICAgICAgYW5kIGJ5IHRlc3RzIHdoaWNoIHdlcmUgc2tpcHBlZCBpbiBy
MjUyMTE2IGFuZCBJIG5vdyB1bnNraXBwZWQuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OnJlc3VtZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdv
cmtEYXRhVGFza0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6
On5OZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZSBpbml0V2l0aFNlc3Npb25XcmFwcGVyOndpdGhDcmVkZW50aWFsczpdKToKKyAgICAgICAgKC1b
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgZXhpc3RpbmdUYXNrOl0pOgorICAgICAgICAoLVtX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkNvY29hXSk6CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6
XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6
d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb246bmV3UmVxdWVzdDpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpf
c2NoZW1lVXBncmFkZWQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29y
a1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOndpbGxDYWNoZVJlc3BvbnNlOmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAocHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlv
bik6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6
ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tO
ZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhFcnJv
cjpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93
bmxvYWRUYXNrOmRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6XSk6CisgICAgICAgICgtW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFzazpkaWRXcml0ZURhdGE6
dG90YWxCeXRlc1dyaXR0ZW46dG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTpdKToKKyAgICAgICAg
KC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93bmxvYWRUYXNrOmRpZFJl
c3VtZUF0T2Zmc2V0OmV4cGVjdGVkVG90YWxCeXRlczpdKToKKyAgICAgICAgKC1bV0tOZXR3b3Jr
U2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkQmVjb21lRG93bmxvYWRUYXNr
Ol0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgZXhpc3RpbmdXZWJTb2Nr
ZXRUYXNrOl0pOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uV3JhcHBlcjo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29j
b2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBo
ZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q29jb2E6OnNlc3Npb25XcmFwcGVyRm9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmludmFsaWRhdGVBbmRDYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGVXZWJTb2NrZXRUYXNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkV2ViU29ja2V0VGFzayk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnJlbW92ZVdlYlNvY2tldFRhc2spOgor
ICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgaW5pdFdpdGhOZXR3b3JrU2Vzc2lv
bjp3aXRoQ3JlZGVudGlhbHM6XSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRh
VGFza0ZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vz
c2lvbkNvY29hOjpkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjp3ZWJTb2Nr
ZXREYXRhVGFza0ZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRh
U3RvcmUgX2xvZ1VzZXJJbnRlcmFjdGlvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKwogMjAx
OS0xMS0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTE5MDcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2Eu
bW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcw
LDEwIEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWYKICAgICBOU0Rh
dGEgKnVwZGF0ZWREYXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFBy
b3BlcnR5TGlzdDpkaWN0aW9uYXJ5IGZvcm1hdDpOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8w
IG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXTsKICNlbmRpZgogCi0gICAgbV9kb3dubG9hZFRhc2sg
PSBjb2NvYVNlc3Npb24uZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEodXBkYXRlZERhdGEpOwot
ICAgIGNvY29hU2Vzc2lvbi5hZGREb3dubG9hZElEKG1fZG93bmxvYWRUYXNrLmdldCgpLnRhc2tJ
ZGVudGlmaWVyLCBtX2Rvd25sb2FkSUQpOworICAgIG1fZG93bmxvYWRUYXNrID0gW2NvY29hU2Vz
c2lvbi5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBkb3dubG9hZFRhc2tX
aXRoUmVzdW1lRGF0YTp1cGRhdGVkRGF0YV07CisgICAgYXV0byB0YXNrSWRlbnRpZmllciA9IFtt
X2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl07CisgICAgQVNTRVJUKCFjb2NvYVNlc3Npb24u
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRvd25sb2FkTWFwLmNvbnRhaW5zKHRhc2tJ
ZGVudGlmaWVyKSk7CisgICAgY29jb2FTZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZS5kb3dubG9hZE1hcC5hZGQodGFza0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CiAgICAg
bV9kb3dubG9hZFRhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBwYXRoOwogCiAg
ICAgW21fZG93bmxvYWRUYXNrIHJlc3VtZV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCShyZXZp
c2lvbiAyNTIxNjUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkOwogY2xhc3MgTmV0d29ya1Nlc3Npb25Db2Nv
YTsKK3N0cnVjdCBTZXNzaW9uV3JhcHBlcjsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2Eg
ZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29y
a1Nlc3Npb25Db2NvYTsKQEAgLTg5LDYgKzkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVGhp
cmRQYXJ0eVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CiAg
ICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKIAorICAgIFNlc3Npb25X
cmFwcGVyJiBtX3Nlc3Npb25XcmFwcGVyOwogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBt
X3NhbmRib3hFeHRlbnNpb247CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBt
X3Rhc2s7CiAgICAgV2ViQ29yZTo6TmV0d29ya0xvYWRNZXRyaWNzIG1fbmV0d29ya0xvYWRNZXRy
aWNzOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0
YVRhc2tDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyNTIxNjUpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXB1
dGVJc0Fsd2F5c09uTG9nZwogCiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNr
Q29jb2EoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVu
dFNuaWZmLCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50RW5jb2RpbmdTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0LCBQcmVjb25uZWN0T25seSBzaG91bGRQcmVjb25uZWN0T25seSwgYm9vbCBkYXRhVGFz
a0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgYm9vbCBkYXRhVGFza0lzRm9yTWFpblJlc291cmNl
TmF2aWdhdGlvbkZvckFueUZyYW1lLCBPcHRpb25hbDxOZXR3b3JrQWN0aXZpdHlUcmFja2VyPiBu
ZXR3b3JrQWN0aXZpdHlUcmFja2VyKQogICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNs
aWVudCwgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWlu
RnJhbWVOYXZpZ2F0aW9uKQorICAgICwgbV9zZXNzaW9uV3JhcHBlcihzdGF0aWNfY2FzdDxOZXR3
b3JrU2Vzc2lvbkNvY29hJj4oc2Vzc2lvbikuc2Vzc2lvbldyYXBwZXJGb3JUYXNrKHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KSkKICAgICAsIG1fZnJhbWVJ
RChmcmFtZUlEKQogICAgICwgbV9wYWdlSUQocGFnZUlEKQogICAgICwgbV9pc0Zvck1haW5SZXNv
dXJjZU5hdmlnYXRpb25Gb3JBbnlGcmFtZShkYXRhVGFza0lzRm9yTWFpblJlc291cmNlTmF2aWdh
dGlvbkZvckFueUZyYW1lKQpAQCAtMjA2LDE0ICsyMDcsMTEgQEAgTmV0d29ya0RhdGFUYXNrQ29j
b2E6Ok5ldHdvcmtEYXRhVGFza0NvYwogI2VuZGlmCiAKICAgICBib29sIHNob3VsZEJsb2NrQ29v
a2llcyA9IGZhbHNlOwotICAgIGJvb2wgbmVlZHNJc29sYXRlZFNlc3Npb24gPSBmYWxzZTsKLSAg
ICBhdXRvIGZpcnN0UGFydHkgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbihyZXF1ZXN0LmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCiAgICAgc2hvdWxkQmxvY2tDb29raWVzID0gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0g
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tp
ZWxlc3M7CiAgICAgaWYgKGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHNlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpIHsKICAgICAgICAgaWYgKCFzaG91bGRCbG9ja0Nvb2tpZXMp
CiAgICAgICAgICAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24t
PnNob3VsZEJsb2NrQ29va2llcyhyZXF1ZXN0LCBmcmFtZUlELCBwYWdlSUQpOwotICAgICAgICAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PiBuZWVkc0lzb2xhdGVkU2Vzc2lvbiBz
aG91bGQgYmUgc2V0IGhlcmUuCiAgICAgfQogI2VuZGlmCiAgICAgcmVzdHJpY3RSZXF1ZXN0UmVm
ZXJyZXJUb09yaWdpbklmTmVlZGVkKHJlcXVlc3QpOwpAQCAtMjIxLDE0ICsyMTksMTEgQEAgTmV0
d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFza0NvYwogICAgIE5TVVJMUmVxdWVzdCAq
bnNSZXF1ZXN0ID0gcmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQ
b2xpY3k6OlVwZGF0ZUhUVFBCb2R5KTsKICAgICBhcHBseVNuaWZmaW5nUG9saWNpZXNBbmRCaW5k
UmVxdWVzdFRvSW5mZXJmYWNlSWZOZWVkZWQobnNSZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYg
PT0gV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5OjpTbmlmZkNvbnRlbnQgJiYgIXVybC5p
c0xvY2FsRmlsZSgpLCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiA9PSBXZWJDb3JlOjpDb250
ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeTo6U25pZmYpOwogCi0gICAgYXV0byYgY29jb2FTZXNz
aW9uID0gc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYSY+KCptX3Nlc3Npb24pOwotICAg
IGlmIChuZWVkc0lzb2xhdGVkU2Vzc2lvbikKLSAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lv
bi5pc29sYXRlZFNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGZpcnN0UGFydHkpIGRh
dGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKLSAgICBlbHNlCi0gICAgICAgIG1fdGFzayA9
IFtjb2NvYVNlc3Npb24uc2Vzc2lvbihzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgZGF0YVRhc2tX
aXRoUmVxdWVzdDpuc1JlcXVlc3RdOworICAgIG1fdGFzayA9IFttX3Nlc3Npb25XcmFwcGVyLnNl
c3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwogCi0gICAgTE9HKE5ldHdvcmtT
ZXNzaW9uLCAiJWxsdSBDcmVhdGluZyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeT0ldSBhbmQgVVJMPSVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5LCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJp
bmcpOwotICAgIGNvY29hU2Vzc2lvbi5yZWdpc3RlckRhdGFUYXNrKFttX3Rhc2sgdGFza0lkZW50
aWZpZXJdLCAqdGhpcywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3Nlc3Npb25XcmFwcGVyLmRhdGFUYXNrTWFwLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKSk7CisgICAgbV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5hZGQoW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUg
Q3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRp
Zmllcl0sIG5zUmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CiAKICAgICBp
ZiAoc2hvdWxkUHJlY29ubmVjdE9ubHkgPT0gUHJlY29ubmVjdE9ubHk6OlllcykgewogI2lmIEVO
QUJMRShTRVJWRVJfUFJFQ09OTkVDVCkKQEAgLTI2Niw4ICsyNjEsOCBAQCBOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6fk5ldHdvcmtEYXRhVGFza0NvCiAgICAgaWYgKCFtX3Rhc2sgfHwgIW1fc2Vzc2lv
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgY29jb2FTZXNzaW9uID0gc3RhdGljX2Nh
c3Q8TmV0d29ya1Nlc3Npb25Db2NvYSY+KCptX3Nlc3Npb24pOwotICAgIGNvY29hU2Vzc2lvbi51
bnJlZ2lzdGVyRGF0YVRhc2soW21fdGFzayB0YXNrSWRlbnRpZmllcl0sICp0aGlzLCBtX3N0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Nlc3Npb25XcmFwcGVy
LmRhdGFUYXNrTWFwLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7CisgICAg
bV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmll
cl0pOwogfQogCiB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpyZXN0cmljdFJlcXVlc3RSZWZl
cnJlclRvT3JpZ2luSWZOZWVkZWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLmgJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiBPQkpDX0NMQVNTIERNRldlYnNpdGVQb2xpY3lNb25pdG9yOwog
T0JKQ19DTEFTUyBOU0RhdGE7CiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKK09CSkNfQ0xBU1Mg
TlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbjsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrOwogT0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOwogT0JKQ19DTEFTUyBXS05ldHdv
cmtTZXNzaW9uRGVsZWdhdGU7CkBAIC00NSwxNiArNDYsMzEgQEAgT0JKQ19DTEFTUyBXS05ldHdv
cmtTZXNzaW9uV2ViU29ja2V0RGVsZQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uQ29jb2E7CisKK3N0
cnVjdCBTZXNzaW9uV3JhcHBlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTZXNzaW9uV3JhcHBl
cj4geworICAgIHZvaWQgaW5pdGlhbGl6ZShOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICosIE5l
dHdvcmtTZXNzaW9uQ29jb2EmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7CisK
KyAgICBXZWFrUHRyPE5ldHdvcmtTZXNzaW9uQ29jb2E+IHNlc3Npb25Db2NvYTsKKyAgICBSZXRh
aW5QdHI8TlNVUkxTZXNzaW9uPiBzZXNzaW9uOworICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNz
aW9uRGVsZWdhdGU+IGRlbGVnYXRlOworICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IGRhdGFUYXNrTWFwOworICAg
IEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElE
PiBkb3dubG9hZE1hcDsKKyNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCisgICAgSGFz
aE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYlNvY2tldFRhc2sq
PiB3ZWJTb2NrZXREYXRhVGFza01hcDsKKyNlbmRpZgorfTsKIAogY2xhc3MgTmV0d29ya1Nlc3Np
b25Db2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvbiB7CiAgICAgZnJpZW5kIGNsYXNz
IE5ldHdvcmtEYXRhVGFza0NvY29hOworICAgIGZyaWVuZCBjbGFzcyBEb3dubG9hZDsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoTmV0
d29ya1Byb2Nlc3MmLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmKTsKIAogICAg
IE5ldHdvcmtTZXNzaW9uQ29jb2EoTmV0d29ya1Byb2Nlc3MmLCBOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycyYmKTsKICAgICB+TmV0d29ya1Nlc3Npb25Db2NvYSgpOwogCi0gICAgdm9p
ZCBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKTsKKyAgICB2
b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CiAKICAgICBjb25zdCBT
dHJpbmcmIGJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgY29uc3Q7CkBAIC02MywyMSAr
NzksOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBkYXRhQ29ubmVjdGlvblNlcnZpY2VU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlOyB9CiAjZW5k
aWYKIAotICAgIE5ldHdvcmtEYXRhVGFza0NvY29hKiBkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsc1BvbGljeSk7Ci0gICAgdm9pZCByZWdpc3RlckRhdGFUYXNrKE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EmLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRGF0YVRhc2soTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSYsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLQotICAgIE5TVVJMU2Vzc2lvbkRvd25s
b2FkVGFzayogZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEoTlNEYXRhKik7Ci0KLSAgICBXZWJT
b2NrZXRUYXNrKiB3ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIoV2ViU29ja2V0VGFzazo6
VGFza0lkZW50aWZpZXIpOwotCi0gICAgdm9pZCBhZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7Ci0gICAgRG93bmxvYWRJRCBkb3du
bG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7Ci0gICAgRG93bmxv
YWRJRCB0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIp
OwotCiAgICAgc3RhdGljIGJvb2wgYWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCi0gICAgdm9pZCBj
b250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtE
YXRhVGFza0NvY29hKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4mJik7
CisgICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoU2Vzc2lvbldyYXBwZXImLCBj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29u
c3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmKTsKIAogICAgIGJvb2wgZmFzdFNlcnZlclRydXN0
RXZhbHVhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Zhc3RTZXJ2ZXJUcnVzdEV2YWx1
YXRpb25FbmFibGVkOyB9CiAgICAgYm9vbCBkZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJs
ZWQ7IH0KQEAgLTg2LDggKzkwLDYgQEAgcHVibGljOgogCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBy
b3h5Q29uZmlndXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlDb25maWd1cmF0aW9uLmdl
dCgpOyB9CiAKLSAgICBOU1VSTFNlc3Npb24qIHNlc3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpOwotICAgIE5TVVJMU2Vzc2lvbiogaXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bik7CiAgICAgYm9vbCBoYXNJc29sYXRlZFNlc3Npb24oY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4pIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJJc29sYXRlZFNlc3Npb25z
KCkgb3ZlcnJpZGU7CiAKQEAgLTk2LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFy
Q3JlZGVudGlhbHMoKSBvdmVycmlkZTsKICAgICBib29sIHNob3VsZExvZ0Nvb2tpZUluZm9ybWF0
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zaG91bGRMb2dDb29raWVJbmZvcm1hdGlv
bjsgfQogICAgIFNlY29uZHMgbG9hZFRocm90dGxlTGF0ZW5jeSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fbG9hZFRocm90dGxlTGF0ZW5jeTsgfQorICAgIFNlc3Npb25XcmFwcGVyJiBzZXNz
aW9uV3JhcHBlckZvclRhc2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAgIFNlc3Npb25XcmFwcGVyJiBpc29sYXRl
ZFNlc3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluKTsKIAogI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhO
ZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2wpIGZpbmFsOwpAQCAtMTAzLDMyICsxMDcsMTkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlbW92ZVdlYlNvY2tldFRhc2soV2ViU29ja2V0VGFzayYpIGZpbmFsOwog
I2VuZGlmCiAKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiYgZGF0YVRhc2tNYXAoV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpOwotCi0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFz
a0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhDcmVk
ZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFwV2l0aG91dFN0YXRlOwotICAg
IEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0
YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOwot
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9h
ZElEPiBtX2Rvd25sb2FkTWFwOwotI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKLSAg
ICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViU29ja2V0
VGFzayo+IG1fd2ViU29ja2V0RGF0YVRhc2tNYXA7Ci0jZW5kaWYKLQogICAgIHN0cnVjdCBJc29s
YXRlZFNlc3Npb24gewotICAgICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBzZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlOwotICAgICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlPiBzZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7Ci0gICAgICAgIFJl
dGFpblB0cjxOU1VSTFNlc3Npb24+IHN0YXRlbGVzc1Nlc3Npb247Ci0gICAgICAgIFJldGFpblB0
cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IHN0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZTsKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBTZXNz
aW9uV3JhcHBlciBzZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOworICAgICAgICBTZXNzaW9u
V3JhcHBlciBzZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOwogICAgICAgICBXYWxsVGlt
ZSBsYXN0VXNlZDsKICAgICB9OwogCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiwgSXNvbGF0ZWRTZXNzaW9uPiBtX2lzb2xhdGVkU2Vzc2lvbnM7CisgICAgSGFzaE1hcDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgc3RkOjp1bmlxdWVfcHRyPElzb2xhdGVkU2Vzc2lv
bj4+IG1faXNvbGF0ZWRTZXNzaW9uczsKIAotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1f
c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSAg
ICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3N0YXRlbGVzc1Nlc3Npb247Ci0gICAgUmV0YWlu
UHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGU7
Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVs
ZXNzU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX2Vw
aGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGU7CisgICAgU2Vzc2lvbldy
YXBwZXIgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOworICAgIFNlc3Npb25XcmFwcGVy
IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBTZXNzaW9uV3JhcHBlciBt
X2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb247CiAKICAgICBTdHJpbmcgbV9ib3VuZEludGVyZmFj
ZUlkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vz
c2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTUsMjQgKzM5NSwyNCBAQCBAaW50ZXJmYWNlIFdLTmV0d29ya1Nlc3Np
b25EZWxlZ2F0ZSA6IE5TCiAgICAgLCBOU1VSTFNlc3Npb25XZWJTb2NrZXREZWxlZ2F0ZQogI2Vu
ZGlmCiA+IHsKLSAgICBXZWFrUHRyPFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYT4gX3Nlc3Np
b247CisgICAgV2Vha1B0cjxXZWJLaXQ6OlNlc3Npb25XcmFwcGVyPiBfc2Vzc2lvbldyYXBwZXI7
CiAgICAgYm9vbCBfd2l0aENyZWRlbnRpYWxzOwogfQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRp
YWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoU2Vzc2lvbldyYXBwZXI6
KFdlYktpdDo6U2Vzc2lvbldyYXBwZXImKXNlc3Npb25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczoo
Ym9vbCl3aXRoQ3JlZGVudGlhbHM7CiAtICh2b2lkKXNlc3Npb25JbnZhbGlkYXRlZDsKIAogQGVu
ZAogCiBAaW1wbGVtZW50YXRpb24gV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlCiAKLS0gKGlkKWlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lv
biB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCistIChpZClpbml0V2l0aFNl
c3Npb25XcmFwcGVyOihXZWJLaXQ6OlNlc3Npb25XcmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRo
Q3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCiB7CiAgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfc2Vzc2lv
biA9IG1ha2VXZWFrUHRyKHNlc3Npb24pOworICAgIF9zZXNzaW9uV3JhcHBlciA9IG1ha2VXZWFr
UHRyKHNlc3Npb25XcmFwcGVyKTsKICAgICBfd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRp
YWxzOwogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC00MjAsMjQgKzQyMCwzMCBAQCAtIChpZClpbml0
V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5lCiAKIC0gKHZvaWQpc2Vzc2lvbkludmFsaWRh
dGVkCiB7Ci0gICAgX3Nlc3Npb24gPSBudWxscHRyOworICAgIF9zZXNzaW9uV3JhcHBlciA9IG51
bGxwdHI7CiB9CiAKIC0gKE5ldHdvcmtEYXRhVGFza0NvY29hKilleGlzdGluZ1Rhc2s6KE5TVVJM
U2Vzc2lvblRhc2sgKil0YXNrCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBpZiAoIV9zZXNz
aW9uV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIXRhc2spCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSA9IF93aXRoQ3JlZGVudGlhbHMgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6
VXNlIDogV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOwotICAgIHJl
dHVybiBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2sudGFza0lkZW50aWZpZXIs
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICByZXR1cm4gX3Nlc3Npb25XcmFwcGVyLT5k
YXRhVGFza01hcC5nZXQodGFzay50YXNrSWRlbnRpZmllcik7Cit9CisKKy0gKE5ldHdvcmtTZXNz
aW9uQ29jb2EgKilzZXNzaW9uQ29jb2EKK3sKKyAgICBpZiAoIV9zZXNzaW9uV3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIF9zZXNzaW9uV3JhcHBlci0+c2Vzc2lv
bkNvY29hLmdldCgpOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNl
c3Npb24gZGlkQmVjb21lSW52YWxpZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7Ci0gICAg
QVNTRVJUKCFfc2Vzc2lvbik7CisgICAgQVNTRVJUKCFfc2Vzc2lvbldyYXBwZXIpOwogfQogCiAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNz
aW9uVGFzayAqKXRhc2sgZGlkU2VuZEJvZHlEYXRhOihpbnQ2NF90KWJ5dGVzU2VudCB0b3RhbEJ5
dGVzU2VudDooaW50NjRfdCl0b3RhbEJ5dGVzU2VudCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQ6
KGludDY0X3QpdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kCkBAIC01MjcsMTIgKzUzMywxNSBAQCAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKICAgICAgICAgYm9vbCBz
aG91bGRJZ25vcmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVlVG9E
eW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdl
U2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVz
dCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkp
OwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVzdCA9
IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3Qu
VVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9HKE5l
dHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRh
c2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoYXV0byBzZXNzaW9uQ29jb2EgPSBfc2Vzc2lvbldyYXBwZXIg
PyBfc2Vzc2lvbldyYXBwZXItPnNlc3Npb25Db2NvYS5nZXQoKSA6IG51bGxwdHIpIHsKKyAgICAg
ICAgICAgIHNob3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hT
VFMocmVxdWVzdCkgJiYgc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLnN0b3JhZ2VTZXNz
aW9uKHNlc3Npb25Db2NvYS0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVz
dCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkp
OworICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKKyAgICAgICAgICAgICAgICBy
ZXF1ZXN0ID0gZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoW3JlcXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOworICAgICAg
ICAgICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0
dHBzIHRvIGh0dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcu
VVRGOFN0cmluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKIAogICAgICAgICBuZXR3b3JrRGF0YVRhc2st
PndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKHJlc3BvbnNlLCByZXF1ZXN0LCBbY29tcGxldGlv
bkhhbmRsZXJDb3B5LCB0YXNrSWRlbnRpZmllciwgc2hvdWxkSWdub3JlSFNUU10oYXV0byYmIHJl
cXVlc3QpIHsKQEAgLTU2MCwxMiArNTY5LDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxT
ZXNzaW9uICopc2Vzc2kKICAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhp
c3RpbmdUYXNrOnRhc2tdKSB7CiAgICAgICAgIGJvb2wgc2hvdWxkSWdub3JlSFNUUyA9IGZhbHNl
OwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHNob3VsZEln
bm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVzdCkgJiYg
X3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuc3RvcmFnZVNlc3Npb24oX3Nlc3Npb24tPnNlc3Np
b25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJh
bWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKLSAgICAgICAgaWYgKHNob3VsZEln
bm9yZUhTVFMpIHsKLSAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVl
c3QpOwotICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiaHR0cCJdKTsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93
bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1
dG8gc2Vzc2lvbkNvY29hID0gX3Nlc3Npb25XcmFwcGVyID8gX3Nlc3Npb25XcmFwcGVyLT5zZXNz
aW9uQ29jb2EuZ2V0KCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVIU1RT
ID0gc2NoZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Npb25D
b2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNlc3Np
b25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJh
bWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRJZ25vcmVIU1RTKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVl
c3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUg
aXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29ya1Nl
c3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lkZW50
aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
I2VuZGlmCiAKICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5
KGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTU4OCwxMSArNjAwLDYgQEAgLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sg
d2lsbENhY2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilwcm9wb3NlZFJlc3BvbnNl
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRS
ZXNwb25zZSkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICAvLyBGSVhNRTogcmVtb3ZlIGlmIDxyZGFyOi8vcHJvYmxlbS8yMDAwMTk4NT4gaXMgZXZlciBy
ZXNvbHZlZC4KICAgICBpZiAoW3Byb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihhbGxIZWFkZXJGaWVsZHMpXQogICAgICAgICAmJiBbWyhpZClwcm9w
b3NlZFJlc3BvbnNlLnJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29u
dGVudC1SYW5nZSJdKQpAQCAtNjAyLDkgKzYwOSw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2kKIH0KIAogI2lmIEhBVkUoQ0ZORVRXT1JLX05TVVJMU0VTU0lPTl9T
VFJJQ1RSVVNURVZBTFVBVEUpCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0
RXZhbHVhdGlvbihOZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFz
aywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVh
dGlvbihOZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBTZXNzaW9uV3JhcHBlciYgc2Vzc2lv
bldyYXBwZXIsIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0
YVRhc2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50
aWFsICpjcmVkZW50aWFsKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZXNzaW9uLT5j
b250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0
d29ya0RhdGFUYXNrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2
ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlz
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUg
eworICAgIHNlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShzZXNzaW9uV3JhcHBl
ciwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5Q
dHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogVUlQ
cm9jZXNzIHNob3VsZCBzZW5kIHVzIGJhY2sgbm9uIG5pbCBjcmVkZW50aWFscyBidXQgdGhlIGNy
ZWRlbnRpYWwgSVBDIGVuY29kZXIgY3VycmVudGx5IG9ubHkgc2VyaWFsaXplcyBucyBjcmVkZW50
aWFscyBmb3IgdXNlcm5hbWUvcGFzc3dvcmQuCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBX
ZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwg
JiYgIWNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVk
ZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDogc2VjVHJ1c3QuZ2V0KCldKTsKQEAgLTYxNyw3ICs2
MjQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhCiAKIC0gKHZv
aWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25U
YXNrICopdGFzayBkaWRSZWNlaXZlQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25B
dXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3Jl
ZGVudGlhbCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uIHx8IFt0YXNr
IHN0YXRlXSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKKyAgICBhdXRvKiBz
ZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29h
IHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNlbEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBuaWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NjM3LDE4ICs2NDUsMjEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVz
dDpjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0XSk7CiAKICAgICAgICAgLy8g
SGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJlcXVl
c3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW5kIHRvIHVzZSBBVFMgZGVmYXVsdHMuCi0g
ICAgICAgIGlmIChfc2Vzc2lvbi0+ZmFzdFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQoKSkg
eworICAgICAgICBpZiAoc2Vzc2lvbkNvY29hLT5mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5h
YmxlZCgpKSB7CiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxTRVNTSU9OX1NUUklDVFJVU1RFVkFM
VUFURSkKICAgICAgICAgICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5n
VGFzazp0YXNrXTsKICAgICAgICAgICAgIEFTU0VSVChuZXR3b3JrRGF0YVRhc2spOwotICAgICAg
ICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW19zZXNzaW9uID0gbWFr
ZVdlYWtQdHIoX3Nlc3Npb24uZ2V0KCkpLCBjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlciksIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29jb2E+KG5ldHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFi
bGUgeworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW3dl
YWtTZWxmID0gV2Vha09iakNQdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPihzZWxmKSwgc2Vz
c2lvbkNvY29hID0gbWFrZVdlYWtQdHIoc2Vzc2lvbkNvY29hKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpLCB0YXNrSWRlbnRpZmllciwgbmV0d29y
a0RhdGFUYXNrID0gUmVmUHRyPE5ldHdvcmtEYXRhVGFza0NvY29hPihuZXR3b3JrRGF0YVRhc2sp
XShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIE9TU3RhdHVzIHRydXN0
UmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFr
U2VsZi5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxl
bmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAgICAgICAgICAgICAgICAg
YXV0byB0YXNrID0gV1RGTW92ZShuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICAgICAgICAgIGF1
dG8qIHNlc3Npb24gPSBfc2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzZXNz
aW9uID0gc2Vzc2lvbkNvY29hLmdldCgpOwogICAgICAgICAgICAgICAgIGlmICh0cnVzdFJlc3Vs
dCA9PSBub0VyciB8fCAhc2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5kbGluZywg
bmlsKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Npb24sIGNoYWxs
ZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Np
b24sICpzdHJvbmdTZWxmLT5fc2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwgdGFza0lkZW50aWZp
ZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgW05TVVJMU2Vzc2lvbiBfc3RyaWN0VHJ1c3RFdmFsdWF0ZTpjaGFs
bGVuZ2UgcXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXS51bmRlcmx5aW5nUXVldWUg
Y29tcGxldGlvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTY1NywxNCArNjY4LDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNz
aW9uICopc2Vzc2kKICNlbmRpZgogICAgICAgICB9CiAgICAgfQotICAgIF9zZXNzaW9uLT5jb250
aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgW3NlbGYg
ZXhpc3RpbmdUYXNrOnRhc2tdLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0
aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKSBt
dXRhYmxlIHsKKyAgICBzZXNzaW9uQ29jb2EtPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZSgq
X3Nlc3Npb25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBbc2VsZiBleGlzdGlu
Z1Rhc2s6dGFza10sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9u
SGFuZGxlcildIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlz
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUg
ewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpOwogICAg
IH0pOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFz
azooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3Ig
KillcnJvcgogewotICAgIGlmICghX3Nlc3Npb24pCisgICAgYXV0byogc2Vzc2lvbkNvY29hID0g
W3NlbGYgc2Vzc2lvbkNvY29hXTsKKyAgICBpZiAoIXNlc3Npb25Db2NvYSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBkaWRDb21wbGV0ZVdpdGhFcnJv
ciAlQCIsIHRhc2sudGFza0lkZW50aWZpZXIsIGVycm9yKTsKQEAgLTY3OSw5ICs2OTEsOSBAQCAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgaWYgKGF1dG8qIG5l
dHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXSkKICAgICAgICAgbmV0d29y
a0RhdGFUYXNrLT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvciwgbmV0d29ya0RhdGFUYXNrLT5u
ZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAgICAgZWxzZSBpZiAoZXJyb3IpIHsKLSAgICAgICAgYXV0
byBkb3dubG9hZElEID0gX3Nlc3Npb24tPnRha2VEb3dubG9hZElEKHRhc2sudGFza0lkZW50aWZp
ZXIpOworICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2Fk
TWFwLnRha2UodGFzay50YXNrSWRlbnRpZmllcik7CiAgICAgICAgIGlmIChkb3dubG9hZElELmRv
d25sb2FkSUQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24t
Pm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IHNlc3Npb25Db2NvYS0+bmV0d29y
a1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkgewogICAg
ICAgICAgICAgICAgIE5TRGF0YSAqcmVzdW1lRGF0YSA9IG5pbDsKICAgICAgICAgICAgICAgICBp
ZiAoaWQgdXNlckluZm8gPSBlcnJvci51c2VySW5mbykgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoW3VzZXJJbmZvIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CkBAIC04
MzYsNjAgKzg0OCw2NSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Np
CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkb3dubG9hZFRh
c2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFzayBkaWRGaW5pc2hEb3du
bG9hZGluZ1RvVVJMOihOU1VSTCAqKWxvY2F0aW9uCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAg
ICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vz
c2lvbkNvY29hKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vz
c2lvbi0+dGFrZURvd25sb2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAg
IGlmIChhdXRvKiBkb3dubG9hZCA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2Fk
TWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQorICAgIGF1dG8gZG93bmxvYWRJRCA9IF9z
ZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAudGFrZShbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlm
aWVyXSk7CisgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJv
Y2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQogICAgICAgICBk
b3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNz
aW9uICopc2Vzc2lvbiBkb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRv
d25sb2FkVGFzayBkaWRXcml0ZURhdGE6KGludDY0X3QpYnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNX
cml0dGVuOihpbnQ2NF90KXRvdGFsQnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3Jp
dGU6KGludDY0X3QpdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZQogewotICAgIGlmICghX3Nlc3Np
b24pCisgICAgYXV0byogc2Vzc2lvbkNvY29hID0gW3NlbGYgc2Vzc2lvbkNvY29hXTsKKyAgICBp
ZiAoIXNlc3Npb25Db2NvYSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghW3NlbGYgZXhpc3RpbmdUYXNrOmRvd25sb2FkVGFza10sICJUaGUgTmV0d29ya0RhdGFU
YXNrIHNob3VsZCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGlkQmVjb21lRG93bmxv
YWRUYXNrIHJldHVybnMiKTsKIAotICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uLT5kb3du
bG9hZElEKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93
bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3du
bG9hZChkb3dubG9hZElEKSkKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXIt
PmRvd25sb2FkTWFwLmdldChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgaWYg
KGF1dG8qIGRvd25sb2FkID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2Fk
TWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQogICAgICAgICBkb3dubG9hZC0+ZGlkUmVj
ZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICop
ZG93bmxvYWRUYXNrIGRpZFJlc3VtZUF0T2Zmc2V0OihpbnQ2NF90KWZpbGVPZmZzZXQgZXhwZWN0
ZWRUb3RhbEJ5dGVzOihpbnQ2NF90KWV4cGVjdGVkVG90YWxCeXRlcwogewotICAgIGlmICghX3Nl
c3Npb24pCi0gICAgICAgIHJldHVybjsKLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIC0g
KHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFzayBkaWRCZWNvbWVEb3dubG9hZFRhc2s6KE5TVVJMU2Vz
c2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFzawogewotICAgIGlmIChhdXRvKiBuZXR3b3Jr
RGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6ZGF0YVRhc2tdKSB7Ci0gICAgICAgIFJlZjxO
ZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0d29ya0RhdGFUYXNrKCpuZXR3b3JrRGF0
YVRhc2spOwotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRp
bmdEb3dubG9hZElEKCk7Ci0gICAgICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IF9zZXNzaW9u
LT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpOwotICAgICAgICBhdXRvIGRvd25s
b2FkID0gbWFrZVVuaXF1ZTxXZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRvd25s
b2FkSUQsIGRvd25sb2FkVGFzaywgKl9zZXNzaW9uLCBuZXR3b3JrRGF0YVRhc2stPnN1Z2dlc3Rl
ZEZpbGVuYW1lKCkpOwotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4
dGVuc2lvblRvRG93bmxvYWQoKmRvd25sb2FkKTsKLSAgICAgICAgQVNTRVJUKEZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMobmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpKSk7
Ci0gICAgICAgIGRvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0YVRhc2st
PnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpOwotICAgICAgICBkb3dubG9hZE1hbmFnZXIuZGF0
YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwor
ICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza107
CisgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2spCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBz
ZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29h
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgX3Nlc3Npb24tPmFkZERvd25sb2FkSUQoW2Rv
d25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0sIGRvd25sb2FkSUQpOwotICAgIH0KKyAgICBSZWY8
TmV0d29ya0RhdGFUYXNrQ29jb2E+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29ya0Rh
dGFUYXNrKTsKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdE
b3dubG9hZElEKCk7CisgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gc2Vzc2lvbkNvY29hLT5u
ZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpOworICAgIGF1dG8gZG93bmxvYWQgPSBt
YWtlVW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwg
ZG93bmxvYWRUYXNrLCAqW3NlbGYgc2Vzc2lvbkNvY29hXSwgbmV0d29ya0RhdGFUYXNrLT5zdWdn
ZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4
dGVuc2lvblRvRG93bmxvYWQoKmRvd25sb2FkKTsKKyAgICBBU1NFUlQoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpKTsKKyAg
ICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5n
RG93bmxvYWRMb2NhdGlvbigpKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVE
b3dubG9hZFRhc2soZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworCisgICAgQVNTRVJU
KCFfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLmNvbnRhaW5zKGRvd25sb2FkVGFzay50YXNr
SWRlbnRpZmllcikpOworICAgIF9zZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuYWRkKGRvd25s
b2FkVGFzay50YXNrSWRlbnRpZmllciwgZG93bmxvYWRJRCk7CiB9CiAKICNpZiBIQVZFKE5TVVJM
U0VTU0lPTl9XRUJTT0NLRVQpCiAtIChXZWJTb2NrZXRUYXNrKilleGlzdGluZ1dlYlNvY2tldFRh
c2s6KE5TVVJMU2Vzc2lvbldlYlNvY2tldFRhc2sgKil0YXNrCiB7Ci0gICAgaWYgKCFfc2Vzc2lv
bikKKyAgICBpZiAoIV9zZXNzaW9uV3JhcHBlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpZiAoIXRhc2spCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIF9z
ZXNzaW9uLT53ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmll
cik7CisgICAgcmV0dXJuIF9zZXNzaW9uV3JhcHBlci0+d2ViU29ja2V0RGF0YVRhc2tNYXAuZ2V0
KHRhc2sudGFza0lkZW50aWZpZXIpOwogfQogCiAKQEAgLTk3Miw2ICs5ODksMTMgQEAgc3RhdGlj
IE5TRGljdGlvbmFyeSAqcHJveHlEaWN0aW9uYXJ5KGNvbgogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAogfQogCit2b2lkIFNlc3Npb25XcmFwcGVyOjppbml0aWFsaXplKE5T
VVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24sIE5ldHdvcmtTZXNzaW9uQ29j
b2EmIGNvY29hU2Vzc2lvbiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kpCit7CisgICAgdGhpcy0+c2Vzc2lvbkNvY29hID0gbWFrZVdlYWtQ
dHIoY29jb2FTZXNzaW9uKTsKKyAgICB0aGlzLT5kZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdv
cmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Vzc2lvbldyYXBwZXI6KnRoaXMgd2l0
aENyZWRlbnRpYWxzOnN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5OjpVc2VdKTsKKyAgICB0aGlzLT5zZXNzaW9uID0gW05TVVJMU2Vzc2lv
biBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpkZWxlZ2F0
ZS5nZXQoKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOworfQor
CiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNz
JiBuZXR3b3JrUHJvY2VzcywgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJh
bWV0ZXJzKQogICAgIDogTmV0d29ya1Nlc3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMp
CiAgICAgLCBtX2JvdW5kSW50ZXJmYWNlSWRlbnRpZmllcihwYXJhbWV0ZXJzLmJvdW5kSW50ZXJm
YWNlSWRlbnRpZmllcikKQEAgLTEwNjMsOCArMTA4Nyw3IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6
Ok5ldHdvcmtTZXNzaW9uQ29jb2EKICAgICAgICAgY29va2llU3RvcmFnZS5fb3ZlcnJpZGVTZXNz
aW9uQ29va2llQWNjZXB0UG9saWN5ID0gWUVTOwogI2VuZGlmCiAKLSAgICBtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxz
OnRydWVdKTsKLSAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNz
aW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRp
Y19jYXN0PGlkPihtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkg
ZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywg
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSk7CiAgICAgTE9HKE5ldHdvcmtT
ZXNzaW9uLCAiQ3JlYXRlZCBOZXR3b3JrU2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2VwdFBvbGljeSAl
bHUiLCBjb25maWd1cmF0aW9uLkhUVFBDb29raWVTdG9yYWdlLmNvb2tpZUFjY2VwdFBvbGljeSk7
CiAKICAgICBjb25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTA3
Myw4ICsxMDk2LDcgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQog
ICAgIC8vIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBuaWw7CiAgICAgLy8gY29u
ZmlndXJhdGlvbi5IVFRQQ29va2llQWNjZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5TmV2ZXI7CiAKLSAgICBtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRo
aXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9zdGF0ZWxlc3NTZXNzaW9uID0gW05T
VVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0
ZTpzdGF0aWNfY2FzdDxpZD4obV9zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVn
YXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CisgICAgbV9zZXNzaW9uV2l0
aG91dENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSk7CiAKICAgICBtX2Rldmlj
ZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkID0gcGFyYW1ldGVycy5kZXZpY2VNYW5hZ2Vt
ZW50UmVzdHJpY3Rpb25zRW5hYmxlZDsKICAgICBtX2FsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFu
YWdlbWVudFJlc3RyaWN0aW9uc0ZvclRlc3RpbmcgPSBwYXJhbWV0ZXJzLmFsbExvYWRzQmxvY2tl
ZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0ZvclRlc3Rpbmc7CkBAIC0xMDk3LDEwICsx
MTE5LDEwIEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6On5OZXR3b3JrU2Vzc2lvbkNvY28KIHsKIH0K
IAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNz
Q29va2llbGVzc1Nlc3Npb24oKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXpl
RXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbigpCiB7CiAgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJh
dGlvbiAqY29uZmlndXJhdGlvbiA9IFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGVwaGVtZXJh
bFNlc3Npb25Db25maWd1cmF0aW9uXTsKLSAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpl
eGlzdGluZ0NvbmZpZ3VyYXRpb24gPSBtX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJh
dGlvbjsKKyAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpleGlzdGluZ0NvbmZpZ3VyYXRp
b24gPSBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25m
aWd1cmF0aW9uOwogCiAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llQWNjZXB0UG9saWN5ID0g
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI7CiAgICAgY29uZmlndXJhdGlvbi5VUkxDcmVk
ZW50aWFsU3RvcmFnZSA9IG5pbDsKQEAgLTExMTUsNDQgKzExMzcsNDYgQEAgdm9pZCBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZQogICAgIGNvbmZpZ3VyYXRpb24uX0NURGF0YUNv
bm5lY3Rpb25TZXJ2aWNlVHlwZSA9IGV4aXN0aW5nQ29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVj
dGlvblNlcnZpY2VUeXBlOwogI2VuZGlmCiAKLSAgICBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tp
ZWxlc3NTZXNzaW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
IGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczpmYWxz
ZV0pOwotICAgIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24gPSBbTlNVUkxT
ZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0
YXRpY19jYXN0PGlkPihtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdh
dGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07Cisg
ICAgbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwg
KnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxl
c3NDb29raWVsZXNzKTsKIH0KIAotTlNVUkxTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpz
ZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxz
UG9saWN5KQorU2Vzc2lvbldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Npb25XcmFw
cGVyRm9yVGFzayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQogewor
ICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKSB7
CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJl
cXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAgIGlmIChzdG9yYWdlU2Vzc2lv
bi0+c2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5Q29va2llc0Zv
cihmaXJzdFBhcnR5KSkKKyAgICAgICAgICAgIHJldHVybiBpc29sYXRlZFNlc3Npb24oc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIGZpcnN0UGFydHkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKwogICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kp
IHsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2U6Ci0gICAg
ICAgIHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCk7CisgICAgICAg
IHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgY2FzZSBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6Ci0gICAgICAgIHJldHVybiBtX3N0
YXRlbGVzc1Nlc3Npb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2U7CiAgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAgICAgaWYgKCFtX2VwaGVtZXJh
bFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVt
ZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBtX2VwaGVt
ZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uLmdldCgpOworICAgICAgICBpZiAoIW1fZXBo
ZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVw
aGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3Rh
dGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25D
b2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBm
aXJzdFBhcnR5RG9tYWluKQorU2Vzc2lvbldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlz
b2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0
eURvbWFpbikKIHsKLSAgICBhdXRvIGVudHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShm
aXJzdFBhcnR5RG9tYWluLCBbdGhpc10gewotICAgICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50
cnkgeyB9OwotICAgICAgICBuZXdFbnRyeS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5l
d0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Np
b25XaXRoQ29uZmlndXJhdGlvbjptX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCku
Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCi0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Np
b25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAg
ICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRo
Q29uZmlndXJhdGlvbjptX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxl
Z2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdl
dCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAg
YXV0byYgZW50cnkgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4s
IFt0aGlzXSB7CisgICAgICAgIGF1dG8gbmV3RW50cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vz
c2lvbj4oKTsKKyAgICAgICAgbmV3RW50cnktPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
aW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5j
b25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVz
ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUobV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCku
Y29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZSk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiAKLSAgICBlbnRyeS5sYXN0VXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+
bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25z
LnNpemUoKSA+IG1heE51bWJlck9mSXNvbGF0ZWRTZXNzaW9ucykgewogICAgICAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBrZXlUb1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1l
c3RhbXAgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9pc29s
YXRlZFNlc3Npb25zLmtleXMoKSkgewotICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lz
b2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSkubGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVz
dGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9ucy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAg
ICBpZiAodGltZXN0YW1wIDwgb2xkZXN0VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xk
ZXN0VGltZXN0YW1wID0gdGltZXN0YW1wOwogICAgICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0g
a2V5OwpAQCAtMTE2NywxNCArMTE5MSwxNCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9u
Q29jb2E6Omlzb2xhCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9H
KE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcgaXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVu
dGlhbCBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlOwogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OkRvTm90VXNlOgogICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBO
U1VSTFNlc3Npb24gd2l0aG91dCBjcmVkZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVy
biBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9uLmdldCgpOworICAgICAgICByZXR1cm4gZW50cnktPnNl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAgICAg
aWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKQotICAgICAgICAgICAg
aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7Ci0gICAgICAg
IHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uLmdldCgpOworICAg
ICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9uKQorICAgICAgICAg
ICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKKyAgICAgICAgcmV0dXJu
IG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9CiAKQEAgLTExOTIsMTYgKzEy
MTYsMTggQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQwogewogICAg
IE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAKLSAgICBbbV9zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX3N0YXRl
bGVzc1Nlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07Ci0gICAgW21fZXBoZW1lcmFsU3RhdGVs
ZXNzQ29va2llbGVzc1Nlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07Ci0gICAgW21fc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Ci0gICAg
W21fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Ci0gICAgW21f
ZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxp
ZGF0ZWRdOworICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZh
bGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBbbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdl
LnNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgW21fZXBoZW1lcmFsU3RhdGVsZXNz
U2Vzc2lvbi5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgIFttX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9z
ZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRl
ZF07CisgICAgW21fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5kZWxlZ2F0ZSBzZXNzaW9uSW52
YWxpZGF0ZWRdOwogCiAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9pc29sYXRlZFNlc3Npb25z
LnZhbHVlcygpKSB7Ci0gICAgICAgIFtzZXNzaW9uLnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3Jh
Z2UgaW52YWxpZGF0ZUFuZENhbmNlbF07Ci0gICAgICAgIFtzZXNzaW9uLnNlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOworICAgICAgICBbc2Vz
c2lvbi0+c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRD
YW5jZWxdOworICAgICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5k
ZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOworICAgICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldp
dGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAg
ICAgICBbc2Vzc2lvbi0+c2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBz
ZXNzaW9uSW52YWxpZGF0ZWRdOwogICAgIH0KICAgICBtX2lzb2xhdGVkU2Vzc2lvbnMuY2xlYXIo
KTsKIH0KQEAgLTEyMjAsNjggKzEyNDYsNiBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNs
ZWFyQ3JlZGVudGlhCiAjZW5kaWYKIH0KIAotSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4mIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmRhdGFUYXNrTWFwKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
c3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewotICAgIGNhc2UgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAg
ICAgIHJldHVybiBtX2RhdGFUYXNrTWFwRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKLSAg
ICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZToKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YVRhc2tNYXBXaXRob3V0U3RhdGU7Ci0gICAgY2FzZSBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlOgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01h
cFdpdGhDcmVkZW50aWFsczsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci19Ci0KLU5ldHdvcmtEYXRhVGFz
a0NvY29hKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKLXsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHJldHVybiBkYXRhVGFza01hcChzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSkuZ2V0KHRhc2tJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpyZWdpc3RlckRhdGFUYXNrKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNr
SWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EmIGRhdGFUYXNr
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSkKLXsKLSAgICBhdXRvJiBtYXAgPSBkYXRhVGFza01hcChzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikpOwot
ICAgIG1hcC5hZGQodGFza0lkZW50aWZpZXIsICZkYXRhVGFzayk7Ci19Ci0KLXZvaWQgTmV0d29y
a1Nlc3Npb25Db2NvYTo6dW5yZWdpc3RlckRhdGFUYXNrKE5ldHdvcmtEYXRhVGFza0NvY29hOjpU
YXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EmIGRhdGFU
YXNrLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSkKLXsKLSAgICBhdXRvJiBtYXAgPSBkYXRhVGFza01hcChzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobWFwLmdldCh0YXNrSWRlbnRpZmllcikgPT0gJmRh
dGFUYXNrKTsKLSAgICBtYXAucmVtb3ZlKHRhc2tJZGVudGlmaWVyKTsKLX0KLQotTlNVUkxTZXNz
aW9uRG93bmxvYWRUYXNrKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZFRhc2tXaXRoUmVz
dW1lRGF0YShOU0RhdGEqIHJlc3VtZURhdGEpCi17Ci0gICAgcmV0dXJuIFttX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2UgZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGE6cmVzdW1lRGF0YV07
Ci19Ci0KLXZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93
bmxvYWRJRCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFtX2Rvd25sb2FkTWFwLmNv
bnRhaW5zKHRhc2tJZGVudGlmaWVyKSk7Ci0gICAgZm9yIChhdXRvIGlkSW5NYXAgOiBtX2Rvd25s
b2FkTWFwLnZhbHVlcygpKQotICAgICAgICBBU1NFUlQoaWRJbk1hcCAhPSBkb3dubG9hZElEKTsK
LSNlbmRpZgotICAgIG1fZG93bmxvYWRNYXAuYWRkKHRhc2tJZGVudGlmaWVyLCBkb3dubG9hZElE
KTsKLX0KLQotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKE5ldHdv
cmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQobV9kb3dubG9hZE1hcC5nZXQodGFza0lkZW50aWZpZXIpLmRvd25sb2FkSUQoKSk7Ci0g
ICAgcmV0dXJuIG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKTsKLX0KLQotRG93bmxv
YWRJRCBOZXR3b3JrU2Vzc2lvbkNvY29hOjp0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCi17Ci0gICAgYXV0byBkb3dubG9h
ZElEID0gbV9kb3dubG9hZE1hcC50YWtlKHRhc2tJZGVudGlmaWVyKTsKLSAgICByZXR1cm4gZG93
bmxvYWRJRDsKLX0KLQogc3RhdGljIGJvb2wgY2VydGlmaWNhdGVzTWF0Y2goU2VjVHJ1c3RSZWYg
dHJ1c3QxLCBTZWNUcnVzdFJlZiB0cnVzdDIpCiB7CiAgICAgaWYgKCF0cnVzdDEgfHwgIXRydXN0
MikKQEAgLTEzMjIsMTggKzEyODYsMTcgQEAgYm9vbCBOZXR3b3JrU2Vzc2lvbkNvY29hOjphbGxv
d3NTcGVjaWZpYwogICAgIHJldHVybiBjZXJ0aWZpY2F0ZXNNYXRjaCh0cnVzdC5nZXQoKSwgY2hh
bGxlbmdlLm5zVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKS5wcm90ZWN0aW9uU3BhY2Uuc2Vy
dmVyVHJ1c3QpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlkUmVj
ZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShTZXNzaW9uV3JhcHBl
ciYgc2Vzc2lvbldyYXBwZXIsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRl
bnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFzaywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBpZiAoIW5ldHdvcmtEYXRhVGFzaykgewogI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tF
VCkKLSAgICAgICAgaWYgKGF1dG8qIHdlYlNvY2tldFRhc2sgPSB3ZWJTb2NrZXREYXRhVGFza0Zv
cklkZW50aWZpZXIodGFza0lkZW50aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiB3ZWJTb2Nr
ZXRUYXNrID0gc2Vzc2lvbldyYXBwZXIud2ViU29ja2V0RGF0YVRhc2tNYXAuZ2V0KHRhc2tJZGVu
dGlmaWVyKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBjaGFsbGVuZ2VzIGZvciB3
ZWIgc29ja2V0LgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgeyB9KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCi0KLSAgICAgICAgYXV0byBkb3dubG9h
ZElEID0gdGhpcy0+ZG93bmxvYWRJRCh0YXNrSWRlbnRpZmllcik7CisgICAgICAgIGF1dG8gZG93
bmxvYWRJRCA9IHNlc3Npb25XcmFwcGVyLmRvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7
CiAgICAgICAgIGlmIChkb3dubG9hZElELmRvd25sb2FkSUQoKSkgewogICAgICAgICAgICAgaWYg
KGF1dG8qIGRvd25sb2FkID0gbmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3du
bG9hZChkb3dubG9hZElEKSkgewogICAgICAgICAgICAgICAgIFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIHsgY2hhbGxlbmdlIH07CkBAIC0x
Mzk1LDI2ICsxMzU4LDIyIEBAIERNRldlYnNpdGVQb2xpY3lNb25pdG9yICpOZXR3b3JrU2Vzc2lv
bkMKIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRUYXNrPiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpj
cmVhdGVXZWJTb2NrZXRUYXNrKE5ldHdvcmtTb2NrZXRDaGFubmVsJiBjaGFubmVsLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wp
CiB7CiAgICAgLy8gRklYTUU6IFVzZSBwcm90b2NvbC4KLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNz
aW9uV2ViU29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
Z2V0KCkgd2ViU29ja2V0VGFza1dpdGhSZXF1ZXN0OiByZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJD
b3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSldOworICAgIFJl
dGFpblB0cjxOU1VSTFNlc3Npb25XZWJTb2NrZXRUYXNrPiB0YXNrID0gW21fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIHdlYlNvY2tldFRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0
Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVI
VFRQQm9keSldOwogICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYlNvY2tldFRhc2s+KGNoYW5uZWws
IFdURk1vdmUodGFzaykpOwogfQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNv
Y2tldFRhc2soV2ViU29ja2V0VGFzayYgdGFzaykKIHsKLSAgICBBU1NFUlQoIW1fd2ViU29ja2V0
RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsKLSAgICBtX3dlYlNvY2tl
dERhdGFUYXNrTWFwLmFkZCh0YXNrLmlkZW50aWZpZXIoKSwgJnRhc2spOworICAgIEFTU0VSVCgh
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRh
aW5zKHRhc2suaWRlbnRpZmllcigpKSk7CisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9y
YWdlLndlYlNvY2tldERhdGFUYXNrTWFwLmFkZCh0YXNrLmlkZW50aWZpZXIoKSwgJnRhc2spOwog
fQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnJlbW92ZVdlYlNvY2tldFRhc2soV2ViU29j
a2V0VGFzayYgdGFzaykKIHsKLSAgICBBU1NFUlQobV93ZWJTb2NrZXREYXRhVGFza01hcC5jb250
YWlucyh0YXNrLmlkZW50aWZpZXIoKSkpOwotICAgIG1fd2ViU29ja2V0RGF0YVRhc2tNYXAucmVt
b3ZlKHRhc2suaWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRpZmllcigp
KSk7CisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNr
TWFwLnJlbW92ZSh0YXNrLmlkZW50aWZpZXIoKSk7CiB9CiAKLVdlYlNvY2tldFRhc2sqIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihXZWJTb2NrZXRU
YXNrOjpUYXNrSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBtX3dlYlNvY2tl
dERhdGFUYXNrTWFwLmdldChpZGVudGlmaWVyKTsKLX0KKyNlbmRpZiAvLyBIQVZFKE5TVVJMU0VT
U0lPTl9XRUJTT0NLRVQpCiAKLSNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCShyZXZpc2lv
biAyNTIxNjUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNiArNDYzLDE3IEBAIC0gKHZvaWQp
X3NjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGU6KHYKICNlbmRpZgogfQogCistICh2b2lkKV9s
b2dVc2VySW50ZXJhY3Rpb246KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihk
b21haW4sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKKyNlbHNlCisgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyNlbmRpZgorfQorCiAtICh2b2lkKV9zZXRQcmV2YWxlbnRE
b21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgogewogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIF9XS1dlYnNpdAogLSAoYm9vbClfaGFzUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKIC0gKHZvaWQpX3Nj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGU6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5k
bGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9sb2dVc2VySW50ZXJhY3Rpb246KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfc2V0UHJldmFs
ZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX2dldElzUHJldmFsZW50RG9tYWluOihOU1VSTCAq
KWRvbWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IC0gKHZvaWQpX2NsZWFyUHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE2NSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE5LTEx
LTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmUtZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAgICAgICgt
W0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlw
dEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3YWl0
Rm9yTWVzc2FnZXM6XSk6CisgICAgICAgICgtW0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRl
bGVnYXRlIHdlYlZpZXc6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoVEVTVCk6CisKIDIwMTktMTEtMDYgIEZ1amlpIEhpcm9u
b3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl0gRHVtcFJlbmRl
clRyZWUuZXhlIGFuZCBXZWJLaXRUZXN0UnVubmVyLmV4ZSBzaG91bGRuJ3QgbGluayB3aXRoIFdl
YkNvcmVUZXN0U3VwcG9ydApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2
aXNpb24gMjUyMTY1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisj
aW1wb3J0ICJUQ1BTZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIK
ICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24u
aD4KQEAgLTQ3NCw2ICs0NzUsMTA1IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0
d29ya1Byb2MKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIH0KIAor
QGludGVyZmFjZSBEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tVSURlbGVnYXRlPgorLSAoTlNBcnJheTxOU1N0cmlu
ZyAqPiAqKXdhaXRGb3JNZXNzYWdlczooc2l6ZV90KWNvdW50OworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheTxOU1N0cmluZyAqPj4gX21lc3NhZ2VzOworfQorCistICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICop
ZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisgICAgW19tZXNzYWdlcyBhZGRPYmplY3Q6bWVzc2FnZV07CisgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKK30KKworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXdhaXRGb3JNZXNzYWdlczoo
c2l6ZV90KW1lc3NhZ2VDb3VudAoreworICAgIF9tZXNzYWdlcyA9IGFkb3B0TlMoW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om1lc3NhZ2VDb3VudF0pOworICAgIHdoaWxlIChbX21l
c3NhZ2VzIGNvdW50XSA8IG1lc3NhZ2VDb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2VzLmF1dG9yZWxlYXNlKCk7Cit9
CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVu
Z2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICogY3JlZGVudGlhbCkpY29t
cGxldGlvbkhhbmRsZXIKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRo
Q2hhbGxlbmdlVXNlQ3JlZGVudGlhbCwgW05TVVJMQ3JlZGVudGlhbCBjcmVkZW50aWFsRm9yVHJ1
c3Q6Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdF0pOworfQorCitAZW5kCisK
K1RFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9u
KQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJOworCisgICAgc3RkOjphdG9t
aWM8dW5zaWduZWQ+IHNlcnZlcnNDb25uZWN0ZWQgeyAwIH07CisgICAgY29uc3QgY2hhciogaGVh
ZGVyID0gIkhUVFAvMS4xIDIwMCBPS1xyXG5Db250ZW50LUxlbmd0aDogMjdcclxuXHJcbiI7CisK
KyAgICBUQ1BTZXJ2ZXIgaHR0cHNTZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFNQcm94
eSwgWyZdIChTU0wqIHNzbCkgeworICAgICAgICBzZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAg
IHdoaWxlIChzZXJ2ZXJzQ29ubmVjdGVkIDwgMikKKyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDAp
OworICAgICAgICBUQ1BTZXJ2ZXI6OnJlYWQoc3NsKTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0
ZShzc2wsIGhlYWRlciwgc3RybGVuKGhlYWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5
ID0gIjxzY3JpcHQ+YWxlcnQoJzEnKTwvc2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3Jp
dGUoc3NsLCBib2R5LCBzdHJsZW4oYm9keSkpOworICAgIH0pOworCisgICAgVENQU2VydmVyIGh0
dHBTZXJ2ZXIoWyZdIChpbnQgc29ja2V0KSB7CisgICAgICAgIHNlcnZlcnNDb25uZWN0ZWQrKzsK
KyAgICAgICAgd2hpbGUgKHNlcnZlcnNDb25uZWN0ZWQgPCAyKQorICAgICAgICAgICAgdXNsZWVw
KDEwMDAwMCk7CisgICAgICAgIFRDUFNlcnZlcjo6cmVhZChzb2NrZXQpOworICAgICAgICBUQ1BT
ZXJ2ZXI6OndyaXRlKHNvY2tldCwgaGVhZGVyLCBzdHJsZW4oaGVhZGVyKSk7CisgICAgICAgIGNv
bnN0IGNoYXIqIGJvZHkgPSAiPHNjcmlwdD5hbGVydCgnMicpPC9zY3JpcHQ+IjsKKyAgICAgICAg
VENQU2VydmVyOjp3cml0ZShzb2NrZXQsIGJvZHksIHN0cmxlbihib2R5KSk7CisgICAgfSk7CisK
KyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqc3RvcmVDb25maWd1cmF0aW9u
ID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBzdG9yZUNvbmZpZ3VyYXRpb24uaHR0cHNQcm94eSA9IFtOU1VSTCBVUkxXaXRoU3RyaW5n
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgaHR0
cHNTZXJ2ZXIucG9ydCgpXV07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUgPSBb
W1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246c3RvcmVD
b25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW3ZpZXdDb25maWd1
cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6ZGF0YVN0b3JlXTsKKworICAgIGF1dG8gd2ViVmll
dzEgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDEwMCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdldCgp
XSk7CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5l
dHdvcmsgcHJvY2VzcyBhbmQgaW5pdGlhbGl6ZSBkYXRhIHN0b3JlIl07CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIG5ld10p
OworICAgIGF1dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdD
b25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MSBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAg
ICBbd2ViVmlldzIgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBb
ZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOworICAgIFtk
YXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU6WUVTXTsKKworICAg
IF9fYmxvY2sgYm9vbCBpc29sYXRlZFNlc3Npb25Eb21haW4gPSBmYWxzZTsKKyAgICBfX2Jsb2Nr
IE5TVVJMICpwcmV2YWxlbnRFeGFtcGxlID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczov
L3ByZXZhbGVudC1leGFtcGxlLmNvbS8iXTsKKyAgICBbZGF0YVN0b3JlIF9sb2dVc2VySW50ZXJh
Y3Rpb246cHJldmFsZW50RXhhbXBsZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBbZGF0
YVN0b3JlIF9zZXRQcmV2YWxlbnREb21haW46cHJldmFsZW50RXhhbXBsZSBjb21wbGV0aW9uSGFu
ZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBbZGF0YVN0b3JlIF9zY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlOl57CisgICAgICAgICAgICAgICAgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0g
dHJ1ZTsKKyAgICAgICAgICAgIH1dOworICAgICAgICB9XTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmlzb2xhdGVkU2Vzc2lvbkRvbWFpbik7CisKKyAgICBbd2ViVmll
dzEgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHA6Ly8xMjcuMC4wLjE6JWQv
IiwgaHR0cFNlcnZlci5wb3J0KCldXV1dOworICAgIFt3ZWJWaWV3MiBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9w
cmV2YWxlbnQtZXhhbXBsZS5jb20vIl1dXTsKKworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKm1l
c3NhZ2VzID0gW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlczoyXTsKKyAgICBhdXRvIGNvbnRhaW5z
ID0gW10gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmFycmF5LCBOU1N0cmluZyAqZXhwZWN0ZWQpIHsK
KyAgICAgICAgZm9yIChOU1N0cmluZyAqcyBpbiBhcnJheSkgeworICAgICAgICAgICAgaWYgKFtz
IGlzRXF1YWxUb1N0cmluZzpleHBlY3RlZF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgRVhQRUNUX1RS
VUUoY29udGFpbnMobWVzc2FnZXMsIEAiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyht
ZXNzYWdlcywgQCIyIikpOworfQorCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5vTWVz
c2FnZXNXaGVuTm90VGVzdGluZykKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjUyMTY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTktMTEtMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBh
ZnRlciByMjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rl
c3RFeHBlY3RhdGlvbnM6CisgICAgICAgIFJlLWVuYWJsZSBza2lwcGVkIHRlc3RzLgorCiAyMDE5
LTExLTA2ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTjogcjI1MjEyMSBpbnRyb2R1Y2VkIG5ldyB3ZWJnbC8gZmFpbHVyZXMKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyNTIxNjUp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBj
b3B5KQpAQCAtNzQ2LDEwICs3NDYsNiBAQCBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvZG8tbm90CiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVu
dC1yZXNvdXJjZXMtY2FuLWFjY2Vzcy1jb29raWVzLWluLWEtdGhpcmQtcGFydHktY29udGV4dC5o
dG1sIFsgU2tpcCBdCiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2FwLWNhY2hl
LW1heC1hZ2UtZm9yLXByZXZhbGVudC1yZXNvdXJjZS5odG1sIFsgU2tpcCBdCiAKLSMgcmRhcjov
L3Byb2JsZW0vNTY5MjE1ODQKLWh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zd2l0
Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZhbGVudC13aXRoLWludGVyYWN0aW9uLnBo
cCBbIFNraXAgXQotaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3N3aXRjaC1zZXNz
aW9uLW9uLW5hdmlnYXRpb24tdG8tcHJldmFsZW50LXdpdGgtaW50ZXJhY3Rpb24tZGF0YWJhc2Uu
cGhwIFsgU2tpcCBdCi0KICMgVGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCBieSBk
ZWZhdWx0IGFuZCB1bmZpbmlzaGVkIDxyZGFyOi8vcHJvYmxlbS8zODkyNTA3Nz4uCiBodHRwL3Rl
c3RzL25hdmlnYXRpb24vcHJvY2Vzcy1zd2FwLXdpbmRvdy1vcGVuLmh0bWwgWyBTa2lwIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383002</attachid>
            <date>2019-11-06 18:37:51 -0800</date>
            <delta_ts>2019-11-06 18:59:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107023749.patch</filename>
            <type>text/plain</type>
            <size>63801</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwog
MjAxOS0xMS0wNiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBT
Y3JlZW4gbG9ja3Mgd2hpbGUgd2F0Y2hpbmcgcHJldmlvdXNseS1tdXRlZC10aGVuLXVubXV0ZWQg
dmlkZW8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1N0b3JlZENyZWRlbnRpYWxzUG9saWN5LmgJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNs
YXNzIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IDogdWludDhfdCB7CiAgICAgRG9Ob3RVc2UsCiAg
ICAgVXNlLAotICAgIEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3MKKyAgICBFcGhlbWVyYWxT
dGF0ZWxlc3MKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNTIxNjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDY3IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRp
b24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByMjUyMTE2IHdhcyBh
IHJvbGxvdXQgb2YgcjI0ODY0MCwgd2hpY2ggaW50cm9kdWNlZCBjYXNlcyB3aGVyZSBkYXRhIHRh
c2tzIGZyb20gZGlmZmVyZW50IE5TVVJMU2Vzc2lvbnMKKyAgICAgICAgd2hpY2ggY2FuIGhhdmUg
dGhlIHNhbWUgdGFzayBpZGVudGlmaWVycyB3ZXJlIHB1dCBpbnRvIHRoZSBzYW1lIG1hcHMuICBU
aGlzIGtleSBjb2xsaXNpb24gY2F1c2VkIGRhdGEgZnJvbSB0aGUgd3JvbmcKKyAgICAgICAgdGFz
a3MgdG8gYmUgc2VudCB0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXIsIGNhdXNpbmcgcmFyZSBhbmQg
c3RyYW5nZSBsb2FkaW5nIGJ1Z3MuICBJbiBvcmRlciB0byBwcmV2ZW50IGluc2VydGlvbiBpbnRv
CisgICAgICAgIHdyb25nIG1hcHMgYWdhaW4sIEkgbWFkZSBhIG5ldyBhYnN0cmFjdGlvbiwgU2Vz
c2lvbldyYXBwZXIsIHdoaWNoIHdyYXBzIGEgTlNVUkxTZXNzaW9uLCBpdHMgZGVsZWdhdGUsIGFu
ZCBhbGwgbWFwcworICAgICAgICB0aGF0IGFyZSBzY29wZWQgdG8gdGhhdCBOU1VSTFNlc3Npb24u
ICBBbG9uZyB0aGUgd2F5IEkgZm91bmQgYSBmZXcgb3RoZXIgcGxhY2VzIHdoZXJlIHdlIGhhZCBt
YWRlIHNpbWlsYXIgbWlzdGFrZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBhbiBBUEkgdGVzdCB3
aGljaCB3b3VsZCd2ZSBmYWlsZWQgYmVmb3JlIHIyNTIxMTYgYmVjYXVzZSBpdCBleGVyY2lzZXMg
dGhlIGtleSBjb2xsaXNpb24gY29uZGl0aW9uLAorICAgICAgICBhbmQgYnkgdGVzdHMgd2hpY2gg
d2VyZSBza2lwcGVkIGluIHIyNTIxMTYgYW5kIEkgbm93IHVuc2tpcHBlZC4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6cmVzdW1lKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6fk5ldHdvcmtEYXRhVGFza0NvY29hKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKC1bV0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoU2Vzc2lvbldyYXBwZXI6d2l0aENyZWRlbnRpYWxz
Ol0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRh
dGVkXSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBleGlzdGluZ1Rhc2s6
XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uQ29jb2FdKToK
KyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGlkQmVjb21l
SW52YWxpZFdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246dGFzazp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbjpuZXdSZXF1ZXN0OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUg
VVJMU2Vzc2lvbjp0YXNrOl9zY2hlbWVVcGdyYWRlZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6d2ls
bENhY2hlUmVzcG9uc2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246dGFzazpkaWRSZWNlaXZlQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRp
ZENvbXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkRmluaXNoRG93bmxvYWRpbmdUb1VSTDpdKToK
KyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93bmxvYWRU
YXNrOmRpZFdyaXRlRGF0YTp0b3RhbEJ5dGVzV3JpdHRlbjp0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dy
aXRlOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpk
b3dubG9hZFRhc2s6ZGlkUmVzdW1lQXRPZmZzZXQ6ZXhwZWN0ZWRUb3RhbEJ5dGVzOl0pOgorICAg
ICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazpkaWRC
ZWNvbWVEb3dubG9hZFRhc2s6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZSBleGlzdGluZ1dlYlNvY2tldFRhc2s6XSk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25XcmFw
cGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
TmV0d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvbldyYXBwZXJGb3JUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxs
ZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZVdlYlNv
Y2tldFRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGRXZWJT
b2NrZXRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6cmVtb3Zl
V2ViU29ja2V0VGFzayk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBpbml0
V2l0aE5ldHdvcmtTZXNzaW9uOndpdGhDcmVkZW50aWFsczpdKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3NTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Db2NvYTo6c2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkRG93bmxv
YWRJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRv
d25sb2FkSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29h
Ojp0YWtlRG93bmxvYWRJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uQ29jb2E6OndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAg
ICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbG9nVXNlckludGVyYWN0aW9uOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oOgorCiAyMDE5LTExLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MTkwNy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRp
b25NYW5hZ2VyLmNwcAkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY4LDcgKzE2OCw3IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYK
ICAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVy
cy5zb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJl
clVSTCk7CiAgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0
aW9uUElEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAg
ICBsb2FkUGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9u
cyA9IG9wdGlvbnM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJp
Y3RIVFRQUmVzcG9uc2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2Nv
YS5tbQkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsOCAr
NzAsMTAgQEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZgogICAgIE5T
RGF0YSAqdXBkYXRlZERhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRo
UHJvcGVydHlMaXN0OmRpY3Rpb25hcnkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3Yx
XzAgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwogI2VuZGlmCiAKLSAgICBtX2Rvd25sb2FkVGFz
ayA9IGNvY29hU2Vzc2lvbi5kb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YSh1cGRhdGVkRGF0YSk7
Ci0gICAgY29jb2FTZXNzaW9uLmFkZERvd25sb2FkSUQobV9kb3dubG9hZFRhc2suZ2V0KCkudGFz
a0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CisgICAgbV9kb3dubG9hZFRhc2sgPSBbY29jb2FT
ZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGRvd25sb2FkVGFz
a1dpdGhSZXN1bWVEYXRhOnVwZGF0ZWREYXRhXTsKKyAgICBhdXRvIHRhc2tJZGVudGlmaWVyID0g
W21fZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXTsKKyAgICBBU1NFUlQoIWNvY29hU2Vzc2lv
bi5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZG93bmxvYWRNYXAuY29udGFpbnModGFz
a0lkZW50aWZpZXIpKTsKKyAgICBjb2NvYVNlc3Npb24ubV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlLmRvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgbV9kb3dubG9hZElEKTsKICAg
ICBtX2Rvd25sb2FkVGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmlsZSA9IHBhdGg7CiAK
ICAgICBbbV9kb3dubG9hZFRhc2sgcmVzdW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJKHJl
dmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWQ7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNv
Y29hOworc3RydWN0IFNlc3Npb25XcmFwcGVyOwogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2Nv
YSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrRGF0YVRhc2sgewogICAgIGZyaWVuZCBjbGFzcyBOZXR3
b3JrU2Vzc2lvbkNvY29hOwpAQCAtODksNiArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNU
aGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsK
ICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCisgICAgU2Vzc2lv
bldyYXBwZXImIG1fc2Vzc2lvbldyYXBwZXI7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+
IG1fc2FuZGJveEV4dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+
IG1fdGFzazsKICAgICBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MgbV9uZXR3b3JrTG9hZE1l
dHJpY3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtE
YXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29t
cHV0ZUlzQWx3YXlzT25Mb2dnCiAKIE5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRh
c2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBj
bGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3VsZENv
bnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QsIFByZWNvbm5lY3RPbmx5IHNob3VsZFByZWNvbm5lY3RPbmx5LCBib29sIGRhdGFU
YXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uLCBib29sIGRhdGFUYXNrSXNGb3JNYWluUmVzb3Vy
Y2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUsIE9wdGlvbmFsPE5ldHdvcmtBY3Rpdml0eVRyYWNrZXI+
IG5ldHdvcmtBY3Rpdml0eVRyYWNrZXIpCiAgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgZGF0YVRhc2tJc0Zvck1h
aW5GcmFtZU5hdmlnYXRpb24pCisgICAgLCBtX3Nlc3Npb25XcmFwcGVyKHN0YXRpY19jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2EmPihzZXNzaW9uKS5zZXNzaW9uV3JhcHBlckZvclRhc2socmVxdWVz
dFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKQogICAgICwgbV9mcmFt
ZUlEKGZyYW1lSUQpCiAgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX2lzRm9yTWFpblJl
c291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKGRhdGFUYXNrSXNGb3JNYWluUmVzb3VyY2VOYXZp
Z2F0aW9uRm9yQW55RnJhbWUpCkBAIC0yMDYsMTQgKzIwNywxMSBAQCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQmxvY2tD
b29raWVzID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkc0lzb2xhdGVkU2Vzc2lvbiA9IGZhbHNlOwot
ICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3Qu
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9
PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29v
a2llbGVzczsKKyAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNz
OwogICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzZXNzaW9uLm5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpKSB7CiAgICAgICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKQogICAg
ICAgICAgICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91
bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4gbmVlZHNJc29sYXRlZFNlc3Npb24gc2hvdWxk
IGJlIHNldCBoZXJlLgogICAgIH0KICNlbmRpZgogICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVycmVy
VG9PcmlnaW5JZk5lZWRlZChyZXF1ZXN0KTsKQEAgLTIyMSwxNCArMjE5LDExIEBAIE5ldHdvcmtE
YXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2MKICAgICBOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCA9IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5
OjpVcGRhdGVIVFRQQm9keSk7CiAgICAgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVl
c3RUb0luZmVyZmFjZUlmTmVlZGVkKG5zUmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmID09IFdl
YkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeTo6U25pZmZDb250ZW50ICYmICF1cmwuaXNMb2Nh
bEZpbGUoKSwgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYgPT0gV2ViQ29yZTo6Q29udGVudEVu
Y29kaW5nU25pZmZpbmdQb2xpY3k6OlNuaWZmKTsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9
IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBpZiAo
bmVlZHNJc29sYXRlZFNlc3Npb24pCi0gICAgICAgIG1fdGFzayA9IFtjb2NvYVNlc3Npb24uaXNv
bGF0ZWRTZXNzaW9uKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBmaXJzdFBhcnR5KSBkYXRhVGFz
a1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgZWxzZQotICAgICAgICBtX3Rhc2sgPSBbY29j
b2FTZXNzaW9uLnNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIGRhdGFUYXNrV2l0aFJl
cXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uV3JhcHBlci5zZXNzaW9u
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKIAotICAgIExPRyhOZXR3b3JrU2Vzc2lv
biwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k9JXUgYW5kIFVSTD0lcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsK
LSAgICBjb2NvYVNlc3Npb24ucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNrIHRhc2tJZGVudGlmaWVy
XSwgKnRoaXMsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlm
aWVyXSkpOworICAgIG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuYWRkKFttX3Rhc2sgdGFz
a0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0
aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJd
LCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOwogCiAgICAgaWYgKHNo
b3VsZFByZWNvbm5lY3RPbmx5ID09IFByZWNvbm5lY3RPbmx5OjpZZXMpIHsKICNpZiBFTkFCTEUo
U0VSVkVSX1BSRUNPTk5FQ1QpCkBAIC0yNjYsOCArMjYxLDggQEAgTmV0d29ya0RhdGFUYXNrQ29j
b2E6On5OZXR3b3JrRGF0YVRhc2tDbwogICAgIGlmICghbV90YXNrIHx8ICFtX3Nlc3Npb24pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBjb2NvYVNlc3Npb24udW5yZWdp
c3RlckRhdGFUYXNrKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCAqdGhpcywgbV9zdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZXNzaW9uV3JhcHBlci5kYXRh
VGFza01hcC5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgIG1fc2Vz
c2lvbldyYXBwZXIuZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
IH0KIAogdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJU
b09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTM1
Nyw3ICszNTIsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjp3aWxsUGVyZm9ybUhUCiAK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmICghbV9oYXNCZWVu
U2V0VG9Vc2VTdGF0ZWxlc3NDb29raWVTdG9yYWdlKSB7Ci0gICAgICAgIGlmIChtX3N0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzCisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxz
UG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0
ZWxlc3MKICAgICAgICAgICAgIHx8IChtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigp
ICYmIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNob3VsZEJsb2NrQ29va2ll
cyhyZXF1ZXN0LCBtX2ZyYW1lSUQsIG1fcGFnZUlEKSkpCiAgICAgICAgICAgICBibG9ja0Nvb2tp
ZXMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaAkocmV2aXNpb24gMjUyMTY1KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIE9CSkNfQ0xBU1MgRE1GV2Vic2l0ZVBv
bGljeU1vbml0b3I7CiBPQkpDX0NMQVNTIE5TRGF0YTsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9u
OworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBOU1VS
TFNlc3Npb25Eb3dubG9hZFRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBPQkpD
X0NMQVNTIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKQEAgLTQ1LDE2ICs0NiwzMSBAQCBPQkpD
X0NMQVNTIFdLTmV0d29ya1Nlc3Npb25XZWJTb2NrZXREZWxlCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya1Nlc3Np
b25Db2NvYTsKKworc3RydWN0IFNlc3Npb25XcmFwcGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFNlc3Npb25XcmFwcGVyPiB7CisgICAgdm9pZCBpbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZp
Z3VyYXRpb24gKiwgTmV0d29ya1Nlc3Npb25Db2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5KTsKKworICAgIFdlYWtQdHI8TmV0d29ya1Nlc3Npb25Db2NvYT4gc2Vzc2lvbkNv
Y29hOworICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IHNlc3Npb247CisgICAgUmV0YWluUHRy
PFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gZGVsZWdhdGU7CisgICAgSGFzaE1hcDxOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gZGF0
YVRhc2tNYXA7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIsIERvd25sb2FkSUQ+IGRvd25sb2FkTWFwOworI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNP
Q0tFVCkKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwg
V2ViU29ja2V0VGFzayo+IHdlYlNvY2tldERhdGFUYXNrTWFwOworI2VuZGlmCit9OwogCiBjbGFz
cyBOZXR3b3JrU2Vzc2lvbkNvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKICAg
ICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2E7CisgICAgZnJpZW5kIGNsYXNzIERv
d25sb2FkOwogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Np
b24+IGNyZWF0ZShOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzJiYpOwogCiAgICAgTmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYsIE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkNvY29h
KCk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vz
c2lvbigpOworICAgIHZvaWQgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsK
IAogICAgIGNvbnN0IFN0cmluZyYgYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKCkgY29uc3Q7CiAg
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25z
dDsKQEAgLTYzLDIxICs3OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGRhdGFDb25u
ZWN0aW9uU2VydmljZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7IH0KICNlbmRpZgogCi0gICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFUYXNrRm9y
SWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHJlZ2lzdGVyRGF0YVRhc2soTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJE
YXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRh
VGFza0NvY29hJiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotCi0gICAgTlNV
UkxTZXNzaW9uRG93bmxvYWRUYXNrKiBkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YShOU0RhdGEq
KTsKLQotICAgIFdlYlNvY2tldFRhc2sqIHdlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihX
ZWJTb2NrZXRUYXNrOjpUYXNrSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGFkZERvd25sb2FkSUQo
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKLSAgICBE
b3dubG9hZElEIGRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
KTsKLSAgICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpU
YXNrSWRlbnRpZmllcik7Ci0KICAgICBzdGF0aWMgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CiAKLSAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktp
dDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYpPiYmKTsKKyAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShTZXNz
aW9uV3JhcHBlciYsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSos
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYpOwogCiAgICAgYm9vbCBm
YXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFzdFNl
cnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQ7IH0KICAgICBib29sIGRldmljZU1hbmFnZW1lbnRS
ZXN0cmljdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VNYW5hZ2VtZW50UmVz
dHJpY3Rpb25zRW5hYmxlZDsgfQpAQCAtODYsOCArOTAsNiBAQCBwdWJsaWM6CiAKICAgICBDRkRp
Y3Rpb25hcnlSZWYgcHJveHlDb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eUNv
bmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAotICAgIE5TVVJMU2Vzc2lvbiogc2Vzc2lvbihXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0gICAgTlNVUkxTZXNzaW9uKiBpc29sYXRlZFNl
c3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluKTsKICAgICBib29sIGhhc0lzb2xhdGVkU2Vzc2lvbihjb25zdCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhcklz
b2xhdGVkU2Vzc2lvbnMoKSBvdmVycmlkZTsKIApAQCAtOTYsNiArOTgsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOwogICAgIGJvb2wgc2hvdWxkTG9n
Q29va2llSW5mb3JtYXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nob3VsZExvZ0Nv
b2tpZUluZm9ybWF0aW9uOyB9CiAgICAgU2Vjb25kcyBsb2FkVGhyb3R0bGVMYXRlbmN5KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2FkVGhyb3R0bGVMYXRlbmN5OyB9CisgICAgU2Vzc2lv
bldyYXBwZXImIHNlc3Npb25XcmFwcGVyRm9yVGFzayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7CisgICAgU2Vzc2lvbldy
YXBwZXImIGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
Y29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pOwogCiAjaWYgSEFWRShOU1VSTFNFU1NJ
T05fV0VCU09DS0VUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRUYXNrPiBjcmVhdGVX
ZWJTb2NrZXRUYXNrKE5ldHdvcmtTb2NrZXRDaGFubmVsJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkgZmluYWw7CkBAIC0xMDMsMzIgKzEw
NywxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlV2ViU29ja2V0VGFzayhXZWJTb2NrZXRU
YXNrJikgZmluYWw7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBkYXRhVGFza01hcChXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0KLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFU
YXNrTWFwV2l0aENyZWRlbnRpYWxzOwotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRo
b3V0U3RhdGU7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3M7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50
aWZpZXIsIERvd25sb2FkSUQ+IG1fZG93bmxvYWRNYXA7Ci0jaWYgSEFWRShOU1VSTFNFU1NJT05f
V0VCU09DS0VUKQotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyLCBXZWJTb2NrZXRUYXNrKj4gbV93ZWJTb2NrZXREYXRhVGFza01hcDsKLSNlbmRpZgotCiAg
ICAgc3RydWN0IElzb2xhdGVkU2Vzc2lvbiB7Ci0gICAgICAgIFJldGFpblB0cjxOU1VSTFNlc3Np
b24+IHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAgICAgIFJldGFpblB0cjxXS05l
dHdvcmtTZXNzaW9uRGVsZWdhdGU+IHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0
ZTsKLSAgICAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gc3RhdGVsZXNzU2Vzc2lvbjsKLSAg
ICAgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc3RhdGVsZXNzU2Vzc2lv
bkRlbGVnYXRlOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNlc3Npb25XcmFwcGVyIHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7Cisg
ICAgICAgIFNlc3Npb25XcmFwcGVyIHNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAg
ICAgICAgIFdhbGxUaW1lIGxhc3RVc2VkOwogICAgIH07CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluLCBJc29sYXRlZFNlc3Npb24+IG1faXNvbGF0ZWRTZXNzaW9uczsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBzdGQ6OnVuaXF1ZV9wdHI8
SXNvbGF0ZWRTZXNzaW9uPj4gbV9pc29sYXRlZFNlc3Npb25zOwogCi0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0
cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc3RhdGVsZXNzU2Vzc2lv
bjsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3N0YXRlbGVzc1Nl
c3Npb25EZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX2VwaGVtZXJhbFN0
YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGU+IG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZTsK
KyAgICBTZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CisgICAg
U2Vzc2lvbldyYXBwZXIgbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIFNl
c3Npb25XcmFwcGVyIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKIAogICAgIFN0cmluZyBt
X2JvdW5kSW50ZXJmYWNlSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9zb3VyY2VBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyNTIx
NjUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5NSwyNCArMzk1LDI0IEBAIEBpbnRlcmZhY2Ug
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlMKICAgICAsIE5TVVJMU2Vzc2lvbldlYlNvY2tl
dERlbGVnYXRlCiAjZW5kaWYKID4gewotICAgIFdlYWtQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hPiBfc2Vzc2lvbjsKKyAgICBXZWFrUHRyPFdlYktpdDo6U2Vzc2lvbldyYXBwZXI+IF9z
ZXNzaW9uV3JhcHBlcjsKICAgICBib29sIF93aXRoQ3JlZGVudGlhbHM7CiB9CiAKLS0gKGlkKWlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lv
biB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzOworLSAoaWQpaW5pdFdpdGhT
ZXNzaW9uV3JhcHBlcjooV2ViS2l0OjpTZXNzaW9uV3JhcHBlciYpc2Vzc2lvbldyYXBwZXIgd2l0
aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKIC0gKHZvaWQpc2Vzc2lvbkludmFs
aWRhdGVkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUKIAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hJilzZXNzaW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHMKKy0g
KGlkKWluaXRXaXRoU2Vzc2lvbldyYXBwZXI6KFdlYktpdDo6U2Vzc2lvbldyYXBwZXImKXNlc3Np
b25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHMKIHsKICAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbik7CisgICAgX3Nlc3Npb25XcmFw
cGVyID0gbWFrZVdlYWtQdHIoc2Vzc2lvbldyYXBwZXIpOwogICAgIF93aXRoQ3JlZGVudGlhbHMg
PSB3aXRoQ3JlZGVudGlhbHM7CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTQyMCwyNCArNDIwLDMw
IEBAIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmUKIAogLSAodm9pZClz
ZXNzaW9uSW52YWxpZGF0ZWQKIHsKLSAgICBfc2Vzc2lvbiA9IG51bGxwdHI7CisgICAgX3Nlc3Np
b25XcmFwcGVyID0gbnVsbHB0cjsKIH0KIAogLSAoTmV0d29ya0RhdGFUYXNrQ29jb2EqKWV4aXN0
aW5nVGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQor
ICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gX3dpdGhDcmVkZW50aWFscyA/IFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9O
b3RVc2U7Ci0gICAgcmV0dXJuIF9zZXNzaW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50
YXNrSWRlbnRpZmllciwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAgIHJldHVybiBfc2Vz
c2lvbldyYXBwZXItPmRhdGFUYXNrTWFwLmdldCh0YXNrLnRhc2tJZGVudGlmaWVyKTsKK30KKwor
LSAoTmV0d29ya1Nlc3Npb25Db2NvYSAqKXNlc3Npb25Db2NvYQoreworICAgIGlmICghX3Nlc3Np
b25XcmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gX3Nlc3Npb25X
cmFwcGVyLT5zZXNzaW9uQ29jb2EuZ2V0KCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2lvbiBkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOihOU0Vycm9yICop
ZXJyb3IKIHsKLSAgICBBU1NFUlQoIV9zZXNzaW9uKTsKKyAgICBBU1NFUlQoIV9zZXNzaW9uV3Jh
cHBlcik7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0
YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRTZW5kQm9keURhdGE6KGludDY0X3QpYnl0
ZXNTZW50IHRvdGFsQnl0ZXNTZW50OihpbnQ2NF90KXRvdGFsQnl0ZXNTZW50IHRvdGFsQnl0ZXNF
eHBlY3RlZFRvU2VuZDooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQKQEAgLTUyNywx
MiArNTMzLDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAog
ICAgICAgICBib29sIHNob3VsZElnbm9yZUhTVFMgPSBmYWxzZTsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2NoZW1lV2Fz
VXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIF9zZXNzaW9uLT5uZXR3b3JrUHJv
Y2VzcygpLnN0b3JhZ2VTZXNzaW9uKF9zZXNzaW9uLT5zZXNzaW9uSUQoKSktPnNob3VsZEJsb2Nr
Q29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0d29ya0RhdGFU
YXNrLT5wYWdlSUQoKSk7Ci0gICAgICAgIGlmIChzaG91bGRJZ25vcmVIU1RTKSB7Ci0gICAgICAg
ICAgICByZXF1ZXN0ID0gZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIEFT
U0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSk7Ci0gICAg
ICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRw
cyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVU
RjhTdHJpbmcpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHNlc3Npb25Db2NvYSA9IF9z
ZXNzaW9uV3JhcHBlciA/IF9zZXNzaW9uV3JhcHBlci0+c2Vzc2lvbkNvY29hLmdldCgpIDogbnVs
bHB0cikgeworICAgICAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVk
RHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBzZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9jZXNz
KCkuc3RvcmFnZVNlc3Npb24oc2Vzc2lvbkNvY29hLT5zZXNzaW9uSUQoKSktPnNob3VsZEJsb2Nr
Q29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0d29ya0RhdGFU
YXNrLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgeworICAg
ICAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0
dHAiXSk7CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3Jh
ZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5h
YnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogCiAgICAgICAgIG5l
dHdvcmtEYXRhVGFzay0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVl
c3QsIFtjb21wbGV0aW9uSGFuZGxlckNvcHksIHRhc2tJZGVudGlmaWVyLCBzaG91bGRJZ25vcmVI
U1RTXShhdXRvJiYgcmVxdWVzdCkgewpAQCAtNTYwLDEyICs1NjksMTUgQEAgLSAodm9pZClVUkxT
ZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRh
c2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10pIHsKICAgICAgICAgYm9vbCBzaG91bGRJZ25v
cmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNU
UyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihf
c2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29y
a0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOwotICAgICAg
ICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFk
ZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3QuVVJMLnNjaGVt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNz
aW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlm
aWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoYXV0byBzZXNzaW9uQ29jb2EgPSBfc2Vzc2lvbldyYXBwZXIgPyBfc2Vzc2lv
bldyYXBwZXItPnNlc3Npb25Db2NvYS5nZXQoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNo
b3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVz
dCkgJiYgc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLnN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25Db2NvYS0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29y
a0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOworICAgICAg
ICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ID0g
ZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoW3JlcXVl
c3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOworICAgICAgICAgICAgICAg
IExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0
dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmlu
Zyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAjZW5kaWYKIAogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29w
eSA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtNTg4LDExICs2MDAsNiBAQCAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vz
c2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRh
c2sgKilkYXRhVGFzayB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXBy
b3Bvc2VkUmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQ2FjaGVkVVJMUmVz
cG9uc2UgKmNhY2hlZFJlc3BvbnNlKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nl
c3Npb24pIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIC8vIEZJWE1FOiByZW1vdmUgaWYgPHJkYXI6Ly9wcm9ibGVtLzIwMDAx
OTg1PiBpcyBldmVyIHJlc29sdmVkLgogICAgIGlmIChbcHJvcG9zZWRSZXNwb25zZS5yZXNwb25z
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGFsbEhlYWRlckZpZWxkcyldCiAgICAgICAg
ICYmIFtbKGlkKXByb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXSBvYmpl
Y3RGb3JLZXk6QCJDb250ZW50LVJhbmdlIl0pCkBAIC02MDIsOSArNjA5LDkgQEAgLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogfQogCiAjaWYgSEFWRShDRk5FVFdPUktf
TlNVUkxTRVNTSU9OX1NUUklDVFJVU1RFVkFMVUFURSkKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9j
ZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIE5T
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSog
bmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50
aWFsKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIFNlc3Npb25X
cmFwcGVyJiBzZXNzaW9uV3JhcHBlciwgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hh
bGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9u
LCBOU1VSTENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIHNlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIHRhc2tJ
ZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzZWNUcnVzdCA9IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlLnNlcnZlclRydXN0KV0gKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkgbXV0YWJsZSB7CisgICAgc2Vzc2lvbi0+Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdl
KHNlc3Npb25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRh
c2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzZWNU
cnVzdCA9IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KV0g
KFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwg
Y29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkgbXV0YWJsZSB7CiAgICAgICAg
IC8vIEZJWE1FOiBVSVByb2Nlc3Mgc2hvdWxkIHNlbmQgdXMgYmFjayBub24gbmlsIGNyZWRlbnRp
YWxzIGJ1dCB0aGUgY3JlZGVudGlhbCBJUEMgZW5jb2RlciBjdXJyZW50bHkgb25seSBzZXJpYWxp
emVzIG5zIGNyZWRlbnRpYWxzIGZvciB1c2VybmFtZS9wYXNzd29yZC4KICAgICAgICAgaWYgKGRp
c3Bvc2l0aW9uID09IFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
VXNlQ3JlZGVudGlhbCAmJiAhY3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSkgewogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRp
YWwsIFtOU1VSTENyZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OiBzZWNUcnVzdC5nZXQoKV0p
OwpAQCAtNjE3LDcgKzYyNCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2VydmVyVHJ1
c3RFdmEKIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6
KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIGRpZFJlY2VpdmVDaGFsbGVuZ2U6KE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxD
cmVkZW50aWFsICpjcmVkZW50aWFsKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nl
c3Npb24gfHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNhbmNlbGluZykg
eworICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07CisgICAgaWYg
KCFzZXNzaW9uQ29jb2EgfHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNh
bmNlbGluZykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hh
bGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC02MzcsMTggKzY0NSwyMSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoTlNV
UkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENyZWRlbnRpYWwgY3Jl
ZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1c3RdKTsK
IAogICAgICAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0t
bGV2ZWwgaWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbmQgdG8gdXNlIEFU
UyBkZWZhdWx0cy4KLSAgICAgICAgaWYgKF9zZXNzaW9uLT5mYXN0U2VydmVyVHJ1c3RFdmFsdWF0
aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzZXNzaW9uQ29jb2EtPmZhc3RTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25FbmFibGVkKCkpIHsKICNpZiBIQVZFKENGTkVUV09SS19OU1VSTFNFU1NJT05f
U1RSSUNUUlVTVEVWQUxVQVRFKQogICAgICAgICAgICAgYXV0byogbmV0d29ya0RhdGFUYXNrID0g
W3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdOwogICAgICAgICAgICAgQVNTRVJUKG5ldHdvcmtEYXRh
VGFzayk7Ci0gICAgICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihb
X3Nlc3Npb24gPSBtYWtlV2Vha1B0cihfc2Vzc2lvbi5nZXQoKSksIGNvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKSwgdGFza0lkZW50aWZpZXIsIG5ldHdv
cmtEYXRhVGFzayA9IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4obmV0d29ya0RhdGFUYXNr
KV0oTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hhbGxlbmdlLCBPU1N0YXR1cyB0cnVz
dFJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+KHNlbGYpLCBzZXNzaW9uQ29jb2EgPSBtYWtlV2Vha1B0cihzZXNzaW9uQ29jb2EpLCBjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlciksIHRhc2tJZGVu
dGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29jb2E+KG5l
dHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwg
T1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGF1dG8gc3Ry
b25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgICAgIGlmICghc3Ryb25nU2Vs
ZikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vz
c2lvbkF1dGhDaGFsbGVuZ2VDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgbmlsKTsKICAg
ICAgICAgICAgICAgICBhdXRvIHRhc2sgPSBXVEZNb3ZlKG5ldHdvcmtEYXRhVGFzayk7Ci0gICAg
ICAgICAgICAgICAgYXV0byogc2Vzc2lvbiA9IF9zZXNzaW9uLmdldCgpOworICAgICAgICAgICAg
ICAgIGF1dG8qIHNlc3Npb24gPSBzZXNzaW9uQ29jb2EuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKHRydXN0UmVzdWx0ID09IG5vRXJyIHx8ICFzZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VQZXJmb3JtRGVm
YXVsdEhhbmRsaW5nLCBuaWwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByb2Nlc3NTZXJ2ZXJUcnVzdEV2YWx1YXRpb24o
c2Vzc2lvbiwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIHByb2Nlc3NTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24oc2Vzc2lvbiwgKnN0cm9uZ1NlbGYtPl9zZXNzaW9uV3JhcHBlciwgY2hhbGxlbmdl
LCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBbTlNVUkxTZXNzaW9uIF9zdHJpY3RUcnVz
dEV2YWx1YXRlOmNoYWxsZW5nZSBxdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdLnVu
ZGVybHlpbmdRdWV1ZSBjb21wbGV0aW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjU3LDE0ICs2NjgsMTUgQEAgLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Ci0gICAg
X3Nlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIHRhc2tJZGVu
dGlmaWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwm
IGNyZWRlbnRpYWwpIG11dGFibGUgeworICAgIHNlc3Npb25Db2NvYS0+Y29udGludWVEaWRSZWNl
aXZlQ2hhbGxlbmdlKCpfc2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIs
IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXSwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9u
QXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSwgY3JlZGVudGlhbC5uc0NyZWRl
bnRpYWwoKSk7CiAgICAgfSk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBz
ZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29h
KQogICAgICAgICByZXR1cm47CiAKICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IGRpZENv
bXBsZXRlV2l0aEVycm9yICVAIiwgdGFzay50YXNrSWRlbnRpZmllciwgZXJyb3IpOwpAQCAtNjc5
LDkgKzY5MSw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICAg
ICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdKQog
ICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yLCBuZXR3
b3JrRGF0YVRhc2stPm5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICBlbHNlIGlmIChlcnJvcikg
ewotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25sb2FkSUQodGFz
ay50YXNrSWRlbnRpZmllcik7CisgICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uV3Jh
cHBlci0+ZG93bmxvYWRNYXAudGFrZSh0YXNrLnRhc2tJZGVudGlmaWVyKTsKICAgICAgICAgaWYg
KGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZG93bmxv
YWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9h
ZChkb3dubG9hZElEKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gc2Vzc2lv
bkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25s
b2FkSUQpKSB7CiAgICAgICAgICAgICAgICAgTlNEYXRhICpyZXN1bWVEYXRhID0gbmlsOwogICAg
ICAgICAgICAgICAgIGlmIChpZCB1c2VySW5mbyA9IGVycm9yLnVzZXJJbmZvKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChbdXNlckluZm8gaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNs
YXNzXV0pIHsKQEAgLTgzNiw2MCArODQ4LDY1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxT
ZXNzaW9uICopc2Vzc2kKIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNr
IGRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6KE5TVVJMICopbG9jYXRpb24KIHsKLSAgICBpZiAo
IV9zZXNzaW9uKQorICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07
CisgICAgaWYgKCFzZXNzaW9uQ29jb2EpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZG93
bmxvYWRJRCA9IF9zZXNzaW9uLT50YWtlRG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVu
dGlmaWVyXSk7Ci0gICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9j
ZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpCisgICAgYXV0byBk
b3dubG9hZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC50YWtlKFtkb3dubG9hZFRh
c2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICBpZiAoYXV0byogZG93bmxvYWQgPSBzZXNzaW9uQ29j
b2EtPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJ
RCkpCiAgICAgICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KIAogLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFdyaXRlRGF0YTooaW50NjRfdClieXRlc1dyaXR0
ZW4gdG90YWxCeXRlc1dyaXR0ZW46KGludDY0X3QpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRl
c0V4cGVjdGVkVG9Xcml0ZTooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlCiB7Ci0g
ICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9u
Q29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFbc2VsZiBleGlzdGluZ1Rhc2s6ZG93bmxvYWRUYXNrXSwgIlRo
ZSBOZXR3b3JrRGF0YVRhc2sgc2hvdWxkIGJlIGRlc3Ryb3llZCBpbW1lZGlhdGVseSBhZnRlciBk
aWRCZWNvbWVEb3dubG9hZFRhc2sgcmV0dXJucyIpOwogCi0gICAgYXV0byBkb3dubG9hZElEID0g
X3Nlc3Npb24tPmRvd25sb2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAg
IGlmIChhdXRvKiBkb3dubG9hZCA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2Fk
TWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQorICAgIGF1dG8gZG93bmxvYWRJRCA9IF9z
ZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuZ2V0KFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZp
ZXJdKTsKKyAgICBpZiAoYXV0byogZG93bmxvYWQgPSBzZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9j
ZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpCiAgICAgICAgIGRv
d25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4pOwogfQogCiAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25E
b3dubG9hZFRhc2sgKilkb3dubG9hZFRhc2sgZGlkUmVzdW1lQXRPZmZzZXQ6KGludDY0X3QpZmls
ZU9mZnNldCBleHBlY3RlZFRvdGFsQnl0ZXM6KGludDY0X3QpZXhwZWN0ZWRUb3RhbEJ5dGVzCiB7
Ci0gICAgaWYgKCFfc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRh
dGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNrIGRpZEJlY29tZURvd25sb2Fk
VGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNrCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza10pIHsK
LSAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRh
c2soKm5ldHdvcmtEYXRhVGFzayk7Ci0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtE
YXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgYXV0byYgZG93bmxvYWRNYW5h
Z2VyID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7Ci0gICAg
ICAgIGF1dG8gZG93bmxvYWQgPSBtYWtlVW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2Fk
TWFuYWdlciwgZG93bmxvYWRJRCwgZG93bmxvYWRUYXNrLCAqX3Nlc3Npb24sIG5ldHdvcmtEYXRh
VGFzay0+c3VnZ2VzdGVkRmlsZW5hbWUoKSk7Ci0gICAgICAgIG5ldHdvcmtEYXRhVGFzay0+dHJh
bnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCgqZG93bmxvYWQpOwotICAgICAgICBBU1NF
UlQoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9h
ZExvY2F0aW9uKCkpKTsKLSAgICAgICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKG5l
dHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSk7Ci0gICAgICAgIGRvd25s
b2FkTWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3Zl
KGRvd25sb2FkKSk7CisgICAgYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdU
YXNrOmRhdGFUYXNrXTsKKyAgICBpZiAoIW5ldHdvcmtEYXRhVGFzaykKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07CisgICAgaWYg
KCFzZXNzaW9uQ29jb2EpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBfc2Vzc2lvbi0+YWRk
RG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSwgZG93bmxvYWRJRCk7Ci0g
ICAgfQorICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0d29ya0RhdGFU
YXNrKCpuZXR3b3JrRGF0YVRhc2spOworICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRh
VGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKKyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBz
ZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0
byBkb3dubG9hZCA9IG1ha2VVbmlxdWU8V2ViS2l0OjpEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2Vy
LCBkb3dubG9hZElELCBkb3dubG9hZFRhc2ssICpbc2VsZiBzZXNzaW9uQ29jb2FdLCBuZXR3b3Jr
RGF0YVRhc2stPnN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIG5ldHdvcmtEYXRhVGFzay0+dHJh
bnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCgqZG93bmxvYWQpOworICAgIEFTU0VSVChG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24oKSkpOworICAgIGRvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0
YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpOworICAgIGRvd25sb2FkTWFuYWdlci5k
YXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7
CisKKyAgICBBU1NFUlQoIV9zZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuY29udGFpbnMoZG93
bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVyKSk7CisgICAgX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9h
ZE1hcC5hZGQoZG93bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVyLCBkb3dubG9hZElEKTsKIH0KIAog
I2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKIC0gKFdlYlNvY2tldFRhc2sqKWV4aXN0
aW5nV2ViU29ja2V0VGFzazooTlNVUkxTZXNzaW9uV2ViU29ja2V0VGFzayAqKXRhc2sKIHsKLSAg
ICBpZiAoIV9zZXNzaW9uKQorICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gX3Nlc3Npb24tPndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNr
LnRhc2tJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gX3Nlc3Npb25XcmFwcGVyLT53ZWJTb2NrZXRE
YXRhVGFza01hcC5nZXQodGFzay50YXNrSWRlbnRpZmllcik7CiB9CiAKIApAQCAtOTcyLDYgKzk4
OSwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwcm94eURpY3Rpb25hcnkoY29uCiAgICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKK3ZvaWQgU2Vzc2lvbldyYXBwZXI6
OmluaXRpYWxpemUoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiwgTmV0
d29ya1Nlc3Npb25Db2NvYSYgY29jb2FTZXNzaW9uLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKK3sKKyAgICB0aGlzLT5zZXNzaW9uQ29j
b2EgPSBtYWtlV2Vha1B0cihjb2NvYVNlc3Npb24pOworICAgIHRoaXMtPmRlbGVnYXRlID0gYWRv
cHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTZXNzaW9uV3Jh
cHBlcjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZV0pOworICAgIHRoaXMtPnNlc3Npb24g
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFp
blF1ZXVlXV07Cit9CisKIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2Eo
TmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2Vz
cywgcGFyYW1ldGVycykKICAgICAsIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKHBhcmFtZXRl
cnMuYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKQpAQCAtMTA2Myw4ICsxMDg3LDcgQEAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQogICAgICAgICBjb29raWVTdG9yYWdl
Ll9vdmVycmlkZVNlc3Npb25Db29raWVBY2NlcHRQb2xpY3kgPSBZRVM7CiAjZW5kaWYKIAotICAg
IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3
aXRoQ3JlZGVudGlhbHM6dHJ1ZV0pOwotICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24g
ZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1d
OworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKGNvbmZpZ3Vy
YXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKTsKICAg
ICBMT0coTmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2ll
QWNjZXB0UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2ll
QWNjZXB0UG9saWN5KTsKIAogICAgIGNvbmZpZ3VyYXRpb24uVVJMQ3JlZGVudGlhbFN0b3JhZ2Ug
PSBuaWw7CkBAIC0xMDczLDggKzEwOTYsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3Jr
U2Vzc2lvbkNvY29hCiAgICAgLy8gY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IG5p
bDsKICAgICAvLyBjb25maWd1cmF0aW9uLkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lOZXZlcjsKIAotICAgIG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRl
ID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3
b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6ZmFsc2VdKTsKLSAgICBtX3N0YXRlbGVz
c1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0
ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAg
ICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShjb25maWd1cmF0
aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKTsK
IAogICAgIG1fZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQgPSBwYXJhbWV0ZXJz
LmRldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkOwogICAgIG1fYWxsTG9hZHNCbG9j
a2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMu
YWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZzsK
QEAgLTEwOTcsMTAgKzExMTksMTAgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNz
aW9uQ29jbwogewogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCkKIHsKICAgICBOU1VSTFNl
c3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW05TVVJMU2Vzc2lvbkNvbmZpZ3Vy
YXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNvbmZpZ3VyYXRpb25dOwotICAgIE5TVVJMU2Vzc2lvbkNv
bmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IG1fc3RhdGVsZXNzU2Vzc2lvbi5n
ZXQoKS5jb25maWd1cmF0aW9uOworICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0
aW5nQ29uZmlndXJhdGlvbiA9IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNz
aW9uLmdldCgpLmNvbmZpZ3VyYXRpb247CiAKICAgICBjb25maWd1cmF0aW9uLkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsKICAgICBjb25maWd1
cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTExNSw0NCArMTEzNyw0OCBA
QCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlCiAgICAgY29uZmlndXJh
dGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gZXhpc3RpbmdDb25maWd1cmF0aW9u
Ll9DVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7CiAjZW5kaWYKIAotICAgIG1fZXBoZW1lcmFs
U3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENy
ZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vz
c2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBt
YWluUXVldWVdXTsKKyAgICBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uaW5pdGlhbGl6ZShj
b25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVw
aGVtZXJhbFN0YXRlbGVzcyk7CiB9CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2Nv
YTo6c2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSkKK1Nlc3Npb25XcmFwcGVyJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9u
V3JhcHBlckZvclRhc2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkK
IHsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8g
Zmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7CisgICAgICAgIGlmIChzdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tU
aGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KSkK
KyAgICAgICAgICAgIHJldHVybiBpc29sYXRlZFNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIGZpcnN0UGFydHkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgorCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0
dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZToKLSAgICAgICAgcmV0dXJuIG1fc3RhdGVsZXNz
U2Vzc2lvbi5nZXQoKTsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOgotICAgICAgICBpZiAoIW1fZXBoZW1lcmFs
U3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24pCi0gICAgICAgICAgICBpbml0aWFsaXplRXBoZW1l
cmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1fZXBoZW1l
cmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzOgorICAgICAgICBpZiAoIW1fZXBo
ZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVw
aGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3Rh
dGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25D
b2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBm
aXJzdFBhcnR5RG9tYWluKQorU2Vzc2lvbldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlz
b2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0
eURvbWFpbikKIHsKLSAgICBhdXRvIGVudHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShm
aXJzdFBhcnR5RG9tYWluLCBbdGhpc10gewotICAgICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50
cnkgeyB9OwotICAgICAgICBuZXdFbnRyeS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5l
d0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Np
b25XaXRoQ29uZmlndXJhdGlvbjptX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCku
Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCi0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Np
b25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAg
ICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRo
Q29uZmlndXJhdGlvbjptX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxl
Z2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdl
dCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAg
YXV0byYgZW50cnkgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4s
IFt0aGlzXSB7CisgICAgICAgIGF1dG8gbmV3RW50cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vz
c2lvbj4oKTsKKyAgICAgICAgbmV3RW50cnktPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
aW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5j
b25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVz
ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUobV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCku
Y29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZSk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiAKLSAgICBlbnRyeS5sYXN0VXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+
bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25z
LnNpemUoKSA+IG1heE51bWJlck9mSXNvbGF0ZWRTZXNzaW9ucykgewogICAgICAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBrZXlUb1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1l
c3RhbXAgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9pc29s
YXRlZFNlc3Npb25zLmtleXMoKSkgewotICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lz
b2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSkubGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVz
dGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9ucy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAg
ICBpZiAodGltZXN0YW1wIDwgb2xkZXN0VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xk
ZXN0VGltZXN0YW1wID0gdGltZXN0YW1wOwogICAgICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0g
a2V5OwpAQCAtMTE2NywxNCArMTE5MywxNCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9u
Q29jb2E6Omlzb2xhCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9H
KE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcgaXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVu
dGlhbCBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlOwogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OkRvTm90VXNlOgogICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBO
U1VSTFNlc3Npb24gd2l0aG91dCBjcmVkZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVy
biBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9uLmdldCgpOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAgICAg
IGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbikKLSAgICAgICAgICAg
IGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpOwotICAgICAg
ICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbi5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVz
czoKKyAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbikKKyAg
ICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CisgICAgICAg
IHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb247CiAgICAgfQogfQogCkBAIC0xMTky
LDE2ICsxMjE4LDE4IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZEMK
IHsKICAgICBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogCi0gICAgW21f
c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKLSAgICBb
bV9zdGF0ZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX2VwaGVtZXJh
bFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFtt
X3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRd
OwotICAgIFttX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwot
ICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUgc2Vzc2lv
bkludmFsaWRhdGVkXTsKKyAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLnNlc3Np
b24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFs
U3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgIFttX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBbbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Cisg
ICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52
YWxpZGF0ZWRdOworICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uZGVsZWdhdGUgc2Vz
c2lvbkludmFsaWRhdGVkXTsKIAogICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1faXNvbGF0ZWRT
ZXNzaW9ucy52YWx1ZXMoKSkgewotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAg
ICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlk
YXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2Vs
XTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuZGVs
ZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKICAgICB9CiAgICAgbV9pc29sYXRlZFNlc3Npb25z
LmNsZWFyKCk7CiB9CkBAIC0xMjIwLDY4ICsxMjQ4LDYgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjpjbGVhckNyZWRlbnRpYQogI2VuZGlmCiB9CiAKLUhhc2hNYXA8TmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpkYXRhVGFza01hcChXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIHsKLSAgICBjYXNlIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNz
OgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxl
c3M7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6
Ci0gICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aG91dFN0YXRlOwotICAgIGNhc2UgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJuIG1fZGF0
YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwotfQotCi1OZXR3b3Jr
RGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVy
KE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gZGF0YVRhc2tNYXAo
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQg
TmV0d29ya1Nlc3Npb25Db2NvYTo6cmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBk
YXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXAuY29udGFpbnModGFza0lkZW50aWZp
ZXIpKTsKLSAgICBtYXAuYWRkKHRhc2tJZGVudGlmaWVyLCAmZGF0YVRhc2spOwotfQotCi12b2lk
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnVucmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29h
JiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1hcC5nZXQodGFza0lkZW50aWZpZXIp
ID09ICZkYXRhVGFzayk7Ci0gICAgbWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLU5T
VVJMU2Vzc2lvbkRvd25sb2FkVGFzayogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNr
V2l0aFJlc3VtZURhdGEoTlNEYXRhKiByZXN1bWVEYXRhKQotewotICAgIHJldHVybiBbbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhOnJlc3Vt
ZURhdGFdOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9h
ZElEIGRvd25sb2FkSUQpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9kb3dubG9h
ZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikpOwotICAgIGZvciAoYXV0byBpZEluTWFwIDog
bV9kb3dubG9hZE1hcC52YWx1ZXMoKSkKLSAgICAgICAgQVNTRVJUKGlkSW5NYXAgIT0gZG93bmxv
YWRJRCk7Ci0jZW5kaWYKLSAgICBtX2Rvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93
bmxvYWRJRCk7Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJ
RChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCi17
Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKS5kb3dubG9hZElE
KCkpOwotICAgIHJldHVybiBtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0K
LURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0d29ya0Rh
dGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQotewotICAgIGF1dG8g
ZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFrZSh0YXNrSWRlbnRpZmllcik7Ci0gICAgcmV0
dXJuIGRvd25sb2FkSUQ7Ci19Ci0KIHN0YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1Ry
dXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogewogICAgIGlmICghdHJ1c3QxIHx8
ICF0cnVzdDIpCkBAIC0xMzIyLDE4ICsxMjg4LDE3IEBAIGJvb2wgTmV0d29ya1Nlc3Npb25Db2Nv
YTo6YWxsb3dzU3BlY2lmaWMKICAgICByZXR1cm4gY2VydGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0
KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkucHJvdGVjdGlvblNw
YWNlLnNlcnZlclRydXN0KTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51
ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJ
ZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoU2Vzc2lv
bldyYXBwZXImIHNlc3Npb25XcmFwcGVyLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2spIHsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9X
RUJTT0NLRVQpCi0gICAgICAgIGlmIChhdXRvKiB3ZWJTb2NrZXRUYXNrID0gd2ViU29ja2V0RGF0
YVRhc2tGb3JJZGVudGlmaWVyKHRhc2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0byog
d2ViU29ja2V0VGFzayA9IHNlc3Npb25XcmFwcGVyLndlYlNvY2tldERhdGFUYXNrTWFwLmdldCh0
YXNrSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgY2hhbGxlbmdl
cyBmb3Igd2ViIHNvY2tldC4KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIHsgfSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotCi0gICAgICAgIGF1dG8g
ZG93bmxvYWRJRCA9IHRoaXMtPmRvd25sb2FkSUQodGFza0lkZW50aWZpZXIpOworICAgICAgICBh
dXRvIGRvd25sb2FkSUQgPSBzZXNzaW9uV3JhcHBlci5kb3dubG9hZE1hcC5nZXQodGFza0lkZW50
aWZpZXIpOwogICAgICAgICBpZiAoZG93bmxvYWRJRC5kb3dubG9hZElEKCkpIHsKICAgICAgICAg
ICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IG5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSB7IGNoYWxsZW5nZSB9
OwpAQCAtMTM5NSwyNiArMTM2MCwyMiBAQCBETUZXZWJzaXRlUG9saWN5TW9uaXRvciAqTmV0d29y
a1Nlc3Npb25DCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gTmV0d29ya1Nlc3Npb25D
b2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKQogewogICAgIC8vIEZJWE1FOiBVc2UgcHJvdG9jb2wuCi0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbldlYlNvY2tldFRhc2s+IHRhc2sgPSBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlLmdldCgpIHdlYlNvY2tldFRhc2tXaXRoUmVxdWVzdDogcmVxdWVzdC5uc1VSTFJlcXVl
c3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsK
KyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uV2ViU29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiB3ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6
cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90
VXBkYXRlSFRUUEJvZHkpXTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJTb2NrZXRUYXNrPihj
aGFubmVsLCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjph
ZGRXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smIHRhc2spCiB7Ci0gICAgQVNTRVJUKCFtX3dl
YlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRpZmllcigpKSk7Ci0gICAgbV93
ZWJTb2NrZXREYXRhVGFza01hcC5hZGQodGFzay5pZGVudGlmaWVyKCksICZ0YXNrKTsKKyAgICBB
U1NFUlQoIW1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01h
cC5jb250YWlucyh0YXNrLmlkZW50aWZpZXIoKSkpOworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5hZGQodGFzay5pZGVudGlmaWVyKCksICZ0
YXNrKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRUYXNr
KFdlYlNvY2tldFRhc2smIHRhc2spCiB7Ci0gICAgQVNTRVJUKG1fd2ViU29ja2V0RGF0YVRhc2tN
YXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsKLSAgICBtX3dlYlNvY2tldERhdGFUYXNr
TWFwLnJlbW92ZSh0YXNrLmlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50
aWZpZXIoKSkpOworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXRE
YXRhVGFza01hcC5yZW1vdmUodGFzay5pZGVudGlmaWVyKCkpOwogfQogCi1XZWJTb2NrZXRUYXNr
KiBOZXR3b3JrU2Vzc2lvbkNvY29hOjp3ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIoV2Vi
U29ja2V0VGFzazo6VGFza0lkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gbV93
ZWJTb2NrZXREYXRhVGFza01hcC5nZXQoaWRlbnRpZmllcik7Ci19CisjZW5kaWYgLy8gSEFWRShO
U1VSTFNFU1NJT05fV0VCU09DS0VUKQogCi0jZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNTIxNjUpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtODc5LDcgKzg3OSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6U3QKICAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksCiAgICAgICAg
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSwKICAgICAgICAgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSwKLSAgICAgICAgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3MKKyAgICAg
ICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzcwog
ICAgID47CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsMTcgQEAgLSAodm9pZClfc2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZToodgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX2xvZ1VzZXJJbnRlcmFjdGlv
bjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAg
ICBfd2Vic2l0ZURhdGFTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbiwgW2NvbXBsZXRp
b25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworI2Vsc2UKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworI2VuZGlmCit9CisKIC0gKHZvaWQpX3NldFByZXZhbGVudERvbWFpbjooTlNVUkwgKilk
b21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vi
c2l0CiAtIChib29sKV9oYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIAogLSAodm9pZClfc2NoZWR1bGVDb29raWVCbG9j
a2luZ1VwZGF0ZToodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX2xvZ1Vz
ZXJJbnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9zZXRQcmV2YWxlbnREb21haW46KE5TVVJM
ICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogLSAodm9pZClfZ2V0SXNQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfY2xlYXJQ
cmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTY1KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTEtMDYgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNV
UkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tOgorICAgICAgICAoLVtEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29s
bGlzaW9uRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VzOl0pOgorICAgICAgICAoLVtEYXRhVGFza0lk
ZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE5
LTExLTA2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIFtXaW5dIER1bXBSZW5kZXJUcmVlLmV4ZSBhbmQgV2ViS2l0VGVzdFJ1bm5lci5leGUgc2hv
dWxkbid0IGxpbmsgd2l0aCBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0TmF2
aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tGb3VuZGF0aW9uLmg+CkBAIC00NzQsNiArNDc1LDEwNSBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lRmxhZyk7CiB9CiAKK0BpbnRlcmZhY2UgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9u
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0ZT4K
Ky0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCljb3VudDsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIERhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVn
YXRlIHsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4+IF9tZXNzYWdl
czsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZy
YW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfbWVzc2FnZXMgYWRkT2JqZWN0Om1lc3NhZ2Vd
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4g
Kil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCltZXNzYWdlQ291bnQKK3sKKyAgICBfbWVzc2FnZXMg
PSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTptZXNzYWdlQ291bnRd
KTsKKyAgICB3aGlsZSAoW19tZXNzYWdlcyBjb3VudF0gPCBtZXNzYWdlQ291bnQpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdl
cy5hdXRvcmVsZWFzZSgpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNl
c3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlh
bCAqIGNyZWRlbnRpYWwpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENyZWRlbnRp
YWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1
c3RdKTsKK30KKworQGVuZAorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIERhdGFUYXNr
SWRlbnRpZmllckNvbGxpc2lvbikKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
STsKKworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBzZXJ2ZXJzQ29ubmVjdGVkIHsgMCB9Owor
ICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9ICJIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5n
dGg6IDI3XHJcblxyXG4iOworCisgICAgVENQU2VydmVyIGh0dHBzU2VydmVyKFRDUFNlcnZlcjo6
UHJvdG9jb2w6OkhUVFBTUHJveHksIFsmXSAoU1NMKiBzc2wpIHsKKyAgICAgICAgc2VydmVyc0Nv
bm5lY3RlZCsrOworICAgICAgICB3aGlsZSAoc2VydmVyc0Nvbm5lY3RlZCA8IDIpCisgICAgICAg
ICAgICB1c2xlZXAoMTAwMDAwKTsKKyAgICAgICAgVENQU2VydmVyOjpyZWFkKHNzbCk7CisgICAg
ICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBoZWFkZXIsIHN0cmxlbihoZWFkZXIpKTsKKyAgICAg
ICAgY29uc3QgY2hhciogYm9keSA9ICI8c2NyaXB0PmFsZXJ0KCcxJyk8L3NjcmlwdD4iOworICAg
ICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNzbCwgYm9keSwgc3RybGVuKGJvZHkpKTsKKyAgICB9KTsK
KworICAgIFRDUFNlcnZlciBodHRwU2VydmVyKFsmXSAoaW50IHNvY2tldCkgeworICAgICAgICBz
ZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2ZXJzQ29ubmVjdGVkIDwgMikK
KyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBUQ1BTZXJ2ZXI6OnJlYWQoc29j
a2V0KTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2NrZXQsIGhlYWRlciwgc3RybGVuKGhl
YWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+YWxlcnQoJzInKTwv
c2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBib2R5LCBzdHJsZW4o
Ym9keSkpOworICAgIH0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KnN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgc3RvcmVDb25maWd1cmF0aW9uLmh0dHBzUHJveHkgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8v
MTI3LjAuMC4xOiVkLyIsIGh0dHBzU2VydmVyLnBvcnQoKV1dOworICAgIFdLV2Vic2l0ZURhdGFT
dG9yZSAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOnN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8g
dmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10p
OworICAgIFt2aWV3Q29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3JlOmRhdGFTdG9yZV07
CisKKyAgICBhdXRvIHdlYlZpZXcxID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJhdGlvbjp2aWV3
Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MgYW5kIGluaXRpYWxpemUgZGF0YSBzdG9y
ZSJdOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtEYXRhVGFza0lkZW50aWZpZXJDb2xs
aXNpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkg
Y29uZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzEgc2V0TmF2aWdhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQ6WUVTXTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlOllFU107CisKKyAgICBfX2Jsb2NrIGJvb2wgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0g
ZmFsc2U7CisgICAgX19ibG9jayBOU1VSTCAqcHJldmFsZW50RXhhbXBsZSA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhhbXBsZS5jb20vIl07CisgICAgW2RhdGFT
dG9yZSBfbG9nVXNlckludGVyYWN0aW9uOnByZXZhbGVudEV4YW1wbGUgY29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UHJldmFsZW50RG9tYWluOnByZXZhbGVudEV4
YW1wbGUgY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAgICAgW2RhdGFTdG9y
ZSBfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZTpeeworICAgICAgICAgICAgICAgIGlzb2xh
dGVkU2Vzc2lvbkRvbWFpbiA9IHRydWU7CisgICAgICAgICAgICB9XTsKKyAgICAgICAgfV07Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc29sYXRlZFNlc3Npb25Eb21h
aW4pOworCisgICAgW3dlYlZpZXcxIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJo
dHRwOi8vMTI3LjAuMC4xOiVkLyIsIGh0dHBTZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICBbd2ViVmll
dzIgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vcHJldmFsZW50LWV4YW1wbGUuY29tLyJdXV07CisKKyAgICBOU0Fy
cmF5PE5TU3RyaW5nICo+ICptZXNzYWdlcyA9IFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZXM6Ml07
CisgICAgYXV0byBjb250YWlucyA9IFtdIChOU0FycmF5PE5TU3RyaW5nICo+ICphcnJheSwgTlNT
dHJpbmcgKmV4cGVjdGVkKSB7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKnMgaW4gYXJyYXkpIHsK
KyAgICAgICAgICAgIGlmIChbcyBpc0VxdWFsVG9TdHJpbmc6ZXhwZWN0ZWRdKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1lc3NhZ2VzLCBAIjEiKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udGFpbnMobWVzc2FnZXMsIEAiMiIpKTsKK30KKwogVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBOb01lc3NhZ2VzV2hlbk5vdFRlc3RpbmcpCiB7CiAgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5TVVJM
U2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBSZS1lbmFibGUgc2tp
cHBlZCB0ZXN0cy4KKwogMjAxOS0xMS0wNiAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IHIyNTIxMjEgaW50cm9kdWNlZCBuZXcgd2ViZ2wv
IGZhaWx1cmVzCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9u
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMjUyMTY1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBl
Y3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc0NiwxMCArNzQ2LDYgQEAgaHR0cC90ZXN0cy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2RvLW5vdAogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2VzLWNhbi1hY2Nlc3MtY29va2llcy1pbi1hLXRo
aXJkLXBhcnR5LWNvbnRleHQuaHRtbCBbIFNraXAgXQogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL2NhcC1jYWNoZS1tYXgtYWdlLWZvci1wcmV2YWxlbnQtcmVzb3VyY2UuaHRtbCBb
IFNraXAgXQogCi0jIHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0Ci1odHRwL3Rlc3RzL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24tbmF2aWdhdGlvbi10by1wcmV2YWxlbnQt
d2l0aC1pbnRlcmFjdGlvbi5waHAgWyBTa2lwIF0KLWh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZhbGVudC13aXRoLWlu
dGVyYWN0aW9uLWRhdGFiYXNlLnBocCBbIFNraXAgXQotCiAjIFRoaXMgZmVhdHVyZSBpcyBjdXJy
ZW50bHkgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgdW5maW5pc2hlZCA8cmRhcjovL3Byb2JsZW0v
Mzg5MjUwNzc+LgogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Byb2Nlc3Mtc3dhcC13aW5kb3ctb3Bl
bi5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383004</attachid>
            <date>2019-11-06 19:00:00 -0800</date>
            <delta_ts>2019-11-07 06:29:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107025958.patch</filename>
            <type>text/plain</type>
            <size>64314</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwog
MjAxOS0xMS0wNiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBT
Y3JlZW4gbG9ja3Mgd2hpbGUgd2F0Y2hpbmcgcHJldmlvdXNseS1tdXRlZC10aGVuLXVubXV0ZWQg
dmlkZW8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1N0b3JlZENyZWRlbnRpYWxzUG9saWN5LmgJKHJldmlzaW9uIDI1MjE2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNs
YXNzIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IDogdWludDhfdCB7CiAgICAgRG9Ob3RVc2UsCiAg
ICAgVXNlLAotICAgIEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3MKKyAgICBFcGhlbWVyYWxT
dGF0ZWxlc3MKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNTIxNjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDY3IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRp
b24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByMjUyMTE2IHdhcyBh
IHJvbGxvdXQgb2YgcjI0ODY0MCwgd2hpY2ggaW50cm9kdWNlZCBjYXNlcyB3aGVyZSBkYXRhIHRh
c2tzIGZyb20gZGlmZmVyZW50IE5TVVJMU2Vzc2lvbnMKKyAgICAgICAgd2hpY2ggY2FuIGhhdmUg
dGhlIHNhbWUgdGFzayBpZGVudGlmaWVycyB3ZXJlIHB1dCBpbnRvIHRoZSBzYW1lIG1hcHMuICBU
aGlzIGtleSBjb2xsaXNpb24gY2F1c2VkIGRhdGEgZnJvbSB0aGUgd3JvbmcKKyAgICAgICAgdGFz
a3MgdG8gYmUgc2VudCB0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXIsIGNhdXNpbmcgcmFyZSBhbmQg
c3RyYW5nZSBsb2FkaW5nIGJ1Z3MuICBJbiBvcmRlciB0byBwcmV2ZW50IGluc2VydGlvbiBpbnRv
CisgICAgICAgIHdyb25nIG1hcHMgYWdhaW4sIEkgbWFkZSBhIG5ldyBhYnN0cmFjdGlvbiwgU2Vz
c2lvbldyYXBwZXIsIHdoaWNoIHdyYXBzIGEgTlNVUkxTZXNzaW9uLCBpdHMgZGVsZWdhdGUsIGFu
ZCBhbGwgbWFwcworICAgICAgICB0aGF0IGFyZSBzY29wZWQgdG8gdGhhdCBOU1VSTFNlc3Npb24u
ICBBbG9uZyB0aGUgd2F5IEkgZm91bmQgYSBmZXcgb3RoZXIgcGxhY2VzIHdoZXJlIHdlIGhhZCBt
YWRlIHNpbWlsYXIgbWlzdGFrZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBhbiBBUEkgdGVzdCB3
aGljaCB3b3VsZCd2ZSBmYWlsZWQgYmVmb3JlIHIyNTIxMTYgYmVjYXVzZSBpdCBleGVyY2lzZXMg
dGhlIGtleSBjb2xsaXNpb24gY29uZGl0aW9uLAorICAgICAgICBhbmQgYnkgdGVzdHMgd2hpY2gg
d2VyZSBza2lwcGVkIGluIHIyNTIxMTYgYW5kIEkgbm93IHVuc2tpcHBlZC4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6cmVzdW1lKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6fk5ldHdvcmtEYXRhVGFza0NvY29hKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKC1bV0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoU2Vzc2lvbldyYXBwZXI6d2l0aENyZWRlbnRpYWxz
Ol0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRh
dGVkXSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBleGlzdGluZ1Rhc2s6
XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uQ29jb2FdKToK
KyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGlkQmVjb21l
SW52YWxpZFdpdGhFcnJvcjpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246dGFzazp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbjpuZXdSZXF1ZXN0OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUg
VVJMU2Vzc2lvbjp0YXNrOl9zY2hlbWVVcGdyYWRlZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6d2ls
bENhY2hlUmVzcG9uc2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
IFVSTFNlc3Npb246dGFzazpkaWRSZWNlaXZlQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNrOmRp
ZENvbXBsZXRlV2l0aEVycm9yOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkRmluaXNoRG93bmxvYWRpbmdUb1VSTDpdKToK
KyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93bmxvYWRU
YXNrOmRpZFdyaXRlRGF0YTp0b3RhbEJ5dGVzV3JpdHRlbjp0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dy
aXRlOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpk
b3dubG9hZFRhc2s6ZGlkUmVzdW1lQXRPZmZzZXQ6ZXhwZWN0ZWRUb3RhbEJ5dGVzOl0pOgorICAg
ICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazpkaWRC
ZWNvbWVEb3dubG9hZFRhc2s6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZSBleGlzdGluZ1dlYlNvY2tldFRhc2s6XSk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25XcmFw
cGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
TmV0d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvbldyYXBwZXJGb3JUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxs
ZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZVdlYlNv
Y2tldFRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGRXZWJT
b2NrZXRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6cmVtb3Zl
V2ViU29ja2V0VGFzayk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBpbml0
V2l0aE5ldHdvcmtTZXNzaW9uOndpdGhDcmVkZW50aWFsczpdKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3NTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Db2NvYTo6c2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmRhdGFUYXNrRm9ySWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkRG93bmxv
YWRJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRv
d25sb2FkSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29h
Ojp0YWtlRG93bmxvYWRJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uQ29jb2E6OndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAg
ICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfbG9nVXNlckludGVyYWN0aW9uOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
UHJpdmF0ZS5oOgorCiAyMDE5LTExLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MTkwNy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRp
b25NYW5hZ2VyLmNwcAkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY4LDcgKzE2OCw3IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYK
ICAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVy
cy5zb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJl
clVSTCk7CiAgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0
aW9uUElEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAg
ICBsb2FkUGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9u
cyA9IG9wdGlvbnM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJp
Y3RIVFRQUmVzcG9uc2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2Nv
YS5tbQkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsOCAr
NzAsMTAgQEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZgogICAgIE5T
RGF0YSAqdXBkYXRlZERhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRo
UHJvcGVydHlMaXN0OmRpY3Rpb25hcnkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3Yx
XzAgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwogI2VuZGlmCiAKLSAgICBtX2Rvd25sb2FkVGFz
ayA9IGNvY29hU2Vzc2lvbi5kb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YSh1cGRhdGVkRGF0YSk7
Ci0gICAgY29jb2FTZXNzaW9uLmFkZERvd25sb2FkSUQobV9kb3dubG9hZFRhc2suZ2V0KCkudGFz
a0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CisgICAgbV9kb3dubG9hZFRhc2sgPSBbY29jb2FT
ZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGRvd25sb2FkVGFz
a1dpdGhSZXN1bWVEYXRhOnVwZGF0ZWREYXRhXTsKKyAgICBhdXRvIHRhc2tJZGVudGlmaWVyID0g
W21fZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXTsKKyAgICBBU1NFUlQoIWNvY29hU2Vzc2lv
bi5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZG93bmxvYWRNYXAuY29udGFpbnModGFz
a0lkZW50aWZpZXIpKTsKKyAgICBjb2NvYVNlc3Npb24ubV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlLmRvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgbV9kb3dubG9hZElEKTsKICAg
ICBtX2Rvd25sb2FkVGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmlsZSA9IHBhdGg7CiAK
ICAgICBbbV9kb3dubG9hZFRhc2sgcmVzdW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJKHJl
dmlzaW9uIDI1MjE2NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWQ7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNv
Y29hOworc3RydWN0IFNlc3Npb25XcmFwcGVyOwogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2Nv
YSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrRGF0YVRhc2sgewogICAgIGZyaWVuZCBjbGFzcyBOZXR3
b3JrU2Vzc2lvbkNvY29hOwpAQCAtODksNiArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNU
aGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsK
ICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCisgICAgU2Vzc2lv
bldyYXBwZXImIG1fc2Vzc2lvbldyYXBwZXI7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+
IG1fc2FuZGJveEV4dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+
IG1fdGFzazsKICAgICBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MgbV9uZXR3b3JrTG9hZE1l
dHJpY3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtE
YXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29t
cHV0ZUlzQWx3YXlzT25Mb2dnCiAKIE5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRh
c2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBj
bGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3VsZENv
bnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QsIFByZWNvbm5lY3RPbmx5IHNob3VsZFByZWNvbm5lY3RPbmx5LCBib29sIGRhdGFU
YXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uLCBib29sIGRhdGFUYXNrSXNGb3JNYWluUmVzb3Vy
Y2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUsIE9wdGlvbmFsPE5ldHdvcmtBY3Rpdml0eVRyYWNrZXI+
IG5ldHdvcmtBY3Rpdml0eVRyYWNrZXIpCiAgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgZGF0YVRhc2tJc0Zvck1h
aW5GcmFtZU5hdmlnYXRpb24pCisgICAgLCBtX3Nlc3Npb25XcmFwcGVyKHN0YXRpY19jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2EmPihzZXNzaW9uKS5zZXNzaW9uV3JhcHBlckZvclRhc2socmVxdWVz
dFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKQogICAgICwgbV9mcmFt
ZUlEKGZyYW1lSUQpCiAgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX2lzRm9yTWFpblJl
c291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKGRhdGFUYXNrSXNGb3JNYWluUmVzb3VyY2VOYXZp
Z2F0aW9uRm9yQW55RnJhbWUpCkBAIC0yMDYsMTQgKzIwNywxMSBAQCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQmxvY2tD
b29raWVzID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkc0lzb2xhdGVkU2Vzc2lvbiA9IGZhbHNlOwot
ICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3Qu
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9
PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29v
a2llbGVzczsKKyAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNz
OwogICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzZXNzaW9uLm5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpKSB7CiAgICAgICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKQogICAg
ICAgICAgICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91
bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4gbmVlZHNJc29sYXRlZFNlc3Npb24gc2hvdWxk
IGJlIHNldCBoZXJlLgogICAgIH0KICNlbmRpZgogICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVycmVy
VG9PcmlnaW5JZk5lZWRlZChyZXF1ZXN0KTsKQEAgLTIyMSwxNCArMjE5LDExIEBAIE5ldHdvcmtE
YXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2MKICAgICBOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCA9IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5
OjpVcGRhdGVIVFRQQm9keSk7CiAgICAgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVl
c3RUb0luZmVyZmFjZUlmTmVlZGVkKG5zUmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmID09IFdl
YkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeTo6U25pZmZDb250ZW50ICYmICF1cmwuaXNMb2Nh
bEZpbGUoKSwgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYgPT0gV2ViQ29yZTo6Q29udGVudEVu
Y29kaW5nU25pZmZpbmdQb2xpY3k6OlNuaWZmKTsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9
IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBpZiAo
bmVlZHNJc29sYXRlZFNlc3Npb24pCi0gICAgICAgIG1fdGFzayA9IFtjb2NvYVNlc3Npb24uaXNv
bGF0ZWRTZXNzaW9uKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBmaXJzdFBhcnR5KSBkYXRhVGFz
a1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgZWxzZQotICAgICAgICBtX3Rhc2sgPSBbY29j
b2FTZXNzaW9uLnNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIGRhdGFUYXNrV2l0aFJl
cXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uV3JhcHBlci5zZXNzaW9u
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKIAotICAgIExPRyhOZXR3b3JrU2Vzc2lv
biwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k9JXUgYW5kIFVSTD0lcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsK
LSAgICBjb2NvYVNlc3Npb24ucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNrIHRhc2tJZGVudGlmaWVy
XSwgKnRoaXMsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlm
aWVyXSkpOworICAgIG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuYWRkKFttX3Rhc2sgdGFz
a0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0
aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJd
LCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOwogCiAgICAgaWYgKHNo
b3VsZFByZWNvbm5lY3RPbmx5ID09IFByZWNvbm5lY3RPbmx5OjpZZXMpIHsKICNpZiBFTkFCTEUo
U0VSVkVSX1BSRUNPTk5FQ1QpCkBAIC0yNjYsOCArMjYxLDggQEAgTmV0d29ya0RhdGFUYXNrQ29j
b2E6On5OZXR3b3JrRGF0YVRhc2tDbwogICAgIGlmICghbV90YXNrIHx8ICFtX3Nlc3Npb24pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBjb2NvYVNlc3Npb24udW5yZWdp
c3RlckRhdGFUYXNrKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCAqdGhpcywgbV9zdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZXNzaW9uV3JhcHBlci5kYXRh
VGFza01hcC5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgIG1fc2Vz
c2lvbldyYXBwZXIuZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
IH0KIAogdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJU
b09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTM1
Nyw3ICszNTIsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjp3aWxsUGVyZm9ybUhUCiAK
ICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmICghbV9oYXNCZWVu
U2V0VG9Vc2VTdGF0ZWxlc3NDb29raWVTdG9yYWdlKSB7Ci0gICAgICAgIGlmIChtX3N0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzCisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxz
UG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0
ZWxlc3MKICAgICAgICAgICAgIHx8IChtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigp
ICYmIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNob3VsZEJsb2NrQ29va2ll
cyhyZXF1ZXN0LCBtX2ZyYW1lSUQsIG1fcGFnZUlEKSkpCiAgICAgICAgICAgICBibG9ja0Nvb2tp
ZXMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaAkocmV2aXNpb24gMjUyMTY1KQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIE9CSkNfQ0xBU1MgRE1GV2Vic2l0ZVBv
bGljeU1vbml0b3I7CiBPQkpDX0NMQVNTIE5TRGF0YTsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9u
OworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBOU1VS
TFNlc3Npb25Eb3dubG9hZFRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBPQkpD
X0NMQVNTIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKQEAgLTQ1LDE2ICs0NiwzMSBAQCBPQkpD
X0NMQVNTIFdLTmV0d29ya1Nlc3Npb25XZWJTb2NrZXREZWxlCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya1Nlc3Np
b25Db2NvYTsKKworc3RydWN0IFNlc3Npb25XcmFwcGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFNlc3Npb25XcmFwcGVyPiB7CisgICAgdm9pZCBpbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZp
Z3VyYXRpb24gKiwgTmV0d29ya1Nlc3Npb25Db2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5KTsKKworICAgIFdlYWtQdHI8TmV0d29ya1Nlc3Npb25Db2NvYT4gc2Vzc2lvbkNv
Y29hOworICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IHNlc3Npb247CisgICAgUmV0YWluUHRy
PFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gZGVsZWdhdGU7CisgICAgSGFzaE1hcDxOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gZGF0
YVRhc2tNYXA7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIsIERvd25sb2FkSUQ+IGRvd25sb2FkTWFwOworI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNP
Q0tFVCkKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwg
V2ViU29ja2V0VGFzayo+IHdlYlNvY2tldERhdGFUYXNrTWFwOworI2VuZGlmCit9OwogCiBjbGFz
cyBOZXR3b3JrU2Vzc2lvbkNvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKICAg
ICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2E7CisgICAgZnJpZW5kIGNsYXNzIERv
d25sb2FkOwogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Np
b24+IGNyZWF0ZShOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzJiYpOwogCiAgICAgTmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYsIE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIH5OZXR3b3JrU2Vzc2lvbkNvY29h
KCk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vz
c2lvbigpOworICAgIHZvaWQgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsK
IAogICAgIGNvbnN0IFN0cmluZyYgYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKCkgY29uc3Q7CiAg
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25z
dDsKQEAgLTYzLDIxICs3OSw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGRhdGFDb25u
ZWN0aW9uU2VydmljZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7IH0KICNlbmRpZgogCi0gICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFUYXNrRm9y
SWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHJlZ2lzdGVyRGF0YVRhc2soTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJE
YXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRh
VGFza0NvY29hJiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotCi0gICAgTlNV
UkxTZXNzaW9uRG93bmxvYWRUYXNrKiBkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YShOU0RhdGEq
KTsKLQotICAgIFdlYlNvY2tldFRhc2sqIHdlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihX
ZWJTb2NrZXRUYXNrOjpUYXNrSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGFkZERvd25sb2FkSUQo
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKLSAgICBE
b3dubG9hZElEIGRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
KTsKLSAgICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpU
YXNrSWRlbnRpZmllcik7Ci0KICAgICBzdGF0aWMgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CiAKLSAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktp
dDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYpPiYmKTsKKyAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShTZXNz
aW9uV3JhcHBlciYsIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSos
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYpOwogCiAgICAgYm9vbCBm
YXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFzdFNl
cnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQ7IH0KICAgICBib29sIGRldmljZU1hbmFnZW1lbnRS
ZXN0cmljdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VNYW5hZ2VtZW50UmVz
dHJpY3Rpb25zRW5hYmxlZDsgfQpAQCAtODYsOCArOTAsNiBAQCBwdWJsaWM6CiAKICAgICBDRkRp
Y3Rpb25hcnlSZWYgcHJveHlDb25maWd1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eUNv
bmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAotICAgIE5TVVJMU2Vzc2lvbiogc2Vzc2lvbihXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0gICAgTlNVUkxTZXNzaW9uKiBpc29sYXRlZFNl
c3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluKTsKICAgICBib29sIGhhc0lzb2xhdGVkU2Vzc2lvbihjb25zdCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhcklz
b2xhdGVkU2Vzc2lvbnMoKSBvdmVycmlkZTsKIApAQCAtOTYsNiArOTgsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOwogICAgIGJvb2wgc2hvdWxkTG9n
Q29va2llSW5mb3JtYXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nob3VsZExvZ0Nv
b2tpZUluZm9ybWF0aW9uOyB9CiAgICAgU2Vjb25kcyBsb2FkVGhyb3R0bGVMYXRlbmN5KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sb2FkVGhyb3R0bGVMYXRlbmN5OyB9CisgICAgU2Vzc2lv
bldyYXBwZXImIHNlc3Npb25XcmFwcGVyRm9yVGFzayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7CisgICAgU2Vzc2lvbldy
YXBwZXImIGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
Y29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pOwogCiAjaWYgSEFWRShOU1VSTFNFU1NJ
T05fV0VCU09DS0VUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRUYXNrPiBjcmVhdGVX
ZWJTb2NrZXRUYXNrKE5ldHdvcmtTb2NrZXRDaGFubmVsJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkgZmluYWw7CkBAIC0xMDMsMzIgKzEw
NywxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlV2ViU29ja2V0VGFzayhXZWJTb2NrZXRU
YXNrJikgZmluYWw7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBkYXRhVGFza01hcChXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0KLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFU
YXNrTWFwV2l0aENyZWRlbnRpYWxzOwotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRo
b3V0U3RhdGU7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3M7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50
aWZpZXIsIERvd25sb2FkSUQ+IG1fZG93bmxvYWRNYXA7Ci0jaWYgSEFWRShOU1VSTFNFU1NJT05f
V0VCU09DS0VUKQotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyLCBXZWJTb2NrZXRUYXNrKj4gbV93ZWJTb2NrZXREYXRhVGFza01hcDsKLSNlbmRpZgotCiAg
ICAgc3RydWN0IElzb2xhdGVkU2Vzc2lvbiB7Ci0gICAgICAgIFJldGFpblB0cjxOU1VSTFNlc3Np
b24+IHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAgICAgIFJldGFpblB0cjxXS05l
dHdvcmtTZXNzaW9uRGVsZWdhdGU+IHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0
ZTsKLSAgICAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gc3RhdGVsZXNzU2Vzc2lvbjsKLSAg
ICAgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc3RhdGVsZXNzU2Vzc2lv
bkRlbGVnYXRlOworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNlc3Npb25XcmFwcGVyIHNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7Cisg
ICAgICAgIFNlc3Npb25XcmFwcGVyIHNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAg
ICAgICAgIFdhbGxUaW1lIGxhc3RVc2VkOwogICAgIH07CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluLCBJc29sYXRlZFNlc3Npb24+IG1faXNvbGF0ZWRTZXNzaW9uczsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBzdGQ6OnVuaXF1ZV9wdHI8
SXNvbGF0ZWRTZXNzaW9uPj4gbV9pc29sYXRlZFNlc3Npb25zOwogCi0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0
cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc3RhdGVsZXNzU2Vzc2lv
bjsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3N0YXRlbGVzc1Nl
c3Npb25EZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX2VwaGVtZXJhbFN0
YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGU+IG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZTsK
KyAgICBTZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CisgICAg
U2Vzc2lvbldyYXBwZXIgbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIFNl
c3Npb25XcmFwcGVyIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKIAogICAgIFN0cmluZyBt
X2JvdW5kSW50ZXJmYWNlSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9zb3VyY2VBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShyZXZpc2lvbiAyNTIx
NjUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNSBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVVSTFJlc3BvbnNl
Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvT2JqQ1J1bnRpbWVFeHRyYXMuaD4KICNpbXBvcnQg
PHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNp
bXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogI2lmIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL05ldHdvcmtT
ZXNzaW9uQ29jb2FBZGRpdGlvbnMuaD4KQEAgLTM5NSwyNCArMzk2LDI0IEBAIEBpbnRlcmZhY2Ug
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlMKICAgICAsIE5TVVJMU2Vzc2lvbldlYlNvY2tl
dERlbGVnYXRlCiAjZW5kaWYKID4gewotICAgIFdlYWtQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hPiBfc2Vzc2lvbjsKKyAgICBXZWFrUHRyPFdlYktpdDo6U2Vzc2lvbldyYXBwZXI+IF9z
ZXNzaW9uV3JhcHBlcjsKICAgICBib29sIF93aXRoQ3JlZGVudGlhbHM7CiB9CiAKLS0gKGlkKWlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lv
biB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzOworLSAoaWQpaW5pdFdpdGhT
ZXNzaW9uV3JhcHBlcjooV2ViS2l0OjpTZXNzaW9uV3JhcHBlciYpc2Vzc2lvbldyYXBwZXIgd2l0
aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKIC0gKHZvaWQpc2Vzc2lvbkludmFs
aWRhdGVkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUKIAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hJilzZXNzaW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHMKKy0g
KGlkKWluaXRXaXRoU2Vzc2lvbldyYXBwZXI6KFdlYktpdDo6U2Vzc2lvbldyYXBwZXImKXNlc3Np
b25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHMKIHsKICAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbik7CisgICAgX3Nlc3Npb25XcmFw
cGVyID0gbWFrZVdlYWtQdHIoc2Vzc2lvbldyYXBwZXIpOwogICAgIF93aXRoQ3JlZGVudGlhbHMg
PSB3aXRoQ3JlZGVudGlhbHM7CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTQyMCwyNCArNDIxLDMw
IEBAIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmUKIAogLSAodm9pZClz
ZXNzaW9uSW52YWxpZGF0ZWQKIHsKLSAgICBfc2Vzc2lvbiA9IG51bGxwdHI7CisgICAgX3Nlc3Np
b25XcmFwcGVyID0gbnVsbHB0cjsKIH0KIAogLSAoTmV0d29ya0RhdGFUYXNrQ29jb2EqKWV4aXN0
aW5nVGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQor
ICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5ID0gX3dpdGhDcmVkZW50aWFscyA/IFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9O
b3RVc2U7Ci0gICAgcmV0dXJuIF9zZXNzaW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50
YXNrSWRlbnRpZmllciwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAgIHJldHVybiBfc2Vz
c2lvbldyYXBwZXItPmRhdGFUYXNrTWFwLmdldCh0YXNrLnRhc2tJZGVudGlmaWVyKTsKK30KKwor
LSAoTmV0d29ya1Nlc3Npb25Db2NvYSAqKXNlc3Npb25Db2NvYQoreworICAgIGlmICghX3Nlc3Np
b25XcmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gX3Nlc3Npb25X
cmFwcGVyLT5zZXNzaW9uQ29jb2EuZ2V0KCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2lvbiBkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOihOU0Vycm9yICop
ZXJyb3IKIHsKLSAgICBBU1NFUlQoIV9zZXNzaW9uKTsKKyAgICBBU1NFUlQoIV9zZXNzaW9uV3Jh
cHBlcik7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0
YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRTZW5kQm9keURhdGE6KGludDY0X3QpYnl0
ZXNTZW50IHRvdGFsQnl0ZXNTZW50OihpbnQ2NF90KXRvdGFsQnl0ZXNTZW50IHRvdGFsQnl0ZXNF
eHBlY3RlZFRvU2VuZDooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQKQEAgLTUyNywx
MiArNTM0LDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKIAog
ICAgICAgICBib29sIHNob3VsZElnbm9yZUhTVFMgPSBmYWxzZTsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2NoZW1lV2Fz
VXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIF9zZXNzaW9uLT5uZXR3b3JrUHJv
Y2VzcygpLnN0b3JhZ2VTZXNzaW9uKF9zZXNzaW9uLT5zZXNzaW9uSUQoKSktPnNob3VsZEJsb2Nr
Q29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0d29ya0RhdGFU
YXNrLT5wYWdlSUQoKSk7Ci0gICAgICAgIGlmIChzaG91bGRJZ25vcmVIU1RTKSB7Ci0gICAgICAg
ICAgICByZXF1ZXN0ID0gZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIEFT
U0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSk7Ci0gICAg
ICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRw
cyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVU
RjhTdHJpbmcpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHNlc3Npb25Db2NvYSA9IF9z
ZXNzaW9uV3JhcHBlciA/IF9zZXNzaW9uV3JhcHBlci0+c2Vzc2lvbkNvY29hLmdldCgpIDogbnVs
bHB0cikgeworICAgICAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVk
RHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBzZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9jZXNz
KCkuc3RvcmFnZVNlc3Npb24oc2Vzc2lvbkNvY29hLT5zZXNzaW9uSUQoKSktPnNob3VsZEJsb2Nr
Q29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0d29ya0RhdGFU
YXNrLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgeworICAg
ICAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0
dHAiXSk7CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3Jh
ZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5h
YnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogCiAgICAgICAgIG5l
dHdvcmtEYXRhVGFzay0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9uc2UsIHJlcXVl
c3QsIFtjb21wbGV0aW9uSGFuZGxlckNvcHksIHRhc2tJZGVudGlmaWVyLCBzaG91bGRJZ25vcmVI
U1RTXShhdXRvJiYgcmVxdWVzdCkgewpAQCAtNTYwLDEyICs1NzAsMTUgQEAgLSAodm9pZClVUkxT
ZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRh
c2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10pIHsKICAgICAgICAgYm9vbCBzaG91bGRJZ25v
cmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNU
UyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihf
c2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29y
a0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOwotICAgICAg
ICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFk
ZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3QuVVJMLnNjaGVt
ZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNz
aW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlm
aWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoYXV0byBzZXNzaW9uQ29jb2EgPSBfc2Vzc2lvbldyYXBwZXIgPyBfc2Vzc2lv
bldyYXBwZXItPnNlc3Npb25Db2NvYS5nZXQoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNo
b3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVz
dCkgJiYgc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLnN0b3JhZ2VTZXNzaW9uKHNlc3Np
b25Db2NvYS0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29y
a0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOworICAgICAg
ICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ID0g
ZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoW3JlcXVl
c3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOworICAgICAgICAgICAgICAg
IExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0
dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmlu
Zyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAjZW5kaWYKIAogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29w
eSA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtNTg4LDExICs2MDEsNiBAQCAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vz
c2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRh
c2sgKilkYXRhVGFzayB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXBy
b3Bvc2VkUmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQ2FjaGVkVVJMUmVz
cG9uc2UgKmNhY2hlZFJlc3BvbnNlKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nl
c3Npb24pIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIC8vIEZJWE1FOiByZW1vdmUgaWYgPHJkYXI6Ly9wcm9ibGVtLzIwMDAx
OTg1PiBpcyBldmVyIHJlc29sdmVkLgogICAgIGlmIChbcHJvcG9zZWRSZXNwb25zZS5yZXNwb25z
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGFsbEhlYWRlckZpZWxkcyldCiAgICAgICAg
ICYmIFtbKGlkKXByb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXSBvYmpl
Y3RGb3JLZXk6QCJDb250ZW50LVJhbmdlIl0pCkBAIC02MDIsOSArNjEwLDkgQEAgLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogfQogCiAjaWYgSEFWRShDRk5FVFdPUktf
TlNVUkxTRVNTSU9OX1NUUklDVFJVU1RFVkFMVUFURSkKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9j
ZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIE5T
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSog
bmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50
aWFsKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIFNlc3Npb25X
cmFwcGVyJiBzZXNzaW9uV3JhcHBlciwgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hh
bGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9u
LCBOU1VSTENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIHNlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIHRhc2tJ
ZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzZWNUcnVzdCA9IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlLnNlcnZlclRydXN0KV0gKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkgbXV0YWJsZSB7CisgICAgc2Vzc2lvbi0+Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdl
KHNlc3Npb25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRh
c2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzZWNU
cnVzdCA9IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KV0g
KFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwg
Y29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkgbXV0YWJsZSB7CiAgICAgICAg
IC8vIEZJWE1FOiBVSVByb2Nlc3Mgc2hvdWxkIHNlbmQgdXMgYmFjayBub24gbmlsIGNyZWRlbnRp
YWxzIGJ1dCB0aGUgY3JlZGVudGlhbCBJUEMgZW5jb2RlciBjdXJyZW50bHkgb25seSBzZXJpYWxp
emVzIG5zIGNyZWRlbnRpYWxzIGZvciB1c2VybmFtZS9wYXNzd29yZC4KICAgICAgICAgaWYgKGRp
c3Bvc2l0aW9uID09IFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
VXNlQ3JlZGVudGlhbCAmJiAhY3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSkgewogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRp
YWwsIFtOU1VSTENyZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OiBzZWNUcnVzdC5nZXQoKV0p
OwpAQCAtNjE3LDcgKzYyNSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2VydmVyVHJ1
c3RFdmEKIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6
KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIGRpZFJlY2VpdmVDaGFsbGVuZ2U6KE5TVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxD
cmVkZW50aWFsICpjcmVkZW50aWFsKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nl
c3Npb24gfHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNhbmNlbGluZykg
eworICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07CisgICAgaWYg
KCFzZXNzaW9uQ29jb2EgfHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNh
bmNlbGluZykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hh
bGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC02MzcsMTggKzY0NiwyMSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoTlNV
UkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENyZWRlbnRpYWwgY3Jl
ZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1c3RdKTsK
IAogICAgICAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0t
bGV2ZWwgaWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbmQgdG8gdXNlIEFU
UyBkZWZhdWx0cy4KLSAgICAgICAgaWYgKF9zZXNzaW9uLT5mYXN0U2VydmVyVHJ1c3RFdmFsdWF0
aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzZXNzaW9uQ29jb2EtPmZhc3RTZXJ2ZXJUcnVz
dEV2YWx1YXRpb25FbmFibGVkKCkpIHsKICNpZiBIQVZFKENGTkVUV09SS19OU1VSTFNFU1NJT05f
U1RSSUNUUlVTVEVWQUxVQVRFKQogICAgICAgICAgICAgYXV0byogbmV0d29ya0RhdGFUYXNrID0g
W3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdOwogICAgICAgICAgICAgQVNTRVJUKG5ldHdvcmtEYXRh
VGFzayk7Ci0gICAgICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihb
X3Nlc3Npb24gPSBtYWtlV2Vha1B0cihfc2Vzc2lvbi5nZXQoKSksIGNvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKSwgdGFza0lkZW50aWZpZXIsIG5ldHdv
cmtEYXRhVGFzayA9IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4obmV0d29ya0RhdGFUYXNr
KV0oTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hhbGxlbmdlLCBPU1N0YXR1cyB0cnVz
dFJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+KHNlbGYpLCBzZXNzaW9uQ29jb2EgPSBtYWtlV2Vha1B0cihzZXNzaW9uQ29jb2EpLCBjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlciksIHRhc2tJZGVu
dGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29jb2E+KG5l
dHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwg
T1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGF1dG8gc3Ry
b25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgICAgIGlmICghc3Ryb25nU2Vs
ZikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vz
c2lvbkF1dGhDaGFsbGVuZ2VDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgbmlsKTsKICAg
ICAgICAgICAgICAgICBhdXRvIHRhc2sgPSBXVEZNb3ZlKG5ldHdvcmtEYXRhVGFzayk7Ci0gICAg
ICAgICAgICAgICAgYXV0byogc2Vzc2lvbiA9IF9zZXNzaW9uLmdldCgpOworICAgICAgICAgICAg
ICAgIGF1dG8qIHNlc3Npb24gPSBzZXNzaW9uQ29jb2EuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKHRydXN0UmVzdWx0ID09IG5vRXJyIHx8ICFzZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VQZXJmb3JtRGVm
YXVsdEhhbmRsaW5nLCBuaWwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByb2Nlc3NTZXJ2ZXJUcnVzdEV2YWx1YXRpb24o
c2Vzc2lvbiwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIHByb2Nlc3NTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24oc2Vzc2lvbiwgKnN0cm9uZ1NlbGYtPl9zZXNzaW9uV3JhcHBlciwgY2hhbGxlbmdl
LCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBbTlNVUkxTZXNzaW9uIF9zdHJpY3RUcnVz
dEV2YWx1YXRlOmNoYWxsZW5nZSBxdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdLnVu
ZGVybHlpbmdRdWV1ZSBjb21wbGV0aW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjU3LDE0ICs2NjksMTUgQEAgLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Ci0gICAg
X3Nlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIHRhc2tJZGVu
dGlmaWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwm
IGNyZWRlbnRpYWwpIG11dGFibGUgeworICAgIHNlc3Npb25Db2NvYS0+Y29udGludWVEaWRSZWNl
aXZlQ2hhbGxlbmdlKCpfc2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIs
IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXSwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRvTlNVUkxTZXNzaW9u
QXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSwgY3JlZGVudGlhbC5uc0NyZWRl
bnRpYWwoKSk7CiAgICAgfSk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBz
ZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29h
KQogICAgICAgICByZXR1cm47CiAKICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IGRpZENv
bXBsZXRlV2l0aEVycm9yICVAIiwgdGFzay50YXNrSWRlbnRpZmllciwgZXJyb3IpOwpAQCAtNjc5
LDkgKzY5Miw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICAg
ICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdKQog
ICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yLCBuZXR3
b3JrRGF0YVRhc2stPm5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICBlbHNlIGlmIChlcnJvcikg
ewotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25sb2FkSUQodGFz
ay50YXNrSWRlbnRpZmllcik7CisgICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uV3Jh
cHBlci0+ZG93bmxvYWRNYXAudGFrZSh0YXNrLnRhc2tJZGVudGlmaWVyKTsKICAgICAgICAgaWYg
KGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZG93bmxv
YWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9h
ZChkb3dubG9hZElEKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gc2Vzc2lv
bkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25s
b2FkSUQpKSB7CiAgICAgICAgICAgICAgICAgTlNEYXRhICpyZXN1bWVEYXRhID0gbmlsOwogICAg
ICAgICAgICAgICAgIGlmIChpZCB1c2VySW5mbyA9IGVycm9yLnVzZXJJbmZvKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChbdXNlckluZm8gaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNs
YXNzXV0pIHsKQEAgLTgzNiw2MCArODQ5LDY1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxT
ZXNzaW9uICopc2Vzc2kKIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNr
IGRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6KE5TVVJMICopbG9jYXRpb24KIHsKLSAgICBpZiAo
IV9zZXNzaW9uKQorICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07
CisgICAgaWYgKCFzZXNzaW9uQ29jb2EpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZG93
bmxvYWRJRCA9IF9zZXNzaW9uLT50YWtlRG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVu
dGlmaWVyXSk7Ci0gICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9j
ZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpCisgICAgYXV0byBk
b3dubG9hZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC50YWtlKFtkb3dubG9hZFRh
c2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICBpZiAoYXV0byogZG93bmxvYWQgPSBzZXNzaW9uQ29j
b2EtPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJ
RCkpCiAgICAgICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KIAogLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFdyaXRlRGF0YTooaW50NjRfdClieXRlc1dyaXR0
ZW4gdG90YWxCeXRlc1dyaXR0ZW46KGludDY0X3QpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRl
c0V4cGVjdGVkVG9Xcml0ZTooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlCiB7Ci0g
ICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9u
Q29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFbc2VsZiBleGlzdGluZ1Rhc2s6ZG93bmxvYWRUYXNrXSwgIlRo
ZSBOZXR3b3JrRGF0YVRhc2sgc2hvdWxkIGJlIGRlc3Ryb3llZCBpbW1lZGlhdGVseSBhZnRlciBk
aWRCZWNvbWVEb3dubG9hZFRhc2sgcmV0dXJucyIpOwogCi0gICAgYXV0byBkb3dubG9hZElEID0g
X3Nlc3Npb24tPmRvd25sb2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAg
IGlmIChhdXRvKiBkb3dubG9hZCA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2Fk
TWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQorICAgIGF1dG8gZG93bmxvYWRJRCA9IF9z
ZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuZ2V0KFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZp
ZXJdKTsKKyAgICBpZiAoYXV0byogZG93bmxvYWQgPSBzZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9j
ZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpCiAgICAgICAgIGRv
d25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4pOwogfQogCiAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25E
b3dubG9hZFRhc2sgKilkb3dubG9hZFRhc2sgZGlkUmVzdW1lQXRPZmZzZXQ6KGludDY0X3QpZmls
ZU9mZnNldCBleHBlY3RlZFRvdGFsQnl0ZXM6KGludDY0X3QpZXhwZWN0ZWRUb3RhbEJ5dGVzCiB7
Ci0gICAgaWYgKCFfc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRh
dGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNrIGRpZEJlY29tZURvd25sb2Fk
VGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNrCiB7Ci0gICAgaWYg
KGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza10pIHsK
LSAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRh
c2soKm5ldHdvcmtEYXRhVGFzayk7Ci0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtE
YXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKLSAgICAgICAgYXV0byYgZG93bmxvYWRNYW5h
Z2VyID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7Ci0gICAg
ICAgIGF1dG8gZG93bmxvYWQgPSBtYWtlVW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2Fk
TWFuYWdlciwgZG93bmxvYWRJRCwgZG93bmxvYWRUYXNrLCAqX3Nlc3Npb24sIG5ldHdvcmtEYXRh
VGFzay0+c3VnZ2VzdGVkRmlsZW5hbWUoKSk7Ci0gICAgICAgIG5ldHdvcmtEYXRhVGFzay0+dHJh
bnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCgqZG93bmxvYWQpOwotICAgICAgICBBU1NF
UlQoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9h
ZExvY2F0aW9uKCkpKTsKLSAgICAgICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKG5l
dHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSk7Ci0gICAgICAgIGRvd25s
b2FkTWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3Zl
KGRvd25sb2FkKSk7CisgICAgYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdU
YXNrOmRhdGFUYXNrXTsKKyAgICBpZiAoIW5ldHdvcmtEYXRhVGFzaykKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8qIHNlc3Npb25Db2NvYSA9IFtzZWxmIHNlc3Npb25Db2NvYV07CisgICAgaWYg
KCFzZXNzaW9uQ29jb2EpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBfc2Vzc2lvbi0+YWRk
RG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSwgZG93bmxvYWRJRCk7Ci0g
ICAgfQorICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0d29ya0RhdGFU
YXNrKCpuZXR3b3JrRGF0YVRhc2spOworICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRh
VGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKKyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBz
ZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0
byBkb3dubG9hZCA9IG1ha2VVbmlxdWU8V2ViS2l0OjpEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2Vy
LCBkb3dubG9hZElELCBkb3dubG9hZFRhc2ssICpbc2VsZiBzZXNzaW9uQ29jb2FdLCBuZXR3b3Jr
RGF0YVRhc2stPnN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIG5ldHdvcmtEYXRhVGFzay0+dHJh
bnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCgqZG93bmxvYWQpOworICAgIEFTU0VSVChG
aWxlU3lzdGVtOjpmaWxlRXhpc3RzKG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24oKSkpOworICAgIGRvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0
YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpOworICAgIGRvd25sb2FkTWFuYWdlci5k
YXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7
CisKKyAgICBBU1NFUlQoIV9zZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuY29udGFpbnMoZG93
bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVyKSk7CisgICAgX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9h
ZE1hcC5hZGQoZG93bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVyLCBkb3dubG9hZElEKTsKIH0KIAog
I2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKIC0gKFdlYlNvY2tldFRhc2sqKWV4aXN0
aW5nV2ViU29ja2V0VGFzazooTlNVUkxTZXNzaW9uV2ViU29ja2V0VGFzayAqKXRhc2sKIHsKLSAg
ICBpZiAoIV9zZXNzaW9uKQorICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gX3Nlc3Npb24tPndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNr
LnRhc2tJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gX3Nlc3Npb25XcmFwcGVyLT53ZWJTb2NrZXRE
YXRhVGFza01hcC5nZXQodGFzay50YXNrSWRlbnRpZmllcik7CiB9CiAKIApAQCAtOTcyLDYgKzk5
MCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwcm94eURpY3Rpb25hcnkoY29uCiAgICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKK3ZvaWQgU2Vzc2lvbldyYXBwZXI6
OmluaXRpYWxpemUoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiwgTmV0
d29ya1Nlc3Npb25Db2NvYSYgY29jb2FTZXNzaW9uLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKK3sKKyAgICB0aGlzLT5zZXNzaW9uQ29j
b2EgPSBtYWtlV2Vha1B0cihjb2NvYVNlc3Npb24pOworICAgIHRoaXMtPmRlbGVnYXRlID0gYWRv
cHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTZXNzaW9uV3Jh
cHBlcjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZV0pOworICAgIHRoaXMtPnNlc3Npb24g
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFp
blF1ZXVlXV07Cit9CisKIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2Eo
TmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2Vz
cywgcGFyYW1ldGVycykKICAgICAsIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKHBhcmFtZXRl
cnMuYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKQpAQCAtMTA2Myw4ICsxMDg4LDcgQEAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQogICAgICAgICBjb29raWVTdG9yYWdl
Ll9vdmVycmlkZVNlc3Npb25Db29raWVBY2NlcHRQb2xpY3kgPSBZRVM7CiAjZW5kaWYKIAotICAg
IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3
aXRoQ3JlZGVudGlhbHM6dHJ1ZV0pOwotICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24g
ZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1d
OworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKGNvbmZpZ3Vy
YXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKTsKICAg
ICBMT0coTmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2ll
QWNjZXB0UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2ll
QWNjZXB0UG9saWN5KTsKIAogICAgIGNvbmZpZ3VyYXRpb24uVVJMQ3JlZGVudGlhbFN0b3JhZ2Ug
PSBuaWw7CkBAIC0xMDczLDggKzEwOTcsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3Jr
U2Vzc2lvbkNvY29hCiAgICAgLy8gY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IG5p
bDsKICAgICAvLyBjb25maWd1cmF0aW9uLkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lOZXZlcjsKIAotICAgIG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRl
ID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3
b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6ZmFsc2VdKTsKLSAgICBtX3N0YXRlbGVz
c1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0
ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAg
ICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShjb25maWd1cmF0
aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKTsK
IAogICAgIG1fZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQgPSBwYXJhbWV0ZXJz
LmRldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkOwogICAgIG1fYWxsTG9hZHNCbG9j
a2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMu
YWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZzsK
QEAgLTEwOTcsMTAgKzExMjAsMTAgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNz
aW9uQ29jbwogewogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCkKIHsKICAgICBOU1VSTFNl
c3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW05TVVJMU2Vzc2lvbkNvbmZpZ3Vy
YXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNvbmZpZ3VyYXRpb25dOwotICAgIE5TVVJMU2Vzc2lvbkNv
bmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IG1fc3RhdGVsZXNzU2Vzc2lvbi5n
ZXQoKS5jb25maWd1cmF0aW9uOworICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0
aW5nQ29uZmlndXJhdGlvbiA9IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNz
aW9uLmdldCgpLmNvbmZpZ3VyYXRpb247CiAKICAgICBjb25maWd1cmF0aW9uLkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsKICAgICBjb25maWd1
cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTExNSw0NCArMTEzOCw0OCBA
QCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlCiAgICAgY29uZmlndXJh
dGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlID0gZXhpc3RpbmdDb25maWd1cmF0aW9u
Ll9DVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7CiAjZW5kaWYKIAotICAgIG1fZXBoZW1lcmFs
U3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENy
ZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vz
c2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBt
YWluUXVldWVdXTsKKyAgICBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uaW5pdGlhbGl6ZShj
b25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVw
aGVtZXJhbFN0YXRlbGVzcyk7CiB9CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2Nv
YTo6c2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSkKK1Nlc3Npb25XcmFwcGVyJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9u
V3JhcHBlckZvclRhc2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkK
IHsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8g
Zmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7CisgICAgICAgIGlmIChzdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tU
aGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KSkK
KyAgICAgICAgICAgIHJldHVybiBpc29sYXRlZFNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIGZpcnN0UGFydHkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgorCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0
dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZToKLSAgICAgICAgcmV0dXJuIG1fc3RhdGVsZXNz
U2Vzc2lvbi5nZXQoKTsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOgotICAgICAgICBpZiAoIW1fZXBoZW1lcmFs
U3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24pCi0gICAgICAgICAgICBpbml0aWFsaXplRXBoZW1l
cmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1fZXBoZW1l
cmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzOgorICAgICAgICBpZiAoIW1fZXBo
ZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVw
aGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3Rh
dGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25D
b2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBm
aXJzdFBhcnR5RG9tYWluKQorU2Vzc2lvbldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlz
b2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0
eURvbWFpbikKIHsKLSAgICBhdXRvIGVudHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShm
aXJzdFBhcnR5RG9tYWluLCBbdGhpc10gewotICAgICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50
cnkgeyB9OwotICAgICAgICBuZXdFbnRyeS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVs
ZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5l
d0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Np
b25XaXRoQ29uZmlndXJhdGlvbjptX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCku
Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJh
dGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCi0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Np
b25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAg
ICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRo
Q29uZmlndXJhdGlvbjptX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxl
Z2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdl
dCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAg
YXV0byYgZW50cnkgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4s
IFt0aGlzXSB7CisgICAgICAgIGF1dG8gbmV3RW50cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vz
c2lvbj4oKTsKKyAgICAgICAgbmV3RW50cnktPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
aW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5j
b25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVz
ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUobV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCku
Y29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpE
b05vdFVzZSk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiAKLSAgICBlbnRyeS5sYXN0VXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+
bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25z
LnNpemUoKSA+IG1heE51bWJlck9mSXNvbGF0ZWRTZXNzaW9ucykgewogICAgICAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBrZXlUb1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1l
c3RhbXAgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9pc29s
YXRlZFNlc3Npb25zLmtleXMoKSkgewotICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lz
b2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSkubGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVz
dGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9ucy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAg
ICBpZiAodGltZXN0YW1wIDwgb2xkZXN0VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xk
ZXN0VGltZXN0YW1wID0gdGltZXN0YW1wOwogICAgICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0g
a2V5OwpAQCAtMTE2NywxNCArMTE5NCwxNCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9u
Q29jb2E6Omlzb2xhCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9H
KE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcgaXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVu
dGlhbCBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlOwogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OkRvTm90VXNlOgogICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBO
U1VSTFNlc3Npb24gd2l0aG91dCBjcmVkZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVy
biBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9uLmdldCgpOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAgICAg
IGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbikKLSAgICAgICAgICAg
IGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpOwotICAgICAg
ICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbi5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVz
czoKKyAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbikKKyAg
ICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CisgICAgICAg
IHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb247CiAgICAgfQogfQogCkBAIC0xMTky
LDE2ICsxMjE5LDE4IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZEMK
IHsKICAgICBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogCi0gICAgW21f
c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKLSAgICBb
bV9zdGF0ZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX2VwaGVtZXJh
bFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFtt
X3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRd
OwotICAgIFttX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwot
ICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUgc2Vzc2lv
bkludmFsaWRhdGVkXTsKKyAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLnNlc3Np
b24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFs
U3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgIFttX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBbbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Cisg
ICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52
YWxpZGF0ZWRdOworICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uZGVsZWdhdGUgc2Vz
c2lvbkludmFsaWRhdGVkXTsKIAogICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1faXNvbGF0ZWRT
ZXNzaW9ucy52YWx1ZXMoKSkgewotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAg
ICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlk
YXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2Vs
XTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuZGVs
ZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKICAgICB9CiAgICAgbV9pc29sYXRlZFNlc3Npb25z
LmNsZWFyKCk7CiB9CkBAIC0xMjIwLDY4ICsxMjQ5LDYgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjpjbGVhckNyZWRlbnRpYQogI2VuZGlmCiB9CiAKLUhhc2hNYXA8TmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpkYXRhVGFza01hcChXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIHsKLSAgICBjYXNlIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNz
OgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxl
c3M7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6
Ci0gICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aG91dFN0YXRlOwotICAgIGNhc2UgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJuIG1fZGF0
YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwotfQotCi1OZXR3b3Jr
RGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVy
KE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gZGF0YVRhc2tNYXAo
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQg
TmV0d29ya1Nlc3Npb25Db2NvYTo6cmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBk
YXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXAuY29udGFpbnModGFza0lkZW50aWZp
ZXIpKTsKLSAgICBtYXAuYWRkKHRhc2tJZGVudGlmaWVyLCAmZGF0YVRhc2spOwotfQotCi12b2lk
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnVucmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29h
JiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1hcC5nZXQodGFza0lkZW50aWZpZXIp
ID09ICZkYXRhVGFzayk7Ci0gICAgbWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLU5T
VVJMU2Vzc2lvbkRvd25sb2FkVGFzayogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNr
V2l0aFJlc3VtZURhdGEoTlNEYXRhKiByZXN1bWVEYXRhKQotewotICAgIHJldHVybiBbbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhOnJlc3Vt
ZURhdGFdOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9h
ZElEIGRvd25sb2FkSUQpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9kb3dubG9h
ZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikpOwotICAgIGZvciAoYXV0byBpZEluTWFwIDog
bV9kb3dubG9hZE1hcC52YWx1ZXMoKSkKLSAgICAgICAgQVNTRVJUKGlkSW5NYXAgIT0gZG93bmxv
YWRJRCk7Ci0jZW5kaWYKLSAgICBtX2Rvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93
bmxvYWRJRCk7Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJ
RChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCi17
Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKS5kb3dubG9hZElE
KCkpOwotICAgIHJldHVybiBtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0K
LURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0d29ya0Rh
dGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQotewotICAgIGF1dG8g
ZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFrZSh0YXNrSWRlbnRpZmllcik7Ci0gICAgcmV0
dXJuIGRvd25sb2FkSUQ7Ci19Ci0KIHN0YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1Ry
dXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogewogICAgIGlmICghdHJ1c3QxIHx8
ICF0cnVzdDIpCkBAIC0xMzIyLDE4ICsxMjg5LDE3IEBAIGJvb2wgTmV0d29ya1Nlc3Npb25Db2Nv
YTo6YWxsb3dzU3BlY2lmaWMKICAgICByZXR1cm4gY2VydGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0
KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkucHJvdGVjdGlvblNw
YWNlLnNlcnZlclRydXN0KTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51
ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJ
ZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoU2Vzc2lv
bldyYXBwZXImIHNlc3Npb25XcmFwcGVyLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2spIHsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9X
RUJTT0NLRVQpCi0gICAgICAgIGlmIChhdXRvKiB3ZWJTb2NrZXRUYXNrID0gd2ViU29ja2V0RGF0
YVRhc2tGb3JJZGVudGlmaWVyKHRhc2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0byog
d2ViU29ja2V0VGFzayA9IHNlc3Npb25XcmFwcGVyLndlYlNvY2tldERhdGFUYXNrTWFwLmdldCh0
YXNrSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgY2hhbGxlbmdl
cyBmb3Igd2ViIHNvY2tldC4KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIHsgfSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotCi0gICAgICAgIGF1dG8g
ZG93bmxvYWRJRCA9IHRoaXMtPmRvd25sb2FkSUQodGFza0lkZW50aWZpZXIpOworICAgICAgICBh
dXRvIGRvd25sb2FkSUQgPSBzZXNzaW9uV3JhcHBlci5kb3dubG9hZE1hcC5nZXQodGFza0lkZW50
aWZpZXIpOwogICAgICAgICBpZiAoZG93bmxvYWRJRC5kb3dubG9hZElEKCkpIHsKICAgICAgICAg
ICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IG5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSB7IGNoYWxsZW5nZSB9
OwpAQCAtMTM5NSwyNiArMTM2MSwyMiBAQCBETUZXZWJzaXRlUG9saWN5TW9uaXRvciAqTmV0d29y
a1Nlc3Npb25DCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0VGFzaz4gTmV0d29ya1Nlc3Npb25D
b2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKQogewogICAgIC8vIEZJWE1FOiBVc2UgcHJvdG9jb2wuCi0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbldlYlNvY2tldFRhc2s+IHRhc2sgPSBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlLmdldCgpIHdlYlNvY2tldFRhc2tXaXRoUmVxdWVzdDogcmVxdWVzdC5uc1VSTFJlcXVl
c3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsK
KyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uV2ViU29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiB3ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6
cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90
VXBkYXRlSFRUUEJvZHkpXTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJTb2NrZXRUYXNrPihj
aGFubmVsLCBXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjph
ZGRXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smIHRhc2spCiB7Ci0gICAgQVNTRVJUKCFtX3dl
YlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRpZmllcigpKSk7Ci0gICAgbV93
ZWJTb2NrZXREYXRhVGFza01hcC5hZGQodGFzay5pZGVudGlmaWVyKCksICZ0YXNrKTsKKyAgICBB
U1NFUlQoIW1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01h
cC5jb250YWlucyh0YXNrLmlkZW50aWZpZXIoKSkpOworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5hZGQodGFzay5pZGVudGlmaWVyKCksICZ0
YXNrKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRUYXNr
KFdlYlNvY2tldFRhc2smIHRhc2spCiB7Ci0gICAgQVNTRVJUKG1fd2ViU29ja2V0RGF0YVRhc2tN
YXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsKLSAgICBtX3dlYlNvY2tldERhdGFUYXNr
TWFwLnJlbW92ZSh0YXNrLmlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50
aWZpZXIoKSkpOworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXRE
YXRhVGFza01hcC5yZW1vdmUodGFzay5pZGVudGlmaWVyKCkpOwogfQogCi1XZWJTb2NrZXRUYXNr
KiBOZXR3b3JrU2Vzc2lvbkNvY29hOjp3ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIoV2Vi
U29ja2V0VGFzazo6VGFza0lkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gbV93
ZWJTb2NrZXREYXRhVGFza01hcC5nZXQoaWRlbnRpZmllcik7Ci19CisjZW5kaWYgLy8gSEFWRShO
U1VSTFNFU1NJT05fV0VCU09DS0VUKQogCi0jZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNTIxNjUpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtODc5LDcgKzg3OSw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6U3QKICAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksCiAgICAgICAg
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSwKICAgICAgICAgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSwKLSAgICAgICAgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3MKKyAgICAg
ICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzcwog
ICAgID47CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsMTcgQEAgLSAodm9pZClfc2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZToodgogI2VuZGlmCiB9CiAKKy0gKHZvaWQpX2xvZ1VzZXJJbnRlcmFjdGlv
bjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAg
ICBfd2Vic2l0ZURhdGFTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbiwgW2NvbXBsZXRp
b25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworI2Vsc2UKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworI2VuZGlmCit9CisKIC0gKHZvaWQpX3NldFByZXZhbGVudERvbWFpbjooTlNVUkwgKilk
b21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
CiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjUyMTY1KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vi
c2l0CiAtIChib29sKV9oYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKIAogLSAodm9pZClfc2NoZWR1bGVDb29raWVCbG9j
a2luZ1VwZGF0ZToodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX2xvZ1Vz
ZXJJbnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9zZXRQcmV2YWxlbnREb21haW46KE5TVVJM
ICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogLSAodm9pZClfZ2V0SXNQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfY2xlYXJQ
cmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTY1KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTEtMDYgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNV
UkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tOgorICAgICAgICAoLVtEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29s
bGlzaW9uRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VzOl0pOgorICAgICAgICAoLVtEYXRhVGFza0lk
ZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE5
LTExLTA2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIFtXaW5dIER1bXBSZW5kZXJUcmVlLmV4ZSBhbmQgV2ViS2l0VGVzdFJ1bm5lci5leGUgc2hv
dWxkbid0IGxpbmsgd2l0aCBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDI1MjE2NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCiAjaW1wb3J0ICJUZXN0TmF2
aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tGb3VuZGF0aW9uLmg+CkBAIC00NzQsNiArNDc1LDEwNSBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lRmxhZyk7CiB9CiAKK0BpbnRlcmZhY2UgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9u
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0ZT4K
Ky0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCljb3VudDsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIERhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVn
YXRlIHsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4+IF9tZXNzYWdl
czsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZy
YW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lk
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfbWVzc2FnZXMgYWRkT2JqZWN0Om1lc3NhZ2Vd
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4g
Kil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCltZXNzYWdlQ291bnQKK3sKKyAgICBfbWVzc2FnZXMg
PSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTptZXNzYWdlQ291bnRd
KTsKKyAgICB3aGlsZSAoW19tZXNzYWdlcyBjb3VudF0gPCBtZXNzYWdlQ291bnQpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdl
cy5hdXRvcmVsZWFzZSgpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNl
c3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlh
bCAqIGNyZWRlbnRpYWwpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENyZWRlbnRp
YWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1
c3RdKTsKK30KKworQGVuZAorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIERhdGFUYXNr
SWRlbnRpZmllckNvbGxpc2lvbikKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
STsKKworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBzZXJ2ZXJzQ29ubmVjdGVkIHsgMCB9Owor
ICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9ICJIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5n
dGg6IDI3XHJcblxyXG4iOworCisgICAgVENQU2VydmVyIGh0dHBzU2VydmVyKFRDUFNlcnZlcjo6
UHJvdG9jb2w6OkhUVFBTUHJveHksIFsmXSAoU1NMKiBzc2wpIHsKKyAgICAgICAgc2VydmVyc0Nv
bm5lY3RlZCsrOworICAgICAgICB3aGlsZSAoc2VydmVyc0Nvbm5lY3RlZCA8IDIpCisgICAgICAg
ICAgICB1c2xlZXAoMTAwMDAwKTsKKyAgICAgICAgVENQU2VydmVyOjpyZWFkKHNzbCk7CisgICAg
ICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBoZWFkZXIsIHN0cmxlbihoZWFkZXIpKTsKKyAgICAg
ICAgY29uc3QgY2hhciogYm9keSA9ICI8c2NyaXB0PmFsZXJ0KCcxJyk8L3NjcmlwdD4iOworICAg
ICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNzbCwgYm9keSwgc3RybGVuKGJvZHkpKTsKKyAgICB9KTsK
KworICAgIFRDUFNlcnZlciBodHRwU2VydmVyKFsmXSAoaW50IHNvY2tldCkgeworICAgICAgICBz
ZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2ZXJzQ29ubmVjdGVkIDwgMikK
KyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBUQ1BTZXJ2ZXI6OnJlYWQoc29j
a2V0KTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2NrZXQsIGhlYWRlciwgc3RybGVuKGhl
YWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+YWxlcnQoJzInKTwv
c2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBib2R5LCBzdHJsZW4o
Ym9keSkpOworICAgIH0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KnN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgc3RvcmVDb25maWd1cmF0aW9uLmh0dHBzUHJveHkgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8v
MTI3LjAuMC4xOiVkLyIsIGh0dHBzU2VydmVyLnBvcnQoKV1dOworICAgIFdLV2Vic2l0ZURhdGFT
dG9yZSAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOnN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8g
dmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10p
OworICAgIFt2aWV3Q29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3JlOmRhdGFTdG9yZV07
CisKKyAgICBhdXRvIHdlYlZpZXcxID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJhdGlvbjp2aWV3
Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MgYW5kIGluaXRpYWxpemUgZGF0YSBzdG9y
ZSJdOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtEYXRhVGFza0lkZW50aWZpZXJDb2xs
aXNpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkg
Y29uZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzEgc2V0TmF2aWdhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQ6WUVTXTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlOllFU107CisKKyAgICBfX2Jsb2NrIGJvb2wgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0g
ZmFsc2U7CisgICAgX19ibG9jayBOU1VSTCAqcHJldmFsZW50RXhhbXBsZSA9IFtOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhhbXBsZS5jb20vIl07CisgICAgW2RhdGFT
dG9yZSBfbG9nVXNlckludGVyYWN0aW9uOnByZXZhbGVudEV4YW1wbGUgY29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UHJldmFsZW50RG9tYWluOnByZXZhbGVudEV4
YW1wbGUgY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAgICAgW2RhdGFTdG9y
ZSBfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZTpeeworICAgICAgICAgICAgICAgIGlzb2xh
dGVkU2Vzc2lvbkRvbWFpbiA9IHRydWU7CisgICAgICAgICAgICB9XTsKKyAgICAgICAgfV07Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc29sYXRlZFNlc3Npb25Eb21h
aW4pOworCisgICAgW3dlYlZpZXcxIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJo
dHRwOi8vMTI3LjAuMC4xOiVkLyIsIGh0dHBTZXJ2ZXIucG9ydCgpXV1dXTsKKyAgICBbd2ViVmll
dzIgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vcHJldmFsZW50LWV4YW1wbGUuY29tLyJdXV07CisKKyAgICBOU0Fy
cmF5PE5TU3RyaW5nICo+ICptZXNzYWdlcyA9IFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZXM6Ml07
CisgICAgYXV0byBjb250YWlucyA9IFtdIChOU0FycmF5PE5TU3RyaW5nICo+ICphcnJheSwgTlNT
dHJpbmcgKmV4cGVjdGVkKSB7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKnMgaW4gYXJyYXkpIHsK
KyAgICAgICAgICAgIGlmIChbcyBpc0VxdWFsVG9TdHJpbmc6ZXhwZWN0ZWRdKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1lc3NhZ2VzLCBAIjEiKSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udGFpbnMobWVzc2FnZXMsIEAiMiIpKTsKK30KKwogVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBOb01lc3NhZ2VzV2hlbk5vdFRlc3RpbmcpCiB7CiAgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTExLTA2ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxlIE5TVVJM
U2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBSZS1lbmFibGUgc2tp
cHBlZCB0ZXN0cy4KKwogMjAxOS0xMS0wNiAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IHIyNTIxMjEgaW50cm9kdWNlZCBuZXcgd2ViZ2wv
IGZhaWx1cmVzCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9u
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMjUyMTY1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBl
Y3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc0NiwxMCArNzQ2LDYgQEAgaHR0cC90ZXN0cy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2RvLW5vdAogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2VzLWNhbi1hY2Nlc3MtY29va2llcy1pbi1hLXRo
aXJkLXBhcnR5LWNvbnRleHQuaHRtbCBbIFNraXAgXQogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL2NhcC1jYWNoZS1tYXgtYWdlLWZvci1wcmV2YWxlbnQtcmVzb3VyY2UuaHRtbCBb
IFNraXAgXQogCi0jIHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0Ci1odHRwL3Rlc3RzL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24tbmF2aWdhdGlvbi10by1wcmV2YWxlbnQt
d2l0aC1pbnRlcmFjdGlvbi5waHAgWyBTa2lwIF0KLWh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZhbGVudC13aXRoLWlu
dGVyYWN0aW9uLWRhdGFiYXNlLnBocCBbIFNraXAgXQotCiAjIFRoaXMgZmVhdHVyZSBpcyBjdXJy
ZW50bHkgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgdW5maW5pc2hlZCA8cmRhcjovL3Byb2JsZW0v
Mzg5MjUwNzc+LgogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Byb2Nlc3Mtc3dhcC13aW5kb3ctb3Bl
bi5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383043</attachid>
            <date>2019-11-07 06:29:30 -0800</date>
            <delta_ts>2019-11-07 07:34:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107142929.patch</filename>
            <type>text/plain</type>
            <size>64395</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwog
MjAxOS0xMS0wNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wbGVtZW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6cm9sZURlc2NyaXB0aW9uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGlj
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgOiB1aW50OF90IHsKICAgICBEb05vdFVzZSwKICAgICBVc2UsCi0g
ICAgRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcworICAgIEVwaGVtZXJhbFN0YXRlbGVzcwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjcgQEAKKzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciBy
MjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIyNTIxMTYgd2FzIGEgcm9sbG91dCBv
ZiByMjQ4NjQwLCB3aGljaCBpbnRyb2R1Y2VkIGNhc2VzIHdoZXJlIGRhdGEgdGFza3MgZnJvbSBk
aWZmZXJlbnQgTlNVUkxTZXNzaW9ucworICAgICAgICB3aGljaCBjYW4gaGF2ZSB0aGUgc2FtZSB0
YXNrIGlkZW50aWZpZXJzIHdlcmUgcHV0IGludG8gdGhlIHNhbWUgbWFwcy4gIFRoaXMga2V5IGNv
bGxpc2lvbiBjYXVzZWQgZGF0YSBmcm9tIHRoZSB3cm9uZworICAgICAgICB0YXNrcyB0byBiZSBz
ZW50IHRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlciwgY2F1c2luZyByYXJlIGFuZCBzdHJhbmdlIGxv
YWRpbmcgYnVncy4gIEluIG9yZGVyIHRvIHByZXZlbnQgaW5zZXJ0aW9uIGludG8KKyAgICAgICAg
d3JvbmcgbWFwcyBhZ2FpbiwgSSBtYWRlIGEgbmV3IGFic3RyYWN0aW9uLCBTZXNzaW9uV3JhcHBl
ciwgd2hpY2ggd3JhcHMgYSBOU1VSTFNlc3Npb24sIGl0cyBkZWxlZ2F0ZSwgYW5kIGFsbCBtYXBz
CisgICAgICAgIHRoYXQgYXJlIHNjb3BlZCB0byB0aGF0IE5TVVJMU2Vzc2lvbi4gIEFsb25nIHRo
ZSB3YXkgSSBmb3VuZCBhIGZldyBvdGhlciBwbGFjZXMgd2hlcmUgd2UgaGFkIG1hZGUgc2ltaWxh
ciBtaXN0YWtlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGFuIEFQSSB0ZXN0IHdoaWNoIHdvdWxk
J3ZlIGZhaWxlZCBiZWZvcmUgcjI1MjExNiBiZWNhdXNlIGl0IGV4ZXJjaXNlcyB0aGUga2V5IGNv
bGxpc2lvbiBjb25kaXRpb24sCisgICAgICAgIGFuZCBieSB0ZXN0cyB3aGljaCB3ZXJlIHNraXBw
ZWQgaW4gcjI1MjExNiBhbmQgSSBub3cgdW5za2lwcGVkLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpyZXN1bWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29h
OjpOZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGUgaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjp3aXRoQ3JlZGVudGlhbHM6XSk6CisgICAg
ICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdKToKKyAg
ICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5nVGFzazpdKToKKyAgICAg
ICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25Db2NvYV0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9u
OnRhc2s6X3NjaGVtZVVwZ3JhZGVkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazp3aWxsQ2FjaGVSZXNw
b25zZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKHByb2Nlc3NTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6ZGlkQ29tcGxldGVX
aXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNz
aW9uOmRvd25sb2FkVGFzazpkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOl0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkV3Jp
dGVEYXRhOnRvdGFsQnl0ZXNXcml0dGVuOnRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6XSk6Cisg
ICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFz
azpkaWRSZXN1bWVBdE9mZnNldDpleHBlY3RlZFRvdGFsQnl0ZXM6XSk6CisgICAgICAgICgtW1dL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25s
b2FkVGFzazpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5n
V2ViU29ja2V0VGFzazpdKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvbldyYXBwZXI6OmluaXRp
YWxpemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vz
c2lvbkNvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlh
bGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2spOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNvY2tldFRhc2sp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRU
YXNrKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a1Nlc3Npb246d2l0aENyZWRlbnRpYWxzOl0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29h
OjpzZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2Nv
YTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGREb3dubG9hZElEKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VEb3du
bG9hZElEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJz
aXRlRGF0YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6
CisKIDIwMTktMTEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFdlYkRyaXZlcjogY29ycmVjdGx5IGhhbmRsZSBlcnJvcnMgd2hlbiBmb2N1
c2luZyBlbGVtZW50IGJlZm9yZSBzZW5kaW5nIGtleSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcg
KzE2OCw3IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYKICAgICBs
b2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVycy5zb3Vy
Y2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7
CiAgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElE
KCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9ucyA9IG9w
dGlvbnM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJpY3RIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQko
cmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsMTAg
QEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZgogICAgIE5TRGF0YSAq
dXBkYXRlZERhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVy
dHlMaXN0OmRpY3Rpb25hcnkgZm9ybWF0Ok5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzAgb3B0
aW9uczowIGVycm9yOm51bGxwdHJdOwogI2VuZGlmCiAKLSAgICBtX2Rvd25sb2FkVGFzayA9IGNv
Y29hU2Vzc2lvbi5kb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YSh1cGRhdGVkRGF0YSk7Ci0gICAg
Y29jb2FTZXNzaW9uLmFkZERvd25sb2FkSUQobV9kb3dubG9hZFRhc2suZ2V0KCkudGFza0lkZW50
aWZpZXIsIG1fZG93bmxvYWRJRCk7CisgICAgbV9kb3dubG9hZFRhc2sgPSBbY29jb2FTZXNzaW9u
LnNlc3Npb25XcmFwcGVyRm9yRG93bmxvYWRzKCkuc2Vzc2lvbiBkb3dubG9hZFRhc2tXaXRoUmVz
dW1lRGF0YTp1cGRhdGVkRGF0YV07CisgICAgYXV0byB0YXNrSWRlbnRpZmllciA9IFttX2Rvd25s
b2FkVGFzayB0YXNrSWRlbnRpZmllcl07CisgICAgQVNTRVJUKCFjb2NvYVNlc3Npb24uc2Vzc2lv
bldyYXBwZXJGb3JEb3dubG9hZHMoKS5kb3dubG9hZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmll
cikpOworICAgIGNvY29hU2Vzc2lvbi5zZXNzaW9uV3JhcHBlckZvckRvd25sb2FkcygpLmRvd25s
b2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgbV9kb3dubG9hZElEKTsKICAgICBtX2Rvd25sb2Fk
VGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmlsZSA9IHBhdGg7CiAKICAgICBbbV9kb3du
bG9hZFRhc2sgcmVzdW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgRG93bmxvYWQ7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hOworc3RydWN0
IFNlc3Npb25XcmFwcGVyOwogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2NvYSBmaW5hbCA6IHB1
YmxpYyBOZXR3b3JrRGF0YVRhc2sgewogICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNv
Y29hOwpAQCAtODksNiArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNUaGlyZFBhcnR5UmVx
dWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKICAgICBib29sIGlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCisgICAgU2Vzc2lvbldyYXBwZXImIG1f
c2Vzc2lvbldyYXBwZXI7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4
dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKICAg
ICBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MgbV9uZXR3b3JrTG9hZE1ldHJpY3M7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcHV0ZUlzQWx3YXlz
T25Mb2dnCiAKIE5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3
b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIFdl
YkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRFbmNvZGlu
Z1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIFBy
ZWNvbm5lY3RPbmx5IHNob3VsZFByZWNvbm5lY3RPbmx5LCBib29sIGRhdGFUYXNrSXNGb3JNYWlu
RnJhbWVOYXZpZ2F0aW9uLCBib29sIGRhdGFUYXNrSXNGb3JNYWluUmVzb3VyY2VOYXZpZ2F0aW9u
Rm9yQW55RnJhbWUsIE9wdGlvbmFsPE5ldHdvcmtBY3Rpdml0eVRyYWNrZXI+IG5ldHdvcmtBY3Rp
dml0eVRyYWNrZXIpCiAgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1
ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgc2hvdWxkQ2xlYXJS
ZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmln
YXRpb24pCisgICAgLCBtX3Nlc3Npb25XcmFwcGVyKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9u
Q29jb2EmPihzZXNzaW9uKS5zZXNzaW9uV3JhcHBlckZvclRhc2socmVxdWVzdFdpdGhDcmVkZW50
aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKQogICAgICwgbV9mcmFtZUlEKGZyYW1lSUQp
CiAgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX2lzRm9yTWFpblJlc291cmNlTmF2aWdh
dGlvbkZvckFueUZyYW1lKGRhdGFUYXNrSXNGb3JNYWluUmVzb3VyY2VOYXZpZ2F0aW9uRm9yQW55
RnJhbWUpCkBAIC0yMDYsMTQgKzIwNywxMSBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29y
a0RhdGFUYXNrQ29jCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQmxvY2tDb29raWVzID0gZmFs
c2U7Ci0gICAgYm9vbCBuZWVkc0lzb2xhdGVkU2Vzc2lvbiA9IGZhbHNlOwotICAgIGF1dG8gZmly
c3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBz
aG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAg
ICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzOwogICAgIGlmIChh
dXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpKSB7CiAgICAgICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKQogICAgICAgICAgICAgc2hv
dWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91bGRCbG9ja0Nvb2tp
ZXMocmVxdWVzdCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS81NjkyMTU4ND4gbmVlZHNJc29sYXRlZFNlc3Npb24gc2hvdWxkIGJlIHNldCBoZXJl
LgogICAgIH0KICNlbmRpZgogICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5l
ZWRlZChyZXF1ZXN0KTsKQEAgLTIyMSwxNCArMjE5LDExIEBAIE5ldHdvcmtEYXRhVGFza0NvY29h
OjpOZXR3b3JrRGF0YVRhc2tDb2MKICAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IHJlcXVl
c3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQ
Qm9keSk7CiAgICAgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVlc3RUb0luZmVyZmFj
ZUlmTmVlZGVkKG5zUmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmID09IFdlYkNvcmU6OkNvbnRl
bnRTbmlmZmluZ1BvbGljeTo6U25pZmZDb250ZW50ICYmICF1cmwuaXNMb2NhbEZpbGUoKSwgc2hv
dWxkQ29udGVudEVuY29kaW5nU25pZmYgPT0gV2ViQ29yZTo6Q29udGVudEVuY29kaW5nU25pZmZp
bmdQb2xpY3k6OlNuaWZmKTsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0
PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBpZiAobmVlZHNJc29sYXRl
ZFNlc3Npb24pCi0gICAgICAgIG1fdGFzayA9IFtjb2NvYVNlc3Npb24uaXNvbGF0ZWRTZXNzaW9u
KHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBmaXJzdFBhcnR5KSBkYXRhVGFza1dpdGhSZXF1ZXN0
Om5zUmVxdWVzdF07Ci0gICAgZWxzZQotICAgICAgICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLnNl
c3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1
ZXN0XTsKKyAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uV3JhcHBlci5zZXNzaW9uIGRhdGFUYXNrV2l0
aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKIAotICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgQ3Jl
YXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k9JXUgYW5k
IFVSTD0lcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAgICBjb2NvYVNl
c3Npb24ucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgKnRoaXMsIHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9zZXNzaW9uV3Jh
cHBlci5kYXRhVGFza01hcC5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAg
IG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJd
LCB0aGlzKTsKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0aW5nIE5ldHdvcmtE
YXRhVGFzayB3aXRoIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBuc1JlcXVlc3Qu
VVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOwogCiAgICAgaWYgKHNob3VsZFByZWNvbm5l
Y3RPbmx5ID09IFByZWNvbm5lY3RPbmx5OjpZZXMpIHsKICNpZiBFTkFCTEUoU0VSVkVSX1BSRUNP
Tk5FQ1QpCkBAIC0yNjYsOCArMjYxLDggQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6On5OZXR3b3Jr
RGF0YVRhc2tDbwogICAgIGlmICghbV90YXNrIHx8ICFtX3Nlc3Npb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9u
Q29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBjb2NvYVNlc3Npb24udW5yZWdpc3RlckRhdGFUYXNr
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCAqdGhpcywgbV9zdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5nZXQo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgIG1fc2Vzc2lvbldyYXBwZXIu
ZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKIH0KIAogdm9pZCBO
ZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVl
ZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTM1Nyw3ICszNTIsNyBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjp3aWxsUGVyZm9ybUhUCiAKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmICghbV9oYXNCZWVuU2V0VG9Vc2VTdGF0
ZWxlc3NDb29raWVTdG9yYWdlKSB7Ci0gICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzUG9s
aWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxl
c3NDb29raWVsZXNzCisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzUG9saWN5ID09IFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3MKICAgICAg
ICAgICAgIHx8IChtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpICYmIG1fc2Vzc2lv
bi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNob3VsZEJsb2NrQ29va2llcyhyZXF1ZXN0LCBt
X2ZyYW1lSUQsIG1fcGFnZUlEKSkpCiAgICAgICAgICAgICBibG9ja0Nvb2tpZXMoKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIE9CSkNfQ0xBU1MgRE1GV2Vic2l0ZVBvbGljeU1vbml0b3I7
CiBPQkpDX0NMQVNTIE5TRGF0YTsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOworT0JKQ19DTEFT
UyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3du
bG9hZFRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBPQkpDX0NMQVNTIFdLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZTsKQEAgLTQ1LDYgKzQ2LDIyIEBAIE9CSkNfQ0xBU1MgV0tOZXR3
b3JrU2Vzc2lvbldlYlNvY2tldERlbGUKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hOworCitz
dHJ1Y3QgU2Vzc2lvbldyYXBwZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U2Vzc2lvbldyYXBw
ZXI+IHsKKyAgICB2b2lkIGluaXRpYWxpemUoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqLCBO
ZXR3b3JrU2Vzc2lvbkNvY29hJiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwor
CisgICAgLy8gRklYTUU6IEFkZCBhIHdheSB0byBnZXQgZnJvbSBEb3dubG9hZCB0byBOZXR3b3Jr
U2Vzc2lvbiBhbmQgcmVtb3ZlIHRoaXMgbWVtYmVyLgorICAgIFdlYWtQdHI8TmV0d29ya1Nlc3Np
b25Db2NvYT4gc2Vzc2lvbkNvY29hOworCisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gc2Vz
c2lvbjsKKyAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBkZWxlZ2F0ZTsK
KyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29y
a0RhdGFUYXNrQ29jb2EqPiBkYXRhVGFza01hcDsKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gZG93bmxvYWRNYXA7CisjaWYgSEFW
RShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQorICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyLCBXZWJTb2NrZXRUYXNrKj4gd2ViU29ja2V0RGF0YVRhc2tNYXA7
CisjZW5kaWYKK307CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uQ29jb2EgZmluYWwgOiBwdWJsaWMg
TmV0d29ya1Nlc3Npb24gewogICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2NvYTsK
QEAgLTU0LDcgKzcxLDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtTZXNzaW9uQ29jb2EoTmV0d29y
a1Byb2Nlc3MmLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmKTsKICAgICB+TmV0
d29ya1Nlc3Npb25Db2NvYSgpOwogCi0gICAgdm9pZCBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVs
ZXNzQ29va2llbGVzc1Nlc3Npb24oKTsKKyAgICB2b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0
ZWxlc3NTZXNzaW9uKCk7CiAKICAgICBjb25zdCBTdHJpbmcmIGJvdW5kSW50ZXJmYWNlSWRlbnRp
ZmllcigpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgc291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKCkgY29uc3Q7CkBAIC02MywyMSArODAsMTEgQEAgcHVibGljOgogICAgIGNvbnN0
IFN0cmluZyYgZGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZTsgfQogI2VuZGlmCiAKLSAgICBOZXR3b3JrRGF0YVRhc2tD
b2NvYSogZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRl
bnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIHZvaWQgcmVn
aXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdv
cmtEYXRhVGFza0NvY29hJiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAg
IHZvaWQgdW5yZWdpc3RlckRhdGFUYXNrKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSk7Ci0KLSAgICBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkVGFza1dpdGhS
ZXN1bWVEYXRhKE5TRGF0YSopOwotCi0gICAgV2ViU29ja2V0VGFzayogd2ViU29ja2V0RGF0YVRh
c2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRhc2s6OlRhc2tJZGVudGlmaWVyKTsKLQotICAgIHZv
aWQgYWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERv
d25sb2FkSUQpOwotICAgIERvd25sb2FkSUQgZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6VGFza0lkZW50aWZpZXIpOwotICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKLQogICAgIHN0YXRpYyBib29sIGFsbG93
c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKIAotICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdl
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSosIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYpOworICAgIHZvaWQgY29udGludWVEaWRSZWNl
aXZlQ2hhbGxlbmdlKFNlc3Npb25XcmFwcGVyJiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdv
cmtEYXRhVGFza0NvY29hKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4m
Jik7CisKKyAgICBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JEb3dubG9hZHMoKSB7
IHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7IH0KIAogICAgIGJvb2wgZmFz
dFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Zhc3RTZXJ2
ZXJUcnVzdEV2YWx1YXRpb25FbmFibGVkOyB9CiAgICAgYm9vbCBkZXZpY2VNYW5hZ2VtZW50UmVz
dHJpY3Rpb25zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlTWFuYWdlbWVudFJlc3Ry
aWN0aW9uc0VuYWJsZWQ7IH0KQEAgLTg2LDggKzkzLDYgQEAgcHVibGljOgogCiAgICAgQ0ZEaWN0
aW9uYXJ5UmVmIHByb3h5Q29uZmlndXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlDb25m
aWd1cmF0aW9uLmdldCgpOyB9CiAKLSAgICBOU1VSTFNlc3Npb24qIHNlc3Npb24oV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIE5TVVJMU2Vzc2lvbiogaXNvbGF0ZWRTZXNz
aW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbik7CiAgICAgYm9vbCBoYXNJc29sYXRlZFNlc3Npb24oY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4pIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJJc29s
YXRlZFNlc3Npb25zKCkgb3ZlcnJpZGU7CiAKQEAgLTk2LDYgKzEwMSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRMb2dD
b29raWVJbmZvcm1hdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2hvdWxkTG9nQ29v
a2llSW5mb3JtYXRpb247IH0KICAgICBTZWNvbmRzIGxvYWRUaHJvdHRsZUxhdGVuY3koKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2xvYWRUaHJvdHRsZUxhdGVuY3k7IH0KKyAgICBTZXNzaW9u
V3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JUYXNrKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBTZXNzaW9uV3Jh
cHBlciYgaXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbik7CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lP
Tl9XRUJTT0NLRVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdl
YlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBmaW5hbDsKQEAgLTEwMywzMiArMTEw
LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRh
c2smKSBmaW5hbDsKICNlbmRpZgogCi0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4mIGRhdGFUYXNrTWFwKFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLQotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFU
YXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRh
c2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhv
dXRTdGF0ZTsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFwRXBoZW1lcmFsU3RhdGVsZXNz
Q29va2llbGVzczsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKLSNpZiBIQVZFKE5TVVJMU0VTU0lPTl9X
RUJTT0NLRVQpCi0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIsIFdlYlNvY2tldFRhc2sqPiBtX3dlYlNvY2tldERhdGFUYXNrTWFwOwotI2VuZGlmCi0KICAg
ICBzdHJ1Y3QgSXNvbGF0ZWRTZXNzaW9uIHsKLSAgICAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bj4gc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKLSAgICAgICAgUmV0YWluUHRyPFdLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRl
OwotICAgICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBzdGF0ZWxlc3NTZXNzaW9uOwotICAg
ICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBzdGF0ZWxlc3NTZXNzaW9u
RGVsZWdhdGU7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoK
KyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKKyAg
ICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKICAg
ICAgICAgV2FsbFRpbWUgbGFzdFVzZWQ7CiAgICAgfTsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4sIElzb2xhdGVkU2Vzc2lvbj4gbV9pc29sYXRlZFNlc3Npb25zOwor
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIHN0ZDo6dW5pcXVlX3B0cjxJ
c29sYXRlZFNlc3Npb24+PiBtX2lzb2xhdGVkU2Vzc2lvbnM7CiAKLSAgICBSZXRhaW5QdHI8TlNV
UkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAgUmV0YWluUHRy
PFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
RGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zdGF0ZWxlc3NTZXNzaW9u
OwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc3RhdGVsZXNzU2Vz
c2lvbkRlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fZXBoZW1lcmFsU3Rh
dGVsZXNzQ29va2llbGVzc1Nlc3Npb247Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZT4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbkRlbGVnYXRlOwor
ICAgIFNlc3Npb25XcmFwcGVyIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBT
ZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgU2Vz
c2lvbldyYXBwZXIgbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uOwogCiAgICAgU3RyaW5nIG1f
Ym91bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3NvdXJjZUFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE1IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVVJMUmVzcG9uc2Uu
aD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxv
Y2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9PYmpDUnVudGltZUV4dHJhcy5oPgogI2ltcG9ydCA8
d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2lt
cG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCiAjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKICNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvTmV0d29ya1Nl
c3Npb25Db2NvYUFkZGl0aW9ucy5oPgpAQCAtMzk1LDI0ICszOTYsMjQgQEAgQGludGVyZmFjZSBX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBOUwogICAgICwgTlNVUkxTZXNzaW9uV2ViU29ja2V0
RGVsZWdhdGUKICNlbmRpZgogPiB7Ci0gICAgV2Vha1B0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q29jb2E+IF9zZXNzaW9uOworICAgIFdlYWtQdHI8V2ViS2l0OjpTZXNzaW9uV3JhcHBlcj4gX3Nl
c3Npb25XcmFwcGVyOwogICAgIGJvb2wgX3dpdGhDcmVkZW50aWFsczsKIH0KIAotLSAoaWQpaW5p
dFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9u
IHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHM7CistIChpZClpbml0V2l0aFNl
c3Npb25XcmFwcGVyOihXZWJLaXQ6OlNlc3Npb25XcmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRo
Q3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzOwogLSAodm9pZClzZXNzaW9uSW52YWxp
ZGF0ZWQ7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscworLSAo
aWQpaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjooV2ViS2l0OjpTZXNzaW9uV3JhcHBlciYpc2Vzc2lv
bldyYXBwZXIgd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgX3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzZXNzaW9uKTsKKyAgICBfc2Vzc2lvbldyYXBw
ZXIgPSBtYWtlV2Vha1B0cihzZXNzaW9uV3JhcHBlcik7CiAgICAgX3dpdGhDcmVkZW50aWFscyA9
IHdpdGhDcmVkZW50aWFsczsKIAogICAgIHJldHVybiBzZWxmOwpAQCAtNDIwLDI0ICs0MjEsMzAg
QEAgLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZQogCiAtICh2b2lkKXNl
c3Npb25JbnZhbGlkYXRlZAogewotICAgIF9zZXNzaW9uID0gbnVsbHB0cjsKKyAgICBfc2Vzc2lv
bldyYXBwZXIgPSBudWxscHRyOwogfQogCiAtIChOZXR3b3JrRGF0YVRhc2tDb2NvYSopZXhpc3Rp
bmdUYXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzawogewotICAgIGlmICghX3Nlc3Npb24pCisg
ICAgaWYgKCFfc2Vzc2lvbldyYXBwZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
aWYgKCF0YXNrKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPSBfd2l0aENyZWRlbnRpYWxzID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05v
dFVzZTsKLSAgICByZXR1cm4gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRh
c2tJZGVudGlmaWVyLCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7CisgICAgcmV0dXJuIF9zZXNz
aW9uV3JhcHBlci0+ZGF0YVRhc2tNYXAuZ2V0KHRhc2sudGFza0lkZW50aWZpZXIpOworfQorCist
IChOZXR3b3JrU2Vzc2lvbkNvY29hICopc2Vzc2lvbkNvY29hCit7CisgICAgaWYgKCFfc2Vzc2lv
bldyYXBwZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBfc2Vzc2lvbldy
YXBwZXItPnNlc3Npb25Db2NvYS5nZXQoKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VS
TFNlc3Npb24gKilzZXNzaW9uIGRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6KE5TRXJyb3IgKill
cnJvcgogewotICAgIEFTU0VSVCghX3Nlc3Npb24pOworICAgIEFTU0VSVCghX3Nlc3Npb25XcmFw
cGVyKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRh
c2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIGRpZFNlbmRCb2R5RGF0YTooaW50NjRfdClieXRl
c1NlbnQgdG90YWxCeXRlc1NlbnQ6KGludDY0X3QpdG90YWxCeXRlc1NlbnQgdG90YWxCeXRlc0V4
cGVjdGVkVG9TZW5kOihpbnQ2NF90KXRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZApAQCAtNTI3LDEy
ICs1MzQsMTUgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAg
ICAgICAgIGJvb2wgc2hvdWxkSWdub3JlSFNUUyA9IGZhbHNlOwogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHNob3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNV
cGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVzdCkgJiYgX3Nlc3Npb24tPm5ldHdvcmtQcm9j
ZXNzKCkuc3RvcmFnZVNlc3Npb24oX3Nlc3Npb24tPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxvY2tD
b29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRh
c2stPnBhZ2VJRCgpKTsKLSAgICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKLSAgICAgICAg
ICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgQVNT
RVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKLSAgICAg
ICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBz
IHRvIGh0dHAiLCB0YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRG
OFN0cmluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gc2Vzc2lvbkNvY29hID0gW3Nl
bGYgc2Vzc2lvbkNvY29hXSkgeworICAgICAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVt
ZVdhc1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBzZXNzaW9uQ29jb2EtPm5l
dHdvcmtQcm9jZXNzKCkuc3RvcmFnZVNlc3Npb24oc2Vzc2lvbkNvY29hLT5zZXNzaW9uSUQoKSkt
PnNob3VsZEJsb2NrQ29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwg
bmV0d29ya0RhdGFUYXNrLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3Jl
SFNUUykgeworICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVl
c3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxU
b1N0cmluZzpAImh0dHAiXSk7CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAi
JWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVyLCBy
ZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgog
CiAgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVz
cG9uc2UsIHJlcXVlc3QsIFtjb21wbGV0aW9uSGFuZGxlckNvcHksIHRhc2tJZGVudGlmaWVyLCBz
aG91bGRJZ25vcmVIU1RTXShhdXRvJiYgcmVxdWVzdCkgewpAQCAtNTYwLDEyICs1NzAsMTUgQEAg
LSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRvKiBu
ZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10pIHsKICAgICAgICAgYm9v
bCBzaG91bGRJZ25vcmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVl
VG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9y
YWdlU2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVx
dWVzdCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlE
KCkpOwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVz
dCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVl
c3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9H
KE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIs
IHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBzZXNzaW9uQ29jb2EgPSBbc2VsZiBzZXNzaW9u
Q29jb2FdKSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2NoZW1lV2FzVXBncmFk
ZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Npb25Db2NvYS0+bmV0d29ya1Byb2Nl
c3MoKS5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxv
Y2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0
YVRhc2stPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVIU1RTKSB7Cisg
ICAgICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAi
aHR0cCJdKTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IERvd25n
cmFkZWQgJXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIsIHJlcXVlc3QuVVJM
LmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAKICAgICAgICAg
YXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBsZXRpb25IYW5kbGVy
KTsKQEAgLTU4OCwxMSArNjAxLDYgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24g
KilzZXNzaQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGF0
YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgd2lsbENhY2hlUmVzcG9uc2U6
KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilwcm9wb3NlZFJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb25zZSkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG5pbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogcmVtb3Zl
IGlmIDxyZGFyOi8vcHJvYmxlbS8yMDAwMTk4NT4gaXMgZXZlciByZXNvbHZlZC4KICAgICBpZiAo
W3Byb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihh
bGxIZWFkZXJGaWVsZHMpXQogICAgICAgICAmJiBbWyhpZClwcm9wb3NlZFJlc3BvbnNlLnJlc3Bv
bnNlIGFsbEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1SYW5nZSJdKQpAQCAt
NjAyLDkgKzYxMCw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kK
IH0KIAogI2lmIEhBVkUoQ0ZORVRXT1JLX05TVVJMU0VTU0lPTl9TVFJJQ1RSVVNURVZBTFVBVEUp
Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlvbihOZXR3b3Jr
U2Vzc2lvbkNvY29hICpzZXNzaW9uLCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFs
bGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFzaywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24s
IE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0
aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlvbihOZXR3b3JrU2Vzc2lv
bkNvY29hICpzZXNzaW9uLCBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXIsIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRh
c2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29y
a0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVu
Z2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVD
aGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSBy
ZXRhaW5QdHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgeworICAgIHNlc3Npb24tPmNv
bnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShzZXNzaW9uV3JhcHBlciwgY2hhbGxlbmdlLCB0YXNr
SWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hhbGxlbmdlLnByb3Rl
Y3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRl
bnRpYWwpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogVUlQcm9jZXNzIHNob3VsZCBzZW5k
IHVzIGJhY2sgbm9uIG5pbCBjcmVkZW50aWFscyBidXQgdGhlIGNyZWRlbnRpYWwgSVBDIGVuY29k
ZXIgY3VycmVudGx5IG9ubHkgc2VyaWFsaXplcyBucyBjcmVkZW50aWFscyBmb3IgdXNlcm5hbWUv
cGFzc3dvcmQuCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBXZWJLaXQ6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwubnND
cmVkZW50aWFsKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lv
bkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxG
b3JUcnVzdDogc2VjVHJ1c3QuZ2V0KCldKTsKQEAgLTYxNyw3ICs2MjUsOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhCiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRSZWNl
aXZlQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uIHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VSTFNl
c3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2Vs
ZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hIHx8IFt0YXNrIHN0YXRlXSA9
PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZUNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLCBuaWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjM3LDE4ICs2NDYsMjEgQEAg
LSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50
aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlLnNlcnZlclRydXN0XSk7CiAKICAgICAgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVz
dCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1h
bmNlIHJlYXNvbnMgYW5kIHRvIHVzZSBBVFMgZGVmYXVsdHMuCi0gICAgICAgIGlmIChfc2Vzc2lv
bi0+ZmFzdFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc2Vz
c2lvbkNvY29hLT5mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpKSB7CiAjaWYgSEFW
RShDRk5FVFdPUktfTlNVUkxTRVNTSU9OX1NUUklDVFJVU1RFVkFMVUFURSkKICAgICAgICAgICAg
IGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXTsKICAgICAg
ICAgICAgIEFTU0VSVChuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICAgICAgYXV0byBkZWNpc2lv
bkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW19zZXNzaW9uID0gbWFrZVdlYWtQdHIoX3Nlc3Npb24u
Z2V0KCkpLCBjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
ciksIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrQ29jb2E+KG5ldHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
KmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAg
YXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW3dlYWtTZWxmID0gV2Vha09iakNQ
dHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPihzZWxmKSwgc2Vzc2lvbkNvY29hID0gbWFrZVdl
YWtQdHIoc2Vzc2lvbkNvY29hKSwgY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrID0gUmVmUHRy
PE5ldHdvcmtEYXRhVGFza0NvY29hPihuZXR3b3JrRGF0YVRhc2spXShOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIE9TU3RhdHVzIHRydXN0UmVzdWx0KSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAgICAgICAgICAgICAgICAgYXV0byB0YXNrID0gV1RGTW92
ZShuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICAgICAgICAgIGF1dG8qIHNlc3Npb24gPSBfc2Vz
c2lvbi5nZXQoKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzZXNzaW9uID0gc2Vzc2lvbkNvY29h
LmdldCgpOwogICAgICAgICAgICAgICAgIGlmICh0cnVzdFJlc3VsdCA9PSBub0VyciB8fCAhc2Vz
c2lvbikgewogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Np
b25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1bHRIYW5kbGluZywgbmlsKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcm9j
ZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Npb24sIGNoYWxsZW5nZSwgdGFza0lkZW50aWZp
ZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAg
ICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNlc3Npb24sICpzdHJvbmdTZWxmLT5f
c2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
W05TVVJMU2Vzc2lvbiBfc3RyaWN0VHJ1c3RFdmFsdWF0ZTpjaGFsbGVuZ2UgcXVldWU6W05TT3Bl
cmF0aW9uUXVldWUgbWFpblF1ZXVlXS51bmRlcmx5aW5nUXVldWUgY29tcGxldGlvbkhhbmRsZXI6
ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY1NywxNCAr
NjY5LDE1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICNlbmRp
ZgogICAgICAgICB9CiAgICAgfQotICAgIF9zZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVDaGFs
bGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2td
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAo
V2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICBzZXNz
aW9uQ29jb2EtPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZSgqX3Nlc3Npb25XcmFwcGVyLCBj
aGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3Np
dGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpOwogICAgIH0pOwogfQogCiAtICh2b2lk
KVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFz
ayAqKXRhc2sgZGlkQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIGlm
ICghX3Nlc3Npb24pCisgICAgYXV0byogc2Vzc2lvbkNvY29hID0gW3NlbGYgc2Vzc2lvbkNvY29h
XTsKKyAgICBpZiAoIXNlc3Npb25Db2NvYSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9HKE5l
dHdvcmtTZXNzaW9uLCAiJWxsdSBkaWRDb21wbGV0ZVdpdGhFcnJvciAlQCIsIHRhc2sudGFza0lk
ZW50aWZpZXIsIGVycm9yKTsKQEAgLTY3OSw5ICs2OTIsOSBAQCAtICh2b2lkKVVSTFNlc3Npb246
KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtz
ZWxmIGV4aXN0aW5nVGFzazp0YXNrXSkKICAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5kaWRDb21w
bGV0ZVdpdGhFcnJvcihlcnJvciwgbmV0d29ya0RhdGFUYXNrLT5uZXR3b3JrTG9hZE1ldHJpY3Mo
KSk7CiAgICAgZWxzZSBpZiAoZXJyb3IpIHsKLSAgICAgICAgYXV0byBkb3dubG9hZElEID0gX3Nl
c3Npb24tPnRha2VEb3dubG9hZElEKHRhc2sudGFza0lkZW50aWZpZXIpOworICAgICAgICBhdXRv
IGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLnRha2UodGFzay50YXNr
SWRlbnRpZmllcik7CiAgICAgICAgIGlmIChkb3dubG9hZElELmRvd25sb2FkSUQoKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCku
ZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBkb3dubG9hZCA9IHNlc3Npb25Db2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9h
ZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkgewogICAgICAgICAgICAgICAgIE5TRGF0
YSAqcmVzdW1lRGF0YSA9IG5pbDsKICAgICAgICAgICAgICAgICBpZiAoaWQgdXNlckluZm8gPSBl
cnJvci51c2VySW5mbykgewogICAgICAgICAgICAgICAgICAgICBpZiAoW3VzZXJJbmZvIGlzS2lu
ZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CkBAIC04MzYsNjAgKzg0OSw2NSBAQCAt
ICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vz
c2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRv
d25sb2FkVGFzayAqKWRvd25sb2FkVGFzayBkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOihOU1VS
TCAqKWxvY2F0aW9uCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBhdXRvKiBzZXNzaW9uQ29j
b2EgPSBbc2VsZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25sb2Fk
SUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAgIGlmIChhdXRvKiBkb3dubG9h
ZCA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2Fk
KGRvd25sb2FkSUQpKQorICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uV3JhcHBlci0+ZG93
bmxvYWRNYXAudGFrZShbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgaWYgKGF1
dG8qIGRvd25sb2FkID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFu
YWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQogICAgICAgICBkb3dubG9hZC0+ZGlkRmluaXNo
KCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkb3du
bG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFzayBkaWRXcml0
ZURhdGE6KGludDY0X3QpYnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNXcml0dGVuOihpbnQ2NF90KXRv
dGFsQnl0ZXNXcml0dGVuIHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6KGludDY0X3QpdG90YWxC
eXRlc0V4cGVjdGVkVG9Xcml0ZQogewotICAgIGlmICghX3Nlc3Npb24pCisgICAgYXV0byogc2Vz
c2lvbkNvY29hID0gW3NlbGYgc2Vzc2lvbkNvY29hXTsKKyAgICBpZiAoIXNlc3Npb25Db2NvYSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghW3NlbGYgZXhpc3Rp
bmdUYXNrOmRvd25sb2FkVGFza10sICJUaGUgTmV0d29ya0RhdGFUYXNrIHNob3VsZCBiZSBkZXN0
cm95ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGlkQmVjb21lRG93bmxvYWRUYXNrIHJldHVybnMiKTsK
IAotICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uLT5kb3dubG9hZElEKFtkb3dubG9hZFRh
c2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+
bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkK
KyAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLmdldChb
ZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7CisgICAgaWYgKGF1dG8qIGRvd25sb2FkID0g
c2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2Fk
KGRvd25sb2FkSUQpKQogICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0
dGVuKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRv
d25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFJl
c3VtZUF0T2Zmc2V0OihpbnQ2NF90KWZpbGVPZmZzZXQgZXhwZWN0ZWRUb3RhbEJ5dGVzOihpbnQ2
NF90KWV4cGVjdGVkVG90YWxCeXRlcwogewotICAgIGlmICghX3Nlc3Npb24pCi0gICAgICAgIHJl
dHVybjsKLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjoo
TlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilk
YXRhVGFzayBkaWRCZWNvbWVEb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAq
KWRvd25sb2FkVGFzawogewotICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBl
eGlzdGluZ1Rhc2s6ZGF0YVRhc2tdKSB7Ci0gICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2Nv
YT4gcHJvdGVjdGVkTmV0d29ya0RhdGFUYXNrKCpuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICBh
dXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7Ci0g
ICAgICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2Vzcygp
LmRvd25sb2FkTWFuYWdlcigpOwotICAgICAgICBhdXRvIGRvd25sb2FkID0gbWFrZVVuaXF1ZTxX
ZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRvd25sb2FkSUQsIGRvd25sb2FkVGFz
aywgKl9zZXNzaW9uLCBuZXR3b3JrRGF0YVRhc2stPnN1Z2dlc3RlZEZpbGVuYW1lKCkpOwotICAg
ICAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQo
KmRvd25sb2FkKTsKLSAgICAgICAgQVNTRVJUKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobmV0d29y
a0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpKSk7Ci0gICAgICAgIGRvd25sb2Fk
LT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKCkpOwotICAgICAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9h
ZFRhc2soZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGF1dG8qIG5ldHdvcmtE
YXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza107CisgICAgaWYgKCFuZXR3b3Jr
RGF0YVRhc2spCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBbc2Vs
ZiBzZXNzaW9uQ29jb2FdOworICAgIGlmICghc2Vzc2lvbkNvY29hKQorICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgX3Nlc3Npb24tPmFkZERvd25sb2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRl
bnRpZmllcl0sIGRvd25sb2FkSUQpOwotICAgIH0KKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQ29j
b2E+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29ya0RhdGFUYXNrKTsKKyAgICBhdXRv
IGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7CisgICAg
YXV0byYgZG93bmxvYWRNYW5hZ2VyID0gc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLmRv
d25sb2FkTWFuYWdlcigpOworICAgIGF1dG8gZG93bmxvYWQgPSBtYWtlVW5pcXVlPFdlYktpdDo6
RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwgZG93bmxvYWRUYXNrLCAqW3Nl
bGYgc2Vzc2lvbkNvY29hXSwgbmV0d29ya0RhdGFUYXNrLT5zdWdnZXN0ZWRGaWxlbmFtZSgpKTsK
KyAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQo
KmRvd25sb2FkKTsKKyAgICBBU1NFUlQoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhuZXR3b3JrRGF0
YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpKTsKKyAgICBkb3dubG9hZC0+ZGlkQ3Jl
YXRlRGVzdGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigp
KTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soZG93bmxv
YWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIV9zZXNzaW9u
V3JhcHBlci0+ZG93bmxvYWRNYXAuY29udGFpbnMoZG93bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVy
KSk7CisgICAgX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC5hZGQoZG93bmxvYWRUYXNrLnRh
c2tJZGVudGlmaWVyLCBkb3dubG9hZElEKTsKIH0KIAogI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dF
QlNPQ0tFVCkKIC0gKFdlYlNvY2tldFRhc2sqKWV4aXN0aW5nV2ViU29ja2V0VGFzazooTlNVUkxT
ZXNzaW9uV2ViU29ja2V0VGFzayAqKXRhc2sKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQorICAgIGlm
ICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICgh
dGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gX3Nlc3Npb24tPndl
YlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gX3Nlc3Npb25XcmFwcGVyLT53ZWJTb2NrZXREYXRhVGFza01hcC5nZXQodGFzay50YXNr
SWRlbnRpZmllcik7CiB9CiAKIApAQCAtOTcyLDYgKzk5MCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpwcm94eURpY3Rpb25hcnkoY29uCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiB9CiAKK3ZvaWQgU2Vzc2lvbldyYXBwZXI6OmluaXRpYWxpemUoTlNVUkxTZXNzaW9u
Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiwgTmV0d29ya1Nlc3Npb25Db2NvYSYgY29jb2FT
ZXNzaW9uLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSkKK3sKKyAgICB0aGlzLT5zZXNzaW9uQ29jb2EgPSBtYWtlV2Vha1B0cihjb2NvYVNl
c3Npb24pOworICAgIHRoaXMtPmRlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjoqdGhpcyB3aXRoQ3JlZGVudGlh
bHM6c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZV0pOworICAgIHRoaXMtPnNlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25X
aXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOmRlbGVnYXRlLmdldCgpIGRl
bGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07Cit9CisKIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2EoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQ
cm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAg
ICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykKICAgICAsIG1f
Ym91bmRJbnRlcmZhY2VJZGVudGlmaWVyKHBhcmFtZXRlcnMuYm91bmRJbnRlcmZhY2VJZGVudGlm
aWVyKQpAQCAtMTA2Myw4ICsxMDg4LDcgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nl
c3Npb25Db2NvYQogICAgICAgICBjb29raWVTdG9yYWdlLl9vdmVycmlkZVNlc3Npb25Db29raWVB
Y2NlcHRQb2xpY3kgPSBZRVM7CiAjZW5kaWYKIAotICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6dHJ1ZV0pOwot
ICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lv
bldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+
KG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1
ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOworICAgIG1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKGNvbmZpZ3VyYXRpb24sICp0aGlzLCBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKTsKICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJD
cmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNjZXB0UG9saWN5ICVsdSIsIGNvbmZp
Z3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNjZXB0UG9saWN5KTsKIAogICAgIGNv
bmZpZ3VyYXRpb24uVVJMQ3JlZGVudGlhbFN0b3JhZ2UgPSBuaWw7CkBAIC0xMDczLDggKzEwOTcs
NyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hCiAgICAgLy8gY29u
ZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IG5pbDsKICAgICAvLyBjb25maWd1cmF0aW9u
LkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsK
IAotICAgIG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nl
c3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3Jl
ZGVudGlhbHM6ZmFsc2VdKTsKLSAgICBtX3N0YXRlbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9u
IHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19j
YXN0PGlkPihtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpb
TlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVu
dGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKTsKIAogICAgIG1fZGV2aWNlTWFuYWdlbWVu
dFJlc3RyaWN0aW9uc0VuYWJsZWQgPSBwYXJhbWV0ZXJzLmRldmljZU1hbmFnZW1lbnRSZXN0cmlj
dGlvbnNFbmFibGVkOwogICAgIG1fYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVz
dHJpY3Rpb25zRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMuYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VN
YW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZzsKQEAgLTEwOTcsMTAgKzExMjAsMTAgQEAg
TmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNzaW9uQ29jbwogewogfQogCi12b2lkIE5l
dHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNz
U2Vzc2lvbigpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxT
dGF0ZWxlc3NTZXNzaW9uKCkKIHsKICAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25m
aWd1cmF0aW9uID0gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNv
bmZpZ3VyYXRpb25dOwotICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29u
ZmlndXJhdGlvbiA9IG1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uOworICAg
IE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IG1fc2Vz
c2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb247
CiAKICAgICBjb25maWd1cmF0aW9uLkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lOZXZlcjsKICAgICBjb25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9y
YWdlID0gbmlsOwpAQCAtMTExNSw0NCArMTEzOCw0OCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVFcGhlCiAgICAgY29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVjdGlvblNl
cnZpY2VUeXBlID0gZXhpc3RpbmdDb25maWd1cmF0aW9uLl9DVERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGU7CiAjZW5kaWYKIAotICAgIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Np
b25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAg
bV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vz
c2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8
aWQ+KG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkg
ZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX2VwaGVt
ZXJhbFN0YXRlbGVzc1Nlc3Npb24uaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzcyk7CiB9CiAK
LU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvbihXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKK1Nlc3Npb25XcmFw
cGVyJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2soY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKIHsKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAg
IGlmIChzdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBG
aXJzdFBhcnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KSkKKyAgICAgICAgICAgIHJldHVybiBpc29s
YXRlZFNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGZpcnN0UGFydHkpOworICAgIH0g
ZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorCiAgICAgc3dpdGNo
IChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZTsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05v
dFVzZToKLSAgICAgICAgcmV0dXJuIG1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKTsKLSAgICBjYXNl
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29r
aWVsZXNzOgotICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Np
b24pCi0gICAgICAgICAgICBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nl
c3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nl
c3Npb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0
b3JhZ2U7CisgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1l
cmFsU3RhdGVsZXNzOgorICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5z
ZXNzaW9uKQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24o
KTsKKyAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9
CiAKLU5TVVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBhcnR5RG9tYWluKQorU2Vzc2lv
bldyYXBwZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbikKIHsKLSAgICBhdXRvIGVu
dHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShmaXJzdFBhcnR5RG9tYWluLCBbdGhpc10g
ewotICAgICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50cnkgeyB9OwotICAgICAgICBuZXdFbnRy
eS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdp
dGhDcmVkZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3Nl
c3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpz
dGF0aWNfY2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVn
YXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwot
Ci0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRo
aXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nl
c3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3N0YXRlbGVz
c1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3
RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09w
ZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAgYXV0byYgZW50cnkgPSBtX2lzb2xhdGVk
U2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4sIFt0aGlzXSB7CisgICAgICAgIGF1dG8g
bmV3RW50cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vzc2lvbj4oKTsKKyAgICAgICAgbmV3RW50
cnktPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uLCAqdGhpcywgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSk7CisgICAgICAgIG5ld0VudHJ5LT5z
ZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUobV9zZXNzaW9uV2l0aG91
dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiwgKnRoaXMsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSk7CiAgICAgICAgIHJldHVy
biBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICBlbnRyeS5sYXN0VXNl
ZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93
KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25zLnNpemUoKSA+IG1heE51bWJlck9mSXNv
bGF0ZWRTZXNzaW9ucykgewogICAgICAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBrZXlU
b1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCk7
CiAgICAgICAgIGZvciAoYXV0byYga2V5IDogbV9pc29sYXRlZFNlc3Npb25zLmtleXMoKSkgewot
ICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSku
bGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVzdGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9u
cy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgb2xkZXN0
VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xkZXN0VGltZXN0YW1wID0gdGltZXN0YW1w
OwogICAgICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0ga2V5OwpAQCAtMTE2NywxNCArMTE5NCwx
NCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhCiAgICAgc3dpdGNo
IChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcg
aXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVudGlhbCBzdG9yYWdlLiIpOwotICAgICAg
ICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwogICAgIGNhc2Ug
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOgogICAgICAgICBMT0co
TmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBOU1VSTFNlc3Npb24gd2l0aG91dCBjcmVk
ZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVybiBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9u
LmdldCgpOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVt
ZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAgICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxl
c3NDb29raWVsZXNzU2Vzc2lvbikKLSAgICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0
ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpOwotICAgICAgICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0
ZWxlc3NDb29raWVsZXNzU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNz
aW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczoKKyAgICAgICAgaWYgKCFtX2VwaGVt
ZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbikKKyAgICAgICAgICAgIGluaXRpYWxpemVFcGhl
bWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CisgICAgICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRl
bGVzc1Nlc3Npb247CiAgICAgfQogfQogCkBAIC0xMTkyLDE2ICsxMjE5LDE4IEBAIHZvaWQgTmV0
d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZEMKIHsKICAgICBOZXR3b3JrU2Vzc2lvbjo6
aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogCi0gICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKLSAgICBbbV9zdGF0ZWxlc3NTZXNzaW9uIGludmFs
aWRhdGVBbmRDYW5jZWxdOwotICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNz
aW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2VEZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwotICAgIFttX3N0YXRlbGVzc1Nlc3Np
b25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwotICAgIFttX2VwaGVtZXJhbFN0YXRlbGVz
c0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9z
ZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07
CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRh
dGVBbmRDYW5jZWxdOworICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbiBp
bnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
LmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOworICAgIFttX2VwaGVt
ZXJhbFN0YXRlbGVzc1Nlc3Npb24uZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKIAogICAg
IGZvciAoYXV0byYgc2Vzc2lvbiA6IG1faXNvbGF0ZWRTZXNzaW9ucy52YWx1ZXMoKSkgewotICAg
ICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRD
YW5jZWxdOwotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVs
ZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICAgICAg
W3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbklu
dmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0
b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVk
XTsKICAgICB9CiAgICAgbV9pc29sYXRlZFNlc3Npb25zLmNsZWFyKCk7CiB9CkBAIC0xMjIwLDY4
ICsxMjQ5LDYgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjbGVhckNyZWRlbnRpYQogI2Vu
ZGlmCiB9CiAKLUhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBO
ZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRhVGFza01hcChX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkK
LXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHN3aXRjaCAoc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOgotICAgICAgICByZXR1cm4gbV9kYXRh
VGFza01hcEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M7Ci0gICAgY2FzZSBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6Ci0gICAgICAgIHJldHVybiBtX2RhdGFU
YXNrTWFwV2l0aG91dFN0YXRlOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJuIG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX2RhdGFUYXNr
TWFwV2l0aENyZWRlbnRpYWxzOwotfQotCi1OZXR3b3JrRGF0YVRhc2tDb2NvYSogTmV0d29ya1Nl
c3Npb25Db2NvYTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpU
YXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICByZXR1cm4gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kp
LmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6cmVn
aXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lk
ZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYg
bWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKCFtYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKLSAgICBtYXAuYWRkKHRhc2tJ
ZGVudGlmaWVyLCAmZGF0YVRhc2spOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnVu
cmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFz
a0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0
byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVB
U0VfQVNTRVJUKG1hcC5nZXQodGFza0lkZW50aWZpZXIpID09ICZkYXRhVGFzayk7Ci0gICAgbWFw
LnJlbW92ZSh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLU5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayog
TmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEoTlNEYXRhKiBy
ZXN1bWVEYXRhKQotewotICAgIHJldHVybiBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
IGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhOnJlc3VtZURhdGFdOwotfQotCi12b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJ
ZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQpCi17Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9kb3dubG9hZE1hcC5jb250YWlucyh0YXNrSWRlbnRp
ZmllcikpOwotICAgIGZvciAoYXV0byBpZEluTWFwIDogbV9kb3dubG9hZE1hcC52YWx1ZXMoKSkK
LSAgICAgICAgQVNTRVJUKGlkSW5NYXAgIT0gZG93bmxvYWRJRCk7Ci0jZW5kaWYKLSAgICBtX2Rv
d25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93bmxvYWRJRCk7Ci19Ci0KLURvd25sb2Fk
SUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRN
YXAuZ2V0KHRhc2tJZGVudGlmaWVyKS5kb3dubG9hZElEKCkpOwotICAgIHJldHVybiBtX2Rvd25s
b2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Np
b25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyIHRhc2tJZGVudGlmaWVyKQotewotICAgIGF1dG8gZG93bmxvYWRJRCA9IG1fZG93bmxvYWRN
YXAudGFrZSh0YXNrSWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIGRvd25sb2FkSUQ7Ci19Ci0KIHN0
YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RS
ZWYgdHJ1c3QyKQogewogICAgIGlmICghdHJ1c3QxIHx8ICF0cnVzdDIpCkBAIC0xMzIyLDE4ICsx
Mjg5LDE3IEBAIGJvb2wgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWxsb3dzU3BlY2lmaWMKICAgICBy
ZXR1cm4gY2VydGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKCkucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAot
dm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgTmV0d29ya0Rh
dGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRh
c2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpj
b250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoU2Vzc2lvbldyYXBwZXImIHNlc3Npb25XcmFwcGVy
LCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtE
YXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
S2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFuZXR3b3JrRGF0
YVRhc2spIHsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0gICAgICAgIGlmIChh
dXRvKiB3ZWJTb2NrZXRUYXNrID0gd2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2tJ
ZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0byogd2ViU29ja2V0VGFzayA9IHNlc3Npb25X
cmFwcGVyLndlYlNvY2tldERhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcikpIHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgY2hhbGxlbmdlcyBmb3Igd2ViIHNvY2tldC4KICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICNlbmRpZgotCi0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IHRoaXMtPmRvd25s
b2FkSUQodGFza0lkZW50aWZpZXIpOworICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBzZXNzaW9u
V3JhcHBlci5kb3dubG9hZE1hcC5nZXQodGFza0lkZW50aWZpZXIpOwogICAgICAgICBpZiAoZG93
bmxvYWRJRC5kb3dubG9hZElEKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBkb3dubG9hZCA9
IG5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkp
IHsKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSB7IGNoYWxsZW5nZSB9OwpAQCAtMTM5NSwyNiArMTM2MSwyMiBA
QCBETUZXZWJzaXRlUG9saWN5TW9uaXRvciAqTmV0d29ya1Nlc3Npb25DCiBzdGQ6OnVuaXF1ZV9w
dHI8V2ViU29ja2V0VGFzaz4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFz
ayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQogewogICAgIC8vIEZJWE1F
OiBVc2UgcHJvdG9jb2wuCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbldlYlNvY2tldFRhc2s+
IHRhc2sgPSBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmdldCgpIHdlYlNvY2tldFRh
c2tXaXRoUmVxdWVzdDogcmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRh
dGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNz
aW9uV2ViU29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
c2Vzc2lvbiB3ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2Vi
Q29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsKICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxXZWJTb2NrZXRUYXNrPihjaGFubmVsLCBXVEZNb3ZlKHRhc2spKTsK
IH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGRXZWJTb2NrZXRUYXNrKFdlYlNvY2tl
dFRhc2smIHRhc2spCiB7Ci0gICAgQVNTRVJUKCFtX3dlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRh
aW5zKHRhc2suaWRlbnRpZmllcigpKSk7Ci0gICAgbV93ZWJTb2NrZXREYXRhVGFza01hcC5hZGQo
dGFzay5pZGVudGlmaWVyKCksICZ0YXNrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2su
aWRlbnRpZmllcigpKSk7CisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNv
Y2tldERhdGFUYXNrTWFwLmFkZCh0YXNrLmlkZW50aWZpZXIoKSwgJnRhc2spOwogfQogCiB2b2lk
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnJlbW92ZVdlYlNvY2tldFRhc2soV2ViU29ja2V0VGFzayYg
dGFzaykKIHsKLSAgICBBU1NFUlQobV93ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNr
LmlkZW50aWZpZXIoKSkpOwotICAgIG1fd2ViU29ja2V0RGF0YVRhc2tNYXAucmVtb3ZlKHRhc2su
aWRlbnRpZmllcigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Nlc3Npb25XaXRoQ3JlZGVudGlh
bFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkp
KTsKKyAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tN
YXAucmVtb3ZlKHRhc2suaWRlbnRpZmllcigpKTsKIH0KIAotV2ViU29ja2V0VGFzayogTmV0d29y
a1Nlc3Npb25Db2NvYTo6d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRh
c2s6OlRhc2tJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIG1fd2ViU29ja2V0
RGF0YVRhc2tNYXAuZ2V0KGlkZW50aWZpZXIpOwotfQorI2VuZGlmIC8vIEhBVkUoTlNVUkxTRVNT
SU9OX1dFQlNPQ0tFVCkKIAotI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
OSw3ICs4NzksNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlN0CiAg
ICAgICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LAogICAgICAgICBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UsCiAgICAgICAgIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UsCi0gICAgICAgIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzCisgICAgICAgIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3MKICAgICA+Owog
fTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00NjMsNiArNDYzLDE3IEBAIC0gKHZvaWQpX3NjaGVkdWxlQ29va2llQmxvY2tpbmdV
cGRhdGU6KHYKICNlbmRpZgogfQogCistICh2b2lkKV9sb2dVc2VySW50ZXJhY3Rpb246KE5TVVJM
ICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlcgoreworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgX3dlYnNp
dGVEYXRhU3RvcmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihkb21haW4sIFtjb21wbGV0aW9uSGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICB9KTsKKyNlbHNlCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyNl
bmRpZgorfQorCiAtICh2b2lkKV9zZXRQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmgJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDYgKzY4LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogLSAo
Ym9vbClfaGFzUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNCksIGlvcygxMi4wKSk7CiAKIC0gKHZvaWQpX3NjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGU6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOworLSAodm9pZClfbG9nVXNlckludGVyYWN0aW9uOihOU1VS
TCAqKWRvbWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKIC0gKHZvaWQpX3NldFByZXZhbGVudERvbWFpbjooTlNVUkwgKilkb21haW4gY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfZ2V0SXNQcmV2YWxlbnREb21h
aW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsK
IC0gKHZvaWQpX2NsZWFyUHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE5LTEx
LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmUtZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29s
bGlzaW9uRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0RhdGFU
YXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIHdhaXRGb3JNZXNzYWdlczpdKToKKyAgICAg
ICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgd2ViVmlldzpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
IChURVNUKToKKwogMjAxOS0xMS0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgUkVHUkVTU0lPTjogWyBpT1MgXSAoIHIyNTEwMTUgKSBMYXlvdXQgVGVzdCBm
YXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1vdmVyZmxvdy1zZWxlY3Rpb24uaHRtbCBpcyBm
bGFreQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjUyMTgx
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUQ1BT
ZXJ2ZXIuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRl
c3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KQEAgLTQ3NCw2
ICs0NzUsMTA1IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2MKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIH0KIAorQGludGVyZmFjZSBE
YXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRp
b25EZWxlZ2F0ZSwgV0tVSURlbGVnYXRlPgorLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXdhaXRG
b3JNZXNzYWdlczooc2l6ZV90KWNvdW50OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gRGF0YVRh
c2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheTxOU1N0cmluZyAqPj4gX21lc3NhZ2VzOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW19t
ZXNzYWdlcyBhZGRPYmplY3Q6bWVzc2FnZV07CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30K
KworLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXdhaXRGb3JNZXNzYWdlczooc2l6ZV90KW1lc3Nh
Z2VDb3VudAoreworICAgIF9tZXNzYWdlcyA9IGFkb3B0TlMoW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5Om1lc3NhZ2VDb3VudF0pOworICAgIHdoaWxlIChbX21lc3NhZ2VzIGNvdW50
XSA8IG1lc3NhZ2VDb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxv
b3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2VzLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKHZvaWQp
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBk
aXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICogY3JlZGVudGlhbCkpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlVXNl
Q3JlZGVudGlhbCwgW05TVVJMQ3JlZGVudGlhbCBjcmVkZW50aWFsRm9yVHJ1c3Q6Y2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdF0pOworfQorCitAZW5kCisKK1RFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uKQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJOworCisgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+
IHNlcnZlcnNDb25uZWN0ZWQgeyAwIH07CisgICAgY29uc3QgY2hhciogaGVhZGVyID0gIkhUVFAv
MS4xIDIwMCBPS1xyXG5Db250ZW50LUxlbmd0aDogMjdcclxuXHJcbiI7CisKKyAgICBUQ1BTZXJ2
ZXIgaHR0cHNTZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFNQcm94eSwgWyZdIChTU0wq
IHNzbCkgeworICAgICAgICBzZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2
ZXJzQ29ubmVjdGVkIDwgMikKKyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBU
Q1BTZXJ2ZXI6OnJlYWQoc3NsKTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzc2wsIGhlYWRl
ciwgc3RybGVuKGhlYWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+
YWxlcnQoJzEnKTwvc2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBib2R5
LCBzdHJsZW4oYm9keSkpOworICAgIH0pOworCisgICAgVENQU2VydmVyIGh0dHBTZXJ2ZXIoWyZd
IChpbnQgc29ja2V0KSB7CisgICAgICAgIHNlcnZlcnNDb25uZWN0ZWQrKzsKKyAgICAgICAgd2hp
bGUgKHNlcnZlcnNDb25uZWN0ZWQgPCAyKQorICAgICAgICAgICAgdXNsZWVwKDEwMDAwMCk7Cisg
ICAgICAgIFRDUFNlcnZlcjo6cmVhZChzb2NrZXQpOworICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRl
KHNvY2tldCwgaGVhZGVyLCBzdHJsZW4oaGVhZGVyKSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGJv
ZHkgPSAiPHNjcmlwdD5hbGVydCgnMicpPC9zY3JpcHQ+IjsKKyAgICAgICAgVENQU2VydmVyOjp3
cml0ZShzb2NrZXQsIGJvZHksIHN0cmxlbihib2R5KSk7CisgICAgfSk7CisKKyAgICBfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqc3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBzdG9yZUNv
bmZpZ3VyYXRpb24uaHR0cHNQcm94eSA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgaHR0cHNTZXJ2ZXIucG9y
dCgpXV07CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246c3RvcmVDb25maWd1cmF0aW9u
XSBhdXRvcmVsZWFzZV07CisgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dL
V2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW3ZpZXdDb25maWd1cmF0aW9uIHNldFdl
YnNpdGVEYXRhU3RvcmU6ZGF0YVN0b3JlXTsKKworICAgIGF1dG8gd2ViVmlldzEgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEw
MCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dl
YlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2Vz
cyBhbmQgaW5pdGlhbGl6ZSBkYXRhIHN0b3JlIl07CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIG5ld10pOworICAgIGF1dG8g
d2ViVmlldzIgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9u
LmdldCgpXSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
ICAgIFt3ZWJWaWV3MSBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAg
IFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbZGF0YVN0b3JlIF9z
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOworICAgIFtkYXRhU3RvcmUgX3Nl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU6WUVTXTsKKworICAgIF9fYmxvY2sgYm9v
bCBpc29sYXRlZFNlc3Npb25Eb21haW4gPSBmYWxzZTsKKyAgICBfX2Jsb2NrIE5TVVJMICpwcmV2
YWxlbnRFeGFtcGxlID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3ByZXZhbGVudC1l
eGFtcGxlLmNvbS8iXTsKKyAgICBbZGF0YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246cHJldmFs
ZW50RXhhbXBsZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBbZGF0YVN0b3JlIF9zZXRQ
cmV2YWxlbnREb21haW46cHJldmFsZW50RXhhbXBsZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lk
KSB7CisgICAgICAgICAgICBbZGF0YVN0b3JlIF9zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRl
Ol57CisgICAgICAgICAgICAgICAgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH1dOworICAgICAgICB9XTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmlzb2xhdGVkU2Vzc2lvbkRvbWFpbik7CisKKyAgICBbd2ViVmlldzEgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHA6Ly8xMjcuMC4wLjE6JWQvIiwgaHR0cFNlcnZl
ci5wb3J0KCldXV1dOworICAgIFt3ZWJWaWV3MiBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhh
bXBsZS5jb20vIl1dXTsKKworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKm1lc3NhZ2VzID0gW2Rl
bGVnYXRlIHdhaXRGb3JNZXNzYWdlczoyXTsKKyAgICBhdXRvIGNvbnRhaW5zID0gW10gKE5TQXJy
YXk8TlNTdHJpbmcgKj4gKmFycmF5LCBOU1N0cmluZyAqZXhwZWN0ZWQpIHsKKyAgICAgICAgZm9y
IChOU1N0cmluZyAqcyBpbiBhcnJheSkgeworICAgICAgICAgICAgaWYgKFtzIGlzRXF1YWxUb1N0
cmluZzpleHBlY3RlZF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMo
bWVzc2FnZXMsIEAiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtZXNzYWdlcywgQCIy
IikpOworfQorCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5vTWVzc2FnZXNXaGVuTm90
VGVzdGluZykKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTgxKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlv
bnM6CisgICAgICAgIFJlLWVuYWJsZSBza2lwcGVkIHRlc3RzLgorCiAyMDE5LTExLTA2ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBbIGlP
UyBdICggcjI1MTAxNSApIExheW91dCBUZXN0IGZhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFw
LW92ZXJmbG93LXNlbGVjdGlvbi5odG1sIGlzIGZsYWt5CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjUyMTgxKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc0Niwx
MCArNzQ2LDYgQEAgaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2RvLW5vdAogaHR0
cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2VzLWNh
bi1hY2Nlc3MtY29va2llcy1pbi1hLXRoaXJkLXBhcnR5LWNvbnRleHQuaHRtbCBbIFNraXAgXQog
aHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NhcC1jYWNoZS1tYXgtYWdlLWZvci1w
cmV2YWxlbnQtcmVzb3VyY2UuaHRtbCBbIFNraXAgXQogCi0jIHJkYXI6Ly9wcm9ibGVtLzU2OTIx
NTg0Ci1odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24t
bmF2aWdhdGlvbi10by1wcmV2YWxlbnQtd2l0aC1pbnRlcmFjdGlvbi5waHAgWyBTa2lwIF0KLWh0
dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0
aW9uLXRvLXByZXZhbGVudC13aXRoLWludGVyYWN0aW9uLWRhdGFiYXNlLnBocCBbIFNraXAgXQot
CiAjIFRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgdW5m
aW5pc2hlZCA8cmRhcjovL3Byb2JsZW0vMzg5MjUwNzc+LgogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3Byb2Nlc3Mtc3dhcC13aW5kb3ctb3Blbi5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383046</attachid>
            <date>2019-11-07 07:34:44 -0800</date>
            <delta_ts>2019-11-07 08:37:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107153442.patch</filename>
            <type>text/plain</type>
            <size>67571</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwog
MjAxOS0xMS0wNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wbGVtZW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6cm9sZURlc2NyaXB0aW9uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGlj
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgOiB1aW50OF90IHsKICAgICBEb05vdFVzZSwKICAgICBVc2UsCi0g
ICAgRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcworICAgIEVwaGVtZXJhbFN0YXRlbGVzcwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjcgQEAKKzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciBy
MjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIyNTIxMTYgd2FzIGEgcm9sbG91dCBv
ZiByMjQ4NjQwLCB3aGljaCBpbnRyb2R1Y2VkIGNhc2VzIHdoZXJlIGRhdGEgdGFza3MgZnJvbSBk
aWZmZXJlbnQgTlNVUkxTZXNzaW9ucworICAgICAgICB3aGljaCBjYW4gaGF2ZSB0aGUgc2FtZSB0
YXNrIGlkZW50aWZpZXJzIHdlcmUgcHV0IGludG8gdGhlIHNhbWUgbWFwcy4gIFRoaXMga2V5IGNv
bGxpc2lvbiBjYXVzZWQgZGF0YSBmcm9tIHRoZSB3cm9uZworICAgICAgICB0YXNrcyB0byBiZSBz
ZW50IHRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlciwgY2F1c2luZyByYXJlIGFuZCBzdHJhbmdlIGxv
YWRpbmcgYnVncy4gIEluIG9yZGVyIHRvIHByZXZlbnQgaW5zZXJ0aW9uIGludG8KKyAgICAgICAg
d3JvbmcgbWFwcyBhZ2FpbiwgSSBtYWRlIGEgbmV3IGFic3RyYWN0aW9uLCBTZXNzaW9uV3JhcHBl
ciwgd2hpY2ggd3JhcHMgYSBOU1VSTFNlc3Npb24sIGl0cyBkZWxlZ2F0ZSwgYW5kIGFsbCBtYXBz
CisgICAgICAgIHRoYXQgYXJlIHNjb3BlZCB0byB0aGF0IE5TVVJMU2Vzc2lvbi4gIEFsb25nIHRo
ZSB3YXkgSSBmb3VuZCBhIGZldyBvdGhlciBwbGFjZXMgd2hlcmUgd2UgaGFkIG1hZGUgc2ltaWxh
ciBtaXN0YWtlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGFuIEFQSSB0ZXN0IHdoaWNoIHdvdWxk
J3ZlIGZhaWxlZCBiZWZvcmUgcjI1MjExNiBiZWNhdXNlIGl0IGV4ZXJjaXNlcyB0aGUga2V5IGNv
bGxpc2lvbiBjb25kaXRpb24sCisgICAgICAgIGFuZCBieSB0ZXN0cyB3aGljaCB3ZXJlIHNraXBw
ZWQgaW4gcjI1MjExNiBhbmQgSSBub3cgdW5za2lwcGVkLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpyZXN1bWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29h
OjpOZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGUgaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjp3aXRoQ3JlZGVudGlhbHM6XSk6CisgICAg
ICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdKToKKyAg
ICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5nVGFzazpdKToKKyAgICAg
ICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25Db2NvYV0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9u
OnRhc2s6X3NjaGVtZVVwZ3JhZGVkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazp3aWxsQ2FjaGVSZXNw
b25zZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKHByb2Nlc3NTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6ZGlkQ29tcGxldGVX
aXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNz
aW9uOmRvd25sb2FkVGFzazpkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOl0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkV3Jp
dGVEYXRhOnRvdGFsQnl0ZXNXcml0dGVuOnRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6XSk6Cisg
ICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFz
azpkaWRSZXN1bWVBdE9mZnNldDpleHBlY3RlZFRvdGFsQnl0ZXM6XSk6CisgICAgICAgICgtW1dL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25s
b2FkVGFzazpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5n
V2ViU29ja2V0VGFzazpdKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvbldyYXBwZXI6OmluaXRp
YWxpemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vz
c2lvbkNvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlh
bGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2spOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNvY2tldFRhc2sp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRU
YXNrKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a1Nlc3Npb246d2l0aENyZWRlbnRpYWxzOl0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29h
OjpzZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2Nv
YTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGREb3dubG9hZElEKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VEb3du
bG9hZElEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJz
aXRlRGF0YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6
CisKIDIwMTktMTEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFdlYkRyaXZlcjogY29ycmVjdGx5IGhhbmRsZSBlcnJvcnMgd2hlbiBmb2N1
c2luZyBlbGVtZW50IGJlZm9yZSBzZW5kaW5nIGtleSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcg
KzE2OCw3IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYKICAgICBs
b2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVycy5zb3Vy
Y2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7
CiAgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElE
KCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9ucyA9IG9w
dGlvbnM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJpY3RIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0RhdGFUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDQgKzE1OCw5IEBAIFBBTDo6U2Vzc2lvbklEIE5ldHdvcmtEYXRhVGFzazo6c2Vz
c2lvbkkKICAgICByZXR1cm4gbV9zZXNzaW9uLT5zZXNzaW9uSUQoKTsKIH0KIAorTmV0d29ya1Nl
c3Npb24qIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQoreworICAgIHJldHVybiBt
X3Nlc3Npb24uZ2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAy
NTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGljOgogCiAgICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3Q7CiAKKyAgICBOZXR3b3JrU2Vzc2lvbiogbmV0d29y
a1Nlc3Npb24oKTsKKwogcHJvdGVjdGVkOgogICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vz
c2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFt
ZU5hdmlnYXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHJldmlzaW9u
IDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29h
L0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDEwIEBAIHZvaWQg
RG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWYKICAgICBOU0RhdGEgKnVwZGF0ZWRE
YXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDpk
aWN0aW9uYXJ5IGZvcm1hdDpOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wIG9wdGlvbnM6MCBl
cnJvcjpudWxscHRyXTsKICNlbmRpZgogCi0gICAgbV9kb3dubG9hZFRhc2sgPSBjb2NvYVNlc3Np
b24uZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEodXBkYXRlZERhdGEpOwotICAgIGNvY29hU2Vz
c2lvbi5hZGREb3dubG9hZElEKG1fZG93bmxvYWRUYXNrLmdldCgpLnRhc2tJZGVudGlmaWVyLCBt
X2Rvd25sb2FkSUQpOworICAgIG1fZG93bmxvYWRUYXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9u
V3JhcHBlckZvckRvd25sb2FkcygpLnNlc3Npb24gZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGE6
dXBkYXRlZERhdGFdOworICAgIGF1dG8gdGFza0lkZW50aWZpZXIgPSBbbV9kb3dubG9hZFRhc2sg
dGFza0lkZW50aWZpZXJdOworICAgIEFTU0VSVCghY29jb2FTZXNzaW9uLnNlc3Npb25XcmFwcGVy
Rm9yRG93bmxvYWRzKCkuZG93bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKKyAg
ICBjb2NvYVNlc3Npb24uc2Vzc2lvbldyYXBwZXJGb3JEb3dubG9hZHMoKS5kb3dubG9hZE1hcC5h
ZGQodGFza0lkZW50aWZpZXIsIFNlc3Npb25XcmFwcGVyOjpEb3dubG9hZERhdGEgeyBtX2Rvd25s
b2FkSUQsIG1ha2VXZWFrUHRyKG5ldHdvcmtTZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpKSB9KTsK
ICAgICBtX2Rvd25sb2FkVGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmlsZSA9IHBhdGg7
CiAKICAgICBbbV9kb3dubG9hZFRhc2sgcmVzdW1lXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJ
KHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWQ7CiBjbGFzcyBOZXR3b3JrU2Vzc2lv
bkNvY29hOworc3RydWN0IFNlc3Npb25XcmFwcGVyOwogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2tD
b2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrRGF0YVRhc2sgewogICAgIGZyaWVuZCBjbGFzcyBO
ZXR3b3JrU2Vzc2lvbkNvY29hOwpAQCAtODksNiArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
aXNUaGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25z
dDsKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCisgICAgU2Vz
c2lvbldyYXBwZXImIG1fc2Vzc2lvbldyYXBwZXI7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNp
b24+IG1fc2FuZGJveEV4dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRh
c2s+IG1fdGFzazsKICAgICBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MgbV9uZXR3b3JrTG9h
ZE1ldHJpY3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4MSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
Y29tcHV0ZUlzQWx3YXlzT25Mb2dnCiAKIE5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0
YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVk
ZW50aWFscywgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRD
b250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3Vs
ZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QsIFByZWNvbm5lY3RPbmx5IHNob3VsZFByZWNvbm5lY3RPbmx5LCBib29sIGRh
dGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uLCBib29sIGRhdGFUYXNrSXNGb3JNYWluUmVz
b3VyY2VOYXZpZ2F0aW9uRm9yQW55RnJhbWUsIE9wdGlvbmFsPE5ldHdvcmtBY3Rpdml0eVRyYWNr
ZXI+IG5ldHdvcmtBY3Rpdml0eVRyYWNrZXIpCiAgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lv
biwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgZGF0YVRhc2tJc0Zv
ck1haW5GcmFtZU5hdmlnYXRpb24pCisgICAgLCBtX3Nlc3Npb25XcmFwcGVyKHN0YXRpY19jYXN0
PE5ldHdvcmtTZXNzaW9uQ29jb2EmPihzZXNzaW9uKS5zZXNzaW9uV3JhcHBlckZvclRhc2socmVx
dWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpKQogICAgICwgbV9m
cmFtZUlEKGZyYW1lSUQpCiAgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX2lzRm9yTWFp
blJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKGRhdGFUYXNrSXNGb3JNYWluUmVzb3VyY2VO
YXZpZ2F0aW9uRm9yQW55RnJhbWUpCkBAIC0yMDYsMTQgKzIwNywxMSBAQCBOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jCiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQmxv
Y2tDb29raWVzID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVkc0lzb2xhdGVkU2Vzc2lvbiA9IGZhbHNl
OwotICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKHJlcXVl
c3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNz
Q29va2llbGVzczsKKyAgICBzaG91bGRCbG9ja0Nvb2tpZXMgPSBzdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVs
ZXNzOwogICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzZXNzaW9uLm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpKSB7CiAgICAgICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKQog
ICAgICAgICAgICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5z
aG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS81NjkyMTU4ND4gbmVlZHNJc29sYXRlZFNlc3Npb24gc2hv
dWxkIGJlIHNldCBoZXJlLgogICAgIH0KICNlbmRpZgogICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVy
cmVyVG9PcmlnaW5JZk5lZWRlZChyZXF1ZXN0KTsKQEAgLTIyMSwxNCArMjE5LDExIEBAIE5ldHdv
cmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2MKICAgICBOU1VSTFJlcXVlc3QgKm5z
UmVxdWVzdCA9IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9s
aWN5OjpVcGRhdGVIVFRQQm9keSk7CiAgICAgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJl
cXVlc3RUb0luZmVyZmFjZUlmTmVlZGVkKG5zUmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmID09
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeTo6U25pZmZDb250ZW50ICYmICF1cmwuaXNM
b2NhbEZpbGUoKSwgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYgPT0gV2ViQ29yZTo6Q29udGVu
dEVuY29kaW5nU25pZmZpbmdQb2xpY3k6OlNuaWZmKTsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lv
biA9IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBp
ZiAobmVlZHNJc29sYXRlZFNlc3Npb24pCi0gICAgICAgIG1fdGFzayA9IFtjb2NvYVNlc3Npb24u
aXNvbGF0ZWRTZXNzaW9uKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBmaXJzdFBhcnR5KSBkYXRh
VGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgZWxzZQotICAgICAgICBtX3Rhc2sgPSBb
Y29jb2FTZXNzaW9uLnNlc3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIGRhdGFUYXNrV2l0
aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uV3JhcHBlci5zZXNz
aW9uIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKIAotICAgIExPRyhOZXR3b3JrU2Vz
c2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k9JXUgYW5kIFVSTD0lcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5n
KTsKLSAgICBjb2NvYVNlc3Npb24ucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNrIHRhc2tJZGVudGlm
aWVyXSwgKnRoaXMsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghbV9zZXNzaW9uV3JhcHBlci5kYXRhVGFza01hcC5jb250YWlucyhbbV90YXNrIHRhc2tJZGVu
dGlmaWVyXSkpOworICAgIG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuYWRkKFttX3Rhc2sg
dGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENy
ZWF0aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdLCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOwogCiAgICAgaWYg
KHNob3VsZFByZWNvbm5lY3RPbmx5ID09IFByZWNvbm5lY3RPbmx5OjpZZXMpIHsKICNpZiBFTkFC
TEUoU0VSVkVSX1BSRUNPTk5FQ1QpCkBAIC0yNjYsOCArMjYxLDggQEAgTmV0d29ya0RhdGFUYXNr
Q29jb2E6On5OZXR3b3JrRGF0YVRhc2tDbwogICAgIGlmICghbV90YXNrIHx8ICFtX3Nlc3Npb24p
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGNvY29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0
PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqbV9zZXNzaW9uKTsKLSAgICBjb2NvYVNlc3Npb24udW5y
ZWdpc3RlckRhdGFUYXNrKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCAqdGhpcywgbV9zdG9yZWRD
cmVkZW50aWFsc1BvbGljeSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZXNzaW9uV3JhcHBlci5k
YXRhVGFza01hcC5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgIG1f
c2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJd
KTsKIH0KIAogdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJy
ZXJUb09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAg
LTM1Nyw3ICszNTIsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjp3aWxsUGVyZm9ybUhU
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGlmICghbV9oYXNC
ZWVuU2V0VG9Vc2VTdGF0ZWxlc3NDb29raWVTdG9yYWdlKSB7Ci0gICAgICAgIGlmIChtX3N0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpF
cGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzCisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRp
YWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxT
dGF0ZWxlc3MKICAgICAgICAgICAgIHx8IChtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpICYmIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNob3VsZEJsb2NrQ29v
a2llcyhyZXF1ZXN0LCBtX2ZyYW1lSUQsIG1fcGFnZUlEKSkpCiAgICAgICAgICAgICBibG9ja0Nv
b2tpZXMoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaAkocmV2aXNpb24gMjUyMTgxKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIE9CSkNfQ0xBU1MgRE1GV2Vic2l0
ZVBvbGljeU1vbml0b3I7CiBPQkpDX0NMQVNTIE5TRGF0YTsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNz
aW9uOworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uOwogT0JKQ19DTEFTUyBO
U1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7CiBPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiBP
QkpDX0NMQVNTIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKQEAgLTQ1LDYgKzQ2LDIzIEBAIE9C
SkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbldlYlNvY2tldERlbGUKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrU2Vz
c2lvbkNvY29hOworCitzdHJ1Y3QgU2Vzc2lvbldyYXBwZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8U2Vzc2lvbldyYXBwZXI+IHsKKyAgICB2b2lkIGluaXRpYWxpemUoTlNVUkxTZXNzaW9uQ29u
ZmlndXJhdGlvbiAqLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBzZXNzaW9uOworICAgIFJldGFpblB0cjxXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGU+IGRlbGVnYXRlOworICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IGRhdGFUYXNrTWFwOwor
ICAgIHN0cnVjdCBEb3dubG9hZERhdGEgeworICAgICAgICBEb3dubG9hZElEIGRvd25sb2FkSUQ7
CisgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3M+IG5ldHdvcmtQcm9jZXNzOworICAgIH07
CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25s
b2FkRGF0YT4gZG93bmxvYWRNYXA7CisjaWYgSEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQor
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBXZWJTb2Nr
ZXRUYXNrKj4gd2ViU29ja2V0RGF0YVRhc2tNYXA7CisjZW5kaWYKK307CiAKIGNsYXNzIE5ldHdv
cmtTZXNzaW9uQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24gewogICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2NvYTsKQEAgLTU0LDcgKzcyLDcgQEAgcHVibGljOgog
ICAgIE5ldHdvcmtTZXNzaW9uQ29jb2EoTmV0d29ya1Byb2Nlc3MmLCBOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycyYmKTsKICAgICB+TmV0d29ya1Nlc3Npb25Db2NvYSgpOwogCi0gICAg
dm9pZCBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CiAKICAgICBjb25z
dCBTdHJpbmcmIGJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcigpIGNvbnN0OwogICAgIGNvbnN0IFN0
cmluZyYgc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgY29uc3Q7CkBAIC02Mywy
MSArODEsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgZGF0YUNvbm5lY3Rpb25TZXJ2
aWNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZTsgfQog
I2VuZGlmCiAKLSAgICBOZXR3b3JrRGF0YVRhc2tDb2NvYSogZGF0YVRhc2tGb3JJZGVudGlmaWVy
KE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpOwotICAgIHZvaWQgcmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiwgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIHZvaWQgdW5yZWdpc3RlckRhdGFUYXNrKE5l
dHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2Em
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSk7Ci0KLSAgICBOU1VSTFNlc3Npb25E
b3dubG9hZFRhc2sqIGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhKE5TRGF0YSopOwotCi0gICAg
V2ViU29ja2V0VGFzayogd2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRh
c2s6OlRhc2tJZGVudGlmaWVyKTsKLQotICAgIHZvaWQgYWRkRG93bmxvYWRJRChOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQpOwotICAgIERvd25sb2FkSUQg
ZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIpOwotICAgIERv
d25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyKTsKLQogICAgIHN0YXRpYyBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKIAotICAgIHZv
aWQgY29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3
b3JrRGF0YVRhc2tDb2NvYSosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+
JiYpOworICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKFNlc3Npb25XcmFwcGVy
JiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4mJik7CisKKyAgICBTZXNzaW9uV3JhcHBlciYg
c2Vzc2lvbldyYXBwZXJGb3JEb3dubG9hZHMoKSB7IHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2U7IH0KIAogICAgIGJvb2wgZmFzdFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2Zhc3RTZXJ2ZXJUcnVzdEV2YWx1YXRpb25FbmFibGVkOyB9
CiAgICAgYm9vbCBkZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQ7IH0KQEAgLTg2LDgg
Kzk0LDYgQEAgcHVibGljOgogCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5Q29uZmlndXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlDb25maWd1cmF0aW9uLmdldCgpOyB9CiAKLSAgICBO
U1VSTFNlc3Npb24qIHNlc3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwot
ICAgIE5TVVJMU2Vzc2lvbiogaXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbik7CiAgICAgYm9vbCBo
YXNJc29sYXRlZFNlc3Npb24oY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJJc29sYXRlZFNlc3Npb25zKCkgb3ZlcnJpZGU7CiAK
QEAgLTk2LDYgKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkg
b3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb247IH0KICAgICBTZWNv
bmRzIGxvYWRUaHJvdHRsZUxhdGVuY3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvYWRU
aHJvdHRsZUxhdGVuY3k7IH0KKyAgICBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JU
YXNrKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5KTsKKyAgICBTZXNzaW9uV3JhcHBlciYgaXNvbGF0ZWRTZXNzaW9uKFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbik7CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENo
YW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKSBmaW5hbDsKQEAgLTEwMywzMiArMTExLDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZW1vdmVXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smKSBmaW5hbDsKICNlbmRpZgogCi0gICAg
SGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRh
VGFza0NvY29hKj4mIGRhdGFUYXNrTWFwKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
KTsKLQotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBO
ZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAg
SGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRh
VGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZTsKLSAgICBIYXNoTWFwPE5ldHdv
cmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBt
X2RhdGFUYXNrTWFwRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKLSAgICBIYXNoTWFwPE5l
dHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9h
ZE1hcDsKLSNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0gICAgSGFzaE1hcDxOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYlNvY2tldFRhc2sqPiBtX3dlYlNv
Y2tldERhdGFUYXNrTWFwOwotI2VuZGlmCi0KICAgICBzdHJ1Y3QgSXNvbGF0ZWRTZXNzaW9uIHsK
LSAgICAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZTsKLSAgICAgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwotICAgICAgICBSZXRhaW5QdHI8TlNVUkxT
ZXNzaW9uPiBzdGF0ZWxlc3NTZXNzaW9uOwotICAgICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlPiBzdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGU7CisgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vz
c2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lv
bldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKICAgICAgICAgV2FsbFRpbWUgbGFzdFVzZWQ7CiAg
ICAgfTsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIElzb2xhdGVk
U2Vzc2lvbj4gbV9pc29sYXRlZFNlc3Npb25zOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4sIHN0ZDo6dW5pcXVlX3B0cjxJc29sYXRlZFNlc3Npb24+PiBtX2lzb2xhdGVk
U2Vzc2lvbnM7CiAKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2U7Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4g
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbj4gbV9zdGF0ZWxlc3NTZXNzaW9uOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGU+IG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlOwotICAgIFJldGFpblB0
cjxOU1VSTFNlc3Npb24+IG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb247Ci0g
ICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9lcGhlbWVyYWxTdGF0ZWxl
c3NDb29raWVsZXNzU2Vzc2lvbkRlbGVnYXRlOworICAgIFNlc3Npb25XcmFwcGVyIG1fc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBTZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRo
b3V0Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgU2Vzc2lvbldyYXBwZXIgbV9lcGhlbWVyYWxTdGF0
ZWxlc3NTZXNzaW9uOwogCiAgICAgU3RyaW5nIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyOwog
ICAgIFN0cmluZyBtX3NvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTQgKzQ4LDE1IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZO
ZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9P
YmpDUnVudGltZUV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNp
bXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8
d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICNpbmNs
dWRlIDxXZWJLaXRBZGRpdGlvbnMvTmV0d29ya1Nlc3Npb25Db2NvYUFkZGl0aW9ucy5oPgpAQCAt
Mzk1LDI0ICszOTYsMjQgQEAgQGludGVyZmFjZSBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBO
UwogICAgICwgTlNVUkxTZXNzaW9uV2ViU29ja2V0RGVsZWdhdGUKICNlbmRpZgogPiB7Ci0gICAg
V2Vha1B0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E+IF9zZXNzaW9uOworICAgIFdlYWtQ
dHI8V2ViS2l0OjpTZXNzaW9uV3JhcHBlcj4gX3Nlc3Npb25XcmFwcGVyOwogICAgIGJvb2wgX3dp
dGhDcmVkZW50aWFsczsKIH0KIAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRo
Q3JlZGVudGlhbHM7CistIChpZClpbml0V2l0aFNlc3Npb25XcmFwcGVyOihXZWJLaXQ6OlNlc3Np
b25XcmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRl
bnRpYWxzOwogLSAodm9pZClzZXNzaW9uSW52YWxpZGF0ZWQ7CiAKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRp
YWxzOihib29sKXdpdGhDcmVkZW50aWFscworLSAoaWQpaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjoo
V2ViS2l0OjpTZXNzaW9uV3JhcHBlciYpc2Vzc2lvbldyYXBwZXIgd2l0aENyZWRlbnRpYWxzOihi
b29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYg
KCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX3Nlc3Npb24gPSBtYWtlV2Vha1B0
cihzZXNzaW9uKTsKKyAgICBfc2Vzc2lvbldyYXBwZXIgPSBtYWtlV2Vha1B0cihzZXNzaW9uV3Jh
cHBlcik7CiAgICAgX3dpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFsczsKIAogICAgIHJl
dHVybiBzZWxmOwpAQCAtNDIwLDI0ICs0MjEsMjMgQEAgLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vz
c2lvbjooV2ViS2l0OjpOZQogCiAtICh2b2lkKXNlc3Npb25JbnZhbGlkYXRlZAogewotICAgIF9z
ZXNzaW9uID0gbnVsbHB0cjsKKyAgICBfc2Vzc2lvbldyYXBwZXIgPSBudWxscHRyOwogfQogCiAt
IChOZXR3b3JrRGF0YVRhc2tDb2NvYSopZXhpc3RpbmdUYXNrOihOU1VSTFNlc3Npb25UYXNrICop
dGFzawogewotICAgIGlmICghX3Nlc3Npb24pCisgICAgaWYgKCFfc2Vzc2lvbldyYXBwZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCF0YXNrKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBfd2l0aENyZWRl
bnRpYWxzID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSA6IFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZTsKLSAgICByZXR1cm4gX3Nlc3Npb24t
PmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyLCBzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSk7CisgICAgcmV0dXJuIF9zZXNzaW9uV3JhcHBlci0+ZGF0YVRhc2tNYXAuZ2V0
KHRhc2sudGFza0lkZW50aWZpZXIpOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gZGlkQmVjb21lSW52YWxpZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9y
CiB7Ci0gICAgQVNTRVJUKCFfc2Vzc2lvbik7CisgICAgQVNTRVJUKCFfc2Vzc2lvbldyYXBwZXIp
OwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazoo
TlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkU2VuZEJvZHlEYXRhOihpbnQ2NF90KWJ5dGVzU2Vu
dCB0b3RhbEJ5dGVzU2VudDooaW50NjRfdCl0b3RhbEJ5dGVzU2VudCB0b3RhbEJ5dGVzRXhwZWN0
ZWRUb1NlbmQ6KGludDY0X3QpdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kCkBAIC01MjcsMTIgKzUy
NywxNSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKICAgICAg
ICAgYm9vbCBzaG91bGRJZ25vcmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKLSAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3Jh
ZGVkRHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3Mo
KS5zdG9yYWdlU2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tp
ZXMocmVxdWVzdCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+
cGFnZUlEKCkpOwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAg
cmVxdWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQo
W3JlcXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAg
ICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8g
aHR0cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3Ry
aW5nKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogc2Vzc2lvbkNvY29hID0gbmV0d29y
a0RhdGFUYXNrLT5uZXR3b3JrU2Vzc2lvbigpKSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVI
U1RTID0gc2NoZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Np
b25Db2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNl
c3Npb25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+
ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRJZ25vcmVIU1RTKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJl
cXVlc3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hl
bWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29y
a1Nlc3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lk
ZW50aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCiAKICAgICAgICAgbmV0d29ya0RhdGFUYXNrLT53aWxsUGVyZm9ybUhUVFBSZWRp
cmVjdGlvbihyZXNwb25zZSwgcmVxdWVzdCwgW2NvbXBsZXRpb25IYW5kbGVyQ29weSwgdGFza0lk
ZW50aWZpZXIsIHNob3VsZElnbm9yZUhTVFNdKGF1dG8mJiByZXF1ZXN0KSB7CkBAIC01NjAsMTIg
KzU2MywxNSBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAg
aWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXSkgewog
ICAgICAgICBib29sIHNob3VsZElnbm9yZUhTVFMgPSBmYWxzZTsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2NoZW1lV2Fz
VXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIF9zZXNzaW9uLT5uZXR3b3JrUHJv
Y2VzcygpLnN0b3JhZ2VTZXNzaW9uKF9zZXNzaW9uLT5zZXNzaW9uSUQoKSktPnNob3VsZEJsb2Nr
Q29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0d29ya0RhdGFU
YXNrLT5wYWdlSUQoKSk7Ci0gICAgICAgIGlmIChzaG91bGRJZ25vcmVIU1RTKSB7Ci0gICAgICAg
ICAgICByZXF1ZXN0ID0gZG93bmdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIEFT
U0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSk7Ci0gICAg
ICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRw
cyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVU
RjhTdHJpbmcpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uQ29jb2EgPSBu
ZXR3b3JrRGF0YVRhc2stPm5ldHdvcmtTZXNzaW9uKCkpIHsKKyAgICAgICAgICAgIHNob3VsZEln
bm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1pY0hTVFMocmVxdWVzdCkgJiYg
c2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2VzcygpLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25Db2Nv
YS0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbmV0d29ya0RhdGFU
YXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkpOworICAgICAgICAgICAg
aWYgKHNob3VsZElnbm9yZUhTVFMpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZG93bmdy
YWRlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3QuVVJM
LnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOworICAgICAgICAgICAgICAgIExPRyhO
ZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0dHAiLCB0
YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAjZW5kaWYKIAogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJs
b2NrX2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtNTg4LDExICs1OTQsNiBAQCAtICh2b2lk
KVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjoo
TlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilk
YXRhVGFzayB3aWxsQ2FjaGVSZXNwb25zZTooTlNDYWNoZWRVUkxSZXNwb25zZSAqKXByb3Bvc2Vk
UmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
KmNhY2hlZFJlc3BvbnNlKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nlc3Npb24p
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIC8vIEZJWE1FOiByZW1vdmUgaWYgPHJkYXI6Ly9wcm9ibGVtLzIwMDAxOTg1PiBp
cyBldmVyIHJlc29sdmVkLgogICAgIGlmIChbcHJvcG9zZWRSZXNwb25zZS5yZXNwb25zZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGFsbEhlYWRlckZpZWxkcyldCiAgICAgICAgICYmIFtb
KGlkKXByb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXSBvYmplY3RGb3JL
ZXk6QCJDb250ZW50LVJhbmdlIl0pCkBAIC02MDIsOSArNjAzLDkgQEAgLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogfQogCiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxT
RVNTSU9OX1NUUklDVFJVU1RFVkFMVUFURSkKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRh
c2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29y
a0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVu
Z2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFsKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKE5ldHdvcmtTZXNzaW9uQ29jb2EgKnNlc3Npb24sIFNlc3Npb25XcmFwcGVy
JiBzZXNzaW9uV3JhcHBlciwgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hhbGxlbmdl
LCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5l
dHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBOU1VS
TENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHNl
c3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIHRhc2tJZGVudGlm
aWVyLCBuZXR3b3JrRGF0YVRhc2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBzZWNUcnVzdCA9IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVjdGlvblNw
YWNlLnNlcnZlclRydXN0KV0gKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkg
bXV0YWJsZSB7CisgICAgc2Vzc2lvbi0+Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKHNlc3Np
b25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2ssIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzZWNUcnVzdCA9
IHJldGFpblB0cihjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KV0gKFdlYktp
dDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkgbXV0YWJsZSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBVSVByb2Nlc3Mgc2hvdWxkIHNlbmQgdXMgYmFjayBub24gbmlsIGNyZWRlbnRpYWxzIGJ1
dCB0aGUgY3JlZGVudGlhbCBJUEMgZW5jb2RlciBjdXJyZW50bHkgb25seSBzZXJpYWxpemVzIG5z
IGNyZWRlbnRpYWxzIGZvciB1c2VybmFtZS9wYXNzd29yZC4KICAgICAgICAgaWYgKGRpc3Bvc2l0
aW9uID09IFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3Jl
ZGVudGlhbCAmJiAhY3JlZGVudGlhbC5uc0NyZWRlbnRpYWwoKSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtO
U1VSTENyZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OiBzZWNUcnVzdC5nZXQoKV0pOwpAQCAt
NjE3LDcgKzYxOCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU2VydmVyVHJ1c3RFdmEK
IAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJM
U2Vzc2lvblRhc2sgKil0YXNrIGRpZFJlY2VpdmVDaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50
aWFsICpjcmVkZW50aWFsKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGlmICghX3Nlc3Npb24g
fHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNhbmNlbGluZykgeworICAg
IGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXTsKKyAgICBh
dXRvKiBzZXNzaW9uQ29jb2EgPSBuZXR3b3JrRGF0YVRhc2sgPyBzdGF0aWNfY2FzdDxOZXR3b3Jr
U2Vzc2lvbkNvY29hKj4obmV0d29ya0RhdGFUYXNrLT5uZXR3b3JrU2Vzc2lvbigpKSA6IG51bGxw
dHI7CisgICAgaWYgKCFzZXNzaW9uQ29jb2EgfHwgW3Rhc2sgc3RhdGVdID09IE5TVVJMU2Vzc2lv
blRhc2tTdGF0ZUNhbmNlbGluZykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNl
c3Npb25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MzcsMTggKzY0MCwyMSBAQCAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtOU1VSTENy
ZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uuc2Vy
dmVyVHJ1c3RdKTsKIAogICAgICAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24g
YXQgcGxhdGZvcm0tbGV2ZWwgaWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBh
bmQgdG8gdXNlIEFUUyBkZWZhdWx0cy4KLSAgICAgICAgaWYgKF9zZXNzaW9uLT5mYXN0U2VydmVy
VHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzZXNzaW9uQ29jb2EtPmZh
c3RTZXJ2ZXJUcnVzdEV2YWx1YXRpb25FbmFibGVkKCkpIHsKICNpZiBIQVZFKENGTkVUV09SS19O
U1VSTFNFU1NJT05fU1RSSUNUUlVTVEVWQUxVQVRFKQogICAgICAgICAgICAgYXV0byogbmV0d29y
a0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdOwogICAgICAgICAgICAgQVNTRVJU
KG5ldHdvcmtEYXRhVGFzayk7Ci0gICAgICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihbX3Nlc3Npb24gPSBtYWtlV2Vha1B0cihfc2Vzc2lvbi5nZXQoKSksIGNvbXBs
ZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKSwgdGFza0lkZW50
aWZpZXIsIG5ldHdvcmtEYXRhVGFzayA9IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4obmV0
d29ya0RhdGFUYXNrKV0oTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqY2hhbGxlbmdlLCBP
U1N0YXR1cyB0cnVzdFJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIGRlY2lzaW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGU+KHNlbGYpLCBzZXNzaW9uQ29jb2EgPSBtYWtlV2Vha1B0cihzZXNzaW9u
Q29jb2EpLCBjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
ciksIHRhc2tJZGVudGlmaWVyLCBuZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrQ29jb2E+KG5ldHdvcmtEYXRhVGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
KmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgIGF1dG8gc3Ryb25nU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICAgICAgICAgIGlm
ICghc3Ryb25nU2VsZikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSwgbmlsKTsKICAgICAgICAgICAgICAgICBhdXRvIHRhc2sgPSBXVEZNb3ZlKG5ldHdvcmtEYXRh
VGFzayk7Ci0gICAgICAgICAgICAgICAgYXV0byogc2Vzc2lvbiA9IF9zZXNzaW9uLmdldCgpOwor
ICAgICAgICAgICAgICAgIGF1dG8qIHNlc3Npb24gPSBzZXNzaW9uQ29jb2EuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgaWYgKHRydXN0UmVzdWx0ID09IG5vRXJyIHx8ICFzZXNzaW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVu
Z2VQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLCBuaWwpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByb2Nlc3NTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oc2Vzc2lvbiwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQo
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIHByb2Nlc3NT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb24oc2Vzc2lvbiwgKnN0cm9uZ1NlbGYtPl9zZXNzaW9uV3JhcHBl
ciwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgdGFzay5nZXQoKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBbTlNVUkxTZXNzaW9u
IF9zdHJpY3RUcnVzdEV2YWx1YXRlOmNoYWxsZW5nZSBxdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBt
YWluUXVldWVdLnVuZGVybHlpbmdRdWV1ZSBjb21wbGV0aW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRs
ZXIuZ2V0KCldOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjU3LDE2ICs2NjMsMTMgQEAgLSAo
dm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogI2VuZGlmCiAgICAgICAgIH0K
ICAgICB9Ci0gICAgX3Nlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVu
Z2UsIHRhc2tJZGVudGlmaWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9u
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgeworICAgIHNlc3Npb25Db2NvYS0+Y29u
dGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKCpfc2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwgdGFz
a0lkZW50aWZpZXIsIFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXSwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYgY3JlZGVudGlhbCkgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRv
TlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSwgY3JlZGVu
dGlhbC5uc0NyZWRlbnRpYWwoKSk7CiAgICAgfSk7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjoo
TlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRD
b21wbGV0ZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBkaWRDb21w
bGV0ZVdpdGhFcnJvciAlQCIsIHRhc2sudGFza0lkZW50aWZpZXIsIGVycm9yKTsKIAogICAgIGlm
IChlcnJvcikgewpAQCAtNjc5LDI5ICs2ODIsMzQgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VS
TFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBl
eGlzdGluZ1Rhc2s6dGFza10pCiAgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+ZGlkQ29tcGxldGVX
aXRoRXJyb3IoZXJyb3IsIG5ldHdvcmtEYXRhVGFzay0+bmV0d29ya0xvYWRNZXRyaWNzKCkpOwog
ICAgIGVsc2UgaWYgKGVycm9yKSB7Ci0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9u
LT50YWtlRG93bmxvYWRJRCh0YXNrLnRhc2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGRvd25s
b2FkSUQuZG93bmxvYWRJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZG93bmxvYWQgPSBf
c2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3du
bG9hZElEKSkgewotICAgICAgICAgICAgICAgIE5TRGF0YSAqcmVzdW1lRGF0YSA9IG5pbDsKLSAg
ICAgICAgICAgICAgICBpZiAoaWQgdXNlckluZm8gPSBlcnJvci51c2VySW5mbykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoW3VzZXJJbmZvIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBj
bGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVEYXRhID0gdXNlckluZm9b
QCJOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2tSZXN1bWVEYXRhIl07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdW1lRGF0YSAmJiAhW3Jlc3VtZURhdGEgaXNLaW5kT2ZDbGFzczpbTlNE
YXRhIGNsYXNzXV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhO
ZXR3b3JrU2Vzc2lvbiwgIkRvd25sb2FkIHRhc2sgJWxsdSBmaW5pc2hlZCB3aXRoIHJlc3VtZSBk
YXRhIG9mIHdyb25nIGNsYXNzOiAlcyIsICh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay50YXNrSWRl
bnRpZmllciwgTlNTdHJpbmdGcm9tQ2xhc3MoW3Jlc3VtZURhdGEgY2xhc3NdKS5VVEY4U3RyaW5n
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVEYXRhID0gbmlsOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bWVEYXRhUmVmZXJlbmNlID0gcmVzdW1lRGF0YSA/
IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1bWVE
YXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGggfSA6IElQQzo6RGF0YVJlZmVyZW5jZSB7IH07
CisgICAgICAgIGF1dG8gZG93bmxvYWREYXRhID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1h
cC50YWtlKHRhc2sudGFza0lkZW50aWZpZXIpOworICAgICAgICBpZiAoIWRvd25sb2FkRGF0YS5k
b3dubG9hZElELmRvd25sb2FkSUQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBkb3dubG9hZERhdGEubmV0d29ya1Byb2Nlc3MuZ2V0KCk7Cisg
ICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGF1dG8qIGRvd25sb2FkID0gbmV0d29ya1Byb2Nlc3MtPmRvd25sb2FkTWFuYWdlcigpLmRvd25s
b2FkKGRvd25sb2FkRGF0YS5kb3dubG9hZElEKTsKKyAgICAgICAgaWYgKCFkb3dubG9hZCkKKyAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGlmIChkb3dubG9hZC0+d2FzQ2Fu
Y2VsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQtPmRpZENhbmNlbChyZXN1bWVE
YXRhUmVmZXJlbmNlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCByZXN1bWVEYXRhUmVmZXJlbmNlKTsKKyAgICAgICAg
TlNEYXRhICpyZXN1bWVEYXRhID0gbmlsOworICAgICAgICBpZiAoaWQgdXNlckluZm8gPSBlcnJv
ci51c2VySW5mbykgeworICAgICAgICAgICAgaWYgKFt1c2VySW5mbyBpc0tpbmRPZkNsYXNzOltO
U0RpY3Rpb25hcnkgY2xhc3NdXSkgeworICAgICAgICAgICAgICAgIHJlc3VtZURhdGEgPSB1c2Vy
SW5mb1tAIk5TVVJMU2Vzc2lvbkRvd25sb2FkVGFza1Jlc3VtZURhdGEiXTsKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdW1lRGF0YSAmJiAhW3Jlc3VtZURhdGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRh
IGNsYXNzXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29ya1Nlc3Np
b24sICJEb3dubG9hZCB0YXNrICVsbHUgZmluaXNoZWQgd2l0aCByZXN1bWUgZGF0YSBvZiB3cm9u
ZyBjbGFzczogJXMiLCAodW5zaWduZWQgbG9uZyBsb25nKXRhc2sudGFza0lkZW50aWZpZXIsIE5T
U3RyaW5nRnJvbUNsYXNzKFtyZXN1bWVEYXRhIGNsYXNzXSkuVVRGOFN0cmluZyk7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bWVEYXRhID0gbmlsOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gcmVzdW1lRGF0YVJlZmVyZW5jZSA9IHJlc3VtZURhdGEgPyBJ
UEM6OkRhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdW1lRGF0
YS5ieXRlcyksIHJlc3VtZURhdGEubGVuZ3RoIH0gOiBJUEM6OkRhdGFSZWZlcmVuY2UgeyB9Owor
CisgICAgICAgIGlmIChkb3dubG9hZC0+d2FzQ2FuY2VsZWQoKSkKKyAgICAgICAgICAgIGRvd25s
b2FkLT5kaWRDYW5jZWwocmVzdW1lRGF0YVJlZmVyZW5jZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCByZXN1bWVEYXRhUmVmZXJlbmNlKTsKICAg
ICB9CiB9CiAKQEAgLTgzNiw2MCArODQ0LDYxIEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxT
ZXNzaW9uICopc2Vzc2kKIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNr
IGRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6KE5TVVJMICopbG9jYXRpb24KIHsKLSAgICBpZiAo
IV9zZXNzaW9uKQorICAgIGF1dG8gZG93bmxvYWREYXRhID0gX3Nlc3Npb25XcmFwcGVyLT5kb3du
bG9hZE1hcC50YWtlKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICBpZiAoIWRv
d25sb2FkRGF0YS5uZXR3b3JrUHJvY2VzcykKICAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBk
b3dubG9hZElEID0gX3Nlc3Npb24tPnRha2VEb3dubG9hZElEKFtkb3dubG9hZFRhc2sgdGFza0lk
ZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29ya1By
b2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkKKyAgICBpZiAo
YXV0byogZG93bmxvYWQgPSBkb3dubG9hZERhdGEubmV0d29ya1Byb2Nlc3MtPmRvd25sb2FkTWFu
YWdlcigpLmRvd25sb2FkKGRvd25sb2FkRGF0YS5kb3dubG9hZElEKSkKICAgICAgICAgZG93bmxv
YWQtPmRpZEZpbmlzaCgpOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gZG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKilkb3dubG9h
ZFRhc2sgZGlkV3JpdGVEYXRhOihpbnQ2NF90KWJ5dGVzV3JpdHRlbiB0b3RhbEJ5dGVzV3JpdHRl
bjooaW50NjRfdCl0b3RhbEJ5dGVzV3JpdHRlbiB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlOihp
bnQ2NF90KXRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGUKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFbc2VsZiBleGlzdGlu
Z1Rhc2s6ZG93bmxvYWRUYXNrXSwgIlRoZSBOZXR3b3JrRGF0YVRhc2sgc2hvdWxkIGJlIGRlc3Ry
b3llZCBpbW1lZGlhdGVseSBhZnRlciBkaWRCZWNvbWVEb3dubG9hZFRhc2sgcmV0dXJucyIpOwog
Ci0gICAgYXV0byBkb3dubG9hZElEID0gX3Nlc3Npb24tPmRvd25sb2FkSUQoW2Rvd25sb2FkVGFz
ayB0YXNrSWRlbnRpZmllcl0pOwotICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IF9zZXNzaW9uLT5u
ZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKQor
ICAgIGF1dG8gZG93bmxvYWREYXRhID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC5nZXQo
W2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOworICAgIGlmICghZG93bmxvYWREYXRhLm5l
dHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8qIGRvd25sb2FkID0g
ZG93bmxvYWREYXRhLm5ldHdvcmtQcm9jZXNzLT5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChk
b3dubG9hZERhdGEuZG93bmxvYWRJRCkpCiAgICAgICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlRGF0
YShieXRlc1dyaXR0ZW4pOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gZG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKilkb3dubG9h
ZFRhc2sgZGlkUmVzdW1lQXRPZmZzZXQ6KGludDY0X3QpZmlsZU9mZnNldCBleHBlY3RlZFRvdGFs
Qnl0ZXM6KGludDY0X3QpZXhwZWN0ZWRUb3RhbEJ5dGVzCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRhdGFUYXNrOihOU1VSTFNlc3Npb25E
YXRhVGFzayAqKWRhdGFUYXNrIGRpZEJlY29tZURvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrICopZG93bmxvYWRUYXNrCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFz
ayA9IFtzZWxmIGV4aXN0aW5nVGFzazpkYXRhVGFza10pIHsKLSAgICAgICAgUmVmPE5ldHdvcmtE
YXRhVGFza0NvY29hPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7
Ci0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25s
b2FkSUQoKTsKLSAgICAgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gX3Nlc3Npb24tPm5ldHdv
cmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7Ci0gICAgICAgIGF1dG8gZG93bmxvYWQgPSBt
YWtlVW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwg
ZG93bmxvYWRUYXNrLCAqX3Nlc3Npb24sIG5ldHdvcmtEYXRhVGFzay0+c3VnZ2VzdGVkRmlsZW5h
bWUoKSk7Ci0gICAgICAgIG5ldHdvcmtEYXRhVGFzay0+dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9u
VG9Eb3dubG9hZCgqZG93bmxvYWQpOwotICAgICAgICBBU1NFUlQoRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpKTsKLSAgICAg
ICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKG5ldHdvcmtEYXRhVGFzay0+cGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24oKSk7Ci0gICAgICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0Jl
Y2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CisgICAgYXV0
byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOmRhdGFUYXNrXTsKKyAgICBp
ZiAoIW5ldHdvcmtEYXRhVGFzaykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNlc3Npb25D
b2NvYSA9IG5ldHdvcmtEYXRhVGFzay0+bmV0d29ya1Nlc3Npb24oKTsKKyAgICBpZiAoIXNlc3Np
b25Db2NvYSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIF9zZXNzaW9uLT5hZGREb3dubG9h
ZElEKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdLCBkb3dubG9hZElEKTsKLSAgICB9Cisg
ICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5l
dHdvcmtEYXRhVGFzayk7CisgICAgYXV0byBkb3dubG9hZElEID0gbmV0d29ya0RhdGFUYXNrLT5w
ZW5kaW5nRG93bmxvYWRJRCgpOworICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IHNlc3Npb25D
b2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKTsKKyAgICBhdXRvIGRvd25s
b2FkID0gbWFrZVVuaXF1ZTxXZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRvd25s
b2FkSUQsIGRvd25sb2FkVGFzaywgKnNlc3Npb25Db2NvYSwgbmV0d29ya0RhdGFUYXNrLT5zdWdn
ZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4
dGVuc2lvblRvRG93bmxvYWQoKmRvd25sb2FkKTsKKyAgICBBU1NFUlQoRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpKTsKKyAg
ICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5n
RG93bmxvYWRMb2NhdGlvbigpKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVE
b3dubG9hZFRhc2soZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworCisgICAgUkVMRUFT
RV9BU1NFUlQoIV9zZXNzaW9uV3JhcHBlci0+ZG93bmxvYWRNYXAuY29udGFpbnMoZG93bmxvYWRU
YXNrLnRhc2tJZGVudGlmaWVyKSk7CisgICAgX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC5h
ZGQoZG93bmxvYWRUYXNrLnRhc2tJZGVudGlmaWVyLCBTZXNzaW9uV3JhcHBlcjo6RG93bmxvYWRE
YXRhIHsgZG93bmxvYWRJRCwgbWFrZVdlYWtQdHIoc2Vzc2lvbkNvY29hLT5uZXR3b3JrUHJvY2Vz
cygpKSB9KTsKIH0KIAogI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKIC0gKFdlYlNv
Y2tldFRhc2sqKWV4aXN0aW5nV2ViU29ja2V0VGFzazooTlNVUkxTZXNzaW9uV2ViU29ja2V0VGFz
ayAqKXRhc2sKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQorICAgIGlmICghX3Nlc3Npb25XcmFwcGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghdGFzaykKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gX3Nlc3Npb24tPndlYlNvY2tldERhdGFUYXNrRm9y
SWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gX3Nlc3Npb25XcmFw
cGVyLT53ZWJTb2NrZXREYXRhVGFza01hcC5nZXQodGFzay50YXNrSWRlbnRpZmllcik7CiB9CiAK
IApAQCAtOTcyLDYgKzk4MSwxMiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpwcm94eURpY3Rpb25h
cnkoY29uCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKK3ZvaWQg
U2Vzc2lvbldyYXBwZXI6OmluaXRpYWxpemUoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29u
ZmlndXJhdGlvbiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpCit7CisgICAgdGhpcy0+ZGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3Jr
U2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNlc3Npb25XcmFwcGVyOip0aGlzIHdpdGhD
cmVkZW50aWFsczpzdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeTo6VXNlXSk7CisgICAgdGhpcy0+c2Vzc2lvbiA9IFtOU1VSTFNlc3Npb24g
c2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKK30KKwog
TmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYg
bmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1l
dGVycykKICAgICA6IE5ldHdvcmtTZXNzaW9uKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzKQog
ICAgICwgbV9ib3VuZEludGVyZmFjZUlkZW50aWZpZXIocGFyYW1ldGVycy5ib3VuZEludGVyZmFj
ZUlkZW50aWZpZXIpCkBAIC0xMDYzLDggKzEwNzgsNyBAQCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpO
ZXR3b3JrU2Vzc2lvbkNvY29hCiAgICAgICAgIGNvb2tpZVN0b3JhZ2UuX292ZXJyaWRlU2Vzc2lv
bkNvb2tpZUFjY2VwdFBvbGljeSA9IFlFUzsKICNlbmRpZgogCi0gICAgbV9zZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczp0
cnVlXSk7Ci0gICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlID0gW05TVVJMU2Vzc2lv
biBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNf
Y2FzdDxpZD4obV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUuZ2V0KCkpIGRl
bGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CisgICAgbV9zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSk7CiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAi
Q3JlYXRlZCBOZXR3b3JrU2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2VwdFBvbGljeSAlbHUiLCBjb25m
aWd1cmF0aW9uLkhUVFBDb29raWVTdG9yYWdlLmNvb2tpZUFjY2VwdFBvbGljeSk7CiAKICAgICBj
b25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTA3Myw4ICsxMDg3
LDcgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQogICAgIC8vIGNv
bmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBuaWw7CiAgICAgLy8gY29uZmlndXJhdGlv
bi5IVFRQQ29va2llQWNjZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI7
CiAKLSAgICBtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENy
ZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9zdGF0ZWxlc3NTZXNzaW9uID0gW05TVVJMU2Vzc2lv
biBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNf
Y2FzdDxpZD4obV9zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6
W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CisgICAgbV9zZXNzaW9uV2l0aG91dENyZWRl
bnRpYWxTdG9yYWdlLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKTsKIAogICAgIG1fZGV2aWNlTWFuYWdlbWVudFJlc3Ry
aWN0aW9uc0VuYWJsZWQgPSBwYXJhbWV0ZXJzLmRldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNF
bmFibGVkOwogICAgIG1fYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rp
b25zRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMuYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2Vt
ZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZzsKQEAgLTEwOTcsMTAgKzExMTAsMTAgQEAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNzaW9uQ29jbwogewogfQogCi12b2lkIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lv
bigpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxl
c3NTZXNzaW9uKCkKIHsKICAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNvbmZpZ3Vy
YXRpb25dOwotICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJh
dGlvbiA9IG1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uOworICAgIE5TVVJM
U2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IG1fc2Vzc2lvbldp
dGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb247CiAKICAg
ICBjb25maWd1cmF0aW9uLkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lOZXZlcjsKICAgICBjb25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0g
bmlsOwpAQCAtMTExNSw0NCArMTEyOCw0OCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlu
aXRpYWxpemVFcGhlCiAgICAgY29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VU
eXBlID0gZXhpc3RpbmdDb25maWd1cmF0aW9uLl9DVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7
CiAjZW5kaWYKIAotICAgIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
TmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9lcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldp
dGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1f
ZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdh
dGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzKTsKIH0KIAotTlNVUkxTZXNzaW9u
KiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQorU2Vzc2lvbldyYXBwZXImIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNlc3Npb25XcmFwcGVyRm9yVGFzayhjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5KQogeworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCisgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkpIHsKKyAgICAgICAgYXV0byBmaXJzdFBhcnR5ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4ocmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgaWYgKHN0b3JhZ2VT
ZXNzaW9uLT5zaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQnV0S2VlcEZpcnN0UGFydHlDb29r
aWVzRm9yKGZpcnN0UGFydHkpKQorICAgICAgICAgICAgcmV0dXJuIGlzb2xhdGVkU2Vzc2lvbihz
dG9yZWRDcmVkZW50aWFsc1BvbGljeSwgZmlyc3RQYXJ0eSk7CisgICAgfSBlbHNlCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKICAgICBzd2l0Y2ggKHN0b3JlZENyZWRl
bnRpYWxzUG9saWN5KSB7CiAgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eTo6VXNlOgotICAgICAgICByZXR1cm4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmdl
dCgpOworICAgICAgICByZXR1cm4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwogICAg
IGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOgotICAgICAg
ICByZXR1cm4gbV9zdGF0ZWxlc3NTZXNzaW9uLmdldCgpOwotICAgIGNhc2UgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAg
ICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbikKLSAgICAgICAg
ICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpOwotICAg
ICAgICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbi5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBj
YXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M6
CisgICAgICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uLnNlc3Npb24pCisgICAg
ICAgICAgICBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbigpOworICAgICAgICBy
ZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uOwogICAgIH0KIH0KIAotTlNVUkxTZXNz
aW9uKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24oV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIGZpcnN0UGFydHlEb21haW4pCitTZXNzaW9uV3JhcHBlciYgTmV0
d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiBmaXJzdFBhcnR5RG9tYWluKQogewotICAgIGF1dG8gZW50cnkgPSBtX2lzb2xh
dGVkU2Vzc2lvbnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4sIFt0aGlzXSB7Ci0gICAgICAgIElz
b2xhdGVkU2Vzc2lvbiBuZXdFbnRyeSB7IH07Ci0gICAgICAgIG5ld0VudHJ5LnNlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxz
OnRydWVdKTsKLSAgICAgICAgbmV3RW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSA9
IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOm1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZS5nZXQoKS5jb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlk
PihuZXdFbnRyeS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUuZ2V0KCkpIGRl
bGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07Ci0KLSAgICAgICAgbmV3
RW50cnkuc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Np
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVu
dGlhbHM6ZmFsc2VdKTsKLSAgICAgICAgbmV3RW50cnkuc3RhdGVsZXNzU2Vzc2lvbiA9IFtOU1VS
TFNlc3Npb24gc2Vzc2lvbldpdGhDb25maWd1cmF0aW9uOm1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQo
KS5jb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihuZXdFbnRyeS5zdGF0ZWxl
c3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVldWUg
bWFpblF1ZXVlXV07Ci0KKyAgICBhdXRvJiBlbnRyeSA9IG1faXNvbGF0ZWRTZXNzaW9ucy5lbnN1
cmUoZmlyc3RQYXJ0eURvbWFpbiwgW3RoaXNdIHsKKyAgICAgICAgYXV0byBuZXdFbnRyeSA9IG1h
a2VVbmlxdWU8SXNvbGF0ZWRTZXNzaW9uPigpOworICAgICAgICBuZXdFbnRyeS0+c2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZS5zZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb24sIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5OjpVc2UpOworICAgICAgICBuZXdFbnRyeS0+c2Vzc2lvbldpdGhvdXRDcmVkZW50
aWFsU3RvcmFnZS5pbml0aWFsaXplKG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5z
ZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb24sIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpEb05vdFVzZSk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7CiAKLSAgICBlbnRyeS5sYXN0VXNlZCA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBl
bnRyeS0+bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93KCk7CiAKICAgICBpZiAobV9pc29sYXRlZFNl
c3Npb25zLnNpemUoKSA+IG1heE51bWJlck9mSXNvbGF0ZWRTZXNzaW9ucykgewogICAgICAgICBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBrZXlUb1JlbW92ZTsKICAgICAgICAgYXV0byBvbGRl
c3RUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgICAgIGZvciAoYXV0byYga2V5IDog
bV9pc29sYXRlZFNlc3Npb25zLmtleXMoKSkgewotICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAg
PSBtX2lzb2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSkubGFzdFVzZWQ7CisgICAgICAgICAgICBhdXRv
IHRpbWVzdGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9ucy5nZXQoa2V5KS0+bGFzdFVzZWQ7CiAgICAg
ICAgICAgICBpZiAodGltZXN0YW1wIDwgb2xkZXN0VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAg
ICAgb2xkZXN0VGltZXN0YW1wID0gdGltZXN0YW1wOwogICAgICAgICAgICAgICAgIGtleVRvUmVt
b3ZlID0ga2V5OwpAQCAtMTE2NywxNCArMTE4NCwxNCBAQCBOU1VSTFNlc3Npb24qIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6Omlzb2xhCiAgICAgc3dpdGNoIChzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkg
ewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKICAgICAg
ICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcgaXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGgg
Y3JlZGVudGlhbCBzdG9yYWdlLiIpOwotICAgICAgICByZXR1cm4gZW50cnkuc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlOwogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OkRvTm90VXNlOgogICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJVc2luZyBpc29s
YXRlZCBOU1VSTFNlc3Npb24gd2l0aG91dCBjcmVkZW50aWFsIHN0b3JhZ2UuIik7Ci0gICAgICAg
IHJldHVybiBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9uLmdldCgpOwotICAgIGNhc2UgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M6Ci0g
ICAgICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbikKLSAgICAg
ICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbigpOwot
ICAgICAgICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbi5nZXQo
KTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdl
OworICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0
YXRlbGVzczoKKyAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lv
bikKKyAgICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7Cisg
ICAgICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb247CiAgICAgfQogfQogCkBA
IC0xMTkyLDE2ICsxMjA5LDE4IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0
ZUFuZEMKIHsKICAgICBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogCi0g
ICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsK
LSAgICBbbV9zdGF0ZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX2Vw
aGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOwot
ICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZSBzZXNzaW9uSW52YWxp
ZGF0ZWRdOwotICAgIFttX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0
ZWRdOwotICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUg
c2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
LnNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgIFttX2VwaGVt
ZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICBb
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRl
ZF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNz
aW9uSW52YWxpZGF0ZWRdOworICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uZGVsZWdh
dGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKIAogICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1faXNv
bGF0ZWRTZXNzaW9ucy52YWx1ZXMoKSkgewotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwotICAgICAgICBbc2Vzc2lvbi5z
ZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsK
KyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBp
bnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Np
b24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5k
Q2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3Jh
Z2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKICAgICB9CiAgICAgbV9pc29sYXRlZFNl
c3Npb25zLmNsZWFyKCk7CiB9CkBAIC0xMjIwLDY4ICsxMjM5LDYgQEAgdm9pZCBOZXR3b3JrU2Vz
c2lvbkNvY29hOjpjbGVhckNyZWRlbnRpYQogI2VuZGlmCiB9CiAKLUhhc2hNYXA8TmV0d29ya0Rh
dGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+JiBOZXR3
b3JrU2Vzc2lvbkNvY29hOjpkYXRhVGFza01hcChXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpIHsKLSAgICBjYXNl
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29r
aWVsZXNzOgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01hcEVwaGVtZXJhbFN0YXRlbGVzc0Nv
b2tpZWxlc3M7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9O
b3RVc2U6Ci0gICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aG91dFN0YXRlOwotICAgIGNh
c2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJu
IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwotfQotCi1O
ZXR3b3JrRGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0YVRhc2tGb3JJZGVu
dGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmll
ciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gZGF0YVRh
c2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpLmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0K
LXZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6cmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0Nv
Y29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtYXAuY29udGFpbnModGFza0lk
ZW50aWZpZXIpKTsKLSAgICBtYXAuYWRkKHRhc2tJZGVudGlmaWVyLCAmZGF0YVRhc2spOwotfQot
Ci12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnVucmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFz
a0NvY29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0gZGF0YVRhc2tNYXAoc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1hcC5nZXQodGFza0lkZW50
aWZpZXIpID09ICZkYXRhVGFzayk7Ci0gICAgbWFwLnJlbW92ZSh0YXNrSWRlbnRpZmllcik7Ci19
Ci0KLU5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxv
YWRUYXNrV2l0aFJlc3VtZURhdGEoTlNEYXRhKiByZXN1bWVEYXRhKQotewotICAgIHJldHVybiBb
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRh
OnJlc3VtZURhdGFdOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2Fk
SUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBE
b3dubG9hZElEIGRvd25sb2FkSUQpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghbV9k
b3dubG9hZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikpOwotICAgIGZvciAoYXV0byBpZElu
TWFwIDogbV9kb3dubG9hZE1hcC52YWx1ZXMoKSkKLSAgICAgICAgQVNTRVJUKGlkSW5NYXAgIT0g
ZG93bmxvYWRJRCk7Ci0jZW5kaWYKLSAgICBtX2Rvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmll
ciwgZG93bmxvYWRJRCk7Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93
bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIpCi17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKS5kb3du
bG9hZElEKCkpOwotICAgIHJldHVybiBtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7
Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQotewotICAg
IGF1dG8gZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFrZSh0YXNrSWRlbnRpZmllcik7Ci0g
ICAgcmV0dXJuIGRvd25sb2FkSUQ7Ci19Ci0KIHN0YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNo
KFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogewogICAgIGlmICghdHJ1
c3QxIHx8ICF0cnVzdDIpCkBAIC0xMzIyLDE4ICsxMjc5LDE3IEBAIGJvb2wgTmV0d29ya1Nlc3Np
b25Db2NvYTo6YWxsb3dzU3BlY2lmaWMKICAgICByZXR1cm4gY2VydGlmaWNhdGVzTWF0Y2godHJ1
c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkucHJvdGVj
dGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpj
b250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
IHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2Uo
U2Vzc2lvbldyYXBwZXImIHNlc3Npb25XcmFwcGVyLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50
aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKiBuZXR3b3JrRGF0YVRh
c2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2spIHsKICNpZiBIQVZFKE5TVVJMU0VT
U0lPTl9XRUJTT0NLRVQpCi0gICAgICAgIGlmIChhdXRvKiB3ZWJTb2NrZXRUYXNrID0gd2ViU29j
a2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAo
YXV0byogd2ViU29ja2V0VGFzayA9IHNlc3Npb25XcmFwcGVyLndlYlNvY2tldERhdGFUYXNrTWFw
LmdldCh0YXNrSWRlbnRpZmllcikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgY2hh
bGxlbmdlcyBmb3Igd2ViIHNvY2tldC4KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcs
IHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgotCi0gICAgICAg
IGF1dG8gZG93bmxvYWRJRCA9IHRoaXMtPmRvd25sb2FkSUQodGFza0lkZW50aWZpZXIpOworICAg
ICAgICBhdXRvIGRvd25sb2FkSUQgPSBzZXNzaW9uV3JhcHBlci5kb3dubG9hZE1hcC5nZXQodGFz
a0lkZW50aWZpZXIpLmRvd25sb2FkSUQ7CiAgICAgICAgIGlmIChkb3dubG9hZElELmRvd25sb2Fk
SUQoKSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gbmV0d29ya1Byb2Nlc3Mo
KS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkgewogICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlIHsgY2hhbGxlbmdlIH07CkBAIC0xMzk1LDI2ICsxMzUxLDIyIEBAIERNRldlYnNpdGVQb2xp
Y3lNb25pdG9yICpOZXR3b3JrU2Vzc2lvbkMKIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRUYXNr
PiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGVXZWJTb2NrZXRUYXNrKE5ldHdvcmtTb2NrZXRD
aGFubmVsJiBjaGFubmVsLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCiB7CiAgICAgLy8gRklYTUU6IFVzZSBwcm90b2NvbC4K
LSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uV2ViU29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCkgd2ViU29ja2V0VGFza1dpdGhSZXF1ZXN0OiBy
ZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RV
cGRhdGVIVFRQQm9keSldOworICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25XZWJTb2NrZXRUYXNr
PiB0YXNrID0gW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIHdlYlNvY2tl
dFRhc2tXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVw
ZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSldOwogICAgIHJldHVybiBtYWtlVW5pcXVl
PFdlYlNvY2tldFRhc2s+KGNoYW5uZWwsIFdURk1vdmUodGFzaykpOwogfQogCiB2b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNvY2tldFRhc2soV2ViU29ja2V0VGFzayYgdGFzaykKIHsK
LSAgICBBU1NFUlQoIW1fd2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlm
aWVyKCkpKTsKLSAgICBtX3dlYlNvY2tldERhdGFUYXNrTWFwLmFkZCh0YXNrLmlkZW50aWZpZXIo
KSwgJnRhc2spOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsK
KyAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAu
YWRkKHRhc2suaWRlbnRpZmllcigpLCAmdGFzayk7CiB9CiAKIHZvaWQgTmV0d29ya1Nlc3Npb25D
b2NvYTo6cmVtb3ZlV2ViU29ja2V0VGFzayhXZWJTb2NrZXRUYXNrJiB0YXNrKQogewotICAgIEFT
U0VSVChtX3dlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRpZmllcigpKSk7
Ci0gICAgbV93ZWJTb2NrZXREYXRhVGFza01hcC5yZW1vdmUodGFzay5pZGVudGlmaWVyKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2Nr
ZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50aWZpZXIoKSkpOworICAgIG1fc2Vzc2lv
bldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5yZW1vdmUodGFzay5p
ZGVudGlmaWVyKCkpOwogfQogCi1XZWJTb2NrZXRUYXNrKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjp3
ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50aWZpZXIoV2ViU29ja2V0VGFzazo6VGFza0lkZW50aWZp
ZXIgaWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gbV93ZWJTb2NrZXREYXRhVGFza01hcC5nZXQo
aWRlbnRpZmllcik7Ci19CisjZW5kaWYgLy8gSEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQog
Ci0jZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODc5LDcgKzg3OSw3IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3QKICAgICAgICAgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksCiAgICAgICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5OjpEb05vdFVzZSwKICAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZSwKLSAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVw
aGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3MKKyAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzcwogICAgID47CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0
NjMsMTcgQEAgLSAodm9pZClfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZToodgogI2VuZGlm
CiB9CiAKKy0gKHZvaWQpX2xvZ1VzZXJJbnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+bG9n
VXNlckludGVyYWN0aW9uKGRvbWFpbiwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
IH0pOworI2Vsc2UKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworI2VuZGlmCit9CisKIC0gKHZv
aWQpX3NldFByZXZhbGVudERvbWFpbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkocmV2aXNp
b24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCB0eXBl
ZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiAtIChib29sKV9oYXNSZWdpc3Rl
cmVkU2VydmljZVdvcmtlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjAp
KTsKIAogLSAodm9pZClfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZToodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygx
My4wKSk7CistICh2b2lkKV9sb2dVc2VySW50ZXJhY3Rpb246KE5TVVJMICopZG9tYWluIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZB
SUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfc2V0
UHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CiAtICh2b2lkKV9nZXRJc1ByZXZhbGVudERvbWFpbjooTlNVUkwgKilkb21h
aW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfY2xlYXJQ
cmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTgxKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNV
UkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tOgorICAgICAgICAoLVtEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29s
bGlzaW9uRGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VzOl0pOgorICAgICAgICAoLVtEYXRhVGFza0lk
ZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE5
LTExLTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OOiBbIGlPUyBdICggcjI1MTAxNSApIExheW91dCBUZXN0IGZhc3QvdGV4dC93aGl0ZXNw
YWNlL3ByZS13cmFwLW92ZXJmbG93LXNlbGVjdGlvbi5odG1sIGlzIGZsYWt5CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAyNTIxODEpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lt
cG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRDUFNlcnZlci5oIgogI2ltcG9y
dCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgog
I2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgpAQCAtNDc0LDYgKzQ3NSwxMDUgQEAgVEVT
VChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOZXR3b3JrUHJvYwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogfQogCitAaW50ZXJmYWNlIERhdGFUYXNrSWRlbnRpZmll
ckNvbGxpc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS1VJ
RGVsZWdhdGU+CistIChOU0FycmF5PE5TU3RyaW5nICo+ICopd2FpdEZvck1lc3NhZ2VzOihzaXpl
X3QpY291bnQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBEYXRhVGFza0lkZW50aWZpZXJDb2xs
aXNpb25EZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PE5TU3RyaW5nICo+
PiBfbWVzc2FnZXM7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBy
dW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5p
dGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbX21lc3NhZ2VzIGFkZE9iamVj
dDptZXNzYWdlXTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCistIChOU0FycmF5PE5T
U3RyaW5nICo+ICopd2FpdEZvck1lc3NhZ2VzOihzaXplX3QpbWVzc2FnZUNvdW50Cit7CisgICAg
X21lc3NhZ2VzID0gYWRvcHROUyhbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bWVz
c2FnZUNvdW50XSk7CisgICAgd2hpbGUgKFtfbWVzc2FnZXMgY291bnRdIDwgbWVzc2FnZUNvdW50
KQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVy
biBfbWVzc2FnZXMuYXV0b3JlbGVhc2UoKTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBOU1VS
TENyZWRlbnRpYWwgKiBjcmVkZW50aWFsKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNV
UkxDcmVkZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
LnNlcnZlclRydXN0XSk7Cit9CisKK0BlbmQKKworVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBEYXRhVGFza0lkZW50aWZpZXJDb2xsaXNpb24pCit7CisgICAgdXNpbmcgbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEk7CisKKyAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gc2VydmVyc0Nvbm5lY3Rl
ZCB7IDAgfTsKKyAgICBjb25zdCBjaGFyKiBoZWFkZXIgPSAiSFRUUC8xLjEgMjAwIE9LXHJcbkNv
bnRlbnQtTGVuZ3RoOiAyN1xyXG5cclxuIjsKKworICAgIFRDUFNlcnZlciBodHRwc1NlcnZlcihU
Q1BTZXJ2ZXI6OlByb3RvY29sOjpIVFRQU1Byb3h5LCBbJl0gKFNTTCogc3NsKSB7CisgICAgICAg
IHNlcnZlcnNDb25uZWN0ZWQrKzsKKyAgICAgICAgd2hpbGUgKHNlcnZlcnNDb25uZWN0ZWQgPCAy
KQorICAgICAgICAgICAgdXNsZWVwKDEwMDAwMCk7CisgICAgICAgIFRDUFNlcnZlcjo6cmVhZChz
c2wpOworICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNzbCwgaGVhZGVyLCBzdHJsZW4oaGVhZGVy
KSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGJvZHkgPSAiPHNjcmlwdD5hbGVydCgnMScpPC9zY3Jp
cHQ+IjsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzc2wsIGJvZHksIHN0cmxlbihib2R5KSk7
CisgICAgfSk7CisKKyAgICBUQ1BTZXJ2ZXIgaHR0cFNlcnZlcihbJl0gKGludCBzb2NrZXQpIHsK
KyAgICAgICAgc2VydmVyc0Nvbm5lY3RlZCsrOworICAgICAgICB3aGlsZSAoc2VydmVyc0Nvbm5l
Y3RlZCA8IDIpCisgICAgICAgICAgICB1c2xlZXAoMTAwMDAwKTsKKyAgICAgICAgVENQU2VydmVy
OjpyZWFkKHNvY2tldCk7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBoZWFkZXIs
IHN0cmxlbihoZWFkZXIpKTsKKyAgICAgICAgY29uc3QgY2hhciogYm9keSA9ICI8c2NyaXB0PmFs
ZXJ0KCcyJyk8L3NjcmlwdD4iOworICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNvY2tldCwgYm9k
eSwgc3RybGVuKGJvZHkpKTsKKyAgICB9KTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uICpzdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHN0b3JlQ29uZmlndXJhdGlvbi5odHRw
c1Byb3h5ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBodHRwc1NlcnZlci5wb3J0KCldXTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjpzdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsK
KyAgICBhdXRvIHZpZXdDb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBuZXddKTsKKyAgICBbdmlld0NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpk
YXRhU3RvcmVdOworCisgICAgYXV0byB3ZWJWaWV3MSA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApIGNvbmZpZ3Vy
YXRpb246dmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25v
dXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIGFuZCBpbml0aWFsaXpl
IGRhdGEgc3RvcmUiXTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbRGF0YVRhc2tJZGVu
dGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgbmV3XSk7CisgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MTAwLCAxMDApIGNvbmZpZ3VyYXRpb246dmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBb
d2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcxIHNl
dE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBzZXROYXZpZ2F0aW9uRGVs
ZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZTpZRVNdOworCisgICAgX19ibG9jayBib29sIGlzb2xhdGVkU2Vzc2lv
bkRvbWFpbiA9IGZhbHNlOworICAgIF9fYmxvY2sgTlNVUkwgKnByZXZhbGVudEV4YW1wbGUgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vcHJldmFsZW50LWV4YW1wbGUuY29tLyJdOwor
ICAgIFtkYXRhU3RvcmUgX2xvZ1VzZXJJbnRlcmFjdGlvbjpwcmV2YWxlbnRFeGFtcGxlIGNvbXBs
ZXRpb25IYW5kbGVyOl57CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFByZXZhbGVudERvbWFpbjpw
cmV2YWxlbnRFeGFtcGxlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAg
IFtkYXRhU3RvcmUgX3NjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGU6XnsKKyAgICAgICAgICAg
ICAgICBpc29sYXRlZFNlc3Npb25Eb21haW4gPSB0cnVlOworICAgICAgICAgICAgfV07CisgICAg
ICAgIH1dOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNvbGF0ZWRT
ZXNzaW9uRG9tYWluKTsKKworICAgIFt3ZWJWaWV3MSBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiaHR0cDovLzEyNy4wLjAuMTolZC8iLCBodHRwU2VydmVyLnBvcnQoKV1dXV07Cisg
ICAgW3dlYlZpZXcyIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3ByZXZhbGVudC1leGFtcGxlLmNvbS8iXV1dOwor
CisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqbWVzc2FnZXMgPSBbZGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VzOjJdOworICAgIGF1dG8gY29udGFpbnMgPSBbXSAoTlNBcnJheTxOU1N0cmluZyAqPiAq
YXJyYXksIE5TU3RyaW5nICpleHBlY3RlZCkgeworICAgICAgICBmb3IgKE5TU3RyaW5nICpzIGlu
IGFycmF5KSB7CisgICAgICAgICAgICBpZiAoW3MgaXNFcXVhbFRvU3RyaW5nOmV4cGVjdGVkXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtZXNzYWdlcywgQCIxIikp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1lc3NhZ2VzLCBAIjIiKSk7Cit9CisKIFRFU1Qo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTm9NZXNzYWdlc1doZW5Ob3RUZXN0aW5nKQogewogICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIxODEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMS0wNyAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlLWVu
YWJsZSBOU1VSTFNlc3Npb24gaXNvbGF0aW9uIGFmdGVyIHIyNTIxMTYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzkzNAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTY5MjE1ODQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgUmUt
ZW5hYmxlIHNraXBwZWQgdGVzdHMuCisKIDIwMTktMTEtMDYgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IFsgaU9TIF0gKCByMjUxMDE1ICkg
TGF5b3V0IFRlc3QgZmFzdC90ZXh0L3doaXRlc3BhY2UvcHJlLXdyYXAtb3ZlcmZsb3ctc2VsZWN0
aW9uLmh0bWwgaXMgZmxha3kKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhw
ZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhw
ZWN0YXRpb25zCShyZXZpc2lvbiAyNTIxODEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIv
VGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDEwICs3NDYsNiBAQCBodHRw
L3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZG8tbm90CiBodHRwL3Rlc3RzL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZXMtY2FuLWFjY2Vzcy1jb29raWVz
LWluLWEtdGhpcmQtcGFydHktY29udGV4dC5odG1sIFsgU2tpcCBdCiBodHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvY2FwLWNhY2hlLW1heC1hZ2UtZm9yLXByZXZhbGVudC1yZXNvdXJj
ZS5odG1sIFsgU2tpcCBdCiAKLSMgcmRhcjovL3Byb2JsZW0vNTY5MjE1ODQKLWh0dHAvdGVzdHMv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXBy
ZXZhbGVudC13aXRoLWludGVyYWN0aW9uLnBocCBbIFNraXAgXQotaHR0cC90ZXN0cy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3N3aXRjaC1zZXNzaW9uLW9uLW5hdmlnYXRpb24tdG8tcHJldmFsZW50
LXdpdGgtaW50ZXJhY3Rpb24tZGF0YWJhc2UucGhwIFsgU2tpcCBdCi0KICMgVGhpcyBmZWF0dXJl
IGlzIGN1cnJlbnRseSBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCB1bmZpbmlzaGVkIDxyZGFyOi8v
cHJvYmxlbS8zODkyNTA3Nz4uCiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcHJvY2Vzcy1zd2FwLXdp
bmRvdy1vcGVuLmh0bWwgWyBTa2lwIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383053</attachid>
            <date>2019-11-07 08:37:39 -0800</date>
            <delta_ts>2019-11-07 08:48:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107163737.patch</filename>
            <type>text/plain</type>
            <size>67516</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwog
MjAxOS0xMS0wNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW1wbGVtZW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6cm9sZURlc2NyaXB0aW9uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGlj
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgOiB1aW50OF90IHsKICAgICBEb05vdFVzZSwKICAgICBVc2UsCi0g
ICAgRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcworICAgIEVwaGVtZXJhbFN0YXRlbGVzcwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjcgQEAKKzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciBy
MjUyMTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDM5MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIyNTIxMTYgd2FzIGEgcm9sbG91dCBv
ZiByMjQ4NjQwLCB3aGljaCBpbnRyb2R1Y2VkIGNhc2VzIHdoZXJlIGRhdGEgdGFza3MgZnJvbSBk
aWZmZXJlbnQgTlNVUkxTZXNzaW9ucworICAgICAgICB3aGljaCBjYW4gaGF2ZSB0aGUgc2FtZSB0
YXNrIGlkZW50aWZpZXJzIHdlcmUgcHV0IGludG8gdGhlIHNhbWUgbWFwcy4gIFRoaXMga2V5IGNv
bGxpc2lvbiBjYXVzZWQgZGF0YSBmcm9tIHRoZSB3cm9uZworICAgICAgICB0YXNrcyB0byBiZSBz
ZW50IHRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlciwgY2F1c2luZyByYXJlIGFuZCBzdHJhbmdlIGxv
YWRpbmcgYnVncy4gIEluIG9yZGVyIHRvIHByZXZlbnQgaW5zZXJ0aW9uIGludG8KKyAgICAgICAg
d3JvbmcgbWFwcyBhZ2FpbiwgSSBtYWRlIGEgbmV3IGFic3RyYWN0aW9uLCBTZXNzaW9uV3JhcHBl
ciwgd2hpY2ggd3JhcHMgYSBOU1VSTFNlc3Npb24sIGl0cyBkZWxlZ2F0ZSwgYW5kIGFsbCBtYXBz
CisgICAgICAgIHRoYXQgYXJlIHNjb3BlZCB0byB0aGF0IE5TVVJMU2Vzc2lvbi4gIEFsb25nIHRo
ZSB3YXkgSSBmb3VuZCBhIGZldyBvdGhlciBwbGFjZXMgd2hlcmUgd2UgaGFkIG1hZGUgc2ltaWxh
ciBtaXN0YWtlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGFuIEFQSSB0ZXN0IHdoaWNoIHdvdWxk
J3ZlIGZhaWxlZCBiZWZvcmUgcjI1MjExNiBiZWNhdXNlIGl0IGV4ZXJjaXNlcyB0aGUga2V5IGNv
bGxpc2lvbiBjb25kaXRpb24sCisgICAgICAgIGFuZCBieSB0ZXN0cyB3aGljaCB3ZXJlIHNraXBw
ZWQgaW4gcjI1MjExNiBhbmQgSSBub3cgdW5za2lwcGVkLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpyZXN1bWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29h
OjpOZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGUgaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjp3aXRoQ3JlZGVudGlhbHM6XSk6CisgICAg
ICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdKToKKyAg
ICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5nVGFzazpdKToKKyAgICAg
ICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25Db2NvYV0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9u
OnRhc2s6X3NjaGVtZVVwZ3JhZGVkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazp3aWxsQ2FjaGVSZXNw
b25zZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKHByb2Nlc3NTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lv
bjp0YXNrOmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6ZGlkQ29tcGxldGVX
aXRoRXJyb3I6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNz
aW9uOmRvd25sb2FkVGFzazpkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOl0pOgorICAgICAgICAo
LVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkV3Jp
dGVEYXRhOnRvdGFsQnl0ZXNXcml0dGVuOnRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6XSk6Cisg
ICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFz
azpkaWRSZXN1bWVBdE9mZnNldDpleHBlY3RlZFRvdGFsQnl0ZXM6XSk6CisgICAgICAgICgtW1dL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25s
b2FkVGFzazpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5n
V2ViU29ja2V0VGFzazpdKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvbldyYXBwZXI6OmluaXRp
YWxpemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vz
c2lvbkNvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlh
bGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2spOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNvY2tldFRhc2sp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRU
YXNrKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29y
a1Nlc3Npb246d2l0aENyZWRlbnRpYWxzOl0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29h
OjpzZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2Nv
YTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGREb3dubG9hZElEKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VEb3du
bG9hZElEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJz
aXRlRGF0YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6
CisKIDIwMTktMTEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFdlYkRyaXZlcjogY29ycmVjdGx5IGhhbmRsZSBlcnJvcnMgd2hlbiBmb2N1
c2luZyBlbGVtZW50IGJlZm9yZSBzZW5kaW5nIGtleSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcg
KzE2OCw3IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYKICAgICBs
b2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVycy5zb3Vy
Y2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7
CiAgICAgbG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElE
KCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAgICBsb2Fk
UGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9ucyA9IG9w
dGlvbnM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJpY3RIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0RhdGFUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDQgKzE1OCw5IEBAIFBBTDo6U2Vzc2lvbklEIE5ldHdvcmtEYXRhVGFzazo6c2Vz
c2lvbkkKICAgICByZXR1cm4gbV9zZXNzaW9uLT5zZXNzaW9uSUQoKTsKIH0KIAorTmV0d29ya1Nl
c3Npb24qIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQoreworICAgIHJldHVybiBt
X3Nlc3Npb24uZ2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAy
NTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGljOgogCiAgICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3Q7CiAKKyAgICBOZXR3b3JrU2Vzc2lvbiogbmV0d29y
a1Nlc3Npb24oKTsKKwogcHJvdGVjdGVkOgogICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vz
c2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFt
ZU5hdmlnYXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHJldmlzaW9u
IDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29h
L0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDEwIEBAIHZvaWQg
RG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWYKICAgICBOU0RhdGEgKnVwZGF0ZWRE
YXRhID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDpk
aWN0aW9uYXJ5IGZvcm1hdDpOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wIG9wdGlvbnM6MCBl
cnJvcjpudWxscHRyXTsKICNlbmRpZgogCi0gICAgbV9kb3dubG9hZFRhc2sgPSBjb2NvYVNlc3Np
b24uZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEodXBkYXRlZERhdGEpOwotICAgIGNvY29hU2Vz
c2lvbi5hZGREb3dubG9hZElEKG1fZG93bmxvYWRUYXNrLmdldCgpLnRhc2tJZGVudGlmaWVyLCBt
X2Rvd25sb2FkSUQpOworICAgIG1fZG93bmxvYWRUYXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9u
V3JhcHBlckZvckRvd25sb2FkcygpLnNlc3Npb24gZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGE6
dXBkYXRlZERhdGFdOworICAgIGF1dG8gdGFza0lkZW50aWZpZXIgPSBbbV9kb3dubG9hZFRhc2sg
dGFza0lkZW50aWZpZXJdOworICAgIEFTU0VSVCghY29jb2FTZXNzaW9uLnNlc3Npb25XcmFwcGVy
Rm9yRG93bmxvYWRzKCkuZG93bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKKyAg
ICBjb2NvYVNlc3Npb24uc2Vzc2lvbldyYXBwZXJGb3JEb3dubG9hZHMoKS5kb3dubG9hZE1hcC5h
ZGQodGFza0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CiAgICAgbV9kb3dubG9hZFRhc2suZ2V0
KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBwYXRoOwogCiAgICAgW21fZG93bmxvYWRUYXNr
IHJlc3VtZV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCShyZXZpc2lvbiAyNTIxODEpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIERvd25sb2FkOwogY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3N0cnVjdCBTZXNzaW9u
V3JhcHBlcjsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0
d29ya0RhdGFUYXNrIHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKQEAg
LTg5LDYgKzkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVGhpcmRQYXJ0eVJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CiAgICAgYm9vbCBpc0Fsd2F5c09u
TG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKIAorICAgIFNlc3Npb25XcmFwcGVyJiBtX3Nlc3Npb25X
cmFwcGVyOwogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNpb247
CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiAgICAgV2ViQ29y
ZTo6TmV0d29ya0xvYWRNZXRyaWNzIG1fbmV0d29ya0xvYWRNZXRyaWNzOwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzIsNiArMTcyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXB1dGVJc0Fsd2F5c09uTG9nZwog
CiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Np
b24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBXZWJD
b3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpD
b250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBQcmVjb25uZWN0
T25seSBzaG91bGRQcmVjb25uZWN0T25seSwgYm9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2
aWdhdGlvbiwgYm9vbCBkYXRhVGFza0lzRm9yTWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZy
YW1lLCBPcHRpb25hbDxOZXR3b3JrQWN0aXZpdHlUcmFja2VyPiBuZXR3b3JrQWN0aXZpdHlUcmFj
a2VyKQogICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhD
cmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQor
ICAgICwgbV9zZXNzaW9uV3JhcHBlcihzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4o
c2Vzc2lvbikuc2Vzc2lvbldyYXBwZXJGb3JUYXNrKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5KSkKICAgICAsIG1fZnJhbWVJRChmcmFtZUlEKQogICAgICwg
bV9wYWdlSUQocGFnZUlEKQogICAgICwgbV9pc0Zvck1haW5SZXNvdXJjZU5hdmlnYXRpb25Gb3JB
bnlGcmFtZShkYXRhVGFza0lzRm9yTWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKQpA
QCAtMjA2LDE0ICsyMDcsMTEgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFz
a0NvYwogI2VuZGlmCiAKICAgICBib29sIHNob3VsZEJsb2NrQ29va2llcyA9IGZhbHNlOwotICAg
IGJvb2wgbmVlZHNJc29sYXRlZFNlc3Npb24gPSBmYWxzZTsKLSAgICBhdXRvIGZpcnN0UGFydHkg
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbihyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgc2hvdWxkQmxv
Y2tDb29raWVzID0gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M7CisgICAgc2hvdWxk
QmxvY2tDb29raWVzID0gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczsKICAgICBpZiAoYXV0byogbmV0
d29ya1N0b3JhZ2VTZXNzaW9uID0gc2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkgewog
ICAgICAgICBpZiAoIXNob3VsZEJsb2NrQ29va2llcykKICAgICAgICAgICAgIHNob3VsZEJsb2Nr
Q29va2llcyA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVl
c3QsIGZyYW1lSUQsIHBhZ2VJRCk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0v
NTY5MjE1ODQ+IG5lZWRzSXNvbGF0ZWRTZXNzaW9uIHNob3VsZCBiZSBzZXQgaGVyZS4KICAgICB9
CiAjZW5kaWYKICAgICByZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQocmVx
dWVzdCk7CkBAIC0yMjEsMTQgKzIxOSwxMSBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29y
a0RhdGFUYXNrQ29jCiAgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSByZXF1ZXN0Lm5zVVJM
UmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOwog
ICAgIGFwcGx5U25pZmZpbmdQb2xpY2llc0FuZEJpbmRSZXF1ZXN0VG9JbmZlcmZhY2VJZk5lZWRl
ZChuc1JlcXVlc3QsIHNob3VsZENvbnRlbnRTbmlmZiA9PSBXZWJDb3JlOjpDb250ZW50U25pZmZp
bmdQb2xpY3k6OlNuaWZmQ29udGVudCAmJiAhdXJsLmlzTG9jYWxGaWxlKCksIHNob3VsZENvbnRl
bnRFbmNvZGluZ1NuaWZmID09IFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5
OjpTbmlmZik7CiAKLSAgICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3Jr
U2Vzc2lvbkNvY29hJj4oKm1fc2Vzc2lvbik7Ci0gICAgaWYgKG5lZWRzSXNvbGF0ZWRTZXNzaW9u
KQotICAgICAgICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLmlzb2xhdGVkU2Vzc2lvbihzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgZmlyc3RQYXJ0eSkgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVl
c3RdOwotICAgIGVsc2UKLSAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9uKHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5KSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Cisg
ICAgbV90YXNrID0gW21fc2Vzc2lvbldyYXBwZXIuc2Vzc2lvbiBkYXRhVGFza1dpdGhSZXF1ZXN0
Om5zUmVxdWVzdF07CiAKLSAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0aW5nIE5l
dHdvcmtEYXRhVGFzayB3aXRoIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5PSV1IGFuZCBVUkw9JXMi
LCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIG5zUmVx
dWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0gICAgY29jb2FTZXNzaW9uLnJl
Z2lzdGVyRGF0YVRhc2soW21fdGFzayB0YXNrSWRlbnRpZmllcl0sICp0aGlzLCBzdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc2Vzc2lvbldyYXBwZXIuZGF0
YVRhc2tNYXAuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICBtX3Nlc3Np
b25XcmFwcGVyLmRhdGFUYXNrTWFwLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7
CisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGluZyBOZXR3b3JrRGF0YVRhc2sg
d2l0aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5hYnNv
bHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKIAogICAgIGlmIChzaG91bGRQcmVjb25uZWN0T25seSA9
PSBQcmVjb25uZWN0T25seTo6WWVzKSB7CiAjaWYgRU5BQkxFKFNFUlZFUl9QUkVDT05ORUNUKQpA
QCAtMjY2LDggKzI2MSw4IEBAIE5ldHdvcmtEYXRhVGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNr
Q28KICAgICBpZiAoIW1fdGFzayB8fCAhbV9zZXNzaW9uKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4o
Km1fc2Vzc2lvbik7Ci0gICAgY29jb2FTZXNzaW9uLnVucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNr
IHRhc2tJZGVudGlmaWVyXSwgKnRoaXMsIG1fc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuZ2V0KFttX3Rhc2sg
dGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAgICBtX3Nlc3Npb25XcmFwcGVyLmRhdGFUYXNr
TWFwLnJlbW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiB9CiAKIHZvaWQgTmV0d29ya0Rh
dGFUYXNrQ29jb2E6OnJlc3RyaWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0zNTcsNyArMzUyLDcgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2tDb2NvYTo6d2lsbFBlcmZvcm1IVAogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBpZiAoIW1faGFzQmVlblNldFRvVXNlU3RhdGVsZXNzQ29v
a2llU3RvcmFnZSkgewotICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2ll
bGVzcworICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzCiAgICAgICAgICAgICB8
fCAobV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSAmJiBtX3Nlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbV9mcmFtZUlE
LCBtX3BhZ2VJRCkpKQogICAgICAgICAgICAgYmxvY2tDb29raWVzKCk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLmgJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiBPQkpDX0NMQVNTIERNRldlYnNpdGVQb2xpY3lNb25pdG9yOwogT0JKQ19D
TEFTUyBOU0RhdGE7CiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKK09CSkNfQ0xBU1MgTlNVUkxT
ZXNzaW9uQ29uZmlndXJhdGlvbjsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNr
OwogT0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOwogT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNz
aW9uRGVsZWdhdGU7CkBAIC00NSw2ICs0NiwxOSBAQCBPQkpDX0NMQVNTIFdLTmV0d29ya1Nlc3Np
b25XZWJTb2NrZXREZWxlCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKworc3RydWN0IFNl
c3Npb25XcmFwcGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFNlc3Npb25XcmFwcGVyPiB7Cisg
ICAgdm9pZCBpbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKiwgTmV0d29ya1Nl
c3Npb25Db2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKworICAgIFJl
dGFpblB0cjxOU1VSTFNlc3Npb24+IHNlc3Npb247CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nl
c3Npb25EZWxlZ2F0ZT4gZGVsZWdhdGU7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gZGF0YVRhc2tNYXA7Cisg
ICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2Fk
SUQ+IGRvd25sb2FkTWFwOworI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKKyAgICBI
YXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViU29ja2V0VGFz
ayo+IHdlYlNvY2tldERhdGFUYXNrTWFwOworI2VuZGlmCit9OwogCiBjbGFzcyBOZXR3b3JrU2Vz
c2lvbkNvY29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKICAgICBmcmllbmQgY2xh
c3MgTmV0d29ya0RhdGFUYXNrQ29jb2E7CkBAIC01NCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBO
ZXR3b3JrU2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNzJiwgTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnMmJik7CiAgICAgfk5ldHdvcmtTZXNzaW9uQ29jb2EoKTsKIAotICAgIHZvaWQg
aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7CisgICAgdm9p
ZCBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbigpOwogCiAgICAgY29uc3QgU3Ry
aW5nJiBib3VuZEludGVyZmFjZUlkZW50aWZpZXIoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0OwpAQCAtNjMsMjEgKzc3
LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGRhdGFDb25uZWN0aW9uU2VydmljZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7IH0KICNlbmRp
ZgogCi0gICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzUG9saWN5KTsKLSAgICB2b2lkIHJlZ2lzdGVyRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSYsIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEYXRhVGFzayhOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotCi0gICAgTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrKiBkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YShOU0RhdGEqKTsKLQotICAgIFdlYlNv
Y2tldFRhc2sqIHdlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihXZWJTb2NrZXRUYXNrOjpU
YXNrSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKLSAgICBEb3dubG9hZElEIGRvd25s
b2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKLSAgICBEb3dubG9h
ZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7
Ci0KICAgICBzdGF0aWMgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAKLSAgICB2b2lkIGNv
bnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0Rh
dGFUYXNrQ29jb2EqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmKTsK
KyAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShTZXNzaW9uV3JhcHBlciYsIGNv
bnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSosIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25z
dCBXZWJDb3JlOjpDcmVkZW50aWFsJik+JiYpOworCisgICAgU2Vzc2lvbldyYXBwZXImIHNlc3Np
b25XcmFwcGVyRm9yRG93bmxvYWRzKCkgeyByZXR1cm4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlOyB9CiAKICAgICBib29sIGZhc3RTZXJ2ZXJUcnVzdEV2YWx1YXRpb25FbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZDsgfQogICAg
IGJvb2wgZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2RldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkOyB9CkBAIC04Niw4ICs5MCw2
IEBAIHB1YmxpYzoKIAogICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUNvbmZpZ3VyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Byb3h5Q29uZmlndXJhdGlvbi5nZXQoKTsgfQogCi0gICAgTlNVUkxT
ZXNzaW9uKiBzZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICBO
U1VSTFNlc3Npb24qIGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pOwogICAgIGJvb2wgaGFzSXNv
bGF0ZWRTZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIGNsZWFySXNvbGF0ZWRTZXNzaW9ucygpIG92ZXJyaWRlOwogCkBAIC05
Niw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb247IH0KICAgICBTZWNvbmRzIGxv
YWRUaHJvdHRsZUxhdGVuY3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvYWRUaHJvdHRs
ZUxhdGVuY3k7IH0KKyAgICBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JUYXNrKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5KTsKKyAgICBTZXNzaW9uV3JhcHBlciYgaXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbik7
CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
KSBmaW5hbDsKQEAgLTEwMywzMiArMTA3LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVX
ZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smKSBmaW5hbDsKICNlbmRpZgogCi0gICAgSGFzaE1h
cDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0Nv
Y29hKj4mIGRhdGFUYXNrTWFwKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLQot
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgSGFzaE1h
cDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0Nv
Y29hKj4gbV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZTsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFU
YXNrTWFwRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKLSAgICBIYXNoTWFwPE5ldHdvcmtE
YXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsK
LSNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0gICAgSGFzaE1hcDxOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYlNvY2tldFRhc2sqPiBtX3dlYlNvY2tldERh
dGFUYXNrTWFwOwotI2VuZGlmCi0KICAgICBzdHJ1Y3QgSXNvbGF0ZWRTZXNzaW9uIHsKLSAgICAg
ICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsK
LSAgICAgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwotICAgICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9u
PiBzdGF0ZWxlc3NTZXNzaW9uOwotICAgICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlPiBzdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGU7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZTsKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldpdGhv
dXRDcmVkZW50aWFsU3RvcmFnZTsKICAgICAgICAgV2FsbFRpbWUgbGFzdFVzZWQ7CiAgICAgfTsK
IAotICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIElzb2xhdGVkU2Vzc2lv
bj4gbV9pc29sYXRlZFNlc3Npb25zOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4sIHN0ZDo6dW5pcXVlX3B0cjxJc29sYXRlZFNlc3Npb24+PiBtX2lzb2xhdGVkU2Vzc2lv
bnM7CiAKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlh
bFN0b3JhZ2U7Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vz
c2lvbj4gbV9zdGF0ZWxlc3NTZXNzaW9uOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGU+IG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VS
TFNlc3Npb24+IG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb247Ci0gICAgUmV0
YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29r
aWVsZXNzU2Vzc2lvbkRlbGVnYXRlOworICAgIFNlc3Npb25XcmFwcGVyIG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZTsKKyAgICBTZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2U7CisgICAgU2Vzc2lvbldyYXBwZXIgbV9lcGhlbWVyYWxTdGF0ZWxlc3NT
ZXNzaW9uOwogCiAgICAgU3RyaW5nIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAgIFN0
cmluZyBtX3NvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQg
KzQ4LDE1IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3Jr
U1BJLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9PYmpDUnVu
dGltZUV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQg
PHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL1dl
YWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbXBvcnQgPHd0
Zi9CbG9ja1B0ci5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICNpbmNsdWRlIDxX
ZWJLaXRBZGRpdGlvbnMvTmV0d29ya1Nlc3Npb25Db2NvYUFkZGl0aW9ucy5oPgpAQCAtMzk2LDIz
ICszOTcsMjUgQEAgQGludGVyZmFjZSBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBOUwogI2Vu
ZGlmCiA+IHsKICAgICBXZWFrUHRyPFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYT4gX3Nlc3Np
b247CisgICAgV2Vha1B0cjxXZWJLaXQ6OlNlc3Npb25XcmFwcGVyPiBfc2Vzc2lvbldyYXBwZXI7
CiAgICAgYm9vbCBfd2l0aENyZWRlbnRpYWxzOwogfQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRp
YWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3cmFwcGVyOihXZWJLaXQ6OlNl
c3Npb25XcmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENy
ZWRlbnRpYWxzOwogLSAodm9pZClzZXNzaW9uSW52YWxpZGF0ZWQ7CiAKIEBlbmQKIAogQGltcGxl
bWVudGF0aW9uIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZQogCi0tIChpZClpbml0V2l0aE5ldHdv
cmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRl
bnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscworLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lv
bjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9uIHdyYXBwZXI6KFdlYktpdDo6
U2Vzc2lvbldyYXBwZXImKXNlc3Npb25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRo
Q3JlZGVudGlhbHMKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lv
bik7CisgICAgX3Nlc3Npb25XcmFwcGVyID0gbWFrZVdlYWtQdHIoc2Vzc2lvbldyYXBwZXIpOwog
ICAgIF93aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHM7CiAKICAgICByZXR1cm4gc2Vs
ZjsKQEAgLTQyMCwyNCArNDIzLDIzIEBAIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmUKIAogLSAodm9pZClzZXNzaW9uSW52YWxpZGF0ZWQKIHsKLSAgICBfc2Vzc2lvbiA9
IG51bGxwdHI7CisgICAgX3Nlc3Npb25XcmFwcGVyID0gbnVsbHB0cjsKIH0KIAogLSAoTmV0d29y
a0RhdGFUYXNrQ29jb2EqKWV4aXN0aW5nVGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sKIHsK
LSAgICBpZiAoIV9zZXNzaW9uKQorICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gX3dpdGhDcmVkZW50aWFscyA/
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgcmV0dXJuIF9zZXNzaW9uLT5kYXRhVGFz
a0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmllciwgc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kpOworICAgIHJldHVybiBfc2Vzc2lvbldyYXBwZXItPmRhdGFUYXNrTWFwLmdldCh0YXNrLnRh
c2tJZGVudGlmaWVyKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilz
ZXNzaW9uIGRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAg
IEFTU0VSVCghX3Nlc3Npb24pOworICAgIEFTU0VSVCghX3Nlc3Npb25XcmFwcGVyKTsKIH0KIAog
LSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vz
c2lvblRhc2sgKil0YXNrIGRpZFNlbmRCb2R5RGF0YTooaW50NjRfdClieXRlc1NlbnQgdG90YWxC
eXRlc1NlbnQ6KGludDY0X3QpdG90YWxCeXRlc1NlbnQgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5k
OihpbnQ2NF90KXRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZApAQCAtNTI3LDEyICs1MjksMTUgQEAg
LSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAgICAgICAgIGJvb2wg
c2hvdWxkSWdub3JlSFNUUyA9IGZhbHNlOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgICAgIHNob3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRv
RHluYW1pY0hTVFMocmVxdWVzdCkgJiYgX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuc3RvcmFn
ZVNlc3Npb24oX3Nlc3Npb24tPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVl
c3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgp
KTsKLSAgICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKLSAgICAgICAgICAgIHJlcXVlc3Qg
PSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0
LlVSTC5zY2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKLSAgICAgICAgICAgIExPRyhO
ZXR3b3JrU2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0dHAiLCB0
YXNrSWRlbnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb25Db2NvYSA9IG5ldHdvcmtEYXRhVGFz
ay0+bmV0d29ya1Nlc3Npb24oKSkgeworICAgICAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNj
aGVtZVdhc1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBzZXNzaW9uQ29jb2Et
Pm5ldHdvcmtQcm9jZXNzKCkuc3RvcmFnZVNlc3Npb24oc2Vzc2lvbkNvY29hLT5zZXNzaW9uSUQo
KSktPnNob3VsZEJsb2NrQ29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQo
KSwgbmV0d29ya0RhdGFUYXNrLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdu
b3JlSFNUUykgeworICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJl
cXVlc3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1
YWxUb1N0cmluZzpAImh0dHAiXSk7CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9u
LCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVy
LCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRp
ZgogCiAgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24o
cmVzcG9uc2UsIHJlcXVlc3QsIFtjb21wbGV0aW9uSGFuZGxlckNvcHksIHRhc2tJZGVudGlmaWVy
LCBzaG91bGRJZ25vcmVIU1RTXShhdXRvJiYgcmVxdWVzdCkgewpAQCAtNTYwLDEyICs1NjUsMTUg
QEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRv
KiBuZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10pIHsKICAgICAgICAg
Ym9vbCBzaG91bGRJZ25vcmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVk
RHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5z
dG9yYWdlU2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMo
cmVxdWVzdCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFn
ZUlEKCkpOwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVx
dWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3Jl
cXVlc3QuVVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAg
TE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0
cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5n
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogc2Vzc2lvbkNvY29hID0gbmV0d29ya0Rh
dGFUYXNrLT5uZXR3b3JrU2Vzc2lvbigpKSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVIU1RT
ID0gc2NoZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Npb25D
b2NvYS0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNlc3Np
b25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJh
bWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChzaG91
bGRJZ25vcmVIU1RTKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVl
c3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUg
aXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29ya1Nl
c3Npb24sICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lkZW50
aWZpZXIsIHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
I2VuZGlmCiAKICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5
KGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTU4OCwxMSArNTk2LDYgQEAgLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sg
d2lsbENhY2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilwcm9wb3NlZFJlc3BvbnNl
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRS
ZXNwb25zZSkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICAvLyBGSVhNRTogcmVtb3ZlIGlmIDxyZGFyOi8vcHJvYmxlbS8yMDAwMTk4NT4gaXMgZXZlciBy
ZXNvbHZlZC4KICAgICBpZiAoW3Byb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihhbGxIZWFkZXJGaWVsZHMpXQogICAgICAgICAmJiBbWyhpZClwcm9w
b3NlZFJlc3BvbnNlLnJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29u
dGVudC1SYW5nZSJdKQpAQCAtNjAyLDkgKzYwNSw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2kKIH0KIAogI2lmIEhBVkUoQ0ZORVRXT1JLX05TVVJMU0VTU0lPTl9T
VFJJQ1RSVVNURVZBTFVBVEUpCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0
RXZhbHVhdGlvbihOZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBOU1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFz
aywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVh
dGlvbihOZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBTZXNzaW9uV3JhcHBlciYgc2Vzc2lv
bldyYXBwZXIsIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0
YVRhc2tDb2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50
aWFsICpjcmVkZW50aWFsKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZXNzaW9uLT5j
b250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0
d29ya0RhdGFUYXNrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2
ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlz
cG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUg
eworICAgIHNlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShzZXNzaW9uV3JhcHBl
ciwgY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5Q
dHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogVUlQ
cm9jZXNzIHNob3VsZCBzZW5kIHVzIGJhY2sgbm9uIG5pbCBjcmVkZW50aWFscyBidXQgdGhlIGNy
ZWRlbnRpYWwgSVBDIGVuY29kZXIgY3VycmVudGx5IG9ubHkgc2VyaWFsaXplcyBucyBjcmVkZW50
aWFscyBmb3IgdXNlcm5hbWUvcGFzc3dvcmQuCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBX
ZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwg
JiYgIWNyZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVk
ZW50aWFsIGNyZWRlbnRpYWxGb3JUcnVzdDogc2VjVHJ1c3QuZ2V0KCldKTsKQEAgLTYxNyw3ICs2
MjAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhCiAKIC0gKHZv
aWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25U
YXNrICopdGFzayBkaWRSZWNlaXZlQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25B
dXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3Jl
ZGVudGlhbCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uIHx8IFt0YXNr
IHN0YXRlXSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKKyAgICBhdXRvKiBu
ZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza107CisgICAgYXV0byogc2Vz
c2lvbkNvY29hID0gbmV0d29ya0RhdGFUYXNrID8gc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25D
b2NvYSo+KG5ldHdvcmtEYXRhVGFzay0+bmV0d29ya1Nlc3Npb24oKSkgOiBudWxscHRyOworICAg
IGlmICghc2Vzc2lvbkNvY29hIHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VSTFNlc3Npb25UYXNrU3Rh
dGVDYW5jZWxpbmcpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0
aENoYWxsZW5nZUNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBuaWwpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNjM3LDE4ICs2NDIsMjEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihO
U1VSTFNlc3Npb24gKilzZXNzaQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFs
IGNyZWRlbnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0
XSk7CiAKICAgICAgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRm
b3JtLWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW5kIHRvIHVz
ZSBBVFMgZGVmYXVsdHMuCi0gICAgICAgIGlmIChfc2Vzc2lvbi0+ZmFzdFNlcnZlclRydXN0RXZh
bHVhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc2Vzc2lvbkNvY29hLT5mYXN0U2VydmVy
VHJ1c3RFdmFsdWF0aW9uRW5hYmxlZCgpKSB7CiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxTRVNT
SU9OX1NUUklDVFJVU1RFVkFMVUFURSkKICAgICAgICAgICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFz
ayA9IFtzZWxmIGV4aXN0aW5nVGFzazp0YXNrXTsKICAgICAgICAgICAgIEFTU0VSVChuZXR3b3Jr
RGF0YVRhc2spOwotICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoW19zZXNzaW9uID0gbWFrZVdlYWtQdHIoX3Nlc3Npb24uZ2V0KCkpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlciksIHRhc2tJZGVudGlmaWVyLCBu
ZXR3b3JrRGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29jb2E+KG5ldHdvcmtEYXRh
VGFzayldKE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgT1NTdGF0dXMg
dHJ1c3RSZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlPihzZWxmKSwgc2Vzc2lvbkNvY29hID0gbWFrZVdlYWtQdHIoc2Vzc2lvbkNvY29hKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpLCB0YXNr
SWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrID0gUmVmUHRyPE5ldHdvcmtEYXRhVGFza0NvY29h
PihuZXR3b3JrRGF0YVRhc2spXShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFsbGVu
Z2UsIE9TU3RhdHVzIHRydXN0UmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cm9u
Z1NlbGYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7
CiAgICAgICAgICAgICAgICAgYXV0byB0YXNrID0gV1RGTW92ZShuZXR3b3JrRGF0YVRhc2spOwot
ICAgICAgICAgICAgICAgIGF1dG8qIHNlc3Npb24gPSBfc2Vzc2lvbi5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBzZXNzaW9uID0gc2Vzc2lvbkNvY29hLmdldCgpOwogICAgICAgICAgICAg
ICAgIGlmICh0cnVzdFJlc3VsdCA9PSBub0VyciB8fCAhc2Vzc2lvbikgewogICAgICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9y
bURlZmF1bHRIYW5kbGluZywgbmlsKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0
aW9uKHNlc3Npb24sIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKHNlc3Npb24sICpzdHJvbmdTZWxmLT5fc2Vzc2lvbldyYXBwZXIsIGNoYWxs
ZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgW05TVVJMU2Vzc2lvbiBfc3RyaWN0
VHJ1c3RFdmFsdWF0ZTpjaGFsbGVuZ2UgcXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVl
XS51bmRlcmx5aW5nUXVldWUgY29tcGxldGlvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgp
XTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY1NywxNiArNjY1LDEzIEBAIC0gKHZvaWQpVVJM
U2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICNlbmRpZgogICAgICAgICB9CiAgICAgfQot
ICAgIF9zZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNr
SWRlbnRpZmllciwgW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdLCBbY29tcGxldGlvbkhhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50
aWFsJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICBzZXNzaW9uQ29jb2EtPmNvbnRpbnVlRGlk
UmVjZWl2ZUNoYWxsZW5nZSgqX3Nlc3Npb25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlm
aWVyLCBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vz
c2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnND
cmVkZW50aWFsKCkpOwogICAgIH0pOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkQ29tcGxldGVX
aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIGlmICghX3Nlc3Npb24pCi0gICAgICAg
IHJldHVybjsKLQogICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgZGlkQ29tcGxldGVXaXRo
RXJyb3IgJUAiLCB0YXNrLnRhc2tJZGVudGlmaWVyLCBlcnJvcik7CiAKICAgICBpZiAoZXJyb3Ip
IHsKQEAgLTY3OSwyOSArNjg0LDMzIEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9u
ICopc2Vzc2kKICAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdU
YXNrOnRhc2tdKQogICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmRpZENvbXBsZXRlV2l0aEVycm9y
KGVycm9yLCBuZXR3b3JrRGF0YVRhc2stPm5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICBlbHNl
IGlmIChlcnJvcikgewotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURv
d25sb2FkSUQodGFzay50YXNrSWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChkb3dubG9hZElELmRv
d25sb2FkSUQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24t
Pm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkp
IHsKLSAgICAgICAgICAgICAgICBOU0RhdGEgKnJlc3VtZURhdGEgPSBuaWw7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlkIHVzZXJJbmZvID0gZXJyb3IudXNlckluZm8pIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKFt1c2VySW5mbyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lRGF0YSA9IHVzZXJJbmZvW0AiTlNVUkxT
ZXNzaW9uRG93bmxvYWRUYXNrUmVzdW1lRGF0YSJdOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VtZURhdGEgJiYgIVtyZXN1bWVEYXRhIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFz
c11dKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29ya1Nl
c3Npb24sICJEb3dubG9hZCB0YXNrICVsbHUgZmluaXNoZWQgd2l0aCByZXN1bWUgZGF0YSBvZiB3
cm9uZyBjbGFzczogJXMiLCAodW5zaWduZWQgbG9uZyBsb25nKXRhc2sudGFza0lkZW50aWZpZXIs
IE5TU3RyaW5nRnJvbUNsYXNzKFtyZXN1bWVEYXRhIGNsYXNzXSkuVVRGOFN0cmluZyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdW1lRGF0YSA9IG5pbDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdW1lRGF0YVJlZmVyZW5jZSA9IHJlc3VtZURhdGEgPyBJUEM6OkRh
dGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdW1lRGF0YS5ieXRl
cyksIHJlc3VtZURhdGEubGVuZ3RoIH0gOiBJUEM6OkRhdGFSZWZlcmVuY2UgeyB9OworICAgICAg
ICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLnRha2UodGFz
ay50YXNrSWRlbnRpZmllcik7CisgICAgICAgIGlmICghZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghX3Nlc3Npb24pCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9j
ZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCk7CisgICAgICAgIGlm
ICghZG93bmxvYWQpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBpZiAo
ZG93bmxvYWQtPndhc0NhbmNlbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkLT5k
aWRDYW5jZWwocmVzdW1lRGF0YVJlZmVyZW5jZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgcmVzdW1lRGF0YVJlZmVy
ZW5jZSk7CisgICAgICAgIE5TRGF0YSAqcmVzdW1lRGF0YSA9IG5pbDsKKyAgICAgICAgaWYgKGlk
IHVzZXJJbmZvID0gZXJyb3IudXNlckluZm8pIHsKKyAgICAgICAgICAgIGlmIChbdXNlckluZm8g
aXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bWVEYXRhID0gdXNlckluZm9bQCJOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2tSZXN1bWVEYXRh
Il07CisgICAgICAgICAgICAgICAgaWYgKHJlc3VtZURhdGEgJiYgIVtyZXN1bWVEYXRhIGlzS2lu
ZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HKE5ldHdvcmtTZXNzaW9uLCAiRG93bmxvYWQgdGFzayAlbGx1IGZpbmlzaGVkIHdpdGggcmVz
dW1lIGRhdGEgb2Ygd3JvbmcgY2xhc3M6ICVzIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl0YXNrLnRh
c2tJZGVudGlmaWVyLCBOU1N0cmluZ0Zyb21DbGFzcyhbcmVzdW1lRGF0YSBjbGFzc10pLlVURjhT
dHJpbmcpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdW1lRGF0YSA9IG5pbDsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlc3VtZURhdGFSZWZlcmVuY2Ug
PSByZXN1bWVEYXRhID8gSVBDOjpEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHJlc3VtZURhdGEuYnl0ZXMpLCByZXN1bWVEYXRhLmxlbmd0aCB9IDogSVBDOjpEYXRh
UmVmZXJlbmNlIHsgfTsKKworICAgICAgICBpZiAoZG93bmxvYWQtPndhc0NhbmNlbGVkKCkpCisg
ICAgICAgICAgICBkb3dubG9hZC0+ZGlkQ2FuY2VsKHJlc3VtZURhdGFSZWZlcmVuY2UpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgcmVzdW1lRGF0
YVJlZmVyZW5jZSk7CiAgICAgfQogfQogCkBAIC04MzYsNjAgKzg0NSw2OSBAQCAtICh2b2lkKVVS
TFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2lvbiBkb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFz
ayAqKWRvd25sb2FkVGFzayBkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOihOU1VSTCAqKWxvY2F0
aW9uCiB7CisgICAgYXV0byBkb3dubG9hZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1h
cC50YWtlKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICBpZiAoIWRvd25sb2Fk
SUQuZG93bmxvYWRJRCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKCFfc2Vzc2lvbikKICAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBkb3dubG9hZElEID0gX3Nlc3Npb24tPnRha2VEb3du
bG9hZElEKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93
bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3du
bG9hZChkb3dubG9hZElEKSkKLSAgICAgICAgZG93bmxvYWQtPmRpZEZpbmlzaCgpOworICAgIGF1
dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuZG93bmxvYWQoZG93bmxvYWRJRCk7CisgICAgaWYgKCFkb3dubG9hZCkKKyAgICAgICAgcmV0
dXJuOworICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9u
OihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFdyaXRlRGF0YTooaW50NjRfdClieXRlc1dyaXR0ZW4g
dG90YWxCeXRlc1dyaXR0ZW46KGludDY0X3QpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRlc0V4
cGVjdGVkVG9Xcml0ZTooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlCiB7Ci0gICAg
aWYgKCFfc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghW3NlbGYgZXhpc3RpbmdUYXNrOmRvd25sb2FkVGFza10sICJUaGUgTmV0d29ya0RhdGFUYXNr
IHNob3VsZCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGlkQmVjb21lRG93bmxvYWRU
YXNrIHJldHVybnMiKTsKIAotICAgIGF1dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uLT5kb3dubG9h
ZElEKFtkb3dubG9hZFRhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxv
YWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9h
ZChkb3dubG9hZElEKSkKLSAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3Jp
dHRlbik7CisgICAgYXV0byBkb3dubG9hZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1h
cC5nZXQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOworICAgIGlmICghZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIV9zZXNzaW9uKQorICAg
ICAgICByZXR1cm47CisgICAgYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nl
c3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKTsKKyAgICBpZiAoIWRv
d25sb2FkKQorICAgICAgICByZXR1cm47CisgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGJ5
dGVzV3JpdHRlbik7CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vz
c2lvbiBkb3dubG9hZFRhc2s6KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFz
ayBkaWRSZXN1bWVBdE9mZnNldDooaW50NjRfdClmaWxlT2Zmc2V0IGV4cGVjdGVkVG90YWxCeXRl
czooaW50NjRfdClleHBlY3RlZFRvdGFsQnl0ZXMKIHsKLSAgICBpZiAoIV9zZXNzaW9uKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAtICh2b2lkKVVSTFNl
c3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFU
YXNrICopZGF0YVRhc2sgZGlkQmVjb21lRG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25Eb3dubG9h
ZFRhc2sgKilkb3dubG9hZFRhc2sKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0g
W3NlbGYgZXhpc3RpbmdUYXNrOmRhdGFUYXNrXSkgewotICAgICAgICBSZWY8TmV0d29ya0RhdGFU
YXNrQ29jb2E+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29ya0RhdGFUYXNrKTsKLSAg
ICAgICAgYXV0byBkb3dubG9hZElEID0gbmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRJ
RCgpOwotICAgICAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBfc2Vzc2lvbi0+bmV0d29ya1By
b2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKTsKLSAgICAgICAgYXV0byBkb3dubG9hZCA9IG1ha2VV
bmlxdWU8V2ViS2l0OjpEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2VyLCBkb3dubG9hZElELCBkb3du
bG9hZFRhc2ssICpfc2Vzc2lvbiwgbmV0d29ya0RhdGFUYXNrLT5zdWdnZXN0ZWRGaWxlbmFtZSgp
KTsKLSAgICAgICAgbmV0d29ya0RhdGFUYXNrLT50cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rv
d25sb2FkKCpkb3dubG9hZCk7Ci0gICAgICAgIEFTU0VSVChGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSkpOwotICAgICAgICBk
b3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93
bmxvYWRMb2NhdGlvbigpKTsKLSAgICAgICAgZG93bmxvYWRNYW5hZ2VyLmRhdGFUYXNrQmVjYW1l
RG93bmxvYWRUYXNrKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKKyAgICBhdXRvKiBu
ZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6ZGF0YVRhc2tdOworICAgIGlmICgh
bmV0d29ya0RhdGFUYXNrKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Vzc2lvbkNvY29h
ID0gbmV0d29ya0RhdGFUYXNrLT5uZXR3b3JrU2Vzc2lvbigpOworICAgIGlmICghc2Vzc2lvbkNv
Y29hKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgX3Nlc3Npb24tPmFkZERvd25sb2FkSUQo
W2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0sIGRvd25sb2FkSUQpOwotICAgIH0KKyAgICBS
ZWY8TmV0d29ya0RhdGFUYXNrQ29jb2E+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29y
a0RhdGFUYXNrKTsKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRp
bmdEb3dubG9hZElEKCk7CisgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gc2Vzc2lvbkNvY29h
LT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpOworICAgIGF1dG8gZG93bmxvYWQg
PSBtYWtlVW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJ
RCwgZG93bmxvYWRUYXNrLCAqc2Vzc2lvbkNvY29hLCBuZXR3b3JrRGF0YVRhc2stPnN1Z2dlc3Rl
ZEZpbGVuYW1lKCkpOworICAgIG5ldHdvcmtEYXRhVGFzay0+dHJhbnNmZXJTYW5kYm94RXh0ZW5z
aW9uVG9Eb3dubG9hZCgqZG93bmxvYWQpOworICAgIEFTU0VSVChGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSkpOworICAgIGRv
d25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKCkpOworICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25s
b2FkVGFzayhkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCghX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC5jb250YWlucyhkb3dubG9hZFRhc2su
dGFza0lkZW50aWZpZXIpKTsKKyAgICBfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLmFkZChk
b3dubG9hZFRhc2sudGFza0lkZW50aWZpZXIsIGRvd25sb2FkSUQpOwogfQogCiAjaWYgSEFWRShO
U1VSTFNFU1NJT05fV0VCU09DS0VUKQogLSAoV2ViU29ja2V0VGFzayopZXhpc3RpbmdXZWJTb2Nr
ZXRUYXNrOihOU1VSTFNlc3Npb25XZWJTb2NrZXRUYXNrICopdGFzawogewotICAgIGlmICghX3Nl
c3Npb24pCisgICAgaWYgKCFfc2Vzc2lvbldyYXBwZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKCF0YXNrKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBfc2Vzc2lvbi0+d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2sudGFza0lkZW50
aWZpZXIpOworICAgIHJldHVybiBfc2Vzc2lvbldyYXBwZXItPndlYlNvY2tldERhdGFUYXNrTWFw
LmdldCh0YXNrLnRhc2tJZGVudGlmaWVyKTsKIH0KIAogCkBAIC05NzIsNiArOTkwLDEyIEBAIHN0
YXRpYyBOU0RpY3Rpb25hcnkgKnByb3h5RGljdGlvbmFyeShjb24KICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAordm9pZCBTZXNzaW9uV3JhcHBlcjo6aW5pdGlhbGl6
ZShOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uLCBOZXR3b3JrU2Vzc2lv
bkNvY29hJiBuZXR3b3JrU2Vzc2lvbiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCit7CisgICAgdGhpcy0+ZGVsZWdhdGUgPSBhZG9wdE5T
KFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9u
Om5ldHdvcmtTZXNzaW9uIHdyYXBwZXI6KnRoaXMgd2l0aENyZWRlbnRpYWxzOnN0b3JlZENyZWRl
bnRpYWxzUG9saWN5ID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2VdKTsK
KyAgICB0aGlzLT5zZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKSBkZWxlZ2F0ZVF1ZXVlOltO
U09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOworfQorCiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpO
ZXR3b3JrU2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIDogTmV0d29ya1Nl
c3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMpCiAgICAgLCBtX2JvdW5kSW50ZXJmYWNl
SWRlbnRpZmllcihwYXJhbWV0ZXJzLmJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcikKQEAgLTEwNjMs
OCArMTA4Nyw3IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2EKICAg
ICAgICAgY29va2llU3RvcmFnZS5fb3ZlcnJpZGVTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5ID0g
WUVTOwogI2VuZGlmCiAKLSAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0
ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0
d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOnRydWVdKTsKLSAgICBtX3Nlc3Npb25X
aXRoQ3JlZGVudGlhbFN0b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRp
b25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uu
aW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OlVzZSk7CiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiQ3JlYXRlZCBOZXR3b3Jr
U2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2VwdFBvbGljeSAlbHUiLCBjb25maWd1cmF0aW9uLkhUVFBD
b29raWVTdG9yYWdlLmNvb2tpZUFjY2VwdFBvbGljeSk7CiAKICAgICBjb25maWd1cmF0aW9uLlVS
TENyZWRlbnRpYWxTdG9yYWdlID0gbmlsOwpAQCAtMTA3Myw4ICsxMDk2LDcgQEAgTmV0d29ya1Nl
c3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYQogICAgIC8vIGNvbmZpZ3VyYXRpb24uSFRU
UENvb2tpZVN0b3JhZ2UgPSBuaWw7CiAgICAgLy8gY29uZmlndXJhdGlvbi5IVFRQQ29va2llQWNj
ZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI7CiAKLSAgICBtX3N0YXRl
bGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNl
XSk7Ci0gICAgbV9zdGF0ZWxlc3NTZXNzaW9uID0gW05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9zdGF0
ZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6W05TT3BlcmF0aW9uUXVl
dWUgbWFpblF1ZXVlXV07CisgICAgbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5OjpEb05vdFVzZSk7CiAKICAgICBtX2RldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNF
bmFibGVkID0gcGFyYW1ldGVycy5kZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRW5hYmxlZDsK
ICAgICBtX2FsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0ZvclRl
c3RpbmcgPSBwYXJhbWV0ZXJzLmFsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3Ry
aWN0aW9uc0ZvclRlc3Rpbmc7CkBAIC0xMDk3LDEwICsxMTE5LDEwIEBAIE5ldHdvcmtTZXNzaW9u
Q29jb2E6On5OZXR3b3JrU2Vzc2lvbkNvY28KIHsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24oKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lv
bigpCiB7CiAgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtO
U1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGVwaGVtZXJhbFNlc3Npb25Db25maWd1cmF0aW9uXTsK
LSAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSBt
X3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbjsKKyAgICBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uICpleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSBtX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uOwogCiAgICAgY29uZmln
dXJhdGlvbi5IVFRQQ29va2llQWNjZXB0UG9saWN5ID0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
TmV2ZXI7CiAgICAgY29uZmlndXJhdGlvbi5VUkxDcmVkZW50aWFsU3RvcmFnZSA9IG5pbDsKQEAg
LTExMTUsNDQgKzExMzcsNDggQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXpl
RXBoZQogICAgIGNvbmZpZ3VyYXRpb24uX0NURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSA9IGV4
aXN0aW5nQ29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlOwogI2VuZGlm
CiAKLSAgICBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUgPSBh
ZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtT
ZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50aWFsczpmYWxzZV0pOwotICAgIG1fZXBoZW1lcmFsU3Rh
dGVsZXNzQ29va2llbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX2VwaGVtZXJh
bFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uRGVsZWdhdGUuZ2V0KCkpIGRlbGVnYXRlUXVldWU6
W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07CisgICAgbV9lcGhlbWVyYWxTdGF0ZWxlc3NT
ZXNzaW9uLmluaXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3MpOwogfQogCi1OU1VSTFNlc3Npb24q
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCitTZXNzaW9uV3JhcHBlciYgTmV0d29ya1Nl
c3Npb25Db2NvYTo6c2Vzc2lvbldyYXBwZXJGb3JUYXNrKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kpCiB7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKyAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24o
KSkgeworICAgICAgICBhdXRvIGZpcnN0UGFydHkgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bihyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICBpZiAoc3RvcmFnZVNl
c3Npb24tPnNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNCdXRLZWVwRmlyc3RQYXJ0eUNvb2tp
ZXNGb3IoZmlyc3RQYXJ0eSkpCisgICAgICAgICAgICByZXR1cm4gaXNvbGF0ZWRTZXNzaW9uKHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBmaXJzdFBhcnR5KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKwogICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpIHsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpVc2U6Ci0gICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0
KCk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CiAgICAg
Y2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6Ci0gICAgICAg
IHJldHVybiBtX3N0YXRlbGVzc1Nlc3Npb24uZ2V0KCk7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAg
ICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKQotICAgICAgICAg
ICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7Ci0gICAg
ICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uLmdldCgpOwor
ICAgICAgICByZXR1cm4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIGNh
c2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczoK
KyAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbikKKyAgICAg
ICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uKCk7CisgICAgICAgIHJl
dHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb247CiAgICAgfQogfQogCi1OU1VSTFNlc3Np
b24qIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbikKK1Nlc3Npb25XcmFwcGVyJiBOZXR3
b3JrU2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIGZpcnN0UGFydHlEb21haW4pCiB7Ci0gICAgYXV0byBlbnRyeSA9IG1faXNvbGF0
ZWRTZXNzaW9ucy5lbnN1cmUoZmlyc3RQYXJ0eURvbWFpbiwgW3RoaXNdIHsKLSAgICAgICAgSXNv
bGF0ZWRTZXNzaW9uIG5ld0VudHJ5IHsgfTsKLSAgICAgICAgbmV3RW50cnkuc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6
dHJ1ZV0pOwotICAgICAgICBuZXdFbnRyeS5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlID0g
W05TVVJMU2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246bV9zZXNzaW9uV2l0aENyZWRl
bnRpYWxTdG9yYWdlLmdldCgpLmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+
KG5ld0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZS5nZXQoKSkgZGVs
ZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKLQotICAgICAgICBuZXdF
bnRyeS5zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVkZW50
aWFsczpmYWxzZV0pOwotICAgICAgICBuZXdFbnRyeS5zdGF0ZWxlc3NTZXNzaW9uID0gW05TVVJM
U2Vzc2lvbiBzZXNzaW9uV2l0aENvbmZpZ3VyYXRpb246bV9zdGF0ZWxlc3NTZXNzaW9uLmdldCgp
LmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG5ld0VudHJ5LnN0YXRlbGVz
c1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBt
YWluUXVldWVdXTsKLQorICAgIGF1dG8mIGVudHJ5ID0gbV9pc29sYXRlZFNlc3Npb25zLmVuc3Vy
ZShmaXJzdFBhcnR5RG9tYWluLCBbdGhpc10geworICAgICAgICBhdXRvIG5ld0VudHJ5ID0gbWFr
ZVVuaXF1ZTxJc29sYXRlZFNlc3Npb24+KCk7CisgICAgICAgIG5ld0VudHJ5LT5zZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUobV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9y
YWdlLnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5OjpVc2UpOworICAgICAgICBuZXdFbnRyeS0+c2Vzc2lvbldpdGhvdXRD
cmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3Rv
cmFnZS5zZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgZW50cnkubGFzdFVzZWQgPSBXYWxsVGltZTo6
bm93KCk7CisgICAgZW50cnktPmxhc3RVc2VkID0gV2FsbFRpbWU6Om5vdygpOwogCiAgICAgaWYg
KG1faXNvbGF0ZWRTZXNzaW9ucy5zaXplKCkgPiBtYXhOdW1iZXJPZklzb2xhdGVkU2Vzc2lvbnMp
IHsKICAgICAgICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4ga2V5VG9SZW1vdmU7CiAgICAg
ICAgIGF1dG8gb2xkZXN0VGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygpOwogICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IG1faXNvbGF0ZWRTZXNzaW9ucy5rZXlzKCkpIHsKLSAgICAgICAgICAgIGF1
dG8gdGltZXN0YW1wID0gbV9pc29sYXRlZFNlc3Npb25zLmdldChrZXkpLmxhc3RVc2VkOworICAg
ICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSktPmxh
c3RVc2VkOwogICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA8IG9sZGVzdFRpbWVzdGFtcCkgewog
ICAgICAgICAgICAgICAgIG9sZGVzdFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKICAgICAgICAgICAg
ICAgICBrZXlUb1JlbW92ZSA9IGtleTsKQEAgLTExNjcsMTQgKzExOTMsMTQgQEAgTlNVUkxTZXNz
aW9uKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjppc29sYQogICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kpIHsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpVc2U6CiAgICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIlVzaW5nIGlzb2xhdGVkIE5TVVJM
U2Vzc2lvbiB3aXRoIGNyZWRlbnRpYWwgc3RvcmFnZS4iKTsKLSAgICAgICAgcmV0dXJuIGVudHJ5
LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCk7CisgICAgICAgIHJldHVybiBlbnRy
eS0+c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZToKICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9u
LCAiVXNpbmcgaXNvbGF0ZWQgTlNVUkxTZXNzaW9uIHdpdGhvdXQgY3JlZGVudGlhbCBzdG9yYWdl
LiIpOwotICAgICAgICByZXR1cm4gZW50cnkuc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKTsKLSAgICBj
YXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3ND
b29raWVsZXNzOgotICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nl
c3Npb24pCi0gICAgICAgICAgICBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb24oKTsKLSAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVz
c1Nlc3Npb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBlbnRyeS0+c2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZTsKKyAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpFcGhlbWVyYWxTdGF0ZWxlc3M6CisgICAgICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NT
ZXNzaW9uLnNlc3Npb24pCisgICAgICAgICAgICBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNz
U2Vzc2lvbigpOworICAgICAgICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uOwog
ICAgIH0KIH0KIApAQCAtMTE5MiwxNiArMTIxOCwxOCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmludmFsaWRhdGVBbmRDCiB7CiAgICAgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRD
YW5jZWwoKTsKIAotICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0
ZUFuZENhbmNlbF07Ci0gICAgW21fc3RhdGVsZXNzU2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2Vs
XTsKLSAgICBbbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbiBpbnZhbGlkYXRl
QW5kQ2FuY2VsXTsKLSAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUg
c2Vzc2lvbkludmFsaWRhdGVkXTsKLSAgICBbbV9zdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGUgc2Vz
c2lvbkludmFsaWRhdGVkXTsKLSAgICBbbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vz
c2lvbkRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CisgICAgW21fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRDYW5jZWxdOworICAgIFttX3Nlc3Np
b25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsK
KyAgICBbbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uLnNlc3Npb24gaW52YWxpZGF0ZUFuZENh
bmNlbF07CisgICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5kZWxlZ2F0ZSBzZXNz
aW9uSW52YWxpZGF0ZWRdOworICAgIFttX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uu
ZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9lcGhlbWVyYWxTdGF0ZWxlc3NT
ZXNzaW9uLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CiAKICAgICBmb3IgKGF1dG8mIHNl
c3Npb24gOiBtX2lzb2xhdGVkU2Vzc2lvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgW3Nlc3Npb24u
c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKLSAgICAg
ICAgW3Nlc3Npb24uc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlIHNlc3Npb25J
bnZhbGlkYXRlZF07CisgICAgICAgIFtzZXNzaW9uLT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9y
YWdlLnNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgICAgIFtzZXNzaW9uLT5zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07Cisg
ICAgICAgIFtzZXNzaW9uLT5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24g
aW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAgICAgIFtzZXNzaW9uLT5zZXNzaW9uV2l0aG91dENy
ZWRlbnRpYWxTdG9yYWdlLmRlbGVnYXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CiAgICAgfQogICAg
IG1faXNvbGF0ZWRTZXNzaW9ucy5jbGVhcigpOwogfQpAQCAtMTIyMCw2OCArMTI0OCw2IEBAIHZv
aWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6Y2xlYXJDcmVkZW50aWEKICNlbmRpZgogfQogCi1IYXNo
TWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNr
Q29jb2EqPiYgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0YVRhc2tNYXAoV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBzd2l0Y2ggKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
KSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFs
U3RhdGVsZXNzQ29va2llbGVzczoKLSAgICAgICAgcmV0dXJuIG1fZGF0YVRhc2tNYXBFcGhlbWVy
YWxTdGF0ZWxlc3NDb29raWVsZXNzOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OkRvTm90VXNlOgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01hcFdpdGhvdXRT
dGF0ZTsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2U6Ci0g
ICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50
aWFsczsKLX0KLQotTmV0d29ya0RhdGFUYXNrQ29jb2EqIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRh
dGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
cmV0dXJuIGRhdGFUYXNrTWFwKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KS5nZXQodGFza0lkZW50
aWZpZXIpOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnJlZ2lzdGVyRGF0YVRhc2so
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3
b3JrRGF0YVRhc2tDb2NvYSYgZGF0YVRhc2ssIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQotewotICAgIGF1dG8mIG1hcCA9IGRhdGFUYXNr
TWFwKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICBSRUxFQVNFX0FTU0VSVCghbWFwLmNv
bnRhaW5zKHRhc2tJZGVudGlmaWVyKSk7Ci0gICAgbWFwLmFkZCh0YXNrSWRlbnRpZmllciwgJmRh
dGFUYXNrKTsKLX0KLQotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjp1bnJlZ2lzdGVyRGF0YVRh
c2soTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBO
ZXR3b3JrRGF0YVRhc2tDb2NvYSYgZGF0YVRhc2ssIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KQotewotICAgIGF1dG8mIG1hcCA9IGRhdGFU
YXNrTWFwKHN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICBSRUxFQVNFX0FTU0VSVChtYXAu
Z2V0KHRhc2tJZGVudGlmaWVyKSA9PSAmZGF0YVRhc2spOwotICAgIG1hcC5yZW1vdmUodGFza0lk
ZW50aWZpZXIpOwotfQotCi1OU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIE5ldHdvcmtTZXNzaW9u
Q29jb2E6OmRvd25sb2FkVGFza1dpdGhSZXN1bWVEYXRhKE5TRGF0YSogcmVzdW1lRGF0YSkKLXsK
LSAgICByZXR1cm4gW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBkb3dubG9hZFRhc2tX
aXRoUmVzdW1lRGF0YTpyZXN1bWVEYXRhXTsKLX0KLQotdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29h
OjphZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNr
SWRlbnRpZmllciwgRG93bmxvYWRJRCBkb3dubG9hZElEKQotewotI2lmbmRlZiBOREVCVUcKLSAg
ICBBU1NFUlQoIW1fZG93bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKLSAgICBm
b3IgKGF1dG8gaWRJbk1hcCA6IG1fZG93bmxvYWRNYXAudmFsdWVzKCkpCi0gICAgICAgIEFTU0VS
VChpZEluTWFwICE9IGRvd25sb2FkSUQpOwotI2VuZGlmCi0gICAgbV9kb3dubG9hZE1hcC5hZGQo
dGFza0lkZW50aWZpZXIsIGRvd25sb2FkSUQpOwotfQotCi1Eb3dubG9hZElEIE5ldHdvcmtTZXNz
aW9uQ29jb2E6OmRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
IHRhc2tJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRl
bnRpZmllcikuZG93bmxvYWRJRCgpKTsKLSAgICByZXR1cm4gbV9kb3dubG9hZE1hcC5nZXQodGFz
a0lkZW50aWZpZXIpOwotfQotCi1Eb3dubG9hZElEIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VE
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRp
ZmllcikKLXsKLSAgICBhdXRvIGRvd25sb2FkSUQgPSBtX2Rvd25sb2FkTWFwLnRha2UodGFza0lk
ZW50aWZpZXIpOwotICAgIHJldHVybiBkb3dubG9hZElEOwotfQotCiBzdGF0aWMgYm9vbCBjZXJ0
aWZpY2F0ZXNNYXRjaChTZWNUcnVzdFJlZiB0cnVzdDEsIFNlY1RydXN0UmVmIHRydXN0MikKIHsK
ICAgICBpZiAoIXRydXN0MSB8fCAhdHJ1c3QyKQpAQCAtMTMyMiwxOCArMTI4OCwxNyBAQCBib29s
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFsbG93c1NwZWNpZmljCiAgICAgcmV0dXJuIGNlcnRpZmlj
YXRlc01hdGNoKHRydXN0LmdldCgpLCBjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSgpLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpU
YXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdv
cmtEYXRhVGFzaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNl
aXZlQ2hhbGxlbmdlKFNlc3Npb25XcmFwcGVyJiBzZXNzaW9uV3JhcHBlciwgY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSog
bmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbmV0d29ya0RhdGFUYXNrKSB7CiAjaWYg
SEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQotICAgICAgICBpZiAoYXV0byogd2ViU29ja2V0
VGFzayA9IHdlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrSWRlbnRpZmllcikpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHdlYlNvY2tldFRhc2sgPSBzZXNzaW9uV3JhcHBlci53ZWJTb2Nr
ZXREYXRhVGFza01hcC5nZXQodGFza0lkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIGNoYWxsZW5nZXMgZm9yIHdlYiBzb2NrZXQuCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVm
YXVsdEhhbmRsaW5nLCB7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5k
aWYKLQotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSB0aGlzLT5kb3dubG9hZElEKHRhc2tJZGVu
dGlmaWVyKTsKKyAgICAgICAgYXV0byBkb3dubG9hZElEID0gc2Vzc2lvbldyYXBwZXIuZG93bmxv
YWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGRvd25sb2FkSUQuZG93bmxv
YWRJRCgpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogZG93bmxvYWQgPSBuZXR3b3JrUHJvY2Vz
cygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpKSB7CiAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgeyBjaGFsbGVuZ2UgfTsKQEAgLTEzOTUsMjYgKzEzNjAsMjIgQEAgRE1GV2Vic2l0ZVBv
bGljeU1vbml0b3IgKk5ldHdvcmtTZXNzaW9uQwogc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRh
c2s+IE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tl
dENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKIHsKICAgICAvLyBGSVhNRTogVXNlIHByb3RvY29s
LgotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25XZWJTb2NrZXRUYXNrPiB0YXNrID0gW21fc2Vz
c2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKSB3ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6
IHJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05v
dFVwZGF0ZUhUVFBCb2R5KV07CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbldlYlNvY2tldFRh
c2s+IHRhc2sgPSBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24gd2ViU29j
a2V0VGFza1dpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5
VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KV07CiAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8V2ViU29ja2V0VGFzaz4oY2hhbm5lbCwgV1RGTW92ZSh0YXNrKSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Nlc3Npb25Db2NvYTo6YWRkV2ViU29ja2V0VGFzayhXZWJTb2NrZXRUYXNrJiB0YXNrKQog
ewotICAgIEFTU0VSVCghbV93ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50
aWZpZXIoKSkpOwotICAgIG1fd2ViU29ja2V0RGF0YVRhc2tNYXAuYWRkKHRhc2suaWRlbnRpZmll
cigpLCAmdGFzayk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50aWZpZXIoKSkp
OworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS53ZWJTb2NrZXREYXRhVGFza01h
cC5hZGQodGFzay5pZGVudGlmaWVyKCksICZ0YXNrKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lv
bkNvY29hOjpyZW1vdmVXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2smIHRhc2spCiB7Ci0gICAg
QVNTRVJUKG1fd2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkp
KTsKLSAgICBtX3dlYlNvY2tldERhdGFUYXNrTWFwLnJlbW92ZSh0YXNrLmlkZW50aWZpZXIoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNv
Y2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRpZmllcigpKSk7CisgICAgbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNrTWFwLnJlbW92ZSh0YXNr
LmlkZW50aWZpZXIoKSk7CiB9CiAKLVdlYlNvY2tldFRhc2sqIE5ldHdvcmtTZXNzaW9uQ29jb2E6
OndlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihXZWJTb2NrZXRUYXNrOjpUYXNrSWRlbnRp
ZmllciBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBtX3dlYlNvY2tldERhdGFUYXNrTWFwLmdl
dChpZGVudGlmaWVyKTsKLX0KKyNlbmRpZiAvLyBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQp
CiAKLSNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NzksNyArODc5LDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdAogICAgICAgICBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwKICAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkRvTm90VXNlLAogICAgICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
c1BvbGljeTo6VXNlLAotICAgICAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6
RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcworICAgICAgICBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzCiAgICAgPjsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZS5tbQkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYg
KzQ2MywxNyBAQCAtICh2b2lkKV9zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlOih2CiAjZW5k
aWYKIH0KIAorLSAodm9pZClfbG9nVXNlckludGVyYWN0aW9uOihOU1VSTCAqKWRvbWFpbiBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5s
b2dVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgfSk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisjZW5kaWYKK30KKwogLSAo
dm9pZClfc2V0UHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCShyZXZp
c2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIHR5
cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQKIC0gKGJvb2wpX2hhc1JlZ2lz
dGVyZWRTZXJ2aWNlV29ya2VyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIu
MCkpOwogCiAtICh2b2lkKV9zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlOih2b2lkICheKSh2
b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9z
KDEzLjApKTsKKy0gKHZvaWQpX2xvZ1VzZXJJbnRlcmFjdGlvbjooTlNVUkwgKilkb21haW4gY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9z
ZXRQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1
KSwgaW9zKDEzLjApKTsKIC0gKHZvaWQpX2dldElzUHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRv
bWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiAtICh2b2lkKV9jbGVh
clByZXZhbGVudERvbWFpbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIxODEpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0xMS0wNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlLWVuYWJsZSBO
U1VSTFNlc3Npb24gaXNvbGF0aW9uIGFmdGVyIHIyNTIxMTYKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzkzNAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTY5MjE1ODQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MubW06CisgICAgICAgICgtW0RhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRl
IHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZy
YW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtEYXRhVGFza0lkZW50aWZpZXJD
b2xsaXNpb25EZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZXM6XSk6CisgICAgICAgICgtW0RhdGFUYXNr
SWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIHdlYlZpZXc6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoVEVTVCk6CisKIDIw
MTktMTEtMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT046IFsgaU9TIF0gKCByMjUxMDE1ICkgTGF5b3V0IFRlc3QgZmFzdC90ZXh0L3doaXRl
c3BhY2UvcHJlLXdyYXAtb3ZlcmZsb3ctc2VsZWN0aW9uLmh0bWwgaXMgZmxha3kKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCiAjaW1w
b3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3Lmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CkBAIC00NzQsNiArNDc1LDEwNSBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5ldHdvcmtQcm9jCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiB9CiAKK0BpbnRlcmZhY2UgRGF0YVRhc2tJZGVudGlm
aWVyQ29sbGlzaW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdL
VUlEZWxlZ2F0ZT4KKy0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKil3YWl0Rm9yTWVzc2FnZXM6KHNp
emVfdCljb3VudDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIERhdGFUYXNrSWRlbnRpZmllckNv
bGxpc2lvbkRlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcg
Kj4+IF9tZXNzYWdlczsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBp
bml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtfbWVzc2FnZXMgYWRkT2Jq
ZWN0Om1lc3NhZ2VdOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKKy0gKE5TQXJyYXk8
TlNTdHJpbmcgKj4gKil3YWl0Rm9yTWVzc2FnZXM6KHNpemVfdCltZXNzYWdlQ291bnQKK3sKKyAg
ICBfbWVzc2FnZXMgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpt
ZXNzYWdlQ291bnRdKTsKKyAgICB3aGlsZSAoW19tZXNzYWdlcyBjb3VudF0gPCBtZXNzYWdlQ291
bnQpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0
dXJuIF9tZXNzYWdlcy5hdXRvcmVsZWFzZSgpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOihOU1VSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5T
VVJMQ3JlZGVudGlhbCAqIGNyZWRlbnRpYWwpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZVVzZUNyZWRlbnRpYWwsIFtO
U1VSTENyZWRlbnRpYWwgY3JlZGVudGlhbEZvclRydXN0OmNoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2Uuc2VydmVyVHJ1c3RdKTsKK30KKworQGVuZAorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIERhdGFUYXNrSWRlbnRpZmllckNvbGxpc2lvbikKK3sKKyAgICB1c2luZyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSTsKKworICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBzZXJ2ZXJzQ29ubmVj
dGVkIHsgMCB9OworICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9ICJIVFRQLzEuMSAyMDAgT0tcclxu
Q29udGVudC1MZW5ndGg6IDI3XHJcblxyXG4iOworCisgICAgVENQU2VydmVyIGh0dHBzU2VydmVy
KFRDUFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTUHJveHksIFsmXSAoU1NMKiBzc2wpIHsKKyAgICAg
ICAgc2VydmVyc0Nvbm5lY3RlZCsrOworICAgICAgICB3aGlsZSAoc2VydmVyc0Nvbm5lY3RlZCA8
IDIpCisgICAgICAgICAgICB1c2xlZXAoMTAwMDAwKTsKKyAgICAgICAgVENQU2VydmVyOjpyZWFk
KHNzbCk7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBoZWFkZXIsIHN0cmxlbihoZWFk
ZXIpKTsKKyAgICAgICAgY29uc3QgY2hhciogYm9keSA9ICI8c2NyaXB0PmFsZXJ0KCcxJyk8L3Nj
cmlwdD4iOworICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNzbCwgYm9keSwgc3RybGVuKGJvZHkp
KTsKKyAgICB9KTsKKworICAgIFRDUFNlcnZlciBodHRwU2VydmVyKFsmXSAoaW50IHNvY2tldCkg
eworICAgICAgICBzZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2ZXJzQ29u
bmVjdGVkIDwgMikKKyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBUQ1BTZXJ2
ZXI6OnJlYWQoc29ja2V0KTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2NrZXQsIGhlYWRl
ciwgc3RybGVuKGhlYWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+
YWxlcnQoJzInKTwvc2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBi
b2R5LCBzdHJsZW4oYm9keSkpOworICAgIH0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKnN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFzZV07CisgICAgc3RvcmVDb25maWd1cmF0aW9uLmh0
dHBzUHJveHkgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIsIGh0dHBzU2VydmVyLnBvcnQoKV1dOworICAgIFdL
V2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9j
XSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOnN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2Vd
OworICAgIGF1dG8gdmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1
cmF0aW9uIG5ld10pOworICAgIFt2aWV3Q29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3Jl
OmRhdGFTdG9yZV07CisKKyAgICBhdXRvIHdlYlZpZXcxID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmln
dXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MSBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MgYW5kIGluaXRpYWxp
emUgZGF0YSBzdG9yZSJdOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtEYXRhVGFza0lk
ZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSBuZXddKTsKKyAgICBhdXRvIHdlYlZpZXcyID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCAxMDAsIDEwMCkgY29uZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAg
IFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzEg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgc2V0
VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIHNldE5hdmlnYXRpb25E
ZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlOllFU107CisKKyAgICBfX2Jsb2NrIGJvb2wgaXNvbGF0ZWRTZXNz
aW9uRG9tYWluID0gZmFsc2U7CisgICAgX19ibG9jayBOU1VSTCAqcHJldmFsZW50RXhhbXBsZSA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhhbXBsZS5jb20vIl07
CisgICAgW2RhdGFTdG9yZSBfbG9nVXNlckludGVyYWN0aW9uOnByZXZhbGVudEV4YW1wbGUgY29t
cGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UHJldmFsZW50RG9tYWlu
OnByZXZhbGVudEV4YW1wbGUgY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAg
ICAgW2RhdGFTdG9yZSBfc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZTpeeworICAgICAgICAg
ICAgICAgIGlzb2xhdGVkU2Vzc2lvbkRvbWFpbiA9IHRydWU7CisgICAgICAgICAgICB9XTsKKyAg
ICAgICAgfV07CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc29sYXRl
ZFNlc3Npb25Eb21haW4pOworCisgICAgW3dlYlZpZXcxIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJodHRwOi8vMTI3LjAuMC4xOiVkLyIsIGh0dHBTZXJ2ZXIucG9ydCgpXV1dXTsK
KyAgICBbd2ViVmlldzIgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vcHJldmFsZW50LWV4YW1wbGUuY29tLyJdXV07
CisKKyAgICBOU0FycmF5PE5TU3RyaW5nICo+ICptZXNzYWdlcyA9IFtkZWxlZ2F0ZSB3YWl0Rm9y
TWVzc2FnZXM6Ml07CisgICAgYXV0byBjb250YWlucyA9IFtdIChOU0FycmF5PE5TU3RyaW5nICo+
ICphcnJheSwgTlNTdHJpbmcgKmV4cGVjdGVkKSB7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKnMg
aW4gYXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChbcyBpc0VxdWFsVG9TdHJpbmc6ZXhwZWN0ZWRd
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworICAgIEVYUEVDVF9UUlVFKGNvbnRhaW5zKG1lc3NhZ2VzLCBAIjEi
KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWVzc2FnZXMsIEAiMiIpKTsKK30KKwogVEVT
VChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBOb01lc3NhZ2VzV2hlbk5vdFRlc3RpbmcpCiB7CiAg
ICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXRdKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTExLTA3ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUt
ZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBS
ZS1lbmFibGUgc2tpcHBlZCB0ZXN0cy4KKwogMjAxOS0xMS0wNiAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogWyBpT1MgXSAoIHIyNTEwMTUg
KSBMYXlvdXQgVGVzdCBmYXN0L3RleHQvd2hpdGVzcGFjZS9wcmUtd3JhcC1vdmVyZmxvdy1zZWxl
Y3Rpb24uaHRtbCBpcyBmbGFreQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDI1MjE4MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsMTAgKzc0Niw2IEBAIGh0
dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9kby1ub3QKIGh0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlcy1jYW4tYWNjZXNzLWNvb2tp
ZXMtaW4tYS10aGlyZC1wYXJ0eS1jb250ZXh0Lmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9jYXAtY2FjaGUtbWF4LWFnZS1mb3ItcHJldmFsZW50LXJlc291
cmNlLmh0bWwgWyBTa2lwIF0KIAotIyByZGFyOi8vcHJvYmxlbS81NjkyMTU4NAotaHR0cC90ZXN0
cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3N3aXRjaC1zZXNzaW9uLW9uLW5hdmlnYXRpb24tdG8t
cHJldmFsZW50LXdpdGgtaW50ZXJhY3Rpb24ucGhwIFsgU2tpcCBdCi1odHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24tbmF2aWdhdGlvbi10by1wcmV2YWxl
bnQtd2l0aC1pbnRlcmFjdGlvbi1kYXRhYmFzZS5waHAgWyBTa2lwIF0KLQogIyBUaGlzIGZlYXR1
cmUgaXMgY3VycmVudGx5IGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHVuZmluaXNoZWQgPHJkYXI6
Ly9wcm9ibGVtLzM4OTI1MDc3Pi4KIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wcm9jZXNzLXN3YXAt
d2luZG93LW9wZW4uaHRtbCBbIFNraXAgXQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383054</attachid>
            <date>2019-11-07 08:48:45 -0800</date>
            <delta_ts>2019-11-07 09:02:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203934-20191107164844.patch</filename>
            <type>text/plain</type>
            <size>67632</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUtZW5hYmxl
IE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaDoKKwogMjAx
OS0xMS0wNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSW1wbGVtZW50IEFYSXNvbGF0ZWRUcmVlTm9kZTo6cm9sZURlc2NyaXB0aW9uLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xhc3MgU3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgOiB1aW50OF90IHsKICAgICBEb05vdFVzZSwKICAgICBVc2UsCi0gICAg
RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcworICAgIEVwaGVtZXJhbFN0YXRlbGVzcwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkK
KysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcg
QEAKKzIwMTktMTEtMDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUy
MTE2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5
MzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIHIyNTIxMTYgd2FzIGEgcm9sbG91dCBvZiByMjQ4
NjQwLCB3aGljaCBpbnRyb2R1Y2VkIGNhc2VzIHdoZXJlIGRhdGEgdGFza3MgZnJvbSBkaWZmZXJl
bnQgTlNVUkxTZXNzaW9ucworICAgICAgICB3aGljaCBjYW4gaGF2ZSB0aGUgc2FtZSB0YXNrIGlk
ZW50aWZpZXJzIHdlcmUgcHV0IGludG8gdGhlIHNhbWUgbWFwcy4gIFRoaXMga2V5IGNvbGxpc2lv
biBjYXVzZWQgZGF0YSBmcm9tIHRoZSB3cm9uZworICAgICAgICB0YXNrcyB0byBiZSBzZW50IHRv
IE5ldHdvcmtSZXNvdXJjZUxvYWRlciwgY2F1c2luZyByYXJlIGFuZCBzdHJhbmdlIGxvYWRpbmcg
YnVncy4gIEluIG9yZGVyIHRvIHByZXZlbnQgaW5zZXJ0aW9uIGludG8KKyAgICAgICAgd3Jvbmcg
bWFwcyBhZ2FpbiwgSSBtYWRlIGEgbmV3IGFic3RyYWN0aW9uLCBTZXNzaW9uV3JhcHBlciwgd2hp
Y2ggd3JhcHMgYSBOU1VSTFNlc3Npb24sIGl0cyBkZWxlZ2F0ZSwgYW5kIGFsbCBtYXBzCisgICAg
ICAgIHRoYXQgYXJlIHNjb3BlZCB0byB0aGF0IE5TVVJMU2Vzc2lvbi4gIEFsb25nIHRoZSB3YXkg
SSBmb3VuZCBhIGZldyBvdGhlciBwbGFjZXMgd2hlcmUgd2UgaGFkIG1hZGUgc2ltaWxhciBtaXN0
YWtlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGFuIEFQSSB0ZXN0IHdoaWNoIHdvdWxkJ3ZlIGZh
aWxlZCBiZWZvcmUgcjI1MjExNiBiZWNhdXNlIGl0IGV4ZXJjaXNlcyB0aGUga2V5IGNvbGxpc2lv
biBjb25kaXRpb24sCisgICAgICAgIGFuZCBieSB0ZXN0cyB3aGljaCB3ZXJlIHNraXBwZWQgaW4g
cjI1MjExNiBhbmQgSSBub3cgdW5za2lwcGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkOjpyZXN1bWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3
b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29h
Ojp+TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgaW5pdFdpdGhTZXNzaW9uV3JhcHBlcjp3aXRoQ3JlZGVudGlhbHM6XSk6CisgICAgICAgICgt
W1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdKToKKyAgICAgICAg
KC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5nVGFzazpdKToKKyAgICAgICAgKC1b
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIHNlc3Npb25Db2NvYV0pOgorICAgICAgICAoLVtXS05l
dHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9y
Ol0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNr
OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6
XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6
X3NjaGVtZVVwZ3JhZGVkOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS05ldHdv
cmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazp3aWxsQ2FjaGVSZXNwb25zZTpj
b21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKHByb2Nlc3NTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0YXNr
OmRpZFJlY2VpdmVDaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRhc2s6ZGlkQ29tcGxldGVXaXRoRXJy
b3I6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRv
d25sb2FkVGFzazpkaWRGaW5pc2hEb3dubG9hZGluZ1RvVVJMOl0pOgorICAgICAgICAoLVtXS05l
dHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkb3dubG9hZFRhc2s6ZGlkV3JpdGVEYXRh
OnRvdGFsQnl0ZXNXcml0dGVuOnRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6XSk6CisgICAgICAg
ICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRvd25sb2FkVGFzazpkaWRS
ZXN1bWVBdE9mZnNldDpleHBlY3RlZFRvdGFsQnl0ZXM6XSk6CisgICAgICAgICgtW1dLTmV0d29y
a1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25sb2FkVGFz
azpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGV4aXN0aW5nV2ViU29j
a2V0VGFzazpdKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvbldyYXBwZXI6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNv
Y29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlhbGl6ZUVw
aGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjppc29sYXRlZFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Db2NvYTo6Y29udGludWVEaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFdlYlNvY2tldFRhc2spOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpyZW1vdmVXZWJTb2NrZXRUYXNrKToK
KyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoTmV0d29ya1Nlc3Np
b246d2l0aENyZWRlbnRpYWxzOl0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjppbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0
YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGREb3dubG9hZElEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VEb3dubG9hZElE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6d2ViU29j
a2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0
YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisKIDIw
MTktMTEtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFdlYkRyaXZlcjogY29ycmVjdGx5IGhhbmRsZSBlcnJvcnMgd2hlbiBmb2N1c2luZyBl
bGVtZW50IGJlZm9yZSBzZW5kaW5nIGtleSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNw
cAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9BZENs
aWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBAIHZvaWQgQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlcjo6ZmlyZUNvbnYKICAgICBsb2FkUGFy
YW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBsb2FkUGFyYW1ldGVycy5zb3VyY2VPcmln
aW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnZlcnNpb25SZWZlcnJlclVSTCk7CiAgICAg
bG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCk7Ci0g
ICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKKyAgICBsb2FkUGFyYW1l
dGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpF
cGhlbWVyYWxTdGF0ZWxlc3M7CiAgICAgbG9hZFBhcmFtZXRlcnMub3B0aW9ucyA9IG9wdGlvbnM7
CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCA9IHRydWU7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkUmVzdHJpY3RIVFRQUmVzcG9u
c2VBY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU4LDQgKzE1OCw5IEBAIFBBTDo6U2Vzc2lvbklEIE5ldHdvcmtEYXRhVGFzazo6c2Vzc2lvbkkK
ICAgICByZXR1cm4gbV9zZXNzaW9uLT5zZXNzaW9uSUQoKTsKIH0KIAorTmV0d29ya1Nlc3Npb24q
IE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQoreworICAgIHJldHVybiBtX3Nlc3Np
b24uZ2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAyNTIxODEp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGljOgogCiAgICAgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKCkgY29uc3Q7CiAKKyAgICBOZXR3b3JrU2Vzc2lvbiogbmV0d29ya1Nlc3Np
b24oKTsKKwogcHJvdGVjdGVkOgogICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBib29sIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmln
YXRpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9j
b2NvYS9Eb3dubG9hZENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25s
b2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDEwIEBAIHZvaWQgRG93bmxv
YWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWYKICAgICBOU0RhdGEgKnVwZGF0ZWREYXRhID0g
W05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBkYXRhV2l0aFByb3BlcnR5TGlzdDpkaWN0aW9u
YXJ5IGZvcm1hdDpOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wIG9wdGlvbnM6MCBlcnJvcjpu
dWxscHRyXTsKICNlbmRpZgogCi0gICAgbV9kb3dubG9hZFRhc2sgPSBjb2NvYVNlc3Npb24uZG93
bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEodXBkYXRlZERhdGEpOwotICAgIGNvY29hU2Vzc2lvbi5h
ZGREb3dubG9hZElEKG1fZG93bmxvYWRUYXNrLmdldCgpLnRhc2tJZGVudGlmaWVyLCBtX2Rvd25s
b2FkSUQpOworICAgIG1fZG93bmxvYWRUYXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9uV3JhcHBl
ckZvckRvd25sb2FkcygpLnNlc3Npb24gZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGE6dXBkYXRl
ZERhdGFdOworICAgIGF1dG8gdGFza0lkZW50aWZpZXIgPSBbbV9kb3dubG9hZFRhc2sgdGFza0lk
ZW50aWZpZXJdOworICAgIEFTU0VSVCghY29jb2FTZXNzaW9uLnNlc3Npb25XcmFwcGVyRm9yRG93
bmxvYWRzKCkuZG93bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKKyAgICBjb2Nv
YVNlc3Npb24uc2Vzc2lvbldyYXBwZXJGb3JEb3dubG9hZHMoKS5kb3dubG9hZE1hcC5hZGQodGFz
a0lkZW50aWZpZXIsIG1fZG93bmxvYWRJRCk7CiAgICAgbV9kb3dubG9hZFRhc2suZ2V0KCkuX3Bh
dGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBwYXRoOwogCiAgICAgW21fZG93bmxvYWRUYXNrIHJlc3Vt
ZV07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERv
d25sb2FkOwogY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3N0cnVjdCBTZXNzaW9uV3JhcHBl
cjsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0Rh
dGFUYXNrIHsKICAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKQEAgLTg5LDYg
KzkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVGhpcmRQYXJ0eVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CiAgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2lu
Z0FsbG93ZWQoKSBjb25zdDsKIAorICAgIFNlc3Npb25XcmFwcGVyJiBtX3Nlc3Npb25XcmFwcGVy
OwogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNpb247CiAgICAg
UmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiAgICAgV2ViQ29yZTo6TmV0
d29ya0xvYWRNZXRyaWNzIG1fbmV0d29ya0xvYWRNZXRyaWNzOwpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiAr
MTcyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXB1dGVJc0Fsd2F5c09uTG9nZwogCiBOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mIHNl
c3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBXZWJDb3JlOjpD
b250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpDb250ZW50
RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBQcmVjb25uZWN0T25seSBz
aG91bGRQcmVjb25uZWN0T25seSwgYm9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlv
biwgYm9vbCBkYXRhVGFza0lzRm9yTWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lLCBP
cHRpb25hbDxOZXR3b3JrQWN0aXZpdHlUcmFja2VyPiBuZXR3b3JrQWN0aXZpdHlUcmFja2VyKQog
ICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgICwg
bV9zZXNzaW9uV3JhcHBlcihzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4oc2Vzc2lv
bikuc2Vzc2lvbldyYXBwZXJGb3JUYXNrKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KSkKICAgICAsIG1fZnJhbWVJRChmcmFtZUlEKQogICAgICwgbV9wYWdl
SUQocGFnZUlEKQogICAgICwgbV9pc0Zvck1haW5SZXNvdXJjZU5hdmlnYXRpb25Gb3JBbnlGcmFt
ZShkYXRhVGFza0lzRm9yTWFpblJlc291cmNlTmF2aWdhdGlvbkZvckFueUZyYW1lKQpAQCAtMjA2
LDE0ICsyMDcsMTEgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFza0NvYwog
I2VuZGlmCiAKICAgICBib29sIHNob3VsZEJsb2NrQ29va2llcyA9IGZhbHNlOwotICAgIGJvb2wg
bmVlZHNJc29sYXRlZFNlc3Npb24gPSBmYWxzZTsKLSAgICBhdXRvIGZpcnN0UGFydHkgPSBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbihyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgc2hvdWxkQmxvY2tDb29r
aWVzID0gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M7CisgICAgc2hvdWxkQmxvY2tD
b29raWVzID0gc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczsKICAgICBpZiAoYXV0byogbmV0d29ya1N0
b3JhZ2VTZXNzaW9uID0gc2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSkgewogICAgICAg
ICBpZiAoIXNob3VsZEJsb2NrQ29va2llcykKICAgICAgICAgICAgIHNob3VsZEJsb2NrQ29va2ll
cyA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIGZy
YW1lSUQsIHBhZ2VJRCk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTY5MjE1
ODQ+IG5lZWRzSXNvbGF0ZWRTZXNzaW9uIHNob3VsZCBiZSBzZXQgaGVyZS4KICAgICB9CiAjZW5k
aWYKICAgICByZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQocmVxdWVzdCk7
CkBAIC0yMjEsMTQgKzIxOSwxMSBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFU
YXNrQ29jCiAgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSByZXF1ZXN0Lm5zVVJMUmVxdWVz
dChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOwogICAgIGFw
cGx5U25pZmZpbmdQb2xpY2llc0FuZEJpbmRSZXF1ZXN0VG9JbmZlcmZhY2VJZk5lZWRlZChuc1Jl
cXVlc3QsIHNob3VsZENvbnRlbnRTbmlmZiA9PSBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3k6OlNuaWZmQ29udGVudCAmJiAhdXJsLmlzTG9jYWxGaWxlKCksIHNob3VsZENvbnRlbnRFbmNv
ZGluZ1NuaWZmID09IFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5OjpTbmlm
Zik7CiAKLSAgICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lv
bkNvY29hJj4oKm1fc2Vzc2lvbik7Ci0gICAgaWYgKG5lZWRzSXNvbGF0ZWRTZXNzaW9uKQotICAg
ICAgICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLmlzb2xhdGVkU2Vzc2lvbihzdG9yZWRDcmVkZW50
aWFsc1BvbGljeSwgZmlyc3RQYXJ0eSkgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwot
ICAgIGVsc2UKLSAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lvbi5zZXNzaW9uKHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5KSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgbV90
YXNrID0gW21fc2Vzc2lvbldyYXBwZXIuc2Vzc2lvbiBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVx
dWVzdF07CiAKLSAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0aW5nIE5ldHdvcmtE
YXRhVGFzayB3aXRoIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5PSV1IGFuZCBVUkw9JXMiLCBbbV90
YXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIG5zUmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0gICAgY29jb2FTZXNzaW9uLnJlZ2lzdGVy
RGF0YVRhc2soW21fdGFzayB0YXNrSWRlbnRpZmllcl0sICp0aGlzLCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tN
YXAuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICBtX3Nlc3Npb25XcmFw
cGVyLmRhdGFUYXNrTWFwLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CisgICAg
TE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGluZyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBV
UkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0
cmluZy5VVEY4U3RyaW5nKTsKIAogICAgIGlmIChzaG91bGRQcmVjb25uZWN0T25seSA9PSBQcmVj
b25uZWN0T25seTo6WWVzKSB7CiAjaWYgRU5BQkxFKFNFUlZFUl9QUkVDT05ORUNUKQpAQCAtMjY2
LDggKzI2MSw4IEBAIE5ldHdvcmtEYXRhVGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ28KICAg
ICBpZiAoIW1fdGFzayB8fCAhbV9zZXNzaW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
JiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4oKm1fc2Vz
c2lvbik7Ci0gICAgY29jb2FTZXNzaW9uLnVucmVnaXN0ZXJEYXRhVGFzayhbbV90YXNrIHRhc2tJ
ZGVudGlmaWVyXSwgKnRoaXMsIG1fc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fc2Vzc2lvbldyYXBwZXIuZGF0YVRhc2tNYXAuZ2V0KFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAgICBtX3Nlc3Npb25XcmFwcGVyLmRhdGFUYXNrTWFwLnJl
bW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiB9CiAKIHZvaWQgTmV0d29ya0RhdGFUYXNr
Q29jb2E6OnJlc3RyaWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0zNTcsNyArMzUyLDcgQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6d2lsbFBlcmZvcm1IVAogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICBpZiAoIW1faGFzQmVlblNldFRvVXNlU3RhdGVsZXNzQ29va2llU3Rv
cmFnZSkgewotICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzcwor
ICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9PSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzCiAgICAgICAgICAgICB8fCAobV9z
ZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKSAmJiBtX3Nlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVzdCwgbV9mcmFtZUlELCBtX3Bh
Z2VJRCkpKQogICAgICAgICAgICAgYmxvY2tDb29raWVzKCk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lv
bkNvY29hLmgJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiBPQkpDX0NMQVNTIERNRldlYnNpdGVQb2xpY3lNb25pdG9yOwogT0JKQ19DTEFTUyBO
U0RhdGE7CiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKK09CSkNfQ0xBU1MgTlNVUkxTZXNzaW9u
Q29uZmlndXJhdGlvbjsKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrOwogT0JK
Q19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOwogT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNzaW9uRGVs
ZWdhdGU7CkBAIC00NSw2ICs0NiwxOSBAQCBPQkpDX0NMQVNTIFdLTmV0d29ya1Nlc3Npb25XZWJT
b2NrZXREZWxlCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKworc3RydWN0IFNlc3Npb25X
cmFwcGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFNlc3Npb25XcmFwcGVyPiB7CisgICAgdm9p
ZCBpbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKiwgTmV0d29ya1Nlc3Npb25D
b2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKKworICAgIFJldGFpblB0
cjxOU1VSTFNlc3Npb24+IHNlc3Npb247CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZT4gZGVsZWdhdGU7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFz
a0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gZGF0YVRhc2tNYXA7CisgICAgSGFz
aE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQ+IGRv
d25sb2FkTWFwOworI2lmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKKyAgICBIYXNoTWFw
PE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViU29ja2V0VGFzayo+IHdl
YlNvY2tldERhdGFUYXNrTWFwOworI2VuZGlmCit9OwogCiBjbGFzcyBOZXR3b3JrU2Vzc2lvbkNv
Y29hIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKICAgICBmcmllbmQgY2xhc3MgTmV0
d29ya0RhdGFUYXNrQ29jb2E7CkBAIC01NCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBOZXR3b3Jr
U2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNzJiwgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFt
ZXRlcnMmJik7CiAgICAgfk5ldHdvcmtTZXNzaW9uQ29jb2EoKTsKIAotICAgIHZvaWQgaW5pdGlh
bGl6ZUVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uKCk7CisgICAgdm9pZCBpbml0
aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbigpOwogCiAgICAgY29uc3QgU3RyaW5nJiBi
b3VuZEludGVyZmFjZUlkZW50aWZpZXIoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIHNvdXJj
ZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0OwpAQCAtNjMsMjEgKzc3LDExIEBA
IHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIGRhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7IH0KICNlbmRpZgogCi0g
ICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5KTsKLSAgICB2b2lkIHJlZ2lzdGVyRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRh
c2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSYsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiwgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotCi0gICAgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNr
KiBkb3dubG9hZFRhc2tXaXRoUmVzdW1lRGF0YShOU0RhdGEqKTsKLQotICAgIFdlYlNvY2tldFRh
c2sqIHdlYlNvY2tldERhdGFUYXNrRm9ySWRlbnRpZmllcihXZWJTb2NrZXRUYXNrOjpUYXNrSWRl
bnRpZmllcik7Ci0KLSAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKLSAgICBEb3dubG9hZElEIGRvd25sb2FkSUQo
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKLSAgICBEb3dubG9hZElEIHRh
a2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7Ci0KICAg
ICBzdGF0aWMgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAKLSAgICB2b2lkIGNvbnRpbnVl
RGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNr
Q29jb2EqLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiYmKTsKKyAgICB2
b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShTZXNzaW9uV3JhcHBlciYsIGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRh
c2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSosIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpDcmVkZW50aWFsJik+JiYpOworCisgICAgU2Vzc2lvbldyYXBwZXImIHNlc3Npb25XcmFw
cGVyRm9yRG93bmxvYWRzKCkgeyByZXR1cm4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
OyB9CiAKICAgICBib29sIGZhc3RTZXJ2ZXJUcnVzdEV2YWx1YXRpb25FbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9mYXN0U2VydmVyVHJ1c3RFdmFsdWF0aW9uRW5hYmxlZDsgfQogICAgIGJvb2wg
ZGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
dmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkOyB9CkBAIC04Niw4ICs5MCw2IEBAIHB1
YmxpYzoKIAogICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUNvbmZpZ3VyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Byb3h5Q29uZmlndXJhdGlvbi5nZXQoKTsgfQogCi0gICAgTlNVUkxTZXNzaW9u
KiBzZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLSAgICBOU1VSTFNl
c3Npb24qIGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwg
Y29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4pOwogICAgIGJvb2wgaGFzSXNvbGF0ZWRT
ZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2b2lkIGNsZWFySXNvbGF0ZWRTZXNzaW9ucygpIG92ZXJyaWRlOwogCkBAIC05Niw2ICs5
OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBzaG91bGRMb2dDb29raWVJbmZvcm1hdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fc2hvdWxkTG9nQ29va2llSW5mb3JtYXRpb247IH0KICAgICBTZWNvbmRzIGxvYWRUaHJv
dHRsZUxhdGVuY3koKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvYWRUaHJvdHRsZUxhdGVu
Y3k7IH0KKyAgICBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBwZXJGb3JUYXNrKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5
KTsKKyAgICBTZXNzaW9uV3JhcHBlciYgaXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbik7CiAKICNp
ZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNv
Y2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBmaW5h
bDsKQEAgLTEwMywzMiArMTA3LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVXZWJTb2Nr
ZXRUYXNrKFdlYlNvY2tldFRhc2smKSBmaW5hbDsKICNlbmRpZgogCi0gICAgSGFzaE1hcDxOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4m
IGRhdGFUYXNrTWFwKFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5KTsKLQotICAgIEhh
c2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRh
c2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4g
bV9kYXRhVGFza01hcFdpdGhvdXRTdGF0ZTsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFw
RXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzczsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKLSNpZiBI
QVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6VGFza0lkZW50aWZpZXIsIFdlYlNvY2tldFRhc2sqPiBtX3dlYlNvY2tldERhdGFUYXNr
TWFwOwotI2VuZGlmCi0KICAgICBzdHJ1Y3QgSXNvbGF0ZWRTZXNzaW9uIHsKLSAgICAgICAgUmV0
YWluUHRyPE5TVVJMU2Vzc2lvbj4gc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKLSAgICAg
ICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZURlbGVnYXRlOwotICAgICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBzdGF0
ZWxlc3NTZXNzaW9uOwotICAgICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
PiBzdGF0ZWxlc3NTZXNzaW9uRGVsZWdhdGU7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZTsKKyAgICAgICAgU2Vzc2lvbldyYXBwZXIgc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZTsKICAgICAgICAgV2FsbFRpbWUgbGFzdFVzZWQ7CiAgICAgfTsKIAotICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIElzb2xhdGVkU2Vzc2lvbj4gbV9p
c29sYXRlZFNlc3Npb25zOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4s
IHN0ZDo6dW5pcXVlX3B0cjxJc29sYXRlZFNlc3Npb24+PiBtX2lzb2xhdGVkU2Vzc2lvbnM7CiAK
LSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3Jh
Z2U7Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0
aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4g
bV9zdGF0ZWxlc3NTZXNzaW9uOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGU+IG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Np
b24+IG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb247Ci0gICAgUmV0YWluUHRy
PFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNz
U2Vzc2lvbkRlbGVnYXRlOworICAgIFNlc3Npb25XcmFwcGVyIG1fc2Vzc2lvbldpdGhDcmVkZW50
aWFsU3RvcmFnZTsKKyAgICBTZXNzaW9uV3JhcHBlciBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlh
bFN0b3JhZ2U7CisgICAgU2Vzc2lvbldyYXBwZXIgbV9lcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9u
OwogCiAgICAgU3RyaW5nIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAgIFN0cmluZyBt
X3NvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDE1
IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+
CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9PYmpDUnVudGltZUV4
dHJhcy5oPgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9T
b2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpD
UHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi9CbG9j
a1B0ci5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKICNpbmNsdWRlIDxXZWJLaXRB
ZGRpdGlvbnMvTmV0d29ya1Nlc3Npb25Db2NvYUFkZGl0aW9ucy5oPgpAQCAtMzk2LDIzICszOTcs
MjUgQEAgQGludGVyZmFjZSBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgOiBOUwogI2VuZGlmCiA+
IHsKICAgICBXZWFrUHRyPFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYT4gX3Nlc3Npb247Cisg
ICAgV2Vha1B0cjxXZWJLaXQ6OlNlc3Npb25XcmFwcGVyPiBfc2Vzc2lvbldyYXBwZXI7CiAgICAg
Ym9vbCBfd2l0aENyZWRlbnRpYWxzOwogfQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9u
OihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihi
b29sKXdpdGhDcmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3cmFwcGVyOihXZWJLaXQ6OlNlc3Npb25X
cmFwcGVyJilzZXNzaW9uV3JhcHBlciB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRp
YWxzOwogLSAodm9pZClzZXNzaW9uSW52YWxpZGF0ZWQ7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0
aW9uIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtTZXNz
aW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxz
Oihib29sKXdpdGhDcmVkZW50aWFscworLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2Vi
S2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9uIHdyYXBwZXI6KFdlYktpdDo6U2Vzc2lv
bldyYXBwZXImKXNlc3Npb25XcmFwcGVyIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVu
dGlhbHMKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAogICAgIF9zZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbik7Cisg
ICAgX3Nlc3Npb25XcmFwcGVyID0gbWFrZVdlYWtQdHIoc2Vzc2lvbldyYXBwZXIpOwogICAgIF93
aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHM7CiAKICAgICByZXR1cm4gc2VsZjsKQEAg
LTQyMCwyNCArNDIzLDIzIEBAIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6
TmUKIAogLSAodm9pZClzZXNzaW9uSW52YWxpZGF0ZWQKIHsKLSAgICBfc2Vzc2lvbiA9IG51bGxw
dHI7CisgICAgX3Nlc3Npb25XcmFwcGVyID0gbnVsbHB0cjsKIH0KIAogLSAoTmV0d29ya0RhdGFU
YXNrQ29jb2EqKWV4aXN0aW5nVGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sKIHsKLSAgICBp
ZiAoIV9zZXNzaW9uKQorICAgIGlmICghX3Nlc3Npb25XcmFwcGVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGlmICghdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBhdXRvIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5ID0gX3dpdGhDcmVkZW50aWFscyA/IFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpVc2UgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6RG9Ob3RVc2U7Ci0gICAgcmV0dXJuIF9zZXNzaW9uLT5kYXRhVGFza0Zvcklk
ZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmllciwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwor
ICAgIHJldHVybiBfc2Vzc2lvbldyYXBwZXItPmRhdGFUYXNrTWFwLmdldCh0YXNrLnRhc2tJZGVu
dGlmaWVyKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9u
IGRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIEFTU0VS
VCghX3Nlc3Npb24pOworICAgIEFTU0VSVCghX3Nlc3Npb25XcmFwcGVyKTsKIH0KIAogLSAodm9p
ZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRh
c2sgKil0YXNrIGRpZFNlbmRCb2R5RGF0YTooaW50NjRfdClieXRlc1NlbnQgdG90YWxCeXRlc1Nl
bnQ6KGludDY0X3QpdG90YWxCeXRlc1NlbnQgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kOihpbnQ2
NF90KXRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZApAQCAtNTI3LDEyICs1MjksMTUgQEAgLSAodm9p
ZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogCiAgICAgICAgIGJvb2wgc2hvdWxk
SWdub3JlSFNUUyA9IGZhbHNlOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0gICAgICAgIHNob3VsZElnbm9yZUhTVFMgPSBzY2hlbWVXYXNVcGdyYWRlZER1ZVRvRHluYW1p
Y0hTVFMocmVxdWVzdCkgJiYgX3Nlc3Npb24tPm5ldHdvcmtQcm9jZXNzKCkuc3RvcmFnZVNlc3Np
b24oX3Nlc3Npb24tPnNlc3Npb25JRCgpKS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5l
dHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgpLCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKLSAg
ICAgICAgaWYgKHNob3VsZElnbm9yZUhTVFMpIHsKLSAgICAgICAgICAgIHJlcXVlc3QgPSBkb3du
Z3JhZGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5z
Y2hlbWUgaXNFcXVhbFRvU3RyaW5nOkAiaHR0cCJdKTsKLSAgICAgICAgICAgIExPRyhOZXR3b3Jr
U2Vzc2lvbiwgIiVsbHUgRG93bmdyYWRlZCAlcyBmcm9tIGh0dHBzIHRvIGh0dHAiLCB0YXNrSWRl
bnRpZmllciwgcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb25Db2NvYSA9IG5ldHdvcmtEYXRhVGFzay0+bmV0
d29ya1Nlc3Npb24oKSkgeworICAgICAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdh
c1VwZ3JhZGVkRHVlVG9EeW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBzZXNzaW9uQ29jb2EtPm5ldHdv
cmtQcm9jZXNzKCkuc3RvcmFnZVNlc3Npb24oc2Vzc2lvbkNvY29hLT5zZXNzaW9uSUQoKSktPnNo
b3VsZEJsb2NrQ29va2llcyhyZXF1ZXN0LCBuZXR3b3JrRGF0YVRhc2stPmZyYW1lSUQoKSwgbmV0
d29ya0RhdGFUYXNrLT5wYWdlSUQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNU
UykgeworICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBkb3duZ3JhZGVSZXF1ZXN0KHJlcXVlc3Qp
OworICAgICAgICAgICAgICAgIEFTU0VSVChbcmVxdWVzdC5VUkwuc2NoZW1lIGlzRXF1YWxUb1N0
cmluZzpAImh0dHAiXSk7CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxs
dSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRhc2tJZGVudGlmaWVyLCByZXF1
ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogCiAg
ICAgICAgIG5ldHdvcmtEYXRhVGFzay0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVzcG9u
c2UsIHJlcXVlc3QsIFtjb21wbGV0aW9uSGFuZGxlckNvcHksIHRhc2tJZGVudGlmaWVyLCBzaG91
bGRJZ25vcmVIU1RTXShhdXRvJiYgcmVxdWVzdCkgewpAQCAtNTYwLDEyICs1NjUsMTUgQEAgLSAo
dm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgIGlmIChhdXRvKiBuZXR3
b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza10pIHsKICAgICAgICAgYm9vbCBz
aG91bGRJZ25vcmVIU1RTID0gZmFsc2U7CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgc2hvdWxkSWdub3JlSFNUUyA9IHNjaGVtZVdhc1VwZ3JhZGVkRHVlVG9E
eW5hbWljSFNUUyhyZXF1ZXN0KSAmJiBfc2Vzc2lvbi0+bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdl
U2Vzc2lvbihfc2Vzc2lvbi0+c2Vzc2lvbklEKCkpLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVz
dCwgbmV0d29ya0RhdGFUYXNrLT5mcmFtZUlEKCksIG5ldHdvcmtEYXRhVGFzay0+cGFnZUlEKCkp
OwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlSFNUUykgewotICAgICAgICAgICAgcmVxdWVzdCA9
IGRvd25ncmFkZVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICBBU1NFUlQoW3JlcXVlc3Qu
VVJMLnNjaGVtZSBpc0VxdWFsVG9TdHJpbmc6QCJodHRwIl0pOwotICAgICAgICAgICAgTE9HKE5l
dHdvcmtTZXNzaW9uLCAiJWxsdSBEb3duZ3JhZGVkICVzIGZyb20gaHR0cHMgdG8gaHR0cCIsIHRh
c2tJZGVudGlmaWVyLCByZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoYXV0byogc2Vzc2lvbkNvY29hID0gbmV0d29ya0RhdGFUYXNr
LT5uZXR3b3JrU2Vzc2lvbigpKSB7CisgICAgICAgICAgICBzaG91bGRJZ25vcmVIU1RTID0gc2No
ZW1lV2FzVXBncmFkZWREdWVUb0R5bmFtaWNIU1RTKHJlcXVlc3QpICYmIHNlc3Npb25Db2NvYS0+
bmV0d29ya1Byb2Nlc3MoKS5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uQ29jb2EtPnNlc3Npb25JRCgp
KS0+c2hvdWxkQmxvY2tDb29raWVzKHJlcXVlc3QsIG5ldHdvcmtEYXRhVGFzay0+ZnJhbWVJRCgp
LCBuZXR3b3JrRGF0YVRhc2stPnBhZ2VJRCgpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25v
cmVIU1RTKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGRvd25ncmFkZVJlcXVlc3QocmVx
dWVzdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKFtyZXF1ZXN0LlVSTC5zY2hlbWUgaXNFcXVh
bFRvU3RyaW5nOkAiaHR0cCJdKTsKKyAgICAgICAgICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24s
ICIlbGx1IERvd25ncmFkZWQgJXMgZnJvbSBodHRwcyB0byBodHRwIiwgdGFza0lkZW50aWZpZXIs
IHJlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlm
CiAKICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBCbG9ja19jb3B5KGNvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTU4OCwxMSArNTk2LDYgQEAgLSAodm9pZClVUkxTZXNzaW9uOihO
U1VSTFNlc3Npb24gKilzZXNzaQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgd2lsbENh
Y2hlUmVzcG9uc2U6KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilwcm9wb3NlZFJlc3BvbnNlIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb25z
ZSkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uKSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBG
SVhNRTogcmVtb3ZlIGlmIDxyZGFyOi8vcHJvYmxlbS8yMDAwMTk4NT4gaXMgZXZlciByZXNvbHZl
ZC4KICAgICBpZiAoW3Byb3Bvc2VkUmVzcG9uc2UucmVzcG9uc2UgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihhbGxIZWFkZXJGaWVsZHMpXQogICAgICAgICAmJiBbWyhpZClwcm9wb3NlZFJl
c3BvbnNlLnJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1S
YW5nZSJdKQpAQCAtNjAyLDkgKzYwNSw5IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNz
aW9uICopc2Vzc2kKIH0KIAogI2lmIEhBVkUoQ0ZORVRXT1JLX05TVVJMU0VTU0lPTl9TVFJJQ1RS
VVNURVZBTFVBVEUpCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVh
dGlvbihOZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlICpjaGFsbGVuZ2UsIE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0
YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqIG5ldHdvcmtEYXRhVGFzaywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24g
ZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhbHVhdGlvbihO
ZXR3b3JrU2Vzc2lvbkNvY29hICpzZXNzaW9uLCBTZXNzaW9uV3JhcHBlciYgc2Vzc2lvbldyYXBw
ZXIsIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgTmV0d29ya0RhdGFU
YXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tD
b2NvYSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TVVJMU2Vzc2lv
bkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpj
cmVkZW50aWFsKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzZXNzaW9uLT5jb250aW51
ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0Rh
dGFUYXNrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
c2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVz
dCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRp
b24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgeworICAg
IHNlc3Npb24tPmNvbnRpbnVlRGlkUmVjZWl2ZUNoYWxsZW5nZShzZXNzaW9uV3JhcHBlciwgY2hh
bGxlbmdlLCB0YXNrSWRlbnRpZmllciwgbmV0d29ya0RhdGFUYXNrLCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc2VjVHJ1c3QgPSByZXRhaW5QdHIoY2hh
bGxlbmdlLnByb3RlY3Rpb25TcGFjZS5zZXJ2ZXJUcnVzdCldIChXZWJLaXQ6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRl
bnRpYWwmIGNyZWRlbnRpYWwpIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogVUlQcm9jZXNz
IHNob3VsZCBzZW5kIHVzIGJhY2sgbm9uIG5pbCBjcmVkZW50aWFscyBidXQgdGhlIGNyZWRlbnRp
YWwgSVBDIGVuY29kZXIgY3VycmVudGx5IG9ubHkgc2VyaWFsaXplcyBucyBjcmVkZW50aWFscyBm
b3IgdXNlcm5hbWUvcGFzc3dvcmQuCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNy
ZWRlbnRpYWwubnNDcmVkZW50aWFsKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFs
IGNyZWRlbnRpYWxGb3JUcnVzdDogc2VjVHJ1c3QuZ2V0KCldKTsKQEAgLTYxNyw3ICs2MjAsOSBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1NlcnZlclRydXN0RXZhCiAKIC0gKHZvaWQpVVJM
U2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Npb25UYXNrICop
dGFzayBkaWRSZWNlaXZlQ2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICop
Y2hhbGxlbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFNlc3Npb25BdXRoQ2hh
bGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlh
bCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBpZiAoIV9zZXNzaW9uIHx8IFt0YXNrIHN0YXRl
XSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmcpIHsKKyAgICBhdXRvKiBuZXR3b3Jr
RGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6dGFza107CisgICAgYXV0byogc2Vzc2lvbkNv
Y29hID0gbmV0d29ya0RhdGFUYXNrID8gc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYSo+
KG5ldHdvcmtEYXRhVGFzay0+bmV0d29ya1Nlc3Npb24oKSkgOiBudWxscHRyOworICAgIGlmICgh
c2Vzc2lvbkNvY29hIHx8IFt0YXNrIHN0YXRlXSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5j
ZWxpbmcpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNVUkxTZXNzaW9uQXV0aENoYWxs
ZW5nZUNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBuaWwpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjM3LDE4ICs2NDIsMjEgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNl
c3Npb24gKilzZXNzaQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKE5TVVJM
U2Vzc2lvbkF1dGhDaGFsbGVuZ2VVc2VDcmVkZW50aWFsLCBbTlNVUkxDcmVkZW50aWFsIGNyZWRl
bnRpYWxGb3JUcnVzdDpjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0XSk7CiAK
ICAgICAgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxl
dmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW5kIHRvIHVzZSBBVFMg
ZGVmYXVsdHMuCi0gICAgICAgIGlmIChfc2Vzc2lvbi0+ZmFzdFNlcnZlclRydXN0RXZhbHVhdGlv
bkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc2Vzc2lvbkNvY29hLT5mYXN0U2VydmVyVHJ1c3RF
dmFsdWF0aW9uRW5hYmxlZCgpKSB7CiAjaWYgSEFWRShDRk5FVFdPUktfTlNVUkxTRVNTSU9OX1NU
UklDVFJVU1RFVkFMVUFURSkKICAgICAgICAgICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtz
ZWxmIGV4aXN0aW5nVGFzazp0YXNrXTsKICAgICAgICAgICAgIEFTU0VSVChuZXR3b3JrRGF0YVRh
c2spOwotICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoW19z
ZXNzaW9uID0gbWFrZVdlYWtQdHIoX3Nlc3Npb24uZ2V0KCkpLCBjb21wbGV0aW9uSGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlciksIHRhc2tJZGVudGlmaWVyLCBuZXR3b3Jr
RGF0YVRhc2sgPSBSZWZQdHI8TmV0d29ya0RhdGFUYXNrQ29jb2E+KG5ldHdvcmtEYXRhVGFzayld
KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKmNoYWxsZW5nZSwgT1NTdGF0dXMgdHJ1c3RS
ZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
PihzZWxmKSwgc2Vzc2lvbkNvY29hID0gbWFrZVdlYWtQdHIoc2Vzc2lvbkNvY29hKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpLCB0YXNrSWRlbnRp
ZmllciwgbmV0d29ya0RhdGFUYXNrID0gUmVmUHRyPE5ldHdvcmtEYXRhVGFza0NvY29hPihuZXR3
b3JrRGF0YVRhc2spXShOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICpjaGFsbGVuZ2UsIE9T
U3RhdHVzIHRydXN0UmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBhdXRvIHN0cm9u
Z1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Np
b25BdXRoQ2hhbGxlbmdlQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIG5pbCk7CiAgICAg
ICAgICAgICAgICAgYXV0byB0YXNrID0gV1RGTW92ZShuZXR3b3JrRGF0YVRhc2spOwotICAgICAg
ICAgICAgICAgIGF1dG8qIHNlc3Npb24gPSBfc2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBzZXNzaW9uID0gc2Vzc2lvbkNvY29hLmdldCgpOwogICAgICAgICAgICAgICAgIGlm
ICh0cnVzdFJlc3VsdCA9PSBub0VyciB8fCAhc2Vzc2lvbikgewogICAgICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlUGVyZm9ybURlZmF1
bHRIYW5kbGluZywgbmlsKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHNl
c3Npb24sIGNoYWxsZW5nZSwgdGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzU2VydmVyVHJ1c3RFdmFs
dWF0aW9uKHNlc3Npb24sICpzdHJvbmdTZWxmLT5fc2Vzc2lvbldyYXBwZXIsIGNoYWxsZW5nZSwg
dGFza0lkZW50aWZpZXIsIHRhc2suZ2V0KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgW05TVVJMU2Vzc2lvbiBfc3RyaWN0VHJ1c3RF
dmFsdWF0ZTpjaGFsbGVuZ2UgcXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXS51bmRl
cmx5aW5nUXVldWUgY29tcGxldGlvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTY1NywxNiArNjY1LDEzIEBAIC0gKHZvaWQpVVJMU2Vzc2lv
bjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICNlbmRpZgogICAgICAgICB9CiAgICAgfQotICAgIF9z
ZXNzaW9uLT5jb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCB0YXNrSWRlbnRp
ZmllciwgW3NlbGYgZXhpc3RpbmdUYXNrOnRhc2tdLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBj
cmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICBzZXNzaW9uQ29jb2EtPmNvbnRpbnVlRGlkUmVjZWl2
ZUNoYWxsZW5nZSgqX3Nlc3Npb25XcmFwcGVyLCBjaGFsbGVuZ2UsIHRhc2tJZGVudGlmaWVyLCBb
c2VsZiBleGlzdGluZ1Rhc2s6dGFza10sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b05TVVJMU2Vzc2lvbkF1
dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbihkaXNwb3NpdGlvbiksIGNyZWRlbnRpYWwubnNDcmVkZW50
aWFsKCkpOwogICAgIH0pOwogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkQ29tcGxldGVXaXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIGlmICghX3Nlc3Npb24pCi0gICAgICAgIHJldHVy
bjsKLQogICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgZGlkQ29tcGxldGVXaXRoRXJyb3Ig
JUAiLCB0YXNrLnRhc2tJZGVudGlmaWVyLCBlcnJvcik7CiAKICAgICBpZiAoZXJyb3IpIHsKQEAg
LTY3OSwyOSArNjg0LDM1IEBAIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vz
c2kKICAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gW3NlbGYgZXhpc3RpbmdUYXNrOnRh
c2tdKQogICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9y
LCBuZXR3b3JrRGF0YVRhc2stPm5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICBlbHNlIGlmIChl
cnJvcikgewotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25sb2Fk
SUQodGFzay50YXNrSWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChkb3dubG9hZElELmRvd25sb2Fk
SUQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24tPm5ldHdv
cmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKLSAg
ICAgICAgICAgICAgICBOU0RhdGEgKnJlc3VtZURhdGEgPSBuaWw7Ci0gICAgICAgICAgICAgICAg
aWYgKGlkIHVzZXJJbmZvID0gZXJyb3IudXNlckluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKFt1c2VySW5mbyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdW1lRGF0YSA9IHVzZXJJbmZvW0AiTlNVUkxTZXNzaW9u
RG93bmxvYWRUYXNrUmVzdW1lRGF0YSJdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VtZURhdGEgJiYgIVtyZXN1bWVEYXRhIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29ya1Nlc3Npb24s
ICJEb3dubG9hZCB0YXNrICVsbHUgZmluaXNoZWQgd2l0aCByZXN1bWUgZGF0YSBvZiB3cm9uZyBj
bGFzczogJXMiLCAodW5zaWduZWQgbG9uZyBsb25nKXRhc2sudGFza0lkZW50aWZpZXIsIE5TU3Ry
aW5nRnJvbUNsYXNzKFtyZXN1bWVEYXRhIGNsYXNzXSkuVVRGOFN0cmluZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdW1lRGF0YSA9IG5pbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdW1lRGF0YVJlZmVyZW5jZSA9IHJlc3VtZURhdGEgPyBJUEM6OkRhdGFSZWZl
cmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdW1lRGF0YS5ieXRlcyksIHJl
c3VtZURhdGEubGVuZ3RoIH0gOiBJUEM6OkRhdGFSZWZlcmVuY2UgeyB9OworICAgICAgICBpZiAo
IV9zZXNzaW9uV3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBkb3du
bG9hZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC50YWtlKHRhc2sudGFza0lkZW50
aWZpZXIpOworICAgICAgICBpZiAoIWRvd25sb2FkSUQuZG93bmxvYWRJRCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoIV9zZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvKiBkb3dubG9hZCA9IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25s
b2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25sb2FkSUQpOworICAgICAgICBpZiAoIWRvd25sb2Fk
KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgaWYgKGRvd25sb2FkLT53
YXNDYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGlkQ2FuY2VsKHJl
c3VtZURhdGFSZWZlcmVuY2UpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGFSZWZlcmVuY2UpOworICAg
ICAgICBOU0RhdGEgKnJlc3VtZURhdGEgPSBuaWw7CisgICAgICAgIGlmIChpZCB1c2VySW5mbyA9
IGVycm9yLnVzZXJJbmZvKSB7CisgICAgICAgICAgICBpZiAoW3VzZXJJbmZvIGlzS2luZE9mQ2xh
c3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CisgICAgICAgICAgICAgICAgcmVzdW1lRGF0YSA9
IHVzZXJJbmZvW0AiTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrUmVzdW1lRGF0YSJdOworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bWVEYXRhICYmICFbcmVzdW1lRGF0YSBpc0tpbmRPZkNsYXNzOltO
U0RhdGEgY2xhc3NdXSkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhOZXR3b3Jr
U2Vzc2lvbiwgIkRvd25sb2FkIHRhc2sgJWxsdSBmaW5pc2hlZCB3aXRoIHJlc3VtZSBkYXRhIG9m
IHdyb25nIGNsYXNzOiAlcyIsICh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay50YXNrSWRlbnRpZmll
ciwgTlNTdHJpbmdGcm9tQ2xhc3MoW3Jlc3VtZURhdGEgY2xhc3NdKS5VVEY4U3RyaW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VtZURhdGEgPSBuaWw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgYXV0byByZXN1bWVEYXRhUmVmZXJlbmNlID0gcmVzdW1lRGF0
YSA/IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1
bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGggfSA6IElQQzo6RGF0YVJlZmVyZW5jZSB7
IH07CisKKyAgICAgICAgaWYgKGRvd25sb2FkLT53YXNDYW5jZWxlZCgpKQorICAgICAgICAgICAg
ZG93bmxvYWQtPmRpZENhbmNlbChyZXN1bWVEYXRhUmVmZXJlbmNlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIHJlc3VtZURhdGFSZWZlcmVuY2Up
OwogICAgIH0KIH0KIApAQCAtODM2LDYwICs4NDcsNzMgQEAgLSAodm9pZClVUkxTZXNzaW9uOihO
U1VSTFNlc3Npb24gKilzZXNzaQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gZG93bmxvYWRUYXNrOihOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKilkb3dubG9h
ZFRhc2sgZGlkRmluaXNoRG93bmxvYWRpbmdUb1VSTDooTlNVUkwgKilsb2NhdGlvbgogeworICAg
IGlmICghX3Nlc3Npb25XcmFwcGVyKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBkb3dubG9h
ZElEID0gX3Nlc3Npb25XcmFwcGVyLT5kb3dubG9hZE1hcC50YWtlKFtkb3dubG9hZFRhc2sgdGFz
a0lkZW50aWZpZXJdKTsKKyAgICBpZiAoIWRvd25sb2FkSUQuZG93bmxvYWRJRCgpKQorICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFfc2Vzc2lvbikKICAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBkb3dubG9hZElEID0gX3Nlc3Npb24tPnRha2VEb3dubG9hZElEKFtkb3dubG9hZFRhc2sgdGFz
a0lkZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29y
a1Byb2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkKLSAgICAg
ICAgZG93bmxvYWQtPmRpZEZpbmlzaCgpOworICAgIGF1dG8qIGRvd25sb2FkID0gX3Nlc3Npb24t
Pm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCk7
CisgICAgaWYgKCFkb3dubG9hZCkKKyAgICAgICAgcmV0dXJuOworICAgIGRvd25sb2FkLT5kaWRG
aW5pc2goKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9u
IGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRp
ZFdyaXRlRGF0YTooaW50NjRfdClieXRlc1dyaXR0ZW4gdG90YWxCeXRlc1dyaXR0ZW46KGludDY0
X3QpdG90YWxCeXRlc1dyaXR0ZW4gdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTooaW50NjRfdCl0
b3RhbEJ5dGVzRXhwZWN0ZWRUb1dyaXRlCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghW3NlbGYgZXhpc3RpbmdUYXNrOmRv
d25sb2FkVGFza10sICJUaGUgTmV0d29ya0RhdGFUYXNrIHNob3VsZCBiZSBkZXN0cm95ZWQgaW1t
ZWRpYXRlbHkgYWZ0ZXIgZGlkQmVjb21lRG93bmxvYWRUYXNrIHJldHVybnMiKTsKIAotICAgIGF1
dG8gZG93bmxvYWRJRCA9IF9zZXNzaW9uLT5kb3dubG9hZElEKFtkb3dubG9hZFRhc2sgdGFza0lk
ZW50aWZpZXJdKTsKLSAgICBpZiAoYXV0byogZG93bmxvYWQgPSBfc2Vzc2lvbi0+bmV0d29ya1By
b2Nlc3MoKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChkb3dubG9hZElEKSkKLSAgICAgICAg
ZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7CisgICAgaWYgKCFfc2Vzc2lv
bldyYXBwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lv
bldyYXBwZXItPmRvd25sb2FkTWFwLmdldChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7
CisgICAgaWYgKCFkb3dubG9hZElELmRvd25sb2FkSUQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghX3Nlc3Npb24pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBkb3dubG9hZCA9IF9z
ZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKGRvd25s
b2FkSUQpOworICAgIGlmICghZG93bmxvYWQpCisgICAgICAgIHJldHVybjsKKyAgICBkb3dubG9h
ZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9u
OihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrICopZG93bmxvYWRUYXNrIGRpZFJlc3VtZUF0T2Zmc2V0OihpbnQ2NF90KWZpbGVPZmZz
ZXQgZXhwZWN0ZWRUb3RhbEJ5dGVzOihpbnQ2NF90KWV4cGVjdGVkVG90YWxCeXRlcwogewotICAg
IGlmICghX3Nlc3Npb24pCi0gICAgICAgIHJldHVybjsKLQogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFz
azooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFzayBkaWRCZWNvbWVEb3dubG9hZFRhc2s6
KE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqKWRvd25sb2FkVGFzawogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrRGF0YVRhc2sgPSBbc2VsZiBleGlzdGluZ1Rhc2s6ZGF0YVRhc2tdKSB7Ci0gICAg
ICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0d29ya0RhdGFUYXNrKCpu
ZXR3b3JrRGF0YVRhc2spOwotICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRh
c2stPnBlbmRpbmdEb3dubG9hZElEKCk7Ci0gICAgICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9
IF9zZXNzaW9uLT5uZXR3b3JrUHJvY2VzcygpLmRvd25sb2FkTWFuYWdlcigpOwotICAgICAgICBh
dXRvIGRvd25sb2FkID0gbWFrZVVuaXF1ZTxXZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFn
ZXIsIGRvd25sb2FkSUQsIGRvd25sb2FkVGFzaywgKl9zZXNzaW9uLCBuZXR3b3JrRGF0YVRhc2st
PnN1Z2dlc3RlZEZpbGVuYW1lKCkpOwotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoKmRvd25sb2FkKTsKLSAgICAgICAgQVNTRVJUKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMobmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbigpKSk7Ci0gICAgICAgIGRvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3Jr
RGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkpOwotICAgICAgICBkb3dubG9hZE1h
bmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soZG93bmxvYWRJRCwgV1RGTW92ZShkb3du
bG9hZCkpOworICAgIGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IFtzZWxmIGV4aXN0aW5nVGFzazpk
YXRhVGFza107CisgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2spCisgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvKiBzZXNzaW9uQ29jb2EgPSBuZXR3b3JrRGF0YVRhc2stPm5ldHdvcmtTZXNzaW9uKCk7
CisgICAgaWYgKCFzZXNzaW9uQ29jb2EpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBfc2Vz
c2lvbi0+YWRkRG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSwgZG93bmxv
YWRJRCk7Ci0gICAgfQorICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0
d29ya0RhdGFUYXNrKCpuZXR3b3JrRGF0YVRhc2spOworICAgIGF1dG8gZG93bmxvYWRJRCA9IG5l
dHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKKyAgICBhdXRvJiBkb3dubG9hZE1h
bmFnZXIgPSBzZXNzaW9uQ29jb2EtPm5ldHdvcmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCk7
CisgICAgYXV0byBkb3dubG9hZCA9IG1ha2VVbmlxdWU8V2ViS2l0OjpEb3dubG9hZD4oZG93bmxv
YWRNYW5hZ2VyLCBkb3dubG9hZElELCBkb3dubG9hZFRhc2ssICpzZXNzaW9uQ29jb2EsIG5ldHdv
cmtEYXRhVGFzay0+c3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgbmV0d29ya0RhdGFUYXNrLT50
cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKCpkb3dubG9hZCk7CisgICAgQVNTRVJU
KEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRM
b2NhdGlvbigpKSk7CisgICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKG5ldHdvcmtE
YXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSk7CisgICAgZG93bmxvYWRNYW5hZ2Vy
LmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQp
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFfc2Vzc2lvbldyYXBwZXItPmRvd25sb2FkTWFwLmNv
bnRhaW5zKGRvd25sb2FkVGFzay50YXNrSWRlbnRpZmllcikpOworICAgIF9zZXNzaW9uV3JhcHBl
ci0+ZG93bmxvYWRNYXAuYWRkKGRvd25sb2FkVGFzay50YXNrSWRlbnRpZmllciwgZG93bmxvYWRJ
RCk7CiB9CiAKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAtIChXZWJTb2NrZXRU
YXNrKilleGlzdGluZ1dlYlNvY2tldFRhc2s6KE5TVVJMU2Vzc2lvbldlYlNvY2tldFRhc2sgKil0
YXNrCiB7Ci0gICAgaWYgKCFfc2Vzc2lvbikKKyAgICBpZiAoIV9zZXNzaW9uV3JhcHBlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIXRhc2spCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIF9zZXNzaW9uLT53ZWJTb2NrZXREYXRhVGFza0ZvcklkZW50
aWZpZXIodGFzay50YXNrSWRlbnRpZmllcik7CisgICAgcmV0dXJuIF9zZXNzaW9uV3JhcHBlci0+
d2ViU29ja2V0RGF0YVRhc2tNYXAuZ2V0KHRhc2sudGFza0lkZW50aWZpZXIpOwogfQogCiAKQEAg
LTk3Miw2ICs5OTYsMTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqcHJveHlEaWN0aW9uYXJ5KGNv
bgogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCit2b2lkIFNlc3Np
b25XcmFwcGVyOjppbml0aWFsaXplKE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3Vy
YXRpb24sIE5ldHdvcmtTZXNzaW9uQ29jb2EmIG5ldHdvcmtTZXNzaW9uLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKK3sKKyAgICBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
TmV0d29ya1Nlc3Npb246bmV0d29ya1Nlc3Npb24gd3JhcHBlcjoqdGhpcyB3aXRoQ3JlZGVudGlh
bHM6c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3k6OlVzZV0pOworICAgIHNlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOmRlbGVnYXRlLmdldCgpIGRlbGVnYXRl
UXVldWU6W05TT3BlcmF0aW9uUXVldWUgbWFpblF1ZXVlXV07Cit9CisKIE5ldHdvcmtTZXNzaW9u
Q29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2EoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNz
LCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBO
ZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykKICAgICAsIG1fYm91bmRJ
bnRlcmZhY2VJZGVudGlmaWVyKHBhcmFtZXRlcnMuYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKQpA
QCAtMTA2Myw4ICsxMDkzLDcgQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25D
b2NvYQogICAgICAgICBjb29raWVTdG9yYWdlLl9vdmVycmlkZVNlc3Npb25Db29raWVBY2NlcHRQ
b2xpY3kgPSBZRVM7CiAjZW5kaWYKIAotICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlhbHM6dHJ1ZV0pOwotICAgIG1f
c2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldpdGhD
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1fc2Vz
c2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltO
U09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOworICAgIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZS5pbml0aWFsaXplKGNvbmZpZ3VyYXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6VXNlKTsKICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJDcmVhdGVk
IE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNjZXB0UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRp
b24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNjZXB0UG9saWN5KTsKIAogICAgIGNvbmZpZ3Vy
YXRpb24uVVJMQ3JlZGVudGlhbFN0b3JhZ2UgPSBuaWw7CkBAIC0xMDczLDggKzExMDIsNyBAQCBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hCiAgICAgLy8gY29uZmlndXJh
dGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IG5pbDsKICAgICAvLyBjb25maWd1cmF0aW9uLkhUVFBD
b29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lOZXZlcjsKIAotICAg
IG1fc3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlID0gYWRvcHROUyhbW1dLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjoqdGhpcyB3aXRoQ3JlZGVudGlh
bHM6ZmFsc2VdKTsKLSAgICBtX3N0YXRlbGVzc1Nlc3Npb24gPSBbTlNVUkxTZXNzaW9uIHNlc3Np
b25XaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uIGRlbGVnYXRlOnN0YXRpY19jYXN0PGlk
PihtX3N0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdhdGVRdWV1ZTpbTlNPcGVy
YXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0
b3JhZ2UuaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKTsKIAogICAgIG1fZGV2aWNlTWFuYWdlbWVudFJlc3Ry
aWN0aW9uc0VuYWJsZWQgPSBwYXJhbWV0ZXJzLmRldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNF
bmFibGVkOwogICAgIG1fYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rp
b25zRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMuYWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2Vt
ZW50UmVzdHJpY3Rpb25zRm9yVGVzdGluZzsKQEAgLTEwOTcsMTAgKzExMjUsMTAgQEAgTmV0d29y
a1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNzaW9uQ29jbwogewogfQogCi12b2lkIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lv
bigpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxl
c3NTZXNzaW9uKCkKIHsKICAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNvbmZpZ3Vy
YXRpb25dOwotICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJh
dGlvbiA9IG1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uOworICAgIE5TVVJM
U2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IG1fc2Vzc2lvbldp
dGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uLmdldCgpLmNvbmZpZ3VyYXRpb247CiAKICAg
ICBjb25maWd1cmF0aW9uLkhUVFBDb29raWVBY2NlcHRQb2xpY3kgPSBOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3lOZXZlcjsKICAgICBjb25maWd1cmF0aW9uLlVSTENyZWRlbnRpYWxTdG9yYWdlID0g
bmlsOwpAQCAtMTExNSw0NCArMTE0Myw0OCBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlu
aXRpYWxpemVFcGhlCiAgICAgY29uZmlndXJhdGlvbi5fQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VU
eXBlID0gZXhpc3RpbmdDb25maWd1cmF0aW9uLl9DVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGU7
CiAjZW5kaWYKIAotICAgIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
TmV0d29ya1Nlc3Npb246KnRoaXMgd2l0aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgbV9lcGhl
bWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzU2Vzc2lvbiA9IFtOU1VSTFNlc3Npb24gc2Vzc2lvbldp
dGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24gZGVsZWdhdGU6c3RhdGljX2Nhc3Q8aWQ+KG1f
ZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb25EZWxlZ2F0ZS5nZXQoKSkgZGVsZWdh
dGVRdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBtYWluUXVldWVdXTsKKyAgICBtX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uaW5pdGlhbGl6ZShjb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzcyk7CiB9CiAKLU5TVVJM
U2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKK1Nlc3Npb25XcmFwcGVyJiBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uV3JhcHBlckZvclRhc2soY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKIHsKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQorICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpKSB7CisgICAgICAgIGF1dG8gZmlyc3RQYXJ0eSA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluKHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAgIGlmIChz
dG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBh
cnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KSkKKyAgICAgICAgICAgIHJldHVybiBpc29sYXRlZFNl
c3Npb24oc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGZpcnN0UGFydHkpOworICAgIH0gZWxzZQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorCiAgICAgc3dpdGNoIChzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OlVzZToKLSAgICAgICAgcmV0dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZTsKICAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZToK
LSAgICAgICAgcmV0dXJuIG1fc3RhdGVsZXNzU2Vzc2lvbi5nZXQoKTsKLSAgICBjYXNlIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNz
OgotICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24pCi0g
ICAgICAgICAgICBpbml0aWFsaXplRXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24o
KTsKLSAgICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzQ29va2llbGVzc1Nlc3Npb24u
Z2V0KCk7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7
CisgICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3Rh
dGVsZXNzOgorICAgICAgICBpZiAoIW1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbi5zZXNzaW9u
KQorICAgICAgICAgICAgaW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24oKTsKKyAg
ICAgICAgcmV0dXJuIG1fZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKICAgICB9CiB9CiAKLU5T
VVJMU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Db2NvYTo6aXNvbGF0ZWRTZXNzaW9uKFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBjb25zdCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBhcnR5RG9tYWluKQorU2Vzc2lvbldyYXBw
ZXImIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgY29uc3QgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbikKIHsKLSAgICBhdXRvIGVudHJ5ID0g
bV9pc29sYXRlZFNlc3Npb25zLmVuc3VyZShmaXJzdFBhcnR5RG9tYWluLCBbdGhpc10gewotICAg
ICAgICBJc29sYXRlZFNlc3Npb24gbmV3RW50cnkgeyB9OwotICAgICAgICBuZXdFbnRyeS5zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tOZXR3b3JrU2Vz
c2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aE5ldHdvcmtTZXNzaW9uOip0aGlzIHdpdGhDcmVk
ZW50aWFsczp0cnVlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0
b3JhZ2UgPSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3Nlc3Npb25X
aXRoQ3JlZGVudGlhbFN0b3JhZ2UuZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNf
Y2FzdDxpZD4obmV3RW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlLmdl
dCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIG1haW5RdWV1ZV1dOwotCi0gICAg
ICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS05ldHdv
cmtTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTmV0d29ya1Nlc3Npb246KnRoaXMgd2l0
aENyZWRlbnRpYWxzOmZhbHNlXSk7Ci0gICAgICAgIG5ld0VudHJ5LnN0YXRlbGVzc1Nlc3Npb24g
PSBbTlNVUkxTZXNzaW9uIHNlc3Npb25XaXRoQ29uZmlndXJhdGlvbjptX3N0YXRlbGVzc1Nlc3Np
b24uZ2V0KCkuY29uZmlndXJhdGlvbiBkZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obmV3RW50cnku
c3RhdGVsZXNzU2Vzc2lvbkRlbGVnYXRlLmdldCgpKSBkZWxlZ2F0ZVF1ZXVlOltOU09wZXJhdGlv
blF1ZXVlIG1haW5RdWV1ZV1dOwotCisgICAgYXV0byYgZW50cnkgPSBtX2lzb2xhdGVkU2Vzc2lv
bnMuZW5zdXJlKGZpcnN0UGFydHlEb21haW4sIFt0aGlzXSB7CisgICAgICAgIGF1dG8gbmV3RW50
cnkgPSBtYWtlVW5pcXVlPElzb2xhdGVkU2Vzc2lvbj4oKTsKKyAgICAgICAgbmV3RW50cnktPnNl
c3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuaW5pdGlhbGl6ZShtX3Nlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uLCAqdGhpcywgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXNzaW9u
V2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmluaXRpYWxpemUobV9zZXNzaW9uV2l0aG91dENyZWRl
bnRpYWxTdG9yYWdlLnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpEb05vdFVzZSk7CiAgICAgICAgIHJldHVybiBuZXdF
bnRyeTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICBlbnRyeS5sYXN0VXNlZCA9IFdh
bGxUaW1lOjpub3coKTsKKyAgICBlbnRyeS0+bGFzdFVzZWQgPSBXYWxsVGltZTo6bm93KCk7CiAK
ICAgICBpZiAobV9pc29sYXRlZFNlc3Npb25zLnNpemUoKSA+IG1heE51bWJlck9mSXNvbGF0ZWRT
ZXNzaW9ucykgewogICAgICAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBrZXlUb1JlbW92
ZTsKICAgICAgICAgYXV0byBvbGRlc3RUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCk7CiAgICAg
ICAgIGZvciAoYXV0byYga2V5IDogbV9pc29sYXRlZFNlc3Npb25zLmtleXMoKSkgewotICAgICAg
ICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2lzb2xhdGVkU2Vzc2lvbnMuZ2V0KGtleSkubGFzdFVz
ZWQ7CisgICAgICAgICAgICBhdXRvIHRpbWVzdGFtcCA9IG1faXNvbGF0ZWRTZXNzaW9ucy5nZXQo
a2V5KS0+bGFzdFVzZWQ7CiAgICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgb2xkZXN0VGltZXN0
YW1wKSB7CiAgICAgICAgICAgICAgICAgb2xkZXN0VGltZXN0YW1wID0gdGltZXN0YW1wOwogICAg
ICAgICAgICAgICAgIGtleVRvUmVtb3ZlID0ga2V5OwpAQCAtMTE2NywxNCArMTE5OSwxNCBAQCBO
U1VSTFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlzb2xhCiAgICAgc3dpdGNoIChzdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSkgewogICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OlVzZToKICAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiVXNpbmcgaXNvbGF0
ZWQgTlNVUkxTZXNzaW9uIHdpdGggY3JlZGVudGlhbCBzdG9yYWdlLiIpOwotICAgICAgICByZXR1
cm4gZW50cnkuc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZS5nZXQoKTsKKyAgICAgICAgcmV0
dXJuIGVudHJ5LT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwogICAgIGNhc2UgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlOgogICAgICAgICBMT0coTmV0d29y
a1Nlc3Npb24sICJVc2luZyBpc29sYXRlZCBOU1VSTFNlc3Npb24gd2l0aG91dCBjcmVkZW50aWFs
IHN0b3JhZ2UuIik7Ci0gICAgICAgIHJldHVybiBlbnRyeS5zdGF0ZWxlc3NTZXNzaW9uLmdldCgp
OwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0
YXRlbGVzc0Nvb2tpZWxlc3M6Ci0gICAgICAgIGlmICghbV9lcGhlbWVyYWxTdGF0ZWxlc3NDb29r
aWVsZXNzU2Vzc2lvbikKLSAgICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxTdGF0ZWxlc3ND
b29raWVsZXNzU2Vzc2lvbigpOwotICAgICAgICByZXR1cm4gbV9lcGhlbWVyYWxTdGF0ZWxlc3ND
b29raWVsZXNzU2Vzc2lvbi5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5LT5zZXNzaW9uV2l0
aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczoKKyAgICAgICAgaWYgKCFtX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbikKKyAgICAgICAgICAgIGluaXRpYWxpemVFcGhlbWVyYWxT
dGF0ZWxlc3NTZXNzaW9uKCk7CisgICAgICAgIHJldHVybiBtX2VwaGVtZXJhbFN0YXRlbGVzc1Nl
c3Npb247CiAgICAgfQogfQogCkBAIC0xMTkyLDE2ICsxMjI0LDE4IEBAIHZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZEMKIHsKICAgICBOZXR3b3JrU2Vzc2lvbjo6aW52YWxp
ZGF0ZUFuZENhbmNlbCgpOwogCi0gICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBp
bnZhbGlkYXRlQW5kQ2FuY2VsXTsKLSAgICBbbV9zdGF0ZWxlc3NTZXNzaW9uIGludmFsaWRhdGVB
bmRDYW5jZWxdOwotICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3NTZXNzaW9uIGlu
dmFsaWRhdGVBbmRDYW5jZWxdOwotICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VE
ZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwotICAgIFttX3N0YXRlbGVzc1Nlc3Npb25EZWxl
Z2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOwotICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc0Nvb2tp
ZWxlc3NTZXNzaW9uRGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICBbbV9zZXNzaW9u
V2l0aENyZWRlbnRpYWxTdG9yYWdlLnNlc3Npb24gaW52YWxpZGF0ZUFuZENhbmNlbF07CisgICAg
W21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5zZXNzaW9uIGludmFsaWRhdGVBbmRD
YW5jZWxdOworICAgIFttX2VwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb24uc2Vzc2lvbiBpbnZhbGlk
YXRlQW5kQ2FuY2VsXTsKKyAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmRlbGVn
YXRlIHNlc3Npb25JbnZhbGlkYXRlZF07CisgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFs
U3RvcmFnZS5kZWxlZ2F0ZSBzZXNzaW9uSW52YWxpZGF0ZWRdOworICAgIFttX2VwaGVtZXJhbFN0
YXRlbGVzc1Nlc3Npb24uZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKIAogICAgIGZvciAo
YXV0byYgc2Vzc2lvbiA6IG1faXNvbGF0ZWRTZXNzaW9ucy52YWx1ZXMoKSkgewotICAgICAgICBb
c2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxd
OwotICAgICAgICBbc2Vzc2lvbi5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGUg
c2Vzc2lvbkludmFsaWRhdGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRoQ3JlZGVu
dGlhbFN0b3JhZ2Uuc2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Np
b24tPnNlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRh
dGVkXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2Uu
c2Vzc2lvbiBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKKyAgICAgICAgW3Nlc3Npb24tPnNlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UuZGVsZWdhdGUgc2Vzc2lvbkludmFsaWRhdGVkXTsKICAg
ICB9CiAgICAgbV9pc29sYXRlZFNlc3Npb25zLmNsZWFyKCk7CiB9CkBAIC0xMjIwLDY4ICsxMjU0
LDYgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjbGVhckNyZWRlbnRpYQogI2VuZGlmCiB9
CiAKLUhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYSo+JiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRhVGFza01hcChXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSkKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHN3aXRjaCAoc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpF
cGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzOgotICAgICAgICByZXR1cm4gbV9kYXRhVGFza01h
cEVwaGVtZXJhbFN0YXRlbGVzc0Nvb2tpZWxlc3M7Ci0gICAgY2FzZSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2U6Ci0gICAgICAgIHJldHVybiBtX2RhdGFUYXNrTWFw
V2l0aG91dFN0YXRlOwotICAgIGNhc2UgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6
OlVzZToKLSAgICAgICAgcmV0dXJuIG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAg
fQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0
aENyZWRlbnRpYWxzOwotfQotCi1OZXR3b3JrRGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25D
b2NvYTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRl
bnRpZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICByZXR1cm4gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpLmdldCh0
YXNrSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6cmVnaXN0ZXJE
YXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFwID0g
ZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFtYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKLSAgICBtYXAuYWRkKHRhc2tJZGVudGlm
aWVyLCAmZGF0YVRhc2spOwotfQotCi12b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnVucmVnaXN0
ZXJEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50
aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hJiBkYXRhVGFzaywgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpCi17Ci0gICAgYXV0byYgbWFw
ID0gZGF0YVRhc2tNYXAoc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1hcC5nZXQodGFza0lkZW50aWZpZXIpID09ICZkYXRhVGFzayk7Ci0gICAgbWFwLnJlbW92
ZSh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLU5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogTmV0d29y
a1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRUYXNrV2l0aFJlc3VtZURhdGEoTlNEYXRhKiByZXN1bWVE
YXRhKQotewotICAgIHJldHVybiBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRvd25s
b2FkVGFza1dpdGhSZXN1bWVEYXRhOnJlc3VtZURhdGFdOwotfQotCi12b2lkIE5ldHdvcmtTZXNz
aW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQpCi17Ci0jaWZuZGVmIE5E
RUJVRwotICAgIEFTU0VSVCghbV9kb3dubG9hZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikp
OwotICAgIGZvciAoYXV0byBpZEluTWFwIDogbV9kb3dubG9hZE1hcC52YWx1ZXMoKSkKLSAgICAg
ICAgQVNTRVJUKGlkSW5NYXAgIT0gZG93bmxvYWRJRCk7Ci0jZW5kaWYKLSAgICBtX2Rvd25sb2Fk
TWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93bmxvYWRJRCk7Ci19Ci0KLURvd25sb2FkSUQgTmV0
d29ya1Nlc3Npb25Db2NvYTo6ZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lk
ZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0
KHRhc2tJZGVudGlmaWVyKS5kb3dubG9hZElEKCkpOwotICAgIHJldHVybiBtX2Rvd25sb2FkTWFw
LmdldCh0YXNrSWRlbnRpZmllcik7Ci19Ci0KLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2Nv
YTo6dGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRh
c2tJZGVudGlmaWVyKQotewotICAgIGF1dG8gZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFr
ZSh0YXNrSWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIGRvd25sb2FkSUQ7Ci19Ci0KIHN0YXRpYyBi
b29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1
c3QyKQogewogICAgIGlmICghdHJ1c3QxIHx8ICF0cnVzdDIpCkBAIC0xMzIyLDE4ICsxMjk0LDE3
IEBAIGJvb2wgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWxsb3dzU3BlY2lmaWMKICAgICByZXR1cm4g
Y2VydGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKCkucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAotdm9pZCBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51ZURpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgTmV0d29ya0RhdGFUYXNr
Q29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2Nv
YSogbmV0d29ya0RhdGFUYXNrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYktpdDo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjb250aW51
ZURpZFJlY2VpdmVDaGFsbGVuZ2UoU2Vzc2lvbldyYXBwZXImIHNlc3Npb25XcmFwcGVyLCBjb25z
dCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFz
a0NvY29hKiBuZXR3b3JrRGF0YVRhc2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViS2l0OjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50
aWFsJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2sp
IHsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0gICAgICAgIGlmIChhdXRvKiB3
ZWJTb2NrZXRUYXNrID0gd2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2tJZGVudGlm
aWVyKSkgeworICAgICAgICBpZiAoYXV0byogd2ViU29ja2V0VGFzayA9IHNlc3Npb25XcmFwcGVy
LndlYlNvY2tldERhdGFUYXNrTWFwLmdldCh0YXNrSWRlbnRpZmllcikpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgY2hhbGxlbmdlcyBmb3Igd2ViIHNvY2tldC4KICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBl
cmZvcm1EZWZhdWx0SGFuZGxpbmcsIHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICNlbmRpZgotCi0gICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IHRoaXMtPmRvd25sb2FkSUQo
dGFza0lkZW50aWZpZXIpOworICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBzZXNzaW9uV3JhcHBl
ci5kb3dubG9hZE1hcC5nZXQodGFza0lkZW50aWZpZXIpOwogICAgICAgICBpZiAoZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBkb3dubG9hZCA9IG5ldHdv
cmtQcm9jZXNzKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpIHsKICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSB7IGNoYWxsZW5nZSB9OwpAQCAtMTM5NSwyNiArMTM2NiwyMiBAQCBETUZX
ZWJzaXRlUG9saWN5TW9uaXRvciAqTmV0d29ya1Nlc3Npb25DCiBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
U29ja2V0VGFzaz4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlV2ViU29ja2V0VGFzayhOZXR3
b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQogewogICAgIC8vIEZJWE1FOiBVc2Ug
cHJvdG9jb2wuCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbldlYlNvY2tldFRhc2s+IHRhc2sg
PSBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLmdldCgpIHdlYlNvY2tldFRhc2tXaXRo
UmVxdWVzdDogcmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uV2Vi
U29ja2V0VGFzaz4gdGFzayA9IFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uuc2Vzc2lv
biB3ZWJTb2NrZXRUYXNrV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpXTsKICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJTb2NrZXRUYXNrPihjaGFubmVsLCBXVEZNb3ZlKHRhc2spKTsKIH0KIAog
dm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGRXZWJTb2NrZXRUYXNrKFdlYlNvY2tldFRhc2sm
IHRhc2spCiB7Ci0gICAgQVNTRVJUKCFtX3dlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRh
c2suaWRlbnRpZmllcigpKSk7Ci0gICAgbV93ZWJTb2NrZXREYXRhVGFza01hcC5hZGQodGFzay5p
ZGVudGlmaWVyKCksICZ0YXNrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9zZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERhdGFUYXNrTWFwLmNvbnRhaW5zKHRhc2suaWRlbnRp
ZmllcigpKSk7CisgICAgbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlLndlYlNvY2tldERh
dGFUYXNrTWFwLmFkZCh0YXNrLmlkZW50aWZpZXIoKSwgJnRhc2spOwogfQogCiB2b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnJlbW92ZVdlYlNvY2tldFRhc2soV2ViU29ja2V0VGFzayYgdGFzaykK
IHsKLSAgICBBU1NFUlQobV93ZWJTb2NrZXREYXRhVGFza01hcC5jb250YWlucyh0YXNrLmlkZW50
aWZpZXIoKSkpOwotICAgIG1fd2ViU29ja2V0RGF0YVRhc2tNYXAucmVtb3ZlKHRhc2suaWRlbnRp
ZmllcigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3Jh
Z2Uud2ViU29ja2V0RGF0YVRhc2tNYXAuY29udGFpbnModGFzay5pZGVudGlmaWVyKCkpKTsKKyAg
ICBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2Uud2ViU29ja2V0RGF0YVRhc2tNYXAucmVt
b3ZlKHRhc2suaWRlbnRpZmllcigpKTsKIH0KIAotV2ViU29ja2V0VGFzayogTmV0d29ya1Nlc3Np
b25Db2NvYTo6d2ViU29ja2V0RGF0YVRhc2tGb3JJZGVudGlmaWVyKFdlYlNvY2tldFRhc2s6OlRh
c2tJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIG1fd2ViU29ja2V0RGF0YVRh
c2tNYXAuZ2V0KGlkZW50aWZpZXIpOwotfQorI2VuZGlmIC8vIEhBVkUoTlNVUkxTRVNTSU9OX1dF
QlNPQ0tFVCkKIAotI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3OSw3ICs4
NzksNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlN0CiAgICAgICAg
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LAogICAgICAgICBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UsCiAgICAgICAgIFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5OjpVc2UsCi0gICAgICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3NDb29raWVsZXNzCisgICAgICAgIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3MKICAgICA+OwogfTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9y
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVN0b3JlLm1tCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00NjMsNiArNDYzLDE3IEBAIC0gKHZvaWQpX3NjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGU6
KHYKICNlbmRpZgogfQogCistICh2b2lkKV9sb2dVc2VySW50ZXJhY3Rpb246KE5TVVJMICopZG9t
YWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgor
eworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgX3dlYnNpdGVEYXRh
U3RvcmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihkb21haW4sIFtjb21wbGV0aW9uSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9KTsKKyNlbHNlCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyNlbmRpZgor
fQorCiAtICh2b2lkKV9zZXRQcmV2YWxlbnREb21haW46KE5TVVJMICopZG9tYWluIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRl
LmgJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogLSAoYm9vbClf
aGFzUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcygxMi4wKSk7CiAKIC0gKHZvaWQpX3NjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGU6KHZv
aWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTUpLCBpb3MoMTMuMCkpOworLSAodm9pZClfbG9nVXNlckludGVyYWN0aW9uOihOU1VSTCAqKWRv
bWFpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0g
KHZvaWQpX3NldFByZXZhbGVudERvbWFpbjooTlNVUkwgKilkb21haW4gY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogLSAodm9pZClfZ2V0SXNQcmV2YWxlbnREb21haW46KE5T
VVJMICopZG9tYWluIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIC0gKHZv
aWQpX2NsZWFyUHJldmFsZW50RG9tYWluOihOU1VSTCAqKWRvbWFpbiBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjE4MSkKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE5LTExLTA3ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmUt
ZW5hYmxlIE5TVVJMU2Vzc2lvbiBpc29sYXRpb24gYWZ0ZXIgcjI1MjExNgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTM0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81NjkyMTU4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uRGVs
ZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRl
ZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0RhdGFUYXNrSWRlbnRp
ZmllckNvbGxpc2lvbkRlbGVnYXRlIHdhaXRGb3JNZXNzYWdlczpdKToKKyAgICAgICAgKC1bRGF0
YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uRGVsZWdhdGUgd2ViVmlldzpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChURVNUKToK
KwogMjAxOS0xMS0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTjogWyBpT1MgXSAoIHIyNTEwMTUgKSBMYXlvdXQgVGVzdCBmYXN0L3RleHQv
d2hpdGVzcGFjZS9wcmUtd3JhcC1vdmVyZmxvdy1zZWxlY3Rpb24uaHRtbCBpcyBmbGFreQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjUyMTgxKQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUQ1BTZXJ2ZXIuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KQEAgLTQ3NCw2ICs0NzUsMTA1
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTmV0d29ya1Byb2MKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKIH0KIAorQGludGVyZmFjZSBEYXRhVGFza0lk
ZW50aWZpZXJDb2xsaXNpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0
ZSwgV0tVSURlbGVnYXRlPgorLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKXdhaXRGb3JNZXNzYWdl
czooc2l6ZV90KWNvdW50OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gRGF0YVRhc2tJZGVudGlm
aWVyQ29sbGlzaW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxOU1N0
cmluZyAqPj4gX21lc3NhZ2VzOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgW19tZXNzYWdlcyBh
ZGRPYmplY3Q6bWVzc2FnZV07CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKworLSAoTlNB
cnJheTxOU1N0cmluZyAqPiAqKXdhaXRGb3JNZXNzYWdlczooc2l6ZV90KW1lc3NhZ2VDb3VudAor
eworICAgIF9tZXNzYWdlcyA9IGFkb3B0TlMoW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5Om1lc3NhZ2VDb3VudF0pOworICAgIHdoaWxlIChbX21lc3NhZ2VzIGNvdW50XSA8IG1lc3Nh
Z2VDb3VudCkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAg
ICByZXR1cm4gX21lc3NhZ2VzLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6KE5T
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlv
biwgTlNVUkxDcmVkZW50aWFsICogY3JlZGVudGlhbCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlVXNlQ3JlZGVudGlh
bCwgW05TVVJMQ3JlZGVudGlhbCBjcmVkZW50aWFsRm9yVHJ1c3Q6Y2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZS5zZXJ2ZXJUcnVzdF0pOworfQorCitAZW5kCisKK1RFU1QoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgRGF0YVRhc2tJZGVudGlmaWVyQ29sbGlzaW9uKQoreworICAgIHVzaW5nIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJOworCisgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IHNlcnZlcnND
b25uZWN0ZWQgeyAwIH07CisgICAgY29uc3QgY2hhciogaGVhZGVyID0gIkhUVFAvMS4xIDIwMCBP
S1xyXG5Db250ZW50LUxlbmd0aDogMjdcclxuXHJcbiI7CisKKyAgICBUQ1BTZXJ2ZXIgaHR0cHNT
ZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFNQcm94eSwgWyZdIChTU0wqIHNzbCkgewor
ICAgICAgICBzZXJ2ZXJzQ29ubmVjdGVkKys7CisgICAgICAgIHdoaWxlIChzZXJ2ZXJzQ29ubmVj
dGVkIDwgMikKKyAgICAgICAgICAgIHVzbGVlcCgxMDAwMDApOworICAgICAgICBUQ1BTZXJ2ZXI6
OnJlYWQoc3NsKTsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzc2wsIGhlYWRlciwgc3RybGVu
KGhlYWRlcikpOworICAgICAgICBjb25zdCBjaGFyKiBib2R5ID0gIjxzY3JpcHQ+YWxlcnQoJzEn
KTwvc2NyaXB0PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc3NsLCBib2R5LCBzdHJsZW4o
Ym9keSkpOworICAgIH0pOworCisgICAgVENQU2VydmVyIGh0dHBTZXJ2ZXIoWyZdIChpbnQgc29j
a2V0KSB7CisgICAgICAgIHNlcnZlcnNDb25uZWN0ZWQrKzsKKyAgICAgICAgd2hpbGUgKHNlcnZl
cnNDb25uZWN0ZWQgPCAyKQorICAgICAgICAgICAgdXNsZWVwKDEwMDAwMCk7CisgICAgICAgIFRD
UFNlcnZlcjo6cmVhZChzb2NrZXQpOworICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNvY2tldCwg
aGVhZGVyLCBzdHJsZW4oaGVhZGVyKSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGJvZHkgPSAiPHNj
cmlwdD5hbGVydCgnMicpPC9zY3JpcHQ+IjsKKyAgICAgICAgVENQU2VydmVyOjp3cml0ZShzb2Nr
ZXQsIGJvZHksIHN0cmxlbihib2R5KSk7CisgICAgfSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiAqc3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBzdG9yZUNvbmZpZ3VyYXRp
b24uaHR0cHNQcm94eSA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgaHR0cHNTZXJ2ZXIucG9ydCgpXV07Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246c3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVs
ZWFzZV07CisgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW3ZpZXdDb25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRh
U3RvcmU6ZGF0YVN0b3JlXTsKKworICAgIGF1dG8gd2ViVmlldzEgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAwKSBj
b25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcxIHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyBhbmQgaW5p
dGlhbGl6ZSBkYXRhIHN0b3JlIl07CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0RhdGFU
YXNrSWRlbnRpZmllckNvbGxpc2lvbkRlbGVnYXRlIG5ld10pOworICAgIGF1dG8gd2ViVmlldzIg
PSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDEwMCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7
CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJW
aWV3MSBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3
MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgc2V0TmF2aWdh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOworICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU6WUVTXTsKKworICAgIF9fYmxvY2sgYm9vbCBpc29sYXRl
ZFNlc3Npb25Eb21haW4gPSBmYWxzZTsKKyAgICBfX2Jsb2NrIE5TVVJMICpwcmV2YWxlbnRFeGFt
cGxlID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3ByZXZhbGVudC1leGFtcGxlLmNv
bS8iXTsKKyAgICBbZGF0YVN0b3JlIF9sb2dVc2VySW50ZXJhY3Rpb246cHJldmFsZW50RXhhbXBs
ZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBbZGF0YVN0b3JlIF9zZXRQcmV2YWxlbnRE
b21haW46cHJldmFsZW50RXhhbXBsZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAg
ICAgICAgICBbZGF0YVN0b3JlIF9zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlOl57CisgICAg
ICAgICAgICAgICAgaXNvbGF0ZWRTZXNzaW9uRG9tYWluID0gdHJ1ZTsKKyAgICAgICAgICAgIH1d
OworICAgICAgICB9XTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlz
b2xhdGVkU2Vzc2lvbkRvbWFpbik7CisKKyAgICBbd2ViVmlldzEgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAImh0dHA6Ly8xMjcuMC4wLjE6JWQvIiwgaHR0cFNlcnZlci5wb3J0KCld
XV1dOworICAgIFt3ZWJWaWV3MiBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly9wcmV2YWxlbnQtZXhhbXBsZS5jb20v
Il1dXTsKKworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKm1lc3NhZ2VzID0gW2RlbGVnYXRlIHdh
aXRGb3JNZXNzYWdlczoyXTsKKyAgICBhdXRvIGNvbnRhaW5zID0gW10gKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKmFycmF5LCBOU1N0cmluZyAqZXhwZWN0ZWQpIHsKKyAgICAgICAgZm9yIChOU1N0cmlu
ZyAqcyBpbiBhcnJheSkgeworICAgICAgICAgICAgaWYgKFtzIGlzRXF1YWxUb1N0cmluZzpleHBl
Y3RlZF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisgICAgRVhQRUNUX1RSVUUoY29udGFpbnMobWVzc2FnZXMs
IEAiMSIpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250YWlucyhtZXNzYWdlcywgQCIyIikpOworfQor
CiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE5vTWVzc2FnZXNXaGVuTm90VGVzdGluZykK
IHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMTgxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTEt
MDcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBSZS1lbmFibGUgTlNVUkxTZXNzaW9uIGlzb2xhdGlvbiBhZnRlciByMjUyMTE2CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5MzQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1
bWV6LgorCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAg
IFJlLWVuYWJsZSBza2lwcGVkIHRlc3RzLgorCiAyMDE5LTExLTA2ICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBbIGlPUyBdICggcjI1MTAx
NSApIExheW91dCBUZXN0IGZhc3QvdGV4dC93aGl0ZXNwYWNlL3ByZS13cmFwLW92ZXJmbG93LXNl
bGVjdGlvbi5odG1sIGlzIGZsYWt5CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVz
dEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVz
dEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjUyMTgxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc0NiwxMCArNzQ2LDYgQEAg
aHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2RvLW5vdAogaHR0cC90ZXN0cy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2VzLWNhbi1hY2Nlc3MtY29v
a2llcy1pbi1hLXRoaXJkLXBhcnR5LWNvbnRleHQuaHRtbCBbIFNraXAgXQogaHR0cC90ZXN0cy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NhcC1jYWNoZS1tYXgtYWdlLWZvci1wcmV2YWxlbnQtcmVz
b3VyY2UuaHRtbCBbIFNraXAgXQogCi0jIHJkYXI6Ly9wcm9ibGVtLzU2OTIxNTg0Ci1odHRwL3Rl
c3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24tbmF2aWdhdGlvbi10
by1wcmV2YWxlbnQtd2l0aC1pbnRlcmFjdGlvbi5waHAgWyBTa2lwIF0KLWh0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZh
bGVudC13aXRoLWludGVyYWN0aW9uLWRhdGFiYXNlLnBocCBbIFNraXAgXQotCiAjIFRoaXMgZmVh
dHVyZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgdW5maW5pc2hlZCA8cmRh
cjovL3Byb2JsZW0vMzg5MjUwNzc+LgogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Byb2Nlc3Mtc3dh
cC13aW5kb3ctb3Blbi5odG1sIFsgU2tpcCBdCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>