<?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>178754</bug_id>
          
          <creation_ts>2017-10-24 15:06:35 -0700</creation_ts>
          <short_desc>[MediaStream] Clear cached gUM prompt state</short_desc>
          <delta_ts>2017-10-26 13:22:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1363942</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-24 15:06:35 -0700</bug_when>
    <thetext>Clear a page&apos;s cached gUM prompt state, so the user will be prompted again on the next call to getUserMedia, after:

  - a stream has been active for 24 hours
  - no stream has been active for a platform specific interval (defaults to 1 minute on iOS, 10 minutes on other platforms, settable with a WK2 setting)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363965</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-24 15:30:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/32742356&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363969</commentid>
    <comment_count>2</comment_count>
      <attachid>324739</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-24 15:37:23 -0700</bug_when>
    <thetext>Created attachment 324739
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364004</commentid>
    <comment_count>3</comment_count>
      <attachid>324739</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-24 16:37:54 -0700</bug_when>
    <thetext>Comment on attachment 324739
Proposed patch.

Patch lgtm, not applying so...

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

&gt; Source/WebKit/Shared/WebPreferencesDefinitions.h:315
&gt; +    macro(MediaCaptureInactiveStreamRepromptInterval, mediaCaptureInactiveStreamRepromptInterval, Double, double, DEFAULT_MEDIA_CAPTURE_INTERACTIVE_STREAM_REPROMPT_INTERVAL, &quot;&quot;, &quot;&quot;) \

Are we usually using minutes and not seconds for intervals/timeouts values?

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:414
&gt; +        interval = Seconds::fromHours(24);

Shouldn&apos;t we try to put the default long timeout value in a better place, maybe in a macro in WebPreferenceDefinitions?

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:422
&gt; +    m_watchdogTimer.startOneShot(m_currentWatchdogInterval);

Are there cases where we should stop the timer like in destructor or is it handled on its own?

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:434
&gt; +    ASSERT(!(m_captureState &amp; activeCaptureMask));

Cannot this assertion happens if there is a live webrtc session for more than 24 hours?

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:437
&gt; +    m_pregrantedRequests.clear();

We should also clear m_deniedRequests.

&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:438
&gt; +

line not needed

&gt; Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h:444
&gt; +// Defaults to 8 minutes.

Is it still true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364360</commentid>
    <comment_count>4</comment_count>
      <attachid>324739</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-25 11:55:04 -0700</bug_when>
    <thetext>Comment on attachment 324739
Proposed patch.

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

&gt;&gt; Source/WebKit/Shared/WebPreferencesDefinitions.h:315
&gt;&gt; +    macro(MediaCaptureInactiveStreamRepromptInterval, mediaCaptureInactiveStreamRepromptInterval, Double, double, DEFAULT_MEDIA_CAPTURE_INTERACTIVE_STREAM_REPROMPT_INTERVAL, &quot;&quot;, &quot;&quot;) \
&gt; 
&gt; Are we usually using minutes and not seconds for intervals/timeouts values?

I don&apos;t think there is a preference one way or the other, and I think expressing 5 minutes as &quot;5*60&quot; is helpful, but I changed the preference name to &quot;inactiveMediaCaptureSteamRepromptIntervalInMinutes&quot; to make the units obvious.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:414
&gt;&gt; +        interval = Seconds::fromHours(24);
&gt; 
&gt; Shouldn&apos;t we try to put the default long timeout value in a better place, maybe in a macro in WebPreferenceDefinitions?

I added a preference for it.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:422
&gt;&gt; +    m_watchdogTimer.startOneShot(m_currentWatchdogInterval);
&gt; 
&gt; Are there cases where we should stop the timer like in destructor or is it handled on its own?

A timer&apos;s destructor stops itself.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:434
&gt;&gt; +    ASSERT(!(m_captureState &amp; activeCaptureMask));
&gt; 
&gt; Cannot this assertion happens if there is a live webrtc session for more than 24 hours?

Indeed, removed!

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:437
&gt;&gt; +    m_pregrantedRequests.clear();
&gt; 
&gt; We should also clear m_deniedRequests.

I disagree. If a user disallows capture, we should remember that setting until the page is reloaded.

&gt;&gt; Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:438
&gt;&gt; +
&gt; 
&gt; line not needed

Fixed.

&gt;&gt; Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h:444
&gt;&gt; +// Defaults to 8 minutes.
&gt; 
&gt; Is it still true?

Nope, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364361</commentid>
    <comment_count>5</comment_count>
      <attachid>324860</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-25 11:56:47 -0700</bug_when>
    <thetext>Created attachment 324860
Rebased and updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364495</commentid>
    <comment_count>6</comment_count>
      <attachid>324860</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-25 14:50:00 -0700</bug_when>
    <thetext>Comment on attachment 324860
Rebased and updated patch.

LGTM.

I am still not sure whether we should not remove the denied requests decisions after some timeouts.
The timer will only fire if user granted either audio or video.
So there will be a prompt for one or the other.
Then, why not allowing the application to request both?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364501</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-25 14:53:55 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #6)
&gt; Comment on attachment 324860 [details]
&gt; Rebased and updated patch.
&gt; 
&gt; LGTM.
&gt; 
&gt; I am still not sure whether we should not remove the denied requests
&gt; decisions after some timeouts.
&gt; The timer will only fire if user granted either audio or video.
&gt; So there will be a prompt for one or the other.
&gt; Then, why not allowing the application to request both?

Lets land this and talk about the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364523</commentid>
    <comment_count>8</comment_count>
      <attachid>324860</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-25 15:15:09 -0700</bug_when>
    <thetext>Comment on attachment 324860
Rebased and updated patch.

Clearing flags on attachment: 324860

Committed r223988: &lt;https://trac.webkit.org/changeset/223988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364524</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-25 15:15:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364856</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-26 09:15:06 -0700</bug_when>
    <thetext>The API test added with this change is failing:
FAIL WebKit2.GetUserMediaReprompt

/Volumes/Data/slave/sierra-release/build/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:80
Value of: [result boolValue]
  Actual: false
Expected: true


/Volumes/Data/slave/sierra-release/build/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:89
Value of: [result boolValue]
  Actual: false
Expected: true

https://build.webkit.org/builders/Apple%20Sierra%20Release%20WK2%20(Tests)/builds/5281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364908</commentid>
    <comment_count>11</comment_count>
      <attachid>325029</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-10-26 10:51:18 -0700</bug_when>
    <thetext>Created attachment 325029
Test fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365000</commentid>
    <comment_count>12</comment_count>
      <attachid>325029</attachid>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-26 13:22:18 -0700</bug_when>
    <thetext>Comment on attachment 325029
Test fix.

Clearing flags on attachment: 325029

Committed r224044: &lt;https://trac.webkit.org/changeset/224044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365001</commentid>
    <comment_count>13</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-26 13:22:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324739</attachid>
            <date>2017-10-24 15:37:23 -0700</date>
            <delta_ts>2017-10-25 11:56:47 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>clear_cached_state_patch_1.txt</filename>
            <type>text/plain</type>
            <size>33697</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM3NjYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE3LTEwLTI0ICBFcmljIENhcmxz
b24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVhbV0gQ2xl
YXIgY2FjaGVkIGdVTSBwcm9tcHQgc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3ODc1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI3NDIz
NTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
aGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOiBEZWZpbmUgbmV3IHNldHRpbmcuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChX
S1ByZWZlcmVuY2VzU2V0TWVkaWFDYXB0dXJlSW5hY3RpdmVTdHJlYW1SZXByb21wdEludGVydmFs
KTogTmV3LgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dldE1lZGlhQ2FwdHVyZUluYWN0aXZlU3Ry
ZWFtUmVwcm9tcHRJbnRlcnZhbCk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9tZWRpYUNhcHR1
cmVJbmFjdGl2ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWxdKTogRGl0dG8uCisgICAgICAgICgtW1dL
UHJlZmVyZW5jZXMgX3NldE1lZGlhQ2FwdHVyZUluYWN0aXZlU3RyZWFtUmVwcm9tcHRJbnRlcnZh
bDpdKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5KTogSW5pdGlhbGl6ZQorICAgICAgICB0aGUgdGltZXIuCisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpjcmVhdGVSZXF1ZXN0KTogUmVt
b3ZlIHVubmVlZGVkIG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6dG9XZWJDb3JlKTogUmVt
b3ZlIHVubmVlZGVkIGJyZWFrcy4KKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OnNlYXJjaEZvckdyYW50ZWRSZXF1ZXN0IGNvbnN0KTogUmVt
b3ZlIHVubmVlZGVkIG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6Ondhc1JlcXVlc3REZW5pZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnJlcXVl
c3RVc2VyTWVkaWFQZXJtaXNzaW9uRm9yRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmdldFVzZXJNZWRpYVBlcm1p
c3Npb25JbmZvKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5OjplbnVtZXJhdGVNZWRpYURldmljZXNGb3JGcmFtZSk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6c3luY1dpdGhXZWJDb3JlUHJlZnMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmNhcHR1cmVTdGF0ZUNoYW5n
ZWQpOiBTZXQgdGhlIHdhdGNoZG9nIHRpbWVyCisgICAgICAgIHRvIHRoZSBjb3JyZWN0IGludGVy
dmFsIGJhc2VkIG9uIGNhcHR1cmUgc3RhdGUuCisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXRjaGRvZ1RpbWVyRmlyZWQpOiBDbGVhciBj
YWNoZWQgc3RhdGUuCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5Lmg6CisKIDIwMTctMTAtMjAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXSzJdIERyb3AgJ0Nvb3JkaW5hdGVkR3JhcGhpY3Mn
IGFzIGEgcGxhdGZvcm0gcHJlZml4IGZyb20gZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBs
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oCShyZXZpc2lvbiAyMjM3NjYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVm
ZXJlbmNlc0RlZmluaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKICNk
ZWZpbmUgREVGQVVMVF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQgZmFs
c2UKICNkZWZpbmUgREVGQVVMVF9SRVFVSVJFU19VU0VSX0dFU1RVUkVfRk9SX0FVRElPX1BMQVlC
QUNLIHRydWUKICNkZWZpbmUgREVGQVVMVF9MRUdBQ1lfRU5DUllQVEVEX01FRElBX0FQSV9FTkFC
TEVEIGZhbHNlCisjZGVmaW5lIERFRkFVTFRfTUVESUFfQ0FQVFVSRV9JTlRFUkFDVElWRV9TVFJF
QU1fUkVQUk9NUFRfSU5URVJWQUwgMQogI2Vsc2UKICNkZWZpbmUgREVGQVVMVF9BTExPV1NfUElD
VFVSRV9JTl9QSUNUVVJFX01FRElBX1BMQVlCQUNLIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQkFD
S1NQQUNFX0tFWV9OQVZJR0FUSU9OX0VOQUJMRUQgdHJ1ZQpAQCAtOTMsNiArOTQsNyBAQAogI2Rl
ZmluZSBERUZBVUxUX1RFTVBPUkFSWV9USUxFX0NPSE9SVF9SRVRFTlRJT05fRU5BQkxFRCB0cnVl
CiAjZGVmaW5lIERFRkFVTFRfUkVRVUlSRVNfVVNFUl9HRVNUVVJFX0ZPUl9BVURJT19QTEFZQkFD
SyBmYWxzZQogI2RlZmluZSBERUZBVUxUX0xFR0FDWV9FTkNSWVBURURfTUVESUFfQVBJX0VOQUJM
RUQgdHJ1ZQorI2RlZmluZSBERUZBVUxUX01FRElBX0NBUFRVUkVfSU5URVJBQ1RJVkVfU1RSRUFN
X1JFUFJPTVBUX0lOVEVSVkFMIDEwCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAt
MzEwLDYgKzMxMiw3IEBACiAKICNkZWZpbmUgRk9SX0VBQ0hfV0VCS0lUX0RPVUJMRV9QUkVGRVJF
TkNFKG1hY3JvKSBcCiAgICAgbWFjcm8oSW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvblRp
bWVvdXQsIGluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb25UaW1lb3V0LCBEb3VibGUsIGRv
dWJsZSwgNSwgIiIsICIiKSBcCisgICAgbWFjcm8oTWVkaWFDYXB0dXJlSW5hY3RpdmVTdHJlYW1S
ZXByb21wdEludGVydmFsLCBtZWRpYUNhcHR1cmVJbmFjdGl2ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2
YWwsIERvdWJsZSwgZG91YmxlLCBERUZBVUxUX01FRElBX0NBUFRVUkVfSU5URVJBQ1RJVkVfU1RS
RUFNX1JFUFJPTVBUX0lOVEVSVkFMLCAiIiwgIiIpIFwKICAgICBtYWNybyhNaW5pbXVtRm9udFNp
emUsIG1pbmltdW1Gb250U2l6ZSwgRG91YmxlLCBkb3VibGUsIDAsICIiLCAiIikgXAogICAgIG1h
Y3JvKE1pbmltdW1Mb2dpY2FsRm9udFNpemUsIG1pbmltdW1Mb2dpY2FsRm9udFNpemUsIERvdWJs
ZSwgZG91YmxlLCA5LCAiIiwgIiIpIFwKICAgICBtYWNybyhNaW5pbXVtWm9vbUZvbnRTaXplLCBt
aW5pbXVtWm9vbUZvbnRTaXplLCBEb3VibGUsIGRvdWJsZSwgV2ViQ29yZTo6U2V0dGluZ3M6OmRl
ZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplKCksICIiLCAiIikgXApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjIzNzY2KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxNyArMzQsMTYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlck1lZGlhUmVxdWVzdC5oPgog
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKLSNpbmNsdWRl
IDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaD4KLSNlbmRpZgotCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NvbnN0IE1lZGlh
UHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBhY3RpdmVDYXB0dXJlTWFzayA9IE1lZGlhUHJvZHVj
ZXI6Okhhc0FjdGl2ZUF1ZGlvQ2FwdHVyZURldmljZSB8IE1lZGlhUHJvZHVjZXI6Okhhc0FjdGl2
ZVZpZGVvQ2FwdHVyZURldmljZTsKKwogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHk6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5KFdlYlBhZ2VQcm94
eSYgcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9yZWplY3Rpb25UaW1lcihSdW5M
b29wOjptYWluKCksIHRoaXMsICZVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6cmVqZWN0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6d2F0
Y2hkb2dUaW1lckZpcmVkKQogewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgVXNlck1l
ZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmFkZFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5KCp0aGlzKTsKQEAgLTgxLDcgKzgwLDcgQEAgdm9pZCBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogICAgIGludmFsaWRhdGVQZW5kaW5nUmVxdWVzdHMo
KTsKIH0KIAotUmVmPFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk+IFVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpjcmVhdGVSZXF1ZXN0KHVpbnQ2NF90IHVzZXJN
ZWRpYUlELCB1aW50NjRfdCBtYWluRnJhbWVJRCwgdWludDY0X3QgZnJhbWVJRCwgUmVmPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBSZWY8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVmVjdG9yPFN0cmlu
Zz4mJiBhdWRpb0RldmljZVVJRHMsIFZlY3RvcjxTdHJpbmc+JiYgdmlkZW9EZXZpY2VVSURzLCBT
dHJpbmcmJiBkZXZpY2VJREhhc2hTYWx0KQorUmVmPFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
UHJveHk+IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpjcmVhdGVSZXF1
ZXN0KHVpbnQ2NF90IHVzZXJNZWRpYUlELCB1aW50NjRfdCBtYWluRnJhbWVJRCwgdWludDY0X3Qg
ZnJhbWVJRCwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBS
ZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgVmVjdG9yPFN0cmlu
Zz4mJiBhdWRpb0RldmljZVVJRHMsIFZlY3RvcjxTdHJpbmc+JiYgdmlkZW9EZXZpY2VVSURzLCBT
dHJpbmcmJiBkZXZpY2VJREhhc2hTYWx0KQogewogICAgIGF1dG8gcmVxdWVzdCA9IFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OmNyZWF0ZSgqdGhpcywgdXNlck1lZGlhSUQsIG1haW5G
cmFtZUlELCBmcmFtZUlELCBXVEZNb3ZlKHVzZXJNZWRpYURvY3VtZW50T3JpZ2luKSwgV1RGTW92
ZSh0b3BMZXZlbERvY3VtZW50T3JpZ2luKSwgV1RGTW92ZShhdWRpb0RldmljZVVJRHMpLCBXVEZN
b3ZlKHZpZGVvRGV2aWNlVUlEcyksIFdURk1vdmUoZGV2aWNlSURIYXNoU2FsdCkpOwogICAgIG1f
cGVuZGluZ1VzZXJNZWRpYVJlcXVlc3RzLmFkZCh1c2VyTWVkaWFJRCwgcmVxdWVzdC5wdHIoKSk7
CkBAIC05NCwyNSArOTMsMTggQEAgc3RhdGljIHVpbnQ2NF90IHRvV2ViQ29yZShVc2VyTWVkaWFQ
ZXJtaQogICAgIHN3aXRjaCAocmVhc29uKSB7CiAgICAgY2FzZSBVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246Ok5vQ29uc3RyYWludHM6
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6
TWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246Ok5vQ29uc3RyYWludHMpOwotICAgICAgICBicmVhazsK
ICAgICBjYXNlIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVzZXJNZWRpYUFjY2Vz
c0RlbmlhbFJlYXNvbjo6VXNlck1lZGlhRGlzYWJsZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6TWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246
OlVzZXJNZWRpYURpc2FibGVkKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246Ok5vQ2Fw
dHVyZURldmljZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oVXNlck1l
ZGlhUmVxdWVzdDo6TWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246Ok5vQ2FwdHVyZURldmljZXMpOwot
ICAgICAgICBicmVhazsKICAgICBjYXNlIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6
OlVzZXJNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbjo6SW52YWxpZENvbnN0cmFpbnQ6CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6TWVkaWFBY2Nl
c3NEZW5pYWxSZWFzb246OkludmFsaWRDb25zdHJhaW50KTsKLSAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5p
YWxSZWFzb246OkhhcmR3YXJlRXJyb3I6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6TWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246OkhhcmR3YXJl
RXJyb3IpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0UHJveHk6OlVzZXJNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbjo6UGVybWlzc2lvbkRlbmllZDoK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihVc2VyTWVkaWFSZXF1ZXN0OjpN
ZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbjo6UGVybWlzc2lvbkRlbmllZCk7Ci0gICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1lZGlhQWNj
ZXNzRGVuaWFsUmVhc29uOjpPdGhlckZhaWx1cmU6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6TWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246Ok90
aGVyRmFpbHVyZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMTc4LDcgKzE3MCw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHIKICAgICBtX2RlbmllZFJlcXVlc3RzLmNsZWFyKCk7CiB9CiAKLWNvbnN0IFVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkqIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjpzZWFyY2hGb3JHcmFudGVkUmVxdWVzdCh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBib29s
IG5lZWRzQXVkaW8sIGJvb2wgbmVlZHNWaWRlbykgY29uc3QKK2NvbnN0IFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0UHJveHkqIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
OjpzZWFyY2hGb3JHcmFudGVkUmVxdWVzdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTZWN1cml0
eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0
b3BMZXZlbERvY3VtZW50T3JpZ2luLCBib29sIG5lZWRzQXVkaW8sIGJvb2wgbmVlZHNWaWRlbykg
Y29uc3QKIHsKICAgICBpZiAobV9wYWdlLmlzTWVkaWFTdHJlYW1DYXB0dXJlTXV0ZWQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDcsNyArMTk5LDcgQEAgY29uc3QgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RQcm94eSogVQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29s
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXNSZXF1ZXN0RGVuaWVk
KHVpbnQ2NF90IG1haW5GcmFtZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdXNl
ck1lZGlhRG9jdW1lbnRPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiB0b3BM
ZXZlbERvY3VtZW50T3JpZ2luLCBib29sIG5lZWRzQXVkaW8sIGJvb2wgbmVlZHNWaWRlbykKK2Jv
b2wgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6Ondhc1JlcXVlc3REZW5p
ZWQodWludDY0X3QgbWFpbkZyYW1lSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFE
b2N1bWVudE9yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcExldmVsRG9jdW1lbnRPcmln
aW4sIGJvb2wgbmVlZHNBdWRpbywgYm9vbCBuZWVkc1ZpZGVvKQogewogICAgIGZvciAoY29uc3Qg
YXV0byYgZGVuaWVkUmVxdWVzdCA6IG1fZGVuaWVkUmVxdWVzdHMpIHsKICAgICAgICAgaWYgKCFk
ZW5pZWRSZXF1ZXN0LnVzZXJNZWRpYURvY3VtZW50T3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9y
dCh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbikpCkBAIC0yNTMsNyArMjQ1LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGFsbG93UmVxdWVzdChVc2VyTWVkaQogICAgIHJlcXVlc3QuYWxsb3cocmVxdWVz
dC5hdWRpb0RldmljZVVJRHMoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHJlcXVlc3QuYXVkaW9E
ZXZpY2VVSURzKClbMF0sIHJlcXVlc3QudmlkZW9EZXZpY2VVSURzKCkuaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiByZXF1ZXN0LnZpZGVvRGV2aWNlVUlEcygpWzBdKTsKIH0KIAotdm9pZCBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cmVxdWVzdFVzZXJNZWRpYVBlcm1pc3Np
b25Gb3JGcmFtZSh1aW50NjRfdCB1c2VyTWVkaWFJRCwgdWludDY0X3QgZnJhbWVJRCwgUmVmPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBSZWY8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgY29uc3QgV2Vi
Q29yZTo6TWVkaWFDb25zdHJhaW50cyYgYXVkaW9Db25zdHJhaW50cywgY29uc3QgV2ViQ29yZTo6
TWVkaWFDb25zdHJhaW50cyYgdmlkZW9Db25zdHJhaW50cykKK3ZvaWQgVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnJlcXVlc3RVc2VyTWVkaWFQZXJtaXNzaW9uRm9yRnJh
bWUodWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFJlZjxTZWN1cml0eU9y
aWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRv
cExldmVsRG9jdW1lbnRPcmlnaW4sIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGF1ZGlvQ29uc3Ry
YWludHMsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIHZpZGVvQ29uc3RyYWludHMpCiB7CiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoIVVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpz
aW5nbGV0b24oKS5jYXB0dXJlRW5hYmxlZCgpKSB7CkBAIC0yNjIsMTQgKzI1NCwxNCBAQCB2b2lk
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpJbnZhbGlkQ29u
c3RyYWludHNIYW5kbGVyIGludmFsaWRIYW5kbGVyID0gW3RoaXMsIHVzZXJNZWRpYUlEXShjb25z
dCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KSB7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlcjo6SW52YWxpZENvbnN0cmFpbnRzSGFuZGxlciBpbnZhbGlkSGFuZGxlciA9IFt0aGlzLCB1
c2VyTWVkaWFJRF0oY29uc3QgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkgewogICAgICAgICBp
ZiAoIW1fcGFnZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZGVu
eVJlcXVlc3QodXNlck1lZGlhSUQsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVz
ZXJNZWRpYUFjY2Vzc0RlbmlhbFJlYXNvbjo6SW52YWxpZENvbnN0cmFpbnQsIGludmFsaWRDb25z
dHJhaW50KTsKICAgICB9OwogCi0gICAgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
cjo6VmFsaWRDb25zdHJhaW50c0hhbmRsZXIgdmFsaWRIYW5kbGVyID0gW3RoaXMsIHVzZXJNZWRp
YUlELCBmcmFtZUlELCB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiA9IHVzZXJNZWRpYURvY3VtZW50
T3JpZ2luLmNvcHlSZWYoKSwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiA9IHRvcExldmVsRG9jdW1l
bnRPcmlnaW4uY29weVJlZigpXShWZWN0b3I8U3RyaW5nPiYmIGF1ZGlvRGV2aWNlVUlEcywgVmVj
dG9yPFN0cmluZz4mJiB2aWRlb0RldmljZVVJRHMsIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJI
YXNoU2FsdCkgbXV0YWJsZSB7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6VmFsaWRD
b25zdHJhaW50c0hhbmRsZXIgdmFsaWRIYW5kbGVyID0gW3RoaXMsIHVzZXJNZWRpYUlELCBmcmFt
ZUlELCB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiA9IHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLmNv
cHlSZWYoKSwgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiA9IHRvcExldmVsRG9jdW1lbnRPcmlnaW4u
Y29weVJlZigpXShWZWN0b3I8U3RyaW5nPiYmIGF1ZGlvRGV2aWNlVUlEcywgVmVjdG9yPFN0cmlu
Zz4mJiB2aWRlb0RldmljZVVJRHMsIFN0cmluZyYmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkg
bXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9wYWdlLmlzVmFsaWQoKSB8fCAhbV9wYWdlLm1haW5G
cmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTgsNyArMzEwLDcgQEAgdm9pZCBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogICAgICAgICAgICAgdXNlck1lZGlh
QWNjZXNzV2FzRGVuaWVkKHVzZXJNZWRpYUlELCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFBy
b3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246OlVzZXJNZWRpYURpc2FibGVkKTsKICAg
ICB9OwogCi0gICAgYXV0byBoYXZlRGV2aWNlU2FsdEhhbmRsZXIgPSBbdGhpcywgdmFsaWRIYW5k
bGVyID0gV1RGTW92ZSh2YWxpZEhhbmRsZXIpLCBpbnZhbGlkSGFuZGxlciA9IFdURk1vdmUoaW52
YWxpZEhhbmRsZXIpLCBhdWRpb0NvbnN0cmFpbnRzID0gV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50
cyhhdWRpb0NvbnN0cmFpbnRzKSwgdmlkZW9Db25zdHJhaW50cyA9IFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludHModmlkZW9Db25zdHJhaW50cyldKHVpbnQ2NF90IHVzZXJNZWRpYUlELCBTdHJpbmcm
JiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQsIGJvb2wgb3JpZ2luSGFzUGVyc2lzdGVudEFjY2Vz
cykgbXV0YWJsZSB7CisgICAgYXV0byBoYXZlRGV2aWNlU2FsdEhhbmRsZXIgPSBbdGhpcywgdmFs
aWRIYW5kbGVyID0gV1RGTW92ZSh2YWxpZEhhbmRsZXIpLCBpbnZhbGlkSGFuZGxlciA9IFdURk1v
dmUoaW52YWxpZEhhbmRsZXIpLCBhdWRpb0NvbnN0cmFpbnRzID0gTWVkaWFDb25zdHJhaW50cyhh
dWRpb0NvbnN0cmFpbnRzKSwgdmlkZW9Db25zdHJhaW50cyA9IE1lZGlhQ29uc3RyYWludHModmlk
ZW9Db25zdHJhaW50cyldKHVpbnQ2NF90IHVzZXJNZWRpYUlELCBTdHJpbmcmJiBkZXZpY2VJZGVu
dGlmaWVySGFzaFNhbHQsIGJvb2wgb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcykgbXV0YWJsZSB7
CiAKICAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nRGV2aWNlUmVxdWVzdHMudGFrZSh1
c2VyTWVkaWFJRCk7CiAgICAgICAgIGlmICghcmVxdWVzdCkKQEAgLTM0Nyw3ICszMzksNyBAQCB2
b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByCiB9CiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQotdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6Z2V0VXNlck1lZGlhUGVybWlzc2lvbkluZm8odWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2
NF90IGZyYW1lSUQsIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5OjpDb21wbGV0aW9uSGFu
ZGxlciYmIGhhbmRsZXIsIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFE
b2N1bWVudE9yaWdpbiwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHRvcExldmVsRG9j
dW1lbnRPcmlnaW4pCit2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
OjpnZXRVc2VyTWVkaWFQZXJtaXNzaW9uSW5mbyh1aW50NjRfdCB1c2VyTWVkaWFJRCwgdWludDY0
X3QgZnJhbWVJRCwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk6OkNvbXBsZXRpb25IYW5k
bGVyJiYgaGFuZGxlciwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50T3Jp
Z2luLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbikKIHsKICAg
ICBhdXRvIHVzZXJNZWRpYU9yaWdpbiA9IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1c2Vy
TWVkaWFEb2N1bWVudE9yaWdpbi5nZXQoKSk7CiAgICAgYXV0byB0b3BMZXZlbE9yaWdpbiA9IEFQ
STo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh0b3BMZXZlbERvY3VtZW50T3JpZ2luLmdldCgpKTsK
QEAgLTM2MCw3ICszNTIsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByCiB9IAogI2VuZGlmCiAKLXZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHk6OmVudW1lcmF0ZU1lZGlhRGV2aWNlc0ZvckZyYW1lKHVpbnQ2NF90IHVzZXJNZWRpYUlE
LCB1aW50NjRfdCBmcmFtZUlELCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgdXNlck1l
ZGlhRG9jdW1lbnRPcmlnaW4sIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB0b3BMZXZlbERvY3VtZW50
T3JpZ2luKQordm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6ZW51
bWVyYXRlTWVkaWFEZXZpY2VzRm9yRnJhbWUodWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90
IGZyYW1lSUQsIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwg
UmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pCiB7CiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXNdKHVp
bnQ2NF90IHVzZXJNZWRpYUlELCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQsIGJv
b2wgb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcykgewpAQCAtMzkxLDI2ICszODMsNDMgQEAgdm9p
ZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogICAgIC8vIEVuYWJsZS9kaXNh
YmxlIHRoZSBtb2NrIGNhcHR1cmUgZGV2aWNlcyBmb3IgdGhlIFVJIHByb2Nlc3MgYXMgcGVyIHRo
ZSBXZWJDb3JlIHByZWZlcmVuY2VzLiBOb3RlIHRoYXQKICAgICAvLyB0aGlzIGlzIGEgbm9vcCBp
ZiB0aGUgcHJlZmVyZW5jZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMg
d2FzIGNhbGxlZC4KICAgICBib29sIG1vY2tEZXZpY2VzRW5hYmxlZCA9IG1fcGFnZS5wcmVmZXJl
bmNlcygpLm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKLSAgICBXZWJDb3JlOjpNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJF
bmFibGVkKG1vY2tEZXZpY2VzRW5hYmxlZCk7CisgICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChtb2NrRGV2aWNl
c0VuYWJsZWQpOwogI2VuZGlmCiB9CiAKLXZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHk6OmNhcHR1cmVTdGF0ZUNoYW5nZWQoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6
TWVkaWFTdGF0ZUZsYWdzIG9sZFN0YXRlLCBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0
YXRlRmxhZ3MgbmV3U3RhdGUpCit2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5OjpjYXB0dXJlU3RhdGVDaGFuZ2VkKE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyBvbGRTdGF0ZSwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG5ld1N0YXRlKQogewog
ICAgIGlmICghbV9wYWdlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKLSAgICBib29sIHdhc0NhcHR1cmluZ0F1ZGlvID0gb2xkU3RhdGUgJiBX
ZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpBdWRpb0NhcHR1cmVNYXNrOwotICAgIGJvb2wgd2FzQ2Fw
dHVyaW5nVmlkZW8gPSBvbGRTdGF0ZSAmIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OlZpZGVvQ2Fw
dHVyZU1hc2s7Ci0gICAgYm9vbCBpc0NhcHR1cmluZ0F1ZGlvID0gbmV3U3RhdGUgJiBXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpBdWRpb0NhcHR1cmVNYXNrOwotICAgIGJvb2wgaXNDYXB0dXJpbmdW
aWRlbyA9IG5ld1N0YXRlICYgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6VmlkZW9DYXB0dXJlTWFz
azsKKyAgICBib29sIHdhc0NhcHR1cmluZ0F1ZGlvID0gb2xkU3RhdGUgJiBNZWRpYVByb2R1Y2Vy
OjpBdWRpb0NhcHR1cmVNYXNrOworICAgIGJvb2wgd2FzQ2FwdHVyaW5nVmlkZW8gPSBvbGRTdGF0
ZSAmIE1lZGlhUHJvZHVjZXI6OlZpZGVvQ2FwdHVyZU1hc2s7CisgICAgYm9vbCBpc0NhcHR1cmlu
Z0F1ZGlvID0gbmV3U3RhdGUgJiBNZWRpYVByb2R1Y2VyOjpBdWRpb0NhcHR1cmVNYXNrOworICAg
IGJvb2wgaXNDYXB0dXJpbmdWaWRlbyA9IG5ld1N0YXRlICYgTWVkaWFQcm9kdWNlcjo6VmlkZW9D
YXB0dXJlTWFzazsKIAogICAgIGlmICgod2FzQ2FwdHVyaW5nQXVkaW8gJiYgIWlzQ2FwdHVyaW5n
QXVkaW8pIHx8ICh3YXNDYXB0dXJpbmdWaWRlbyAmJiAhaXNDYXB0dXJpbmdWaWRlbykpCiAgICAg
ICAgIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5lbmRlZENhcHR1cmVTZXNz
aW9uKCp0aGlzKTsKICAgICBpZiAoKCF3YXNDYXB0dXJpbmdBdWRpbyAmJiBpc0NhcHR1cmluZ0F1
ZGlvKSB8fCAoIXdhc0NhcHR1cmluZ1ZpZGVvICYmIGlzQ2FwdHVyaW5nVmlkZW8pKQogICAgICAg
ICBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc3RhcnRlZENhcHR1cmVTZXNz
aW9uKCp0aGlzKTsKICNlbmRpZgorCisgICAgaWYgKG1fY2FwdHVyZVN0YXRlID09IChuZXdTdGF0
ZSAmIGFjdGl2ZUNhcHR1cmVNYXNrKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jYXB0dXJl
U3RhdGUgPSBuZXdTdGF0ZSAmIGFjdGl2ZUNhcHR1cmVNYXNrOworCisgICAgU2Vjb25kcyBpbnRl
cnZhbDsKKyAgICBpZiAobV9jYXB0dXJlU3RhdGUgJiBhY3RpdmVDYXB0dXJlTWFzaykKKyAgICAg
ICAgaW50ZXJ2YWwgPSBTZWNvbmRzOjpmcm9tSG91cnMoMjQpOworICAgIGVsc2UKKyAgICAgICAg
aW50ZXJ2YWwgPSAxX3MgKiBtX3BhZ2UucHJlZmVyZW5jZXMoKS5tZWRpYUNhcHR1cmVJbmFjdGl2
ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWwoKTsKKworICAgIGlmIChpbnRlcnZhbCA9PSBtX2N1cnJl
bnRXYXRjaGRvZ0ludGVydmFsKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRXYXRj
aGRvZ0ludGVydmFsID0gaW50ZXJ2YWw7CisgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hv
dChtX2N1cnJlbnRXYXRjaGRvZ0ludGVydmFsKTsKIH0KIAogdm9pZCBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cHJvY2Vzc1ByZWdyYW50ZWRSZXF1ZXN0cygpCkBAIC00
MjAsNCArNDI5LDEzIEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHIK
ICAgICBtX3ByZWdyYW50ZWRSZXF1ZXN0cy5jbGVhcigpOwogfQogCit2b2lkIFVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXRjaGRvZ1RpbWVyRmlyZWQoKQoreworICAg
IEFTU0VSVCghKG1fY2FwdHVyZVN0YXRlICYgYWN0aXZlQ2FwdHVyZU1hc2spKTsKKworICAgIG1f
Z3JhbnRlZFJlcXVlc3RzLmNsZWFyKCk7CisgICAgbV9wcmVncmFudGVkUmVxdWVzdHMuY2xlYXIo
KTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMjIzNzY2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0VXNlck1lZGlhUGVybWlz
c2lvbkluZm8odWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFVzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5OjpDb21wbGV0aW9uSGFuZGxlciYmLCBSZWY8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+JiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIFJlZjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbj4mJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKIAogICAgIHZvaWQgc3lu
Y1dpdGhXZWJDb3JlUHJlZnMoKSBjb25zdDsKKyAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgp
OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0UHJveHk+PiBtX3BlbmRpbmdVc2VyTWVkaWFSZXF1ZXN0czsKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWY8VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk+PiBtX3BlbmRpbmdEZXZpY2VS
ZXF1ZXN0czsKQEAgLTk1LDYgKzk2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNWaWRl
b0RlbmllZDsKICAgICB9OwogICAgIFZlY3RvcjxEZW5pZWRSZXF1ZXN0PiBtX2RlbmllZFJlcXVl
c3RzOworCisgICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1fY2Fw
dHVyZVN0YXRlIHsgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nIH07CisgICAg
UnVuTG9vcDo6VGltZXI8VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk+IG1f
d2F0Y2hkb2dUaW1lcjsKKyAgICBTZWNvbmRzIG1fY3VycmVudFdhdGNoZG9nSW50ZXJ2YWw7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyMjM3NjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY1MCw2ICsxNjUwLDE2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhQ2FwdHVy
ZVJlcXVpcmUKICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJl
UmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldE1l
ZGlhQ2FwdHVyZUluYWN0aXZlU3RyZWFtUmVwcm9tcHRJbnRlcnZhbChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBkb3VibGUgaW50ZXJ2YWwpCit7CisgICAgdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0TWVkaWFDYXB0dXJlSW5hY3RpdmVTdHJlYW1SZXByb21wdEludGVydmFsKGlu
dGVydmFsKTsKK30KKworZG91YmxlIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVJbmFjdGl2
ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWwoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
K3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJlSW5hY3Rp
dmVTdHJlYW1SZXByb21wdEludGVydmFsKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZl
dGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcp
CiB7CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0Y2hBUElFbmFibGVkKGZsYWcp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1By
ZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCShyZXZpc2lvbiAyMjM3NjYpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NDEsNiArNDQxLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRFbnVt
ZXJhdGkKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRNZWRpYUNhcHR1cmVSZXF1aXJl
c1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCk7CiBXS19FWFBPUlQgYm9v
bCBXS1ByZWZlcmVuY2VzR2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKFdL
UHJlZmVyZW5jZXNSZWYpOwogCisvLyBEZWZhdWx0cyB0byA4IG1pbnV0ZXMuCitXS19FWFBPUlQg
dm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFDYXB0dXJlSW5hY3RpdmVTdHJlYW1SZXByb21wdElu
dGVydmFsKFdLUHJlZmVyZW5jZXNSZWYsIGRvdWJsZSk7CitXS19FWFBPUlQgZG91YmxlIFdLUHJl
ZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVJbmFjdGl2ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWwoV0tQ
cmVmZXJlbmNlc1JlZik7CisKIC8vIERlZmF1bHRzIHRvIGZhbHNlCiBXS19FWFBPUlQgdm9pZCBX
S1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxh
Zyk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RmV0Y2hBUElFbmFibGVkKFdLUHJl
ZmVyZW5jZXNSZWYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDIyMzc2NikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02MTIsNiArNjEyLDE2IEBAIC0gKHZvaWQpX3NldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJl
Q28KICAgICBfcHJlZmVyZW5jZXMtPnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbihyZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24pOwogfQogCistIChkb3VibGUpX21lZGlhQ2Fw
dHVyZUluYWN0aXZlU3RyZWFtUmVwcm9tcHRJbnRlcnZhbAoreworICAgIHJldHVybiBfcHJlZmVy
ZW5jZXMtPm1lZGlhQ2FwdHVyZUluYWN0aXZlU3RyZWFtUmVwcm9tcHRJbnRlcnZhbCgpOworfQor
CistICh2b2lkKV9zZXRNZWRpYUNhcHR1cmVJbmFjdGl2ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWw6
KGRvdWJsZSlyZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24KK3sKKyAgICBfcHJlZmVyZW5jZXMtPnNl
dE1lZGlhQ2FwdHVyZUluYWN0aXZlU3RyZWFtUmVwcm9tcHRJbnRlcnZhbChyZXF1aXJlc1NlY3Vy
ZUNvbm5lY3Rpb24pOworfQorCiAtIChCT09MKV9lbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZh
Y2VzRW5hYmxlZAogewogICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPmVudW1lcmF0aW5nQWxsTmV0
d29ya0ludGVyZmFjZXNFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24g
MjIzNzY2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLSmF2YVNjCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0
dGVyPV9zZXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZDopIEJPT0wgX2Vu
dW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3Nl
dElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6KSBCT09MIF9pY2VDYW5kaWRhdGVGaWx0ZXJp
bmdFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViUlRDTGVnYWN5QVBJ
RW5hYmxlZDopIEJPT0wgX3dlYlJUQ0xlZ2FjeUFQSUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOworQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1f
c2V0TWVkaWFDYXB0dXJlSW5hY3RpdmVTdHJlYW1SZXByb21wdEludGVydmFsOikgZG91YmxlIF9t
ZWRpYUNhcHR1cmVJbmFjdGl2ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWwgV0tfQVBJX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBzZXR0ZXI9X3NldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQ6KSBCT09MIF9q
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEz
KSwgaW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldERPTVBhc3Rl
QWxsb3dlZDopIEJPT0wgX2RvbVBhc3RlQWxsb3dlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgx
MC4xMyksIGlvcygxMS4wKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM5MzApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0xMC0yNCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWVkaWFTdHJlYW1dIENsZWFyIGNh
Y2hlZCBnVU0gcHJvbXB0IHN0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzg3NTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyNzQyMzU2Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBuZXcg
dGVzdC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9HZXRVc2VyTWVkaWFS
ZXByb21wdC5tbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9nZXRVc2Vy
TWVkaWEuaHRtbDoKKwogMjAxNy0xMC0yNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFbmFibGUgV2ViS2l0IGxvZ2dpbmcg
Y29uZmlndXJhdGlvbiBhbmQgZGlzcGxheQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMzc2NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAJ
CTA3OTlDMzRCMUVCQTMzMDEwMDNCNzUzMiAvKiBkaXNhYmxlR2V0VXNlck1lZGlhLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5OUMz
NEExRUJBMzJGNDAwM0I3NTMyIC8qIGRpc2FibGVHZXRVc2VyTWVkaWEuaHRtbCAqLzsgfTsKIAkJ
MDdDMDQ2Q0ExRTQyNjJBODAwNzIwMUU3IC8qIENBUmluZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0MwNDZDOTFFNDI1NzNFMDA3MjAx
RTcgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLzsgfTsKIAkJMDdDRTFDRjMxRjA2QTdFMDAwQkY4OUY1
IC8qIEdldFVzZXJNZWRpYU5hdmlnYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwN0NFMUNGMjFGMDZBN0UwMDBCRjg5RjUgLyogR2V0VXNlck1l
ZGlhTmF2aWdhdGlvbi5tbSAqLzsgfTsKKwkJMDdFNDk5OTExRjlFNTZERjAwMkYxRUYzIC8qIEdl
dFVzZXJNZWRpYVJlcHJvbXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDdFNDk5OTAxRjlFNTZBMTAwMkYxRUYzIC8qIEdldFVzZXJNZWRpYVJlcHJv
bXB0Lm1tICovOyB9OwogCQkwRjEzOUU3NzFBNDIzQTVCMDBGNTkwRjUgLyogV2Vha09iakNQdHIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3
NTFBNDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gKi87IH07CiAJCTBGMTM5RTc4MUE0
MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1
IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAw
MEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBs
YXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CkBAIC0xMDU0LDYgKzEwNTUsNyBAQAogCQkw
Nzk5QzM0QTFFQkEzMkY0MDAzQjc1MzIgLyogZGlzYWJsZUdldFVzZXJNZWRpYS5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gZGlzYWJsZUdldFVzZXJNZWRpYS5odG1sOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwN0MwNDZDOTFFNDI1NzNFMDA3MjAxRTcgLyogQ0FSaW5n
QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBUmluZ0J1
ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Q0UxQ0YyMUYwNkE3RTAw
MEJGODlGNSAvKiBHZXRVc2VyTWVkaWFOYXZpZ2F0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gR2V0VXNlck1lZGlhTmF2aWdhdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdFNDk5OTAxRjlFNTZBMTAwMkYxRUYzIC8qIEdldFVzZXJN
ZWRpYVJlcHJvbXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
R2V0VXNlck1lZGlhUmVwcm9tcHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
RURFRkFDMUVCOTQwMEMwMEQ0MzI5MiAvKiBVc2VyTWVkaWFEaXNhYmxlZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVzZXJNZWRpYURpc2FibGVkLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkNEODMzNDE0ODU3Q0U0MDBFQTIwMDMgLyogSGFz
aE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJDRDg1NjkxNDg1Qzk4QjAwRUEyMDAz
IC8qIFNldEZvclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNldEZvclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MzUsNiAr
MjQzNyw3IEBACiAJCUJDOTA5NjQxMTI1NTYxNjAwMDA4Mzc1NiAvKiBXZWJLaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTA3RTQ5OTkwMUY5RTU2QTEw
MDJGMUVGMyAvKiBHZXRVc2VyTWVkaWFSZXByb21wdC5tbSAqLywKIAkJCQkwRjEzOUU3NDFBNDIz
QTQ2MDBGNTkwRjUgLyogY29jb2EgKi8sCiAJCQkJQzBDNUQzQkIxNDU5OEI2RjAwQTgwMkE2IC8q
IG1hYyAqLywKIAkJCQlCQzkwOTc3QjEyNTU3MUFFMDAwODM3NTYgLyogUmVzb3VyY2VzICovLApA
QCAtMzI3MSw2ICszMjc0LDcgQEAKIAkJCQk0NjM5N0I5NTFEQzJDODUwMDA5QTc4QUUgLyogRE9N
Tm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJDMUE0MTFBN0UwMDQ0N0M0QyAvKiBE
T01Ob2RlRnJvbUpTT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkQxQTQxMUE3
RTAwNDQ3QzRDIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQkwN0U0
OTk5MTFGOUU1NkRGMDAyRjFFRjMgLyogR2V0VXNlck1lZGlhUmVwcm9tcHQubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VFQzFBNDExQUU2MDA0NDdDNEMgLyogRE9NV2luZG93RXh0ZW5zaW9u
QmFzaWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRUQxQTQxMUFFNjAwNDQ3QzRDIC8q
IERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdG
MjMxQTQxMUFGNjAwNDQ3QzRDIC8qIERvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9HZXRVc2VyTWVkaWFSZXByb21wdC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9HZXRVc2VyTWVk
aWFSZXByb21wdC5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9HZXRVc2VyTWVkaWFSZXByb21wdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgV0tfQVBJX0VO
QUJMRUQKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRp
bGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisj
aW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
S1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorCitzdGF0aWMgYm9vbCB3YXNQcm9tcHRlZCA9
IGZhbHNlOworCitAaW50ZXJmYWNlIEdldFVzZXJNZWRpYVJlcHJvbXB0VUlEZWxlZ2F0ZSA6IE5T
T2JqZWN0PFdLVUlEZWxlZ2F0ZT4KKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgcmVxdWVzdFVzZXJNZWRpYUF1dGhvcml6YXRpb25Gb3JEZXZpY2VzOihfV0tDYXB0dXJlRGV2
aWNlcylkZXZpY2VzIHVybDooTlNVUkwgKil1cmwgbWFpbkZyYW1lVVJMOihOU1VSTCAqKW1haW5G
cmFtZVVSTCBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgYXV0aG9yaXplZCkpZGVjaXNp
b25IYW5kbGVyOworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjaGVja1Vz
ZXJNZWRpYVBlcm1pc3Npb25Gb3JVUkw6KE5TVVJMICopdXJsIG1haW5GcmFtZVVSTDooTlNVUkwg
KiltYWluRnJhbWVVUkwgZnJhbWVJZGVudGlmaWVyOihOU1VJbnRlZ2VyKWZyYW1lSWRlbnRpZmll
ciBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3RyaW5nICpzYWx0LCBCT09MIGF1dGhvcml6
ZWQpKWRlY2lzaW9uSGFuZGxlcjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEdldFVzZXJNZWRp
YVJlcHJvbXB0VUlEZWxlZ2F0ZQorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyByZXF1ZXN0VXNlck1lZGlhQXV0aG9yaXphdGlvbkZvckRldmljZXM6KF9XS0NhcHR1cmVEZXZp
Y2VzKWRldmljZXMgdXJsOihOU1VSTCAqKXVybCBtYWluRnJhbWVVUkw6KE5TVVJMICopbWFpbkZy
YW1lVVJMIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCBhdXRob3JpemVkKSlkZWNpc2lv
bkhhbmRsZXIKK3sKKyAgICB3YXNQcm9tcHRlZCA9IHRydWU7CisgICAgZGVjaXNpb25IYW5kbGVy
KFlFUyk7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY2hlY2tV
c2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMOihOU1VSTCAqKXVybCBtYWluRnJhbWVVUkw6KE5TVVJM
ICopbWFpbkZyYW1lVVJMIGZyYW1lSWRlbnRpZmllcjooTlNVSW50ZWdlcilmcmFtZUlkZW50aWZp
ZXIgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyAqc2FsdCwgQk9PTCBhdXRob3Jp
emVkKSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICBkZWNpc2lvbkhhbmRsZXIoQCIweDk4NzY1NDMy
MSIsIFlFUyk7Cit9CitAZW5kCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChX
ZWJLaXQyLCBHZXRVc2VyTWVkaWFSZXByb21wdCkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gcHJvY2Vzc1Bvb2xDb25maWcgPSBhZG9wdE5TKFtbX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFtjb25maWd1cmF0aW9u
IHByZWZlcmVuY2VzXTsKKyAgICBwcmVmZXJlbmNlcy5fbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uID0gTk87CisgICAgcHJlZmVyZW5jZXMuX21lZGlhRGV2aWNlc0VuYWJsZWQg
PSBZRVM7CisgICAgcHJlZmVyZW5jZXMuX21vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBZRVM7
CisgICAgYXV0byB3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWcuZ2V0KCldOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbR2V0VXNlck1lZGlhUmVwcm9tcHRVSURlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgd2ViVmlldy5VSURlbGVnYXRlID0gZGVsZWdhdGUuZ2V0
KCk7CisKKyAgICB3YXNQcm9tcHRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRUZXN0UGFn
ZU5hbWVkOkAiZ2V0VXNlck1lZGlhIl07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZ3
YXNQcm9tcHRlZCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJoYXZlU3RyZWFtKCkiXTsKKyAgICBFWFBFQ1RfVFJVRShbcmVzdWx0
IGJvb2xWYWx1ZV0pOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInN0b3AoKSJdOworICAgIHJlc3VsdCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJoYXZlU3RyZWFtKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoW3Jlc3VsdCBib29s
VmFsdWVdKTsKKworICAgIHdhc1Byb21wdGVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInByb21wdEZvckNhcHR1cmUoKSJdOworICAgIHJlc3Vs
dCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJoYXZlU3RyZWFtKCki
XTsKKyAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGJvb2xWYWx1ZV0pOworICAgIEVYUEVDVF9GQUxT
RSh3YXNQcm9tcHRlZCk7CisKKyAgICBwcmVmZXJlbmNlcy5fbWVkaWFDYXB0dXJlSW5hY3RpdmVT
dHJlYW1SZXByb21wdEludGVydmFsID0gLjU7CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInN0b3AoKSJdOworICAgIHJlc3VsdCA9IFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJoYXZlU3RyZWFtKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0Uo
W3Jlc3VsdCBib29sVmFsdWVdKTsKKworICAgIC8vIFNsZWVwIGxvbmcgZW5vdWdoIGZvciB0aGUg
cmVwcm9tcHQgdGltZXIgdG8gZmlyZSBhbmQgY2xlYXIgY2FjaGVkIHN0YXRlLgorICAgIFV0aWw6
OnNsZWVwKDEpOworCisgICAgd2FzUHJvbXB0ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicHJvbXB0Rm9yQ2FwdHVyZSgpIl07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZ3YXNQcm9tcHRlZCk7CisgICAgcmVzdWx0ID0gW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImhhdmVTdHJlYW0oKSJdOworICAgIEVY
UEVDVF9UUlVFKFtyZXN1bHQgYm9vbFZhbHVlXSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBX
S19BUElfRU5BQkxFRApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvZ2V0
VXNlck1lZGlhLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQvZ2V0VXNlck1lZGlhLmh0bWwJKHJldmlzaW9uIDIyMzc2NikKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L2dldFVzZXJNZWRpYS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE2ICsxLDQ4IEBACi08c2NyaXB0PgotICAgIGZ1bmN0aW9uIGdvdFVzZXJNZWRpYShtZWRp
YVN0cmVhbSkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCJHb3QgdXNlciBtZWRpYSIpOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHVzZXJNZWRpYUVycm9yKGVycm9yKQotICAgIHsKLSAgICAg
ICAgY29uc29sZS5sb2coZXJyb3IpOwotICAgIH0KLQotICAgIHZhciBjb25zdHJhaW50cyA9IHsg
YXVkaW86IGZhbHNlLCB2aWRlbzogdHJ1ZX07Ci0gICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5n
ZXRVc2VyTWVkaWEoY29uc3RyYWludHMpCi0gICAgICAgIC50aGVuKGdvdFVzZXJNZWRpYSkuCi0g
ICAgICAgIGNhdGNoKHVzZXJNZWRpYUVycm9yKTsKLTwvc2NyaXB0PgorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICAgICAgbGV0
IHN0cmVhbSA9IG51bGw7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHByb21wdEZvckNhcHR1cmUo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMu
Z2V0VXNlck1lZGlhKHsgYXVkaW86IGZhbHNlLCB2aWRlbzogdHJ1ZSB9KQorICAgICAgICAgICAg
ICAgIC50aGVuKChzKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gczsKKyAg
ICAgICAgICAgICAgICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBzdHJlYW07CisgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIkdvdCB1c2VyIG1lZGlhIik7CisgICAgICAgICAgICAg
ICAgfSkKKyAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhgRmFp
bGVkIHdpdGggZXJyb3I6ICR7ZXJyb3J9YCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmdW5jdGlvbiBzdG9wKGtpbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGV0
IGFjdGl2ZVRyYWNrcyA9IFtdOworICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5m
b3JFYWNoKHRyYWNrID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFraW5kIHx8IHRyYWNr
LmtpbmQgPT0ga2luZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVHJh
Y2tzLnB1c2godHJhY2spOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
aWYgKCFhY3RpdmVUcmFja3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9
IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBoYXZl
U3RyZWFtKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtICE9
PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8aGVhZD4KKwor
ICAgIDxib2R5IG9ubG9hZD0icHJvbXB0Rm9yQ2FwdHVyZSgpIj4KKyAgICAgICAgPHZpZGVvIGlk
PSJ2aWRlbyIgY29udHJvbHM+PC92aWRlbz4KKyAgICAgICAgPHA+CisgICAgICAgIDxidXR0b24g
b25jbGljaz0ic3RvcCgpIj5TdG9wPC9idXR0b24+CisgICAgICAgIDwvcD4KKyAgICA8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324860</attachid>
            <date>2017-10-25 11:56:47 -0700</date>
            <delta_ts>2017-10-25 15:15:09 -0700</delta_ts>
            <desc>Rebased and updated patch.</desc>
            <filename>clear_cached_state_patch_4.txt</filename>
            <type>text/plain</type>
            <size>34149</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjM5NTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTEwLTI1ICBFcmljIENhcmxz
b24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVhbV0gQ2xl
YXIgY2FjaGVkIGdVTSBwcm9tcHQgc3RhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3ODc1NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI3NDIz
NTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
aGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDogRGVmaW5lIG5ldyBzZXR0aW5ncy4KKworICAgICAg
ICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zQmFzZS5oOiBOZXcgZGVmYXVsdCB2
YWx1ZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6Cisg
ICAgICAgIChXS1ByZWZlcmVuY2VzU2V0SW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0
SW50ZXJ2YWxJbk1pbnV0ZXMpOiBOZXcuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0SW5hY3Rp
dmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXMpOiBEaXR0by4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1b
V0tQcmVmZXJlbmNlcyBfaW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJ
bk1pbnV0ZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dLUHJlZmVyZW5jZXMgX3NldEluYWN0aXZl
TWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVydmFsSW5NaW51dGVzOl0pOiBEaXR0by4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6CisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eTo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkpOiBJbml0aWFsaXpl
CisgICAgICAgIHRoZSB0aW1lci4KKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OmNyZWF0ZVJlcXVlc3QpOiBSZW1vdmUgdW5uZWVkZWQgbmFt
ZXNwYWNlLgorICAgICAgICAoV2ViS2l0Ojp0b1dlYkNvcmUpOiBSZW1vdmUgdW5uZWVkZWQgYnJl
YWtzLgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eTo6c2VhcmNoRm9yR3JhbnRlZFJlcXVlc3QgY29uc3QpOiBSZW1vdmUgdW5uZWVkZWQgbmFt
ZXNwYWNlLgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eTo6d2FzUmVxdWVzdERlbmllZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6cmVxdWVzdFVzZXJNZWRpYVBlcm1p
c3Npb25Gb3JGcmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Z2V0VXNlck1lZGlhUGVybWlzc2lvbkluZm8pOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHk6OmVudW1lcmF0ZU1lZGlhRGV2aWNlc0ZvckZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpzeW5jV2l0aFdlYkNv
cmVQcmVmcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Y2FwdHVyZVN0YXRlQ2hhbmdlZCk6IFNldCB0aGUgd2F0
Y2hkb2cgdGltZXIKKyAgICAgICAgdG8gdGhlIGNvcnJlY3QgaW50ZXJ2YWwgYmFzZWQgb24gY2Fw
dHVyZSBzdGF0ZS4KKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHk6OndhdGNoZG9nVGltZXJGaXJlZCk6IENsZWFyIGNhY2hlZCBzdGF0ZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
aDoKKwogMjAxNy0xMC0yNSAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtXUEVdIFJlbW92ZSBHTGliIEFQSSBmdW5jdGlvbnMgd2hpY2ggdXNl
IENhaXJvCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwJKHJl
dmlzaW9uIDIyMzk1NikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWwJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw2ICs4MjIsMTMgQEAgSW5zcGVjdG9yV2luZG93RnJh
bWU6CiAgIGRlZmF1bHRWYWx1ZTogJyIiJwogICB3ZWJraXRPbmx5OiB0cnVlCiAKK0luYWN0aXZl
TWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVydmFsSW5NaW51dGVzOgorICAgIHR5cGU6IGRv
dWJsZQorICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9JTlRFUkFDVElWRV9NTkVESUFfQ0FQVFVS
RV9TVFJFQU1fUkVQUk9NUFRfSU5URVJWQUxfSU5fTUlOVVRFUworCitMb25nUnVubmluZ01lZGlh
Q2FwdHVyZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWxJbkhvdXJzOgorICAgIHR5cGU6IGRvdWJsZQor
ICAgIGRlZmF1bHRWYWx1ZTogMjQKIAogIyBEZWJ1ZyBQcmVmZXJlbmNlcwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zQmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnNCYXNl
LmgJKHJldmlzaW9uIDIyMzk1NikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzRGVmaW5pdGlvbnNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKICNk
ZWZpbmUgREVGQVVMVF9URU1QT1JBUllfVElMRV9DT0hPUlRfUkVURU5USU9OX0VOQUJMRUQgZmFs
c2UKICNkZWZpbmUgREVGQVVMVF9SRVFVSVJFU19VU0VSX0dFU1RVUkVfRk9SX0FVRElPX1BMQVlC
QUNLIHRydWUKICNkZWZpbmUgREVGQVVMVF9MRUdBQ1lfRU5DUllQVEVEX01FRElBX0FQSV9FTkFC
TEVEIGZhbHNlCisjZGVmaW5lIERFRkFVTFRfSU5URVJBQ1RJVkVfTU5FRElBX0NBUFRVUkVfU1RS
RUFNX1JFUFJPTVBUX0lOVEVSVkFMX0lOX01JTlVURVMgMQogI2Vsc2UKICNkZWZpbmUgREVGQVVM
VF9BTExPV1NfUElDVFVSRV9JTl9QSUNUVVJFX01FRElBX1BMQVlCQUNLIGZhbHNlCiAjZGVmaW5l
IERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FUSU9OX0VOQUJMRUQgdHJ1ZQpAQCAtOTMsNiAr
OTQsNyBAQAogI2RlZmluZSBERUZBVUxUX1RFTVBPUkFSWV9USUxFX0NPSE9SVF9SRVRFTlRJT05f
RU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfUkVRVUlSRVNfVVNFUl9HRVNUVVJFX0ZPUl9B
VURJT19QTEFZQkFDSyBmYWxzZQogI2RlZmluZSBERUZBVUxUX0xFR0FDWV9FTkNSWVBURURfTUVE
SUFfQVBJX0VOQUJMRUQgdHJ1ZQorI2RlZmluZSBERUZBVUxUX0lOVEVSQUNUSVZFX01ORURJQV9D
QVBUVVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEwCiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
LmNwcAkocmV2aXNpb24gMjIzOTU2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxNyArMzQsMTYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVXNlck1lZGlhUmVxdWVzdC5oPgogCi0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKLSNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBjb25zdCBNZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3MgYWN0aXZlQ2FwdHVyZU1hc2sgPSBNZWRpYVByb2R1Y2VyOjpIYXNBY3Rp
dmVBdWRpb0NhcHR1cmVEZXZpY2UgfCBNZWRpYVByb2R1Y2VyOjpIYXNBY3RpdmVWaWRlb0NhcHR1
cmVEZXZpY2U7CisKIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fcmVqZWN0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OnJlamVjdGlv
blRpbWVyRmlyZWQpCisgICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OndhdGNoZG9nVGltZXJG
aXJlZCkKIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFVzZXJNZWRpYVByb2Nlc3NN
YW5hZ2VyOjpzaW5nbGV0b24oKS5hZGRVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eSgqdGhpcyk7CkBAIC04MSw3ICs4MCw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHIKICAgICBpbnZhbGlkYXRlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLVJl
ZjxVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5PiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eTo6Y3JlYXRlUmVxdWVzdCh1aW50NjRfdCB1c2VyTWVkaWFJRCwgdWlu
dDY0X3QgbWFpbkZyYW1lSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFJlZjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiYgYXVkaW9E
ZXZpY2VVSURzLCBWZWN0b3I8U3RyaW5nPiYmIHZpZGVvRGV2aWNlVUlEcywgU3RyaW5nJiYgZGV2
aWNlSURIYXNoU2FsdCkKK1JlZjxVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5PiBVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Y3JlYXRlUmVxdWVzdCh1aW50NjRf
dCB1c2VyTWVkaWFJRCwgdWludDY0X3QgbWFpbkZyYW1lSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFJl
ZjxTZWN1cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFNlY3VyaXR5
T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiYgYXVkaW9E
ZXZpY2VVSURzLCBWZWN0b3I8U3RyaW5nPiYmIHZpZGVvRGV2aWNlVUlEcywgU3RyaW5nJiYgZGV2
aWNlSURIYXNoU2FsdCkKIHsKICAgICBhdXRvIHJlcXVlc3QgPSBVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdFByb3h5OjpjcmVhdGUoKnRoaXMsIHVzZXJNZWRpYUlELCBtYWluRnJhbWVJRCwgZnJh
bWVJRCwgV1RGTW92ZSh1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiksIFdURk1vdmUodG9wTGV2ZWxE
b2N1bWVudE9yaWdpbiksIFdURk1vdmUoYXVkaW9EZXZpY2VVSURzKSwgV1RGTW92ZSh2aWRlb0Rl
dmljZVVJRHMpLCBXVEZNb3ZlKGRldmljZUlESGFzaFNhbHQpKTsKICAgICBtX3BlbmRpbmdVc2Vy
TWVkaWFSZXF1ZXN0cy5hZGQodXNlck1lZGlhSUQsIHJlcXVlc3QucHRyKCkpOwpAQCAtOTQsMjUg
KzkzLDE4IEBAIHN0YXRpYyB1aW50NjRfdCB0b1dlYkNvcmUoVXNlck1lZGlhUGVybWkKICAgICBz
d2l0Y2ggKHJlYXNvbikgewogICAgIGNhc2UgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94
eTo6VXNlck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpOb0NvbnN0cmFpbnRzOgogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFVzZXJNZWRpYVJlcXVlc3Q6Ok1lZGlhQWNjZXNz
RGVuaWFsUmVhc29uOjpOb0NvbnN0cmFpbnRzKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFz
b246OlVzZXJNZWRpYURpc2FibGVkOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KFVzZXJNZWRpYVJlcXVlc3Q6Ok1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpVc2VyTWVkaWFE
aXNhYmxlZCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RQcm94eTo6VXNlck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpOb0NhcHR1cmVEZXZpY2Vz
OgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFVzZXJNZWRpYVJlcXVlc3Q6
Ok1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpOb0NhcHR1cmVEZXZpY2VzKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFB
Y2Nlc3NEZW5pYWxSZWFzb246OkludmFsaWRDb25zdHJhaW50OgogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KFVzZXJNZWRpYVJlcXVlc3Q6Ok1lZGlhQWNjZXNzRGVuaWFsUmVh
c29uOjpJbnZhbGlkQ29uc3RyYWludCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpI
YXJkd2FyZUVycm9yOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFVzZXJN
ZWRpYVJlcXVlc3Q6Ok1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpIYXJkd2FyZUVycm9yKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpV
c2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb246OlBlcm1pc3Npb25EZW5pZWQ6CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oVXNlck1lZGlhUmVxdWVzdDo6TWVkaWFBY2Nlc3NE
ZW5pYWxSZWFzb246OlBlcm1pc3Npb25EZW5pZWQpOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHk6OlVzZXJNZWRpYUFjY2Vzc0RlbmlhbFJl
YXNvbjo6T3RoZXJGYWlsdXJlOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KFVzZXJNZWRpYVJlcXVlc3Q6Ok1lZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpPdGhlckZhaWx1cmUp
OwotICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE3OCw3ICsxNzAsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
CiAgICAgbV9kZW5pZWRSZXF1ZXN0cy5jbGVhcigpOwogfQogCi1jb25zdCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5KiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eTo6c2VhcmNoRm9yR3JhbnRlZFJlcXVlc3QodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luLCBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbiwgYm9vbCBuZWVkc0F1ZGlv
LCBib29sIG5lZWRzVmlkZW8pIGNvbnN0Citjb25zdCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dFByb3h5KiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6c2VhcmNoRm9y
R3JhbnRlZFJlcXVlc3QodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHVz
ZXJNZWRpYURvY3VtZW50T3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1
bWVudE9yaWdpbiwgYm9vbCBuZWVkc0F1ZGlvLCBib29sIG5lZWRzVmlkZW8pIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcGFnZS5pc01lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjA3LDcgKzE5OSw3IEBAIGNvbnN0IFVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0UHJveHkqIFUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6d2FzUmVxdWVzdERlbmllZCh1aW50NjRfdCBt
YWluRnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYURvY3Vt
ZW50T3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxEb2N1bWVu
dE9yaWdpbiwgYm9vbCBuZWVkc0F1ZGlvLCBib29sIG5lZWRzVmlkZW8pCitib29sIFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXNSZXF1ZXN0RGVuaWVkKHVpbnQ2NF90
IG1haW5GcmFtZUlELCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhRG9jdW1lbnRPcmln
aW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luLCBib29sIG5l
ZWRzQXVkaW8sIGJvb2wgbmVlZHNWaWRlbykKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRlbmll
ZFJlcXVlc3QgOiBtX2RlbmllZFJlcXVlc3RzKSB7CiAgICAgICAgIGlmICghZGVuaWVkUmVxdWVz
dC51c2VyTWVkaWFEb2N1bWVudE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodXNlck1lZGlh
RG9jdW1lbnRPcmlnaW4pKQpAQCAtMjUzLDcgKzI0NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
bGxvd1JlcXVlc3QoVXNlck1lZGkKICAgICByZXF1ZXN0LmFsbG93KHJlcXVlc3QuYXVkaW9EZXZp
Y2VVSURzKCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiByZXF1ZXN0LmF1ZGlvRGV2aWNlVUlEcygp
WzBdLCByZXF1ZXN0LnZpZGVvRGV2aWNlVUlEcygpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogcmVx
dWVzdC52aWRlb0RldmljZVVJRHMoKVswXSk7CiB9CiAKLXZvaWQgVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHk6OnJlcXVlc3RVc2VyTWVkaWFQZXJtaXNzaW9uRm9yRnJhbWUo
dWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFJlZjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4sIGNvbnN0IFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludHMmIGF1ZGlvQ29uc3RyYWludHMsIGNvbnN0IFdlYkNvcmU6Ok1lZGlhQ29uc3Ry
YWludHMmIHZpZGVvQ29uc3RyYWludHMpCit2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5OjpyZXF1ZXN0VXNlck1lZGlhUGVybWlzc2lvbkZvckZyYW1lKHVpbnQ2NF90
IHVzZXJNZWRpYUlELCB1aW50NjRfdCBmcmFtZUlELCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdXNl
ck1lZGlhRG9jdW1lbnRPcmlnaW4sIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB0b3BMZXZlbERvY3Vt
ZW50T3JpZ2luLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiBhdWRpb0NvbnN0cmFpbnRzLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJiB2aWRlb0NvbnN0cmFpbnRzKQogewogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAgICAgaWYgKCFVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCku
Y2FwdHVyZUVuYWJsZWQoKSkgewpAQCAtMjYyLDE0ICsyNTQsMTQgQEAgdm9pZCBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6SW52YWxpZENvbnN0cmFpbnRzSGFu
ZGxlciBpbnZhbGlkSGFuZGxlciA9IFt0aGlzLCB1c2VyTWVkaWFJRF0oY29uc3QgU3RyaW5nJiBp
bnZhbGlkQ29uc3RyYWludCkgeworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OkludmFs
aWRDb25zdHJhaW50c0hhbmRsZXIgaW52YWxpZEhhbmRsZXIgPSBbdGhpcywgdXNlck1lZGlhSURd
KGNvbnN0IFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpIHsKICAgICAgICAgaWYgKCFtX3BhZ2Uu
aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGRlbnlSZXF1ZXN0KHVz
ZXJNZWRpYUlELCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nl
c3NEZW5pYWxSZWFzb246OkludmFsaWRDb25zdHJhaW50LCBpbnZhbGlkQ29uc3RyYWludCk7CiAg
ICAgfTsKIAotICAgIFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OlZhbGlkQ29u
c3RyYWludHNIYW5kbGVyIHZhbGlkSGFuZGxlciA9IFt0aGlzLCB1c2VyTWVkaWFJRCwgZnJhbWVJ
RCwgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4gPSB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbi5jb3B5
UmVmKCksIHRvcExldmVsRG9jdW1lbnRPcmlnaW4gPSB0b3BMZXZlbERvY3VtZW50T3JpZ2luLmNv
cHlSZWYoKV0oVmVjdG9yPFN0cmluZz4mJiBhdWRpb0RldmljZVVJRHMsIFZlY3RvcjxTdHJpbmc+
JiYgdmlkZW9EZXZpY2VVSURzLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpIG11
dGFibGUgeworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OlZhbGlkQ29uc3RyYWludHNI
YW5kbGVyIHZhbGlkSGFuZGxlciA9IFt0aGlzLCB1c2VyTWVkaWFJRCwgZnJhbWVJRCwgdXNlck1l
ZGlhRG9jdW1lbnRPcmlnaW4gPSB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbi5jb3B5UmVmKCksIHRv
cExldmVsRG9jdW1lbnRPcmlnaW4gPSB0b3BMZXZlbERvY3VtZW50T3JpZ2luLmNvcHlSZWYoKV0o
VmVjdG9yPFN0cmluZz4mJiBhdWRpb0RldmljZVVJRHMsIFZlY3RvcjxTdHJpbmc+JiYgdmlkZW9E
ZXZpY2VVSURzLCBTdHJpbmcmJiBkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpIG11dGFibGUgewog
ICAgICAgICBpZiAoIW1fcGFnZS5pc1ZhbGlkKCkgfHwgIW1fcGFnZS5tYWluRnJhbWUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIApAQCAtMzE4LDcgKzMxMCw3IEBAIHZvaWQgVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHIKICAgICAgICAgICAgIHVzZXJNZWRpYUFjY2Vzc1dhc0Rl
bmllZCh1c2VyTWVkaWFJRCwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1l
ZGlhQWNjZXNzRGVuaWFsUmVhc29uOjpVc2VyTWVkaWFEaXNhYmxlZCk7CiAgICAgfTsKIAotICAg
IGF1dG8gaGF2ZURldmljZVNhbHRIYW5kbGVyID0gW3RoaXMsIHZhbGlkSGFuZGxlciA9IFdURk1v
dmUodmFsaWRIYW5kbGVyKSwgaW52YWxpZEhhbmRsZXIgPSBXVEZNb3ZlKGludmFsaWRIYW5kbGVy
KSwgYXVkaW9Db25zdHJhaW50cyA9IFdlYkNvcmU6Ok1lZGlhQ29uc3RyYWludHMoYXVkaW9Db25z
dHJhaW50cyksIHZpZGVvQ29uc3RyYWludHMgPSBXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzKHZp
ZGVvQ29uc3RyYWludHMpXSh1aW50NjRfdCB1c2VyTWVkaWFJRCwgU3RyaW5nJiYgZGV2aWNlSWRl
bnRpZmllckhhc2hTYWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpIG11dGFibGUg
eworICAgIGF1dG8gaGF2ZURldmljZVNhbHRIYW5kbGVyID0gW3RoaXMsIHZhbGlkSGFuZGxlciA9
IFdURk1vdmUodmFsaWRIYW5kbGVyKSwgaW52YWxpZEhhbmRsZXIgPSBXVEZNb3ZlKGludmFsaWRI
YW5kbGVyKSwgYXVkaW9Db25zdHJhaW50cyA9IE1lZGlhQ29uc3RyYWludHMoYXVkaW9Db25zdHJh
aW50cyksIHZpZGVvQ29uc3RyYWludHMgPSBNZWRpYUNvbnN0cmFpbnRzKHZpZGVvQ29uc3RyYWlu
dHMpXSh1aW50NjRfdCB1c2VyTWVkaWFJRCwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpIG11dGFibGUgewogCiAgICAgICAg
IGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ0RldmljZVJlcXVlc3RzLnRha2UodXNlck1lZGlhSUQp
OwogICAgICAgICBpZiAoIXJlcXVlc3QpCkBAIC0zNDcsNyArMzM5LDcgQEAgdm9pZCBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKLXZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmdldFVzZXJN
ZWRpYVBlcm1pc3Npb25JbmZvKHVpbnQ2NF90IHVzZXJNZWRpYUlELCB1aW50NjRfdCBmcmFtZUlE
LCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eTo6Q29tcGxldGlvbkhhbmRsZXImJiBoYW5k
bGVyLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgdXNlck1lZGlhRG9jdW1lbnRPcmln
aW4sIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJiB0b3BMZXZlbERvY3VtZW50T3JpZ2lu
KQordm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Z2V0VXNlck1l
ZGlhUGVybWlzc2lvbkluZm8odWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQs
IFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5OjpDb21wbGV0aW9uSGFuZGxlciYmIGhhbmRs
ZXIsIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgUmVmPFNl
Y3VyaXR5T3JpZ2luPiYmIHRvcExldmVsRG9jdW1lbnRPcmlnaW4pCiB7CiAgICAgYXV0byB1c2Vy
TWVkaWFPcmlnaW4gPSBBUEk6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXNlck1lZGlhRG9jdW1l
bnRPcmlnaW4uZ2V0KCkpOwogICAgIGF1dG8gdG9wTGV2ZWxPcmlnaW4gPSBBUEk6OlNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUodG9wTGV2ZWxEb2N1bWVudE9yaWdpbi5nZXQoKSk7CkBAIC0zNjAsNyAr
MzUyLDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcgogfSAKICNl
bmRpZgogCi12b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjplbnVt
ZXJhdGVNZWRpYURldmljZXNGb3JGcmFtZSh1aW50NjRfdCB1c2VyTWVkaWFJRCwgdWludDY0X3Qg
ZnJhbWVJRCwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHVzZXJNZWRpYURvY3VtZW50
T3JpZ2luLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wTGV2ZWxEb2N1bWVudE9yaWdpbikKK3Zv
aWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OmVudW1lcmF0ZU1lZGlh
RGV2aWNlc0ZvckZyYW1lKHVpbnQ2NF90IHVzZXJNZWRpYUlELCB1aW50NjRfdCBmcmFtZUlELCBS
ZWY8U2VjdXJpdHlPcmlnaW4+JiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIFJlZjxTZWN1cml0
eU9yaWdpbj4mJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKQogewogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCiAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzXSh1aW50NjRfdCB1c2Vy
TWVkaWFJRCwgU3RyaW5nJiYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0LCBib29sIG9yaWdpbkhh
c1BlcnNpc3RlbnRBY2Nlc3MpIHsKQEAgLTM5MSwyNSArMzgzLDQyIEBAIHZvaWQgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHIKICAgICAvLyBFbmFibGUvZGlzYWJsZSB0aGUgbW9j
ayBjYXB0dXJlIGRldmljZXMgZm9yIHRoZSBVSSBwcm9jZXNzIGFzIHBlciB0aGUgV2ViQ29yZSBw
cmVmZXJlbmNlcy4gTm90ZSB0aGF0CiAgICAgLy8gdGhpcyBpcyBhIG5vb3AgaWYgdGhlIHByZWZl
cmVuY2UgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIHdhcyBjYWxsZWQu
CiAgICAgYm9vbCBtb2NrRGV2aWNlc0VuYWJsZWQgPSBtX3BhZ2UucHJlZmVyZW5jZXMoKS5tb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkKCk7Ci0gICAgV2ViQ29yZTo6TW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChtb2Nr
RGV2aWNlc0VuYWJsZWQpOworICAgIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQobW9ja0RldmljZXNFbmFibGVkKTsK
ICNlbmRpZgogfQogCi12b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5
OjpjYXB0dXJlU3RhdGVDaGFuZ2VkKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVG
bGFncyBvbGRTdGF0ZSwgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG5l
d1N0YXRlKQordm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6Y2Fw
dHVyZVN0YXRlQ2hhbmdlZChNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgb2xkU3RhdGUs
IE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBuZXdTdGF0ZSkKIHsKICAgICBpZiAoIW1f
cGFnZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCi0gICAgYm9vbCB3YXNDYXB0dXJpbmdBdWRpbyA9IG9sZFN0YXRlICYgV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6QXVkaW9DYXB0dXJlTWFzazsKLSAgICBib29sIHdhc0NhcHR1cmluZ1ZpZGVv
ID0gb2xkU3RhdGUgJiBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpWaWRlb0NhcHR1cmVNYXNrOwot
ICAgIGJvb2wgaXNDYXB0dXJpbmdBdWRpbyA9IG5ld1N0YXRlICYgV2ViQ29yZTo6TWVkaWFQcm9k
dWNlcjo6QXVkaW9DYXB0dXJlTWFzazsKLSAgICBib29sIGlzQ2FwdHVyaW5nVmlkZW8gPSBuZXdT
dGF0ZSAmIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OlZpZGVvQ2FwdHVyZU1hc2s7CisgICAgYm9v
bCB3YXNDYXB0dXJpbmdBdWRpbyA9IG9sZFN0YXRlICYgTWVkaWFQcm9kdWNlcjo6QXVkaW9DYXB0
dXJlTWFzazsKKyAgICBib29sIHdhc0NhcHR1cmluZ1ZpZGVvID0gb2xkU3RhdGUgJiBNZWRpYVBy
b2R1Y2VyOjpWaWRlb0NhcHR1cmVNYXNrOworICAgIGJvb2wgaXNDYXB0dXJpbmdBdWRpbyA9IG5l
d1N0YXRlICYgTWVkaWFQcm9kdWNlcjo6QXVkaW9DYXB0dXJlTWFzazsKKyAgICBib29sIGlzQ2Fw
dHVyaW5nVmlkZW8gPSBuZXdTdGF0ZSAmIE1lZGlhUHJvZHVjZXI6OlZpZGVvQ2FwdHVyZU1hc2s7
CiAKICAgICBpZiAoKHdhc0NhcHR1cmluZ0F1ZGlvICYmICFpc0NhcHR1cmluZ0F1ZGlvKSB8fCAo
d2FzQ2FwdHVyaW5nVmlkZW8gJiYgIWlzQ2FwdHVyaW5nVmlkZW8pKQogICAgICAgICBVc2VyTWVk
aWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZW5kZWRDYXB0dXJlU2Vzc2lvbigqdGhpcyk7
CiAgICAgaWYgKCghd2FzQ2FwdHVyaW5nQXVkaW8gJiYgaXNDYXB0dXJpbmdBdWRpbykgfHwgKCF3
YXNDYXB0dXJpbmdWaWRlbyAmJiBpc0NhcHR1cmluZ1ZpZGVvKSkKICAgICAgICAgVXNlck1lZGlh
UHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnN0YXJ0ZWRDYXB0dXJlU2Vzc2lvbigqdGhpcyk7
CisKKyAgICBpZiAobV9jYXB0dXJlU3RhdGUgPT0gKG5ld1N0YXRlICYgYWN0aXZlQ2FwdHVyZU1h
c2spKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhcHR1cmVTdGF0ZSA9IG5ld1N0YXRlICYg
YWN0aXZlQ2FwdHVyZU1hc2s7CisKKyAgICBTZWNvbmRzIGludGVydmFsOworICAgIGlmIChtX2Nh
cHR1cmVTdGF0ZSAmIGFjdGl2ZUNhcHR1cmVNYXNrKQorICAgICAgICBpbnRlcnZhbCA9IFNlY29u
ZHM6OmZyb21Ib3VycyhtX3BhZ2UucHJlZmVyZW5jZXMoKS5sb25nUnVubmluZ01lZGlhQ2FwdHVy
ZVN0cmVhbVJlcHJvbXB0SW50ZXJ2YWxJbkhvdXJzKCkpOworICAgIGVsc2UKKyAgICAgICAgaW50
ZXJ2YWwgPSBTZWNvbmRzOjpmcm9tTWludXRlcyhtX3BhZ2UucHJlZmVyZW5jZXMoKS5pbmFjdGl2
ZU1lZGlhQ2FwdHVyZVN0ZWFtUmVwcm9tcHRJbnRlcnZhbEluTWludXRlcygpKTsKKworICAgIGlm
IChpbnRlcnZhbCA9PSBtX2N1cnJlbnRXYXRjaGRvZ0ludGVydmFsKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2N1cnJlbnRXYXRjaGRvZ0ludGVydmFsID0gaW50ZXJ2YWw7CisgICAgbV93YXRj
aGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChtX2N1cnJlbnRXYXRjaGRvZ0ludGVydmFsKTsKICNlbmRp
ZgogfQogCkBAIC00MjAsNCArNDI5LDExIEBAIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHIKICAgICBtX3ByZWdyYW50ZWRSZXF1ZXN0cy5jbGVhcigpOwogfQogCit2b2lk
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp3YXRjaGRvZ1RpbWVyRmly
ZWQoKQoreworICAgIG1fZ3JhbnRlZFJlcXVlc3RzLmNsZWFyKCk7CisgICAgbV9wcmVncmFudGVk
UmVxdWVzdHMuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRXYXRjaGRvZ0ludGVydmFsID0gMF9zOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuaAkocmV2aXNpb24gMjIzOTU2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NzUsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0VXNlck1lZGlhUGVybWlzc2lvbklu
Zm8odWludDY0X3QgdXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFVzZXJNZWRpYVBlcm1p
c3Npb25DaGVja1Byb3h5OjpDb21wbGV0aW9uSGFuZGxlciYmLCBSZWY8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+JiYgdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIFJlZjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4mJiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKTsKIAogICAgIHZvaWQgc3luY1dpdGhX
ZWJDb3JlUHJlZnMoKSBjb25zdDsKKyAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOwogCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJv
eHk+PiBtX3BlbmRpbmdVc2VyTWVkaWFSZXF1ZXN0czsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBS
ZWY8VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHk+PiBtX3BlbmRpbmdEZXZpY2VSZXF1ZXN0
czsKQEAgLTk1LDYgKzk2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNWaWRlb0Rlbmll
ZDsKICAgICB9OwogICAgIFZlY3RvcjxEZW5pZWRSZXF1ZXN0PiBtX2RlbmllZFJlcXVlc3RzOwor
CisgICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1fY2FwdHVyZVN0
YXRlIHsgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nIH07CisgICAgUnVuTG9v
cDo6VGltZXI8VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk+IG1fd2F0Y2hk
b2dUaW1lcjsKKyAgICBTZWNvbmRzIG1fY3VycmVudFdhdGNoZG9nSW50ZXJ2YWw7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyMjM5NTYpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY1MCw2ICsxNjUwLDE2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhQ2FwdHVyZVJlcXVp
cmUKICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXB0dXJlUmVxdWly
ZXNTZWN1cmVDb25uZWN0aW9uKCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldEluYWN0aXZl
TWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVydmFsSW5NaW51dGVzKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYsIGRvdWJsZSBpbnRlcnZhbCkKK3sKKyAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRJbmFjdGl2ZU1lZGlhQ2FwdHVyZVN0ZWFtUmVwcm9tcHRJbnRlcnZhbElu
TWludXRlcyhpbnRlcnZhbCk7Cit9CisKK2RvdWJsZSBXS1ByZWZlcmVuY2VzR2V0SW5hY3RpdmVN
ZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXMoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
aW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXMoKTsKK30K
Kwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRGZXRjaEFQSUVuYWJsZWQoZmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHJldmlzaW9u
IDIyMzk1NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw2ICs0NDEsMTAgQEAgV0tfRVhQT1JU
IGJvb2wgV0tQcmVmZXJlbmNlc0dldEVudW1lcmF0aQogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJl
bmNlc1NldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihXS1ByZWZlcmVuY2Vz
UmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oV0tQcmVmZXJlbmNlc1JlZik7CiAKKy8vIERlZmF1bHRz
IHRvIDEgbWludXRlIG9uIGlPUywgMTAgbWludXRlcyBlbHNld2hlcmUKK1dLX0VYUE9SVCB2b2lk
IFdLUHJlZmVyZW5jZXNTZXRJbmFjdGl2ZU1lZGlhQ2FwdHVyZVN0ZWFtUmVwcm9tcHRJbnRlcnZh
bEluTWludXRlcyhXS1ByZWZlcmVuY2VzUmVmLCBkb3VibGUpOworV0tfRVhQT1JUIGRvdWJsZSBX
S1ByZWZlcmVuY2VzR2V0SW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJ
bk1pbnV0ZXMoV0tQcmVmZXJlbmNlc1JlZik7CisKIC8vIERlZmF1bHRzIHRvIGZhbHNlCiBXS19F
WFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmV0Y2hBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZmxhZyk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RmV0Y2hBUElF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDIyMzk1NikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MTIsNiArNjEyLDE2IEBAIC0gKHZvaWQpX3NldE1lZGlhQ2FwdHVyZVJl
cXVpcmVzU2VjdXJlQ28KICAgICBfcHJlZmVyZW5jZXMtPnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVz
U2VjdXJlQ29ubmVjdGlvbihyZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24pOwogfQogCistIChkb3Vi
bGUpX2luYWN0aXZlTWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVydmFsSW5NaW51dGVzCit7
CisgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+aW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJv
bXB0SW50ZXJ2YWxJbk1pbnV0ZXMoKTsKK30KKworLSAodm9pZClfc2V0SW5hY3RpdmVNZWRpYUNh
cHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXM6KGRvdWJsZSlpbnRlcnZhbAorewor
ICAgIF9wcmVmZXJlbmNlcy0+c2V0SW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50
ZXJ2YWxJbk1pbnV0ZXMoaW50ZXJ2YWwpOworfQorCiAtIChCT09MKV9lbnVtZXJhdGluZ0FsbE5l
dHdvcmtJbnRlcmZhY2VzRW5hYmxlZAogewogICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPmVudW1l
cmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aAkocmV2aXNpb24gMjIzOTU2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBA
QCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLSmF2YVNjCiBAcHJvcGVydHkgKG5v
bmF0b21pYywgc2V0dGVyPV9zZXRFbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxl
ZDopIEJPT0wgX2VudW1lcmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6KSBCT09MIF9pY2VDYW5k
aWRhdGVGaWx0ZXJpbmdFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2Vi
UlRDTGVnYWN5QVBJRW5hYmxlZDopIEJPT0wgX3dlYlJUQ0xlZ2FjeUFQSUVuYWJsZWQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOworQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0SW5hY3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJ
bk1pbnV0ZXM6KSBkb3VibGUgX2luYWN0aXZlTWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVy
dmFsSW5NaW51dGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkOikgQk9PTCBfamF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMyksIGlvcygxMS4wKSk7CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgc2V0dGVyPV9zZXRET01QYXN0ZUFsbG93ZWQ6KSBCT09MIF9kb21QYXN0ZUFsbG93
ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOwpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIz
OTY2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTctMTAtMjUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgW01lZGlhU3RyZWFtXSBDbGVhciBjYWNoZWQgZ1VNIHByb21wdCBzdGF0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4NzU0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMjc0MjM1Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgbmV3IHRlc3QKKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0L0dldFVzZXJNZWRpYVJlcHJvbXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KC1bR2V0VXNlck1lZGlhUmVwcm9tcHRVSURlbGVnYXRlIF93ZWJWaWV3OnJlcXVlc3RVc2VyTWVk
aWFBdXRob3JpemF0aW9uRm9yRGV2aWNlczp1cmw6bWFpbkZyYW1lVVJMOmRlY2lzaW9uSGFuZGxl
cjpdKToKKyAgICAgICAgKC1bR2V0VXNlck1lZGlhUmVwcm9tcHRVSURlbGVnYXRlIF93ZWJWaWV3
OmNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvclVSTDptYWluRnJhbWVVUkw6ZnJhbWVJZGVudGlm
aWVyOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvZ2V0VXNlck1lZGlhLmh0bWw6
CisKIDIwMTctMTAtMjUgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdXBwb3J0IHRoZSBUYWlsQmVuY2g5MDAwIGJlbmNobWFyayBpbiBydW4tanNjLWJl
bmNobWFya3MKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjM5NTYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCQkwNzk5QzM0QjFFQkEzMzAx
MDAzQjc1MzIgLyogZGlzYWJsZUdldFVzZXJNZWRpYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTlDMzRBMUVCQTMyRjQwMDNCNzUz
MiAvKiBkaXNhYmxlR2V0VXNlck1lZGlhLmh0bWwgKi87IH07CiAJCTA3QzA0NkNBMUU0MjYyQTgw
MDcyMDFFNyAvKiBDQVJpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDdDMDQ2QzkxRTQyNTczRTAwNzIwMUU3IC8qIENBUmluZ0J1ZmZl
ci5jcHAgKi87IH07CiAJCTA3Q0UxQ0YzMUYwNkE3RTAwMEJGODlGNSAvKiBHZXRVc2VyTWVkaWFO
YXZpZ2F0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDdDRTFDRjIxRjA2QTdFMDAwQkY4OUY1IC8qIEdldFVzZXJNZWRpYU5hdmlnYXRpb24ubW0g
Ki87IH07CisJCTA3RTQ5OTkxMUY5RTU2REYwMDJGMUVGMyAvKiBHZXRVc2VyTWVkaWFSZXByb21w
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTQ5
OTkwMUY5RTU2QTEwMDJGMUVGMyAvKiBHZXRVc2VyTWVkaWFSZXByb21wdC5tbSAqLzsgfTsKIAkJ
MEYxMzlFNzcxQTQyM0E1QjAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzUxQTQyM0E1MzAwRjU5MEY1
IC8qIFdlYWtPYmpDUHRyLm1tICovOyB9OwogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyog
UGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZv
cm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tICovOyB9OwpAQCAtMTA1NCw2ICsxMDU1LDcgQEAKIAkJMDc5OUMzNEExRUJBMzJGNDAw
M0I3NTMyIC8qIGRpc2FibGVHZXRVc2VyTWVkaWEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9IGRpc2FibGVHZXRVc2VyTWVkaWEuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdDMDQ2QzkxRTQyNTczRTAwNzIwMUU3IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQVJpbmdCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwN0NFMUNGMjFGMDZBN0UwMDBCRjg5RjUgLyogR2V0VXNl
ck1lZGlhTmF2aWdhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEdldFVzZXJNZWRpYU5hdmlnYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3RTQ5OTkwMUY5RTU2QTEwMDJGMUVGMyAvKiBHZXRVc2VyTWVkaWFSZXByb21wdC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdldFVzZXJNZWRpYVJlcHJv
bXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VERUZBQzFFQjk0MDBDMDBE
NDMyOTIgLyogVXNlck1lZGlhRGlzYWJsZWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBVc2VyTWVkaWFEaXNhYmxlZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEJDRDgzMzQxNDg1N0NFNDAwRUEyMDAzIC8qIEhhc2hNYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBCQ0Q4NTY5MTQ4NUM5OEIwMEVBMjAwMyAvKiBTZXRGb3JTY29wZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXRGb3JTY29wZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDM1LDYgKzI0MzcsNyBAQAogCQlCQzkw
OTY0MTEyNTU2MTYwMDAwODM3NTYgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwN0U0OTk5MDFGOUU1NkExMDAyRjFFRjMgLyogR2V0VXNl
ck1lZGlhUmVwcm9tcHQubW0gKi8sCiAJCQkJMEYxMzlFNzQxQTQyM0E0NjAwRjU5MEY1IC8qIGNv
Y29hICovLAogCQkJCUMwQzVEM0JCMTQ1OThCNkYwMEE4MDJBNiAvKiBtYWMgKi8sCiAJCQkJQkM5
MDk3N0IxMjU1NzFBRTAwMDgzNzU2IC8qIFJlc291cmNlcyAqLywKQEAgLTMyNzEsNiArMzI3NCw3
IEBACiAJCQkJNDYzOTdCOTUxREMyQzg1MDAwOUE3OEFFIC8qIERPTU5vZGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VCQzFBNDExQTdFMDA0NDdDNEMgLyogRE9NTm9kZUZyb21KU09iamVj
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJEMUE0MTFBN0UwMDQ0N0M0QyAvKiBET01S
YW5nZU9mU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMDdFNDk5OTExRjlFNTZERjAwMkYx
RUYzIC8qIEdldFVzZXJNZWRpYVJlcHJvbXB0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdF
RUMxQTQxMUFFNjAwNDQ3QzRDIC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RUVEMUE0MTFBRTYwMDQ0N0M0QyAvKiBET01XaW5kb3dFeHRlbnNp
b25Ob0NhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjIzMUE0MTFBRjYwMDQ0N0M0
QyAvKiBEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQvR2V0VXNlck1lZGlhUmVwcm9tcHQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvR2V0VXNlck1lZGlhUmVwcm9tcHQubW0JKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvR2V0VXNlck1l
ZGlhUmVwcm9tcHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9y
dCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dL
UHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaD4KKworc3RhdGljIGJvb2wgd2FzUHJvbXB0ZWQgPSBmYWxzZTsKKworQGludGVy
ZmFjZSBHZXRVc2VyTWVkaWFSZXByb21wdFVJRGVsZWdhdGUgOiBOU09iamVjdDxXS1VJRGVsZWdh
dGU+CistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJlcXVlc3RVc2VyTWVk
aWFBdXRob3JpemF0aW9uRm9yRGV2aWNlczooX1dLQ2FwdHVyZURldmljZXMpZGV2aWNlcyB1cmw6
KE5TVVJMICopdXJsIG1haW5GcmFtZVVSTDooTlNVUkwgKiltYWluRnJhbWVVUkwgZGVjaXNpb25I
YW5kbGVyOih2b2lkICheKShCT09MIGF1dGhvcml6ZWQpKWRlY2lzaW9uSGFuZGxlcjsKKy0gKHZv
aWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9u
Rm9yVVJMOihOU1VSTCAqKXVybCBtYWluRnJhbWVVUkw6KE5TVVJMICopbWFpbkZyYW1lVVJMIGZy
YW1lSWRlbnRpZmllcjooTlNVSW50ZWdlcilmcmFtZUlkZW50aWZpZXIgZGVjaXNpb25IYW5kbGVy
Oih2b2lkICheKShOU1N0cmluZyAqc2FsdCwgQk9PTCBhdXRob3JpemVkKSlkZWNpc2lvbkhhbmRs
ZXI7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBHZXRVc2VyTWVkaWFSZXByb21wdFVJRGVsZWdh
dGUKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcmVxdWVzdFVzZXJNZWRp
YUF1dGhvcml6YXRpb25Gb3JEZXZpY2VzOihfV0tDYXB0dXJlRGV2aWNlcylkZXZpY2VzIHVybDoo
TlNVUkwgKil1cmwgbWFpbkZyYW1lVVJMOihOU1VSTCAqKW1haW5GcmFtZVVSTCBkZWNpc2lvbkhh
bmRsZXI6KHZvaWQgKF4pKEJPT0wgYXV0aG9yaXplZCkpZGVjaXNpb25IYW5kbGVyCit7CisgICAg
d2FzUHJvbXB0ZWQgPSB0cnVlOworICAgIGRlY2lzaW9uSGFuZGxlcihZRVMpOworfQorCistICh2
b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNoZWNrVXNlck1lZGlhUGVybWlzc2lv
bkZvclVSTDooTlNVUkwgKil1cmwgbWFpbkZyYW1lVVJMOihOU1VSTCAqKW1haW5GcmFtZVVSTCBm
cmFtZUlkZW50aWZpZXI6KE5TVUludGVnZXIpZnJhbWVJZGVudGlmaWVyIGRlY2lzaW9uSGFuZGxl
cjoodm9pZCAoXikoTlNTdHJpbmcgKnNhbHQsIEJPT0wgYXV0aG9yaXplZCkpZGVjaXNpb25IYW5k
bGVyCit7CisgICAgZGVjaXNpb25IYW5kbGVyKEAiMHg5ODc2NTQzMjEiLCBZRVMpOworfQorQGVu
ZAorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV2ViS2l0MiwgR2V0VXNlck1l
ZGlhUmVwcm9tcHQpCit7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHByb2Nlc3NQb29sQ29u
ZmlnID0gYWRvcHROUyhbW19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc107Cisg
ICAgcHJlZmVyZW5jZXMuX21lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiA9IE5P
OworICAgIHByZWZlcmVuY2VzLl9tZWRpYURldmljZXNFbmFibGVkID0gWUVTOworICAgIHByZWZl
cmVuY2VzLl9tb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gWUVTOworICAgIGF1dG8gd2ViVmll
dyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgcHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlnLmdldCgpXTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW0dldFVzZXJNZWRpYVJlcHJvbXB0VUlEZWxlZ2F0ZSBhbGxvY10gaW5pdF0p
OworICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgd2FzUHJv
bXB0ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImdldFVzZXJN
ZWRpYSJdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmd2FzUHJvbXB0ZWQpOworCisg
ICAgYXV0byByZXN1bHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
aGF2ZVN0cmVhbSgpIl07CisgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzdG9wKCkiXTsKKyAg
ICByZXN1bHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaGF2ZVN0
cmVhbSgpIl07CisgICAgRVhQRUNUX0ZBTFNFKFtyZXN1bHQgYm9vbFZhbHVlXSk7CisKKyAgICB3
YXNQcm9tcHRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJwcm9tcHRGb3JDYXB0dXJlKCkiXTsKKyAgICByZXN1bHQgPSBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaGF2ZVN0cmVhbSgpIl07CisgICAgRVhQRUNUX1RS
VUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfRkFMU0Uod2FzUHJvbXB0ZWQpOwor
CisgICAgcHJlZmVyZW5jZXMuX2luYWN0aXZlTWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVy
dmFsSW5NaW51dGVzID0gLjUgLyA2MDsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAic3RvcCgpIl07CisgICAgcmVzdWx0ID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImhhdmVTdHJlYW0oKSJdOworICAgIEVYUEVDVF9GQUxTRShbcmVz
dWx0IGJvb2xWYWx1ZV0pOworCisgICAgLy8gU2xlZXAgbG9uZyBlbm91Z2ggZm9yIHRoZSByZXBy
b21wdCB0aW1lciB0byBmaXJlIGFuZCBjbGVhciBjYWNoZWQgc3RhdGUuCisgICAgVXRpbDo6c2xl
ZXAoMSk7CisKKyAgICB3YXNQcm9tcHRlZCA9IGZhbHNlOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwcm9tcHRGb3JDYXB0dXJlKCkiXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJndhc1Byb21wdGVkKTsKKyAgICByZXN1bHQgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaGF2ZVN0cmVhbSgpIl07CisgICAgRVhQRUNU
X1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFdLX0FQ
SV9FTkFCTEVECkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9nZXRVc2Vy
TWVkaWEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9nZXRVc2VyTWVkaWEuaHRtbAkocmV2aXNpb24gMjIzOTU2KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvZ2V0VXNlck1lZGlhLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTYgKzEsNDggQEAKLTxzY3JpcHQ+Ci0gICAgZnVuY3Rpb24gZ290VXNlck1lZGlhKG1lZGlhU3Ry
ZWFtKQotICAgIHsKLSAgICAgICAgY29uc29sZS5sb2coIkdvdCB1c2VyIG1lZGlhIik7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gdXNlck1lZGlhRXJyb3IoZXJyb3IpCi0gICAgewotICAgICAgICBj
b25zb2xlLmxvZyhlcnJvcik7Ci0gICAgfQotCi0gICAgdmFyIGNvbnN0cmFpbnRzID0geyBhdWRp
bzogZmFsc2UsIHZpZGVvOiB0cnVlfTsKLSAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVz
ZXJNZWRpYShjb25zdHJhaW50cykKLSAgICAgICAgLnRoZW4oZ290VXNlck1lZGlhKS4KLSAgICAg
ICAgY2F0Y2godXNlck1lZGlhRXJyb3IpOwotPC9zY3JpcHQ+Cis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0PgorCisgICAgICAgICAgICBsZXQgc3Ry
ZWFtID0gbnVsbDsKKworICAgICAgICAgICAgZnVuY3Rpb24gcHJvbXB0Rm9yQ2FwdHVyZSgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRV
c2VyTWVkaWEoeyBhdWRpbzogZmFsc2UsIHZpZGVvOiB0cnVlIH0pCisgICAgICAgICAgICAgICAg
LnRoZW4oKHMpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBzOworICAgICAg
ICAgICAgICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IHN0cmVhbTsKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygiR290IHVzZXIgbWVkaWEiKTsKKyAgICAgICAgICAgICAgICB9
KQorICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGBGYWlsZWQg
d2l0aCBlcnJvcjogJHtlcnJvcn1gKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1
bmN0aW9uIHN0b3Aoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZXQgYWN0
aXZlVHJhY2tzID0gW107CisgICAgICAgICAgICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVh
Y2godHJhY2sgPT4geworICAgICAgICAgICAgICAgICAgICBpZiAoIWtpbmQgfHwgdHJhY2sua2lu
ZCA9PSBraW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUcmFja3Mu
cHVzaCh0cmFjayk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IWFjdGl2ZVRyYWNrcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGhhdmVTdHJl
YW0oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW0gIT09IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDxoZWFkPgorCisgICAg
PGJvZHkgb25sb2FkPSJwcm9tcHRGb3JDYXB0dXJlKCkiPgorICAgICAgICA8dmlkZW8gaWQ9InZp
ZGVvIiBjb250cm9scz48L3ZpZGVvPgorICAgICAgICA8cD4KKyAgICAgICAgPGJ1dHRvbiBvbmNs
aWNrPSJzdG9wKCkiPlN0b3A8L2J1dHRvbj4KKyAgICAgICAgPC9wPgorICAgIDwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325029</attachid>
            <date>2017-10-26 10:51:18 -0700</date>
            <delta_ts>2017-10-26 13:22:18 -0700</delta_ts>
            <desc>Test fix.</desc>
            <filename>reprompt_test_fix_patch_1.txt</filename>
            <type>text/plain</type>
            <size>3925</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDAyNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDE3LTEwLTI2ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFtNZWRpYVN0cmVhbV0gQ2xlYXIgY2FjaGVkIGdVTSBwcm9tcHQgc3Rh
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODc1
NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI3NDIzNTY+CisKKyAgICAgICAgVW5yZXZpZXdl
ZCwgZml4IGEgZmxha2V5IHRlc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9HZXRVc2VyTWVkaWFSZXByb21wdC5tbToKKyAgICAgICAgKC1bR2V0VXNlck1lZGlhUmVw
cm9tcHRUZXN0VmlldyBoYXZlU3RyZWFtOl0pOiBOZXcsIGNoZWNrIHNldmVyYWwgdGltZXMgZm9y
IGV4cGVjdGVkIHN0YXRlLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6IERvbid0IGFz
c3VtZSBzdHJlYW0gc3RhdGUgY2hhbmdlcyBpbiB0aGUgcGFnZSBpbW1lZGlhdGVseS4KKwogMjAx
Ny0xMC0yNiAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHNjb3BlZ3VhcmQgZnJvbSBwbGF0Zm9ybQpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvR2V0VXNlck1lZGlhUmVwcm9tcHQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvR2V0VXNlck1lZGlhUmVwcm9tcHQubW0J
KHJldmlzaW9uIDIyNDAyMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0dl
dFVzZXJNZWRpYVJlcHJvbXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyNiBAQCAt
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNoCiB9CiBAZW5kCiAKK0BpbnRl
cmZhY2UgR2V0VXNlck1lZGlhUmVwcm9tcHRUZXN0VmlldyA6IFRlc3RXS1dlYlZpZXcKKy0gKEJP
T0wpaGF2ZVN0cmVhbTooQk9PTClleHBlY3RlZDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEdl
dFVzZXJNZWRpYVJlcHJvbXB0VGVzdFZpZXcKKy0gKEJPT0wpaGF2ZVN0cmVhbTooQk9PTClleHBl
Y3RlZAoreworICAgIGludCByZXRyeUNvdW50ID0gMTA7CisgICAgd2hpbGUgKHJldHJ5Q291bnQt
LSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IFtzZWxmIHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJoYXZlU3RyZWFtKCkiXTsKKyAgICAgICAgaWYgKHJlc3VsdC5ib29sVmFsdWUgPT0g
ZXhwZWN0ZWQpCisgICAgICAgICAgICByZXR1cm4gWUVTOworCisgICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEwKTsKKyAgICB9CisKKyAgICByZXR1cm4gTk87Cit9CitA
ZW5kCisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChXZWJLaXQyLCBHZXRVc2Vy
TWVkaWFSZXByb21wdCkKQEAgLTY4LDcgKzg4LDcgQEAgVEVTVChXZWJLaXQyLCBHZXRVc2VyTWVk
aWFSZXByb21wdCkKICAgICBwcmVmZXJlbmNlcy5fbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVD
b25uZWN0aW9uID0gTk87CiAgICAgcHJlZmVyZW5jZXMuX21lZGlhRGV2aWNlc0VuYWJsZWQgPSBZ
RVM7CiAgICAgcHJlZmVyZW5jZXMuX21vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBZRVM7Ci0g
ICAgYXV0byB3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KSBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWcuZ2V0KCldOworICAg
IGF1dG8gd2ViVmlldyA9IFtbR2V0VXNlck1lZGlhUmVwcm9tcHRUZXN0VmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCkgcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmln
LmdldCgpXTsKICAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0dldFVzZXJNZWRpYVJlcHJv
bXB0VUlEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIHdlYlZpZXcuVUlEZWxlZ2F0ZSA9IGRl
bGVnYXRlLmdldCgpOwogCkBAIC03NiwyMyArOTYsMTkgQEAgVEVTVChXZWJLaXQyLCBHZXRVc2Vy
TWVkaWFSZXByb21wdCkKICAgICBbd2ViVmlldyBsb2FkVGVzdFBhZ2VOYW1lZDpAImdldFVzZXJN
ZWRpYSJdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmd2FzUHJvbXB0ZWQpOwogCi0g
ICAgYXV0byByZXN1bHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
aGF2ZVN0cmVhbSgpIl07Ci0gICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAg
ICBFWFBFQ1RfVFJVRShbd2ViVmlldyBoYXZlU3RyZWFtOllFU10pOwogCiAgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInN0b3AoKSJdOwotICAgIHJlc3VsdCA9IFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJoYXZlU3RyZWFtKCkiXTsKLSAg
ICBFWFBFQ1RfRkFMU0UoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfVFJVRShbd2Vi
VmlldyBoYXZlU3RyZWFtOk5PXSk7CiAKICAgICB3YXNQcm9tcHRlZCA9IGZhbHNlOwogICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwcm9tcHRGb3JDYXB0dXJlKCki
XTsKLSAgICByZXN1bHQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
aGF2ZVN0cmVhbSgpIl07Ci0gICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAg
ICBFWFBFQ1RfVFJVRShbd2ViVmlldyBoYXZlU3RyZWFtOllFU10pOwogICAgIEVYUEVDVF9GQUxT
RSh3YXNQcm9tcHRlZCk7CiAKICAgICBwcmVmZXJlbmNlcy5faW5hY3RpdmVNZWRpYUNhcHR1cmVT
dGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXMgPSAuNSAvIDYwOwogICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJzdG9wKCkiXTsKLSAgICByZXN1bHQgPSBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaGF2ZVN0cmVhbSgpIl07Ci0gICAg
RVhQRUNUX0ZBTFNFKFtyZXN1bHQgYm9vbFZhbHVlXSk7CisgICAgRVhQRUNUX1RSVUUoW3dlYlZp
ZXcgaGF2ZVN0cmVhbTpOT10pOwogCiAgICAgLy8gU2xlZXAgbG9uZyBlbm91Z2ggZm9yIHRoZSBy
ZXByb21wdCB0aW1lciB0byBmaXJlIGFuZCBjbGVhciBjYWNoZWQgc3RhdGUuCiAgICAgVXRpbDo6
c2xlZXAoMSk7CkBAIC0xMDAsOCArMTE2LDcgQEAgVEVTVChXZWJLaXQyLCBHZXRVc2VyTWVkaWFS
ZXByb21wdCkKICAgICB3YXNQcm9tcHRlZCA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwcm9tcHRGb3JDYXB0dXJlKCkiXTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJndhc1Byb21wdGVkKTsKLSAgICByZXN1bHQgPSBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaGF2ZVN0cmVhbSgpIl07Ci0gICAgRVhQRUNU
X1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBoYXZl
U3RyZWFtOllFU10pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>