<?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>228531</bug_id>
          
          <creation_ts>2021-07-27 21:30:35 -0700</creation_ts>
          <short_desc>Missing playing events when the ready state becomes HAVE_FUTURE_DATA/HAVE_ENOUGH_DATA from HAVE_METADATA state</short_desc>
          <delta_ts>2021-07-30 08:36:31 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tomoki Imai">tomoki.imai</reporter>
          <assigned_to name="Tomoki Imai">tomoki.imai</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>tomoki.imai</cc>
    
    <cc>toshio.ogasawara</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>Yousuke.Kimoto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779948</commentid>
    <comment_count>0</comment_count>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2021-07-27 21:30:35 -0700</bug_when>
    <thetext>According to the specification, we need to &quot;notify about playing&quot; in the following cases:
- If the previous ready state was HAVE_CURRENT_DATA or less, and the new ready state is HAVE_FUTURE_DATA, and it&apos;s not paused.
- If the new ready state is HAVE_ENOUGH_DATA, and it&apos;s eligible for autoplay
https://html.spec.whatwg.org/multipage/media.html#ready-states

But the current WebKit implementation doesn&apos;t fire playing event these scenarios, which may cause the web compatibility issues on some video services.

Reproduced in the following environments:
- GTK MiniBrowser r239946 on Ubuntu 20.04
- Safari Technology Preview 124 on macOS 10.15.7

Not reproduced in the following environments:
- Google Chrome 91.0.4472.164 on macOS 10.15.7
- Firefox 90.0.2 on macOS 10.15.7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779950</commentid>
    <comment_count>1</comment_count>
      <attachid>434400</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2021-07-27 21:35:50 -0700</bug_when>
    <thetext>Created attachment 434400
patch to fix the issue

This patch do the followings:
- Add the testcase for replicate the issue
- Add the missing playing events in setReadyStates
- Move &quot;notify about playing&quot; from setPlaying to playInternal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780051</commentid>
    <comment_count>2</comment_count>
      <attachid>434400</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-07-28 07:20:40 -0700</bug_when>
    <thetext>Comment on attachment 434400
patch to fix the issue

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        - According to the specification, scheduleNotifyAboutPlaying should be in  &quot;internal play steps&quot; and check the ready state. Checking ready state fixes the issue where playing event is fired twice.

Nit: it would be nice to wrap this line to make it possible to read without scrolling on a small screen

&gt; Source/WebCore/ChangeLog:22
&gt; +        (WebCore::HTMLMediaElement::setReadyState): Added missing scheduleNotifyAboutPlaying calls. Added do-while to make the implementation similar to the specification text
&gt; +        (WebCore::HTMLMediaElement::playInternal): Added scheduleNotifyAboutPlaying call. According to the specification, &quot;internal play steps&quot; should &quot;notify about playing&quot; when the ready state is HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA.

Ditto

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2442
&gt; +            if (!(m_readyState == HAVE_FUTURE_DATA || m_readyState == HAVE_ENOUGH_DATA))

This could be simplified to `if (m_readyState &lt; HAVE_FUTURE_DATA)`

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2446
&gt; +        if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA &amp;&amp; tracksAreReady) {

Can&apos;t you out here break if tracks aren&apos;t ready:

    if (!tracksAreReady)
        break;

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2455
&gt; +        if (m_readyState == HAVE_ENOUGH_DATA &amp;&amp; oldState &lt; HAVE_ENOUGH_DATA &amp;&amp; tracksAreReady) {

I think this would be easier to read if you break if the condition isn&apos;t true instead of indenting:

    if (m_readyState != HAVE_ENOUGH_DATA || oldState &gt;= HAVE_ENOUGH_DATA)
        break;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780301</commentid>
    <comment_count>3</comment_count>
      <attachid>434491</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2021-07-28 19:56:45 -0700</bug_when>
    <thetext>Created attachment 434491
patch

(In reply to Eric Carlson from comment #2)

Thanks for your review!
I reflected your comments except the last one to the patch.

Is it acceptable for you?

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2455
&gt; &gt; +        if (m_readyState == HAVE_ENOUGH_DATA &amp;&amp; oldState &lt; HAVE_ENOUGH_DATA &amp;&amp; tracksAreReady) {
&gt; 
&gt; I think this would be easier to read if you break if the condition isn&apos;t
&gt; true instead of indenting:
&gt; 
&gt;     if (m_readyState != HAVE_ENOUGH_DATA || oldState &gt;= HAVE_ENOUGH_DATA)
&gt;         break;

In my opinion, we should keep the current style even if there is an additional identing, because the current code reflects the specification structure.
I feel it&apos;s a bit confusing to apply the different style if condition from the other ones.

```
Apply the first applicable set of substeps from the following list:
- If the previous ready state was HAVE_CURRENT_DATA or less, and the new ready state is HAVE_FUTURE_DATA
  ...
- If the new ready state is HAVE_ENOUGH_DATA
  ...
```
https://html.spec.whatwg.org/multipage/media.html#ready-states



&gt; Comment on attachment 434400 [details]
&gt; patch to fix the issue
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=434400&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        - According to the specification, scheduleNotifyAboutPlaying should be in  &quot;internal play steps&quot; and check the ready state. Checking ready state fixes the issue where playing event is fired twice.
&gt; 
&gt; Nit: it would be nice to wrap this line to make it possible to read without
&gt; scrolling on a small screen

Agreed, fixed.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:22
&gt; &gt; +        (WebCore::HTMLMediaElement::setReadyState): Added missing scheduleNotifyAboutPlaying calls. Added do-while to make the implementation similar to the specification text
&gt; &gt; +        (WebCore::HTMLMediaElement::playInternal): Added scheduleNotifyAboutPlaying call. According to the specification, &quot;internal play steps&quot; should &quot;notify about playing&quot; when the ready state is HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA.
&gt; 
&gt; Ditto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2442
&gt; &gt; +            if (!(m_readyState == HAVE_FUTURE_DATA || m_readyState == HAVE_ENOUGH_DATA))
&gt; 
&gt; This could be simplified to `if (m_readyState &lt; HAVE_FUTURE_DATA)`

Thanks for your suggestion, applied. 
At first I thought the current code might be better because this if condition comes from the specification text. 
But rethinked that `if (m_readyState &lt; HAVE_FUTURE_DATA)` is better on the performance and there is no confusion because we have the comment about the specification.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2446
&gt; &gt; +        if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA &amp;&amp; tracksAreReady) {
&gt; 
&gt; Can&apos;t you out here break if tracks aren&apos;t ready:
&gt; 
&gt;     if (!tracksAreReady)
&gt;         break;

Thanks, moving tracksAreReady if condition sounds good. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780374</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-07-29 08:10:46 -0700</bug_when>
    <thetext>(In reply to Tomoki Imai from comment #3)
&gt; Created attachment 434491 [details]
&gt; patch
&gt; 
&gt; (In reply to Eric Carlson from comment #2)
&gt; 
&gt; Thanks for your review!
&gt; I reflected your comments except the last one to the patch.
&gt; 
&gt; Is it acceptable for you?
&gt; 
&gt; &gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2455
&gt; &gt; &gt; +        if (m_readyState == HAVE_ENOUGH_DATA &amp;&amp; oldState &lt; HAVE_ENOUGH_DATA &amp;&amp; tracksAreReady) {
&gt; &gt; 
&gt; &gt; I think this would be easier to read if you break if the condition isn&apos;t
&gt; &gt; true instead of indenting:
&gt; &gt; 
&gt; &gt;     if (m_readyState != HAVE_ENOUGH_DATA || oldState &gt;= HAVE_ENOUGH_DATA)
&gt; &gt;         break;
&gt; 
&gt; In my opinion, we should keep the current style even if there is an
&gt; additional identing, because the current code reflects the specification
&gt; structure.
&gt; I feel it&apos;s a bit confusing to apply the different style if condition from
&gt; the other ones.
&gt; 
&gt; ```
&gt; Apply the first applicable set of substeps from the following list:
&gt; - If the previous ready state was HAVE_CURRENT_DATA or less, and the new
&gt; ready state is HAVE_FUTURE_DATA
&gt;   ...
&gt; - If the new ready state is HAVE_ENOUGH_DATA
&gt;   ...
&gt; ```
&gt; https://html.spec.whatwg.org/multipage/media.html#ready-states
&gt; 
That seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780376</commentid>
    <comment_count>5</comment_count>
      <attachid>434491</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-07-29 08:17:20 -0700</bug_when>
    <thetext>Comment on attachment 434491
patch

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

r=me with one minor suggested change

This has an r+, so you don&apos;t need another review. When you post your new patch, replace &quot;NOBODY (OOPS!)&quot; with &quot;Eric Carlson&quot; and just ask for a commit and any reviewer can land it: webkit-patch upload --no-review --request-commit ...

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2448
&gt; +        if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA) {
&gt; +            if (!tracksAreReady)
&gt; +                break;

I meant you could move the tracks test above this as we don&apos;t want to do either test unless track data is available:

    if (!tracksAreReady)
        break;

    if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA) {
        scheduleEvent(eventNames().canplayEvent);
        ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780679</commentid>
    <comment_count>6</comment_count>
      <attachid>434598</attachid>
    <who name="Tomoki Imai">tomoki.imai</who>
    <bug_when>2021-07-29 19:21:58 -0700</bug_when>
    <thetext>Created attachment 434598
patch

(In reply to Eric Carlson from comment #5)
&gt; Comment on attachment 434491 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=434491&amp;action=review
&gt; 
&gt; r=me with one minor suggested change
&gt; 
&gt; This has an r+, so you don&apos;t need another review. When you post your new
&gt; patch, replace &quot;NOBODY (OOPS!)&quot; with &quot;Eric Carlson&quot; and just ask for a
&gt; commit and any reviewer can land it: webkit-patch upload --no-review
&gt; --request-commit ...

Thank you for your instruction, I added your name and will cq+ after it passes EWS tests.

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2448
&gt; &gt; +        if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA) {
&gt; &gt; +            if (!tracksAreReady)
&gt; &gt; +                break;
&gt; 
&gt; I meant you could move the tracks test above this as we don&apos;t want to do
&gt; either test unless track data is available:
&gt; 
&gt;     if (!tracksAreReady)
&gt;         break;
&gt; 
&gt;     if (m_readyState == HAVE_FUTURE_DATA &amp;&amp; oldState &lt;= HAVE_CURRENT_DATA) {
&gt;         scheduleEvent(eventNames().canplayEvent);
&gt;         ...

Thanks for your suggestion, I applied this to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780703</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-29 23:43:55 -0700</bug_when>
    <thetext>Committed r280468 (240103@main): &lt;https://commits.webkit.org/240103@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 434598.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780704</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-29 23:44:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/81311966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780804</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-07-30 08:36:31 -0700</bug_when>
    <thetext>(In reply to Tomoki Imai from comment #6)
&gt; 
&gt; Thanks for your suggestion, I applied this to the patch.

Thank you for the fix!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434400</attachid>
            <date>2021-07-27 21:35:50 -0700</date>
            <delta_ts>2021-07-28 19:56:45 -0700</delta_ts>
            <desc>patch to fix the issue</desc>
            <filename>patch-1.patch</filename>
            <type>text/plain</type>
            <size>17553</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMzg5YzQwYzY0N2EuLjE0M2YxMjkyZjcxMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIxLTA3LTI4ICBUb21va2kgSW1haSAgPFRvbW9raS5JbWFpQHNvbnkuY29tPgorCisgICAg
ICAgIE1pc3NpbmcgcGxheWluZyBldmVudHMgd2hlbiB0aGUgcmVhZHkgc3RhdGUgYmVjb21lcyBI
QVZFX0ZVVFVSRV9EQVRBL0hBVkVfRU5PVUdIX0RBVEEgZnJvbSBIQVZFX01FVEFEQVRBIHN0YXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0
aGUgdGVzdGNhc2UgdG8gY2hlY2tzIGlmIHRoZSBwbGF5aW5nIGV2ZW50IGlzIGZpcmVkIGNvcnJl
Y3RseSBvbiB0aGUgcmVhZHkgc3RhdGUgY2hhbmdlcy4KKworICAgICAgICAqIG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtbW9uaXRvci1wbGF5aW5nLWV2ZW50LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9y
LXBsYXlpbmctZXZlbnQuaHRtbDogQWRkZWQuCisKIDIwMjEtMDctMjUgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFBhcnRseSBpbXBsZW1lbnQgRnVu
Y3Rpb24ucHJvdG90eXBlLntjYWxsZXIsYXJndW1lbnRzfSByZWZsZWN0aW9uIHByb3Bvc2FsCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW1v
bml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMjgyZmZhZmEzZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMyBAQAor
VGhpcyB0ZXN0IGNoZWNrcyBpZiB0aGUgcGxheWluZyBldmVudCBmaXJlcyB3aGVuIHRoZSByZWFk
eSBzdGF0ZSBjaGFuZ2VzIGZyb20gSEFWRV9NRVRBREFUQSB0byBIQVZFX0ZVVFVSRV9EQVRBIG9y
IGhpZ2hlci4KKworRVhQRUNURUQgKHNvdXJjZS5yZWFkeVN0YXRlID09ICdjbG9zZWQnKSBPSwor
RVZFTlQobG9hZHN0YXJ0KQorRVZFTlQoc291cmNlb3BlbikKK1JVTihzb3VyY2VCdWZmZXIuYXBw
ZW5kQnVmZmVyKGluaXRTZWdtZW50KSkKK0VWRU5UKGxvYWRlZG1ldGFkYXRhKQorRVZFTlQodXBk
YXRlZW5kKQordmlkZW8ucmVhZHlTdGF0ZSA6IEhBVkVfTUVUQURBVEEKK1JVTihzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSkpCitFVkVOVCh1cGRhdGVlbmQpCit2aWRlby5yZWFkeVN0
YXRlIDogSEFWRV9GVVRVUkVfREFUQQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2Ft
cGxlKSkKK0VWRU5UKGxvYWRlZGRhdGEpCitFVkVOVChjYW5wbGF5KQorRVZFTlQodXBkYXRlZW5k
KQorRVZFTlQoY2FucGxheXRocm91Z2gpCitFVkVOVChwbGF5aW5nKQordmlkZW8ucmVhZHlTdGF0
ZSA6IEhBVkVfRU5PVUdIX0RBVEEKK1JVTihzb3VyY2VCdWZmZXIucmVtb3ZlKDAsMTApKQorRVZF
TlQodXBkYXRlZW5kKQorRVZFTlQod2FpdGluZykKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX01F
VEFEQVRBCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGUpKQorRVZFTlQodXBk
YXRlZW5kKQordmlkZW8ucmVhZHlTdGF0ZSA6IEhBVkVfTUVUQURBVEEKK1JVTihzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSkpCitFVkVOVCh1cGRhdGVlbmQpCitFVkVOVChjYW5wbGF5
KQorRVZFTlQocGxheWluZykKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX0VOT1VHSF9EQVRBCitF
TkQgT0YgVEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC5odG1sIGIvTGF5b3V0VGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9yLXBsYXlpbmctZXZlbnQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5MTdhZTBkMzc2OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtbW9uaXRvci1wbGF5aW5nLWV2ZW50Lmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5tZWRpYS1zb3VyY2UtbW9uaXRvci1w
bGF5aW5nLWV2ZW50PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9jay1tZWRpYS1zb3VyY2Uu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFyIHNvdXJjZUJ1ZmZlcjsK
KyAgICB2YXIgaW5pdFNlZ21lbnQ7CisgICAgdmFyIHNhbXBsZTsKKyAgICB2YXIgaGFuZGxlVmlk
ZW9FdmVudHMgPSBbCisgICAgICAgICJsb2Fkc3RhcnQiLAorICAgICAgICAid2FpdGluZyIsCisg
ICAgICAgICJsb2FkZWRtZXRhZGF0YSIsCisgICAgICAgICJsb2FkZWRkYXRhIiwKKyAgICAgICAg
ImNhbnBsYXkiLAorICAgICAgICAiY2FucGxheXRocm91Z2giLAorICAgICAgICAicGF1c2UiLAor
ICAgICAgICAiZW5kZWQiLAorICAgIF07CisgICAgdmFyIHJlYWR5U3RhdGVTdHJpbmcgPSBbCisg
ICAgICAgICJIQVZFX05PVEhJTkciLAorICAgICAgICAiSEFWRV9NRVRBREFUQSIsCisgICAgICAg
ICJIQVZFX0NVUlJFTlRfREFUQSIsCisgICAgICAgICJIQVZFX0ZVVFVSRV9EQVRBIiwKKyAgICAg
ICAgIkhBVkVfRU5PVUdIX0RBVEEiCisgICAgXTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KQorICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworCisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBhc3luYygpID0+IHsKKyAgICAgICAgZmlu
ZE1lZGlhRWxlbWVudCgpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlVmlk
ZW9FdmVudHMubGVuZ3RoIDsgaSsrKQorICAgICAgICAgICAgd2FpdEZvckV2ZW50KGhhbmRsZVZp
ZGVvRXZlbnRzW2ldKTsKKworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UoKTsKKyAg
ICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2UucmVhZHlTdGF0ZScsICdjbG9zZWQnKTsKKworICAg
ICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScp
OworICAgICAgICB2aWRlb1NvdXJjZS50eXBlID0gJ3ZpZGVvL21vY2s7IGNvZGVjcz1tb2NrJzsK
KyAgICAgICAgdmlkZW9Tb3VyY2Uuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpOwor
ICAgICAgICB2aWRlby5hcHBlbmRDaGlsZCh2aWRlb1NvdXJjZSk7CisgICAgICAgIGF3YWl0IHdh
aXRGb3Ioc291cmNlLCAnc291cmNlb3BlbicpOworCisgICAgICAgIHNvdXJjZUJ1ZmZlciA9IHNv
dXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIik7CisgICAgICAg
IGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDEwMCwgW21ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFD
S19LSU5ELlZJREVPKV0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIo
aW5pdFNlZ21lbnQpJyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBk
YXRlZW5kJyk7CisKKyAgICAgICAgY29uc29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyAr
IHJlYWR5U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0ZV0pOworICAgICAgICBzYW1wbGUgPSBt
YWtlQVNhbXBsZSgwLCAwLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAxKTsKKyAgICAgICAg
Ly8gVGhpcyBhcHBlbmQgY2hhbmdlcyByZWFkeSBzdGF0ZSB0byBIQVZFX0ZVVFVSRV9EQVRBLgor
ICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlKScpOworICAgICAg
ICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcpOworCisgICAgICAgIGNv
bnNvbGVXcml0ZSgndmlkZW8ucmVhZHlTdGF0ZSA6ICcgKyByZWFkeVN0YXRlU3RyaW5nW3ZpZGVv
LnJlYWR5U3RhdGVdKTsKKyAgICAgICAgc2FtcGxlID0gbWFrZUFTYW1wbGUoMSwgMSwgOSwgMSwg
MSwgU0FNUExFX0ZMQUcuU1lOQywgMSk7CisgICAgICAgIC8vIFRoaXMgYXBwZW5kIGNoYW5nZXMg
dGhlIHJlYWR5IHN0YXRlIHRvIEhBVkVfRU5PVUdIX0RBVEEgYW5kIGZpcmVzIHRoZSBwbGF5aW5n
IGV2ZW50LgorICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlKScp
OworICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbd2FpdEZvcihtZWRpYUVsZW1lbnQsICdwbGF5
aW5nJyksIHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyldKTsKKworICAgICAgICBj
b25zb2xlV3JpdGUoJ3ZpZGVvLnJlYWR5U3RhdGUgOiAnICsgcmVhZHlTdGF0ZVN0cmluZ1t2aWRl
by5yZWFkeVN0YXRlXSk7CisgICAgICAgIC8vIFRoaXMgcmVtb3ZlIGNoYW5nZXMgcmVhZHkgc3Rh
dGUgdG8gSEFWRV9NRVRBREFUQS4KKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIucmVtb3ZlKDAs
MTApJyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7
CisKKyAgICAgICAgYXdhaXQgc2xlZXBGb3IoMTAwMCk7CisKKyAgICAgICAgY29uc29sZVdyaXRl
KCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0
ZV0pOworICAgICAgICBzYW1wbGUgPSBtYWtlQVNhbXBsZSgwLCAwLCAxLCAxLCAxLCBTQU1QTEVf
RkxBRy5TWU5DLCAxKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNh
bXBsZSknKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQn
KTsKKworICAgICAgICBjb25zb2xlV3JpdGUoJ3ZpZGVvLnJlYWR5U3RhdGUgOiAnICsgcmVhZHlT
dGF0ZVN0cmluZ1t2aWRlby5yZWFkeVN0YXRlXSk7CisgICAgICAgIHNhbXBsZSA9IG1ha2VBU2Ft
cGxlKDEsIDEsIDksIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDEpOworICAgICAgICAvLyBUaGlz
IGFwcGVuZCBjaGFuZ2VzIHRoZSByZWFkeSBzdGF0ZSB0byBIQVZFX0VOT1VHSF9EQVRBIGFuZCBm
aXJlcyB0aGUgcGxheWluZyBldmVudC4KKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5k
QnVmZmVyKHNhbXBsZSknKTsKKyAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3dhaXRGb3IobWVk
aWFFbGVtZW50LCAncGxheWluZycpLCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcp
XSk7CisKKyAgICAgICAgY29uc29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5
U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0ZV0pOworICAgICAgICBlbmRUZXN0KCk7CisgICAg
fSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBj
aGVja3MgaWYgdGhlIHBsYXlpbmcgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcmVhZHkgc3RhdGUgY2hh
bmdlcyBmcm9tIEhBVkVfTUVUQURBVEEgdG8gSEFWRV9GVVRVUkVfREFUQSBvciBoaWdoZXIuPC9k
aXY+CisgICAgPHZpZGVvIGF1dG9wbGF5PjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMTU5YWQzYzA2YzU0Li5lMmVmNDY1ZWI5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMSBAQAorMjAyMS0wNy0yOCAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4K
KworICAgICAgICBNaXNzaW5nIHBsYXlpbmcgZXZlbnRzIHdoZW4gdGhlIHJlYWR5IHN0YXRlIGJl
Y29tZXMgSEFWRV9GVVRVUkVfREFUQS9IQVZFX0VOT1VHSF9EQVRBIGZyb20gSEFWRV9NRVRBREFU
QSBzdGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI4NTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIG1haW4gaXNzdWUgaXMgdGhhdCBtaXNzaW5nIHBsYXlpbmcgZXZlbnQgd2hlbiB0aGUgcmVh
ZHkgc3RhdGUgYmVjb21lcyBIQVZFX0ZVVFVSRV9EQVRBIG9yIEhBVkVfRU5PVUdIX0RBVEEgZnJv
bSBIQVZFX01FVEFEQVRBLgorICAgICAgICBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24s
IHdlIG5lZWQgdG8gIm5vdGlmeSBhYm91dCBwbGF5aW5nIiBpbiB0aGUgZm9sbG93aW5nIGNhc2Vz
OgorICAgICAgICAtIElmIHRoZSBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFWRV9DVVJSRU5U
X0RBVEEgb3IgbGVzcywgYW5kIHRoZSBuZXcgcmVhZHkgc3RhdGUgaXMgSEFWRV9GVVRVUkVfREFU
QSwgYW5kIGl0J3Mgbm90IHBhdXNlZC4KKyAgICAgICAgLSBJZiB0aGUgbmV3IHJlYWR5IHN0YXRl
IGlzIEhBVkVfRU5PVUdIX0RBVEEsIGFuZCBpdCdzIGVsaWdpYmxlIGZvciBhdXRvcGxheQorICAg
ICAgICBUaGUgaW1wbGVtZW50YXRpb24gZGlkbid0IGNvdmVyIHRoZXNlIGNhc2VzIGFuZCBoYWQg
d2ViIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorCisgICAgICAgIFdlIGFsc28gc2hvdWxkIG1vdmUg
c2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgZnJvbSBzZXRQbGF5aW5nIHRvIHBsYXlJbnRlcm5h
bCBhbmQgY2hlY2tzIHRoZSByZWFkeSBzdGF0ZS4KKyAgICAgICAgLSBXaXRob3V0IHRoaXMgY2hh
bmdlLCBwbGF5aW5nIGV2ZW50IGlzIGZpcmVkIHR3aWNlLiBUaGUgZmlyc3Qgb25lIGlzIGZpcmVk
IGJ5IHNldFJlYWR5U3RhdGUsIGFuZCB0aGUgc2Vjb25kIGlzIGNhbGxlZCBmcm9tIHNldFBsYXlp
bmcuCisgICAgICAgIC0gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLCBzY2hlZHVsZU5v
dGlmeUFib3V0UGxheWluZyBzaG91bGQgYmUgaW4gICJpbnRlcm5hbCBwbGF5IHN0ZXBzIiBhbmQg
Y2hlY2sgdGhlIHJlYWR5IHN0YXRlLiBDaGVja2luZyByZWFkeSBzdGF0ZSBmaXhlcyB0aGUgaXNz
dWUgd2hlcmUgcGxheWluZyBldmVudCBpcyBmaXJlZCB0d2ljZS4KKworICAgICAgICBUZXN0OiBt
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC5odG1s
CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6IEFkZGVkIG1pc3Npbmcgc2NoZWR1
bGVOb3RpZnlBYm91dFBsYXlpbmcgY2FsbHMuIEFkZGVkIGRvLXdoaWxlIHRvIG1ha2UgdGhlIGlt
cGxlbWVudGF0aW9uIHNpbWlsYXIgdG8gdGhlIHNwZWNpZmljYXRpb24gdGV4dAorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGxheUludGVybmFsKTogQWRkZWQgc2NoZWR1bGVO
b3RpZnlBYm91dFBsYXlpbmcgY2FsbC4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLCAi
aW50ZXJuYWwgcGxheSBzdGVwcyIgc2hvdWxkICJub3RpZnkgYWJvdXQgcGxheWluZyIgd2hlbiB0
aGUgcmVhZHkgc3RhdGUgaXMgSEFWRV9GVVRVUkVfREFUQSBvciBIQVZFX0VOT1VHSF9EQVRBLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyk6IFJlbW92ZWQg
c2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgY2FsbCBiZWNhdXNlIHBsYXlJbnRlcm5hbCBub3cg
Y2FsbHMgc2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgaW5zdGVhZC4KKworICAgICAgICBSZWZl
cmVuY2U6CisgICAgICAgIC0gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uv
bWVkaWEuaHRtbCNpbnRlcm5hbC1wbGF5LXN0ZXBzCisgICAgICAgIC0gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWVkaWEuaHRtbCNyZWFkeS1zdGF0ZXMKKwogMjAyMS0w
Ny0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FwcGxl
IFBheV0gRG8gbm90IGFkZCBjb3Vwb24gY29kZSBgQXBwbGVQYXlFcnJvckNvZGVgIHZhbHVlcyBm
b3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAppbmRleCBhM2IzYTJmMTE1N2MuLmJiYjYyNzQzN2Q0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yMzkwLDY1ICsyMzkwLDEw
MiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgc3RhdGUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9yZWFkeVN0YXRl
ID49IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX01FVEFEQVRBKSB7Ci0gICAgICAg
IHByZXBhcmVNZWRpYUZyYWdtZW50VVJJKCk7Ci0gICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnRO
YW1lcygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpOwotICAgICAgICBzY2hlZHVsZVJlc2l6ZUV2ZW50
KCk7Ci0gICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZl
bnQpOworICAgIC8vIEFwcGx5IHRoZSBmaXJzdCBhcHBsaWNhYmxlIHNldCBvZiBzdWJzdGVwcyBm
cm9tIHRoZSBmb2xsb3dpbmcgbGlzdDoKKyAgICBkbyB7CisgICAgICAgIC8vIEZJWE1FOiBUaGUg
c3BlY2lmaWNhdGlvbiBzZWVtcyB0byBvbmx5IHNheSBIQVZFX01FVEFEQVRBCisgICAgICAgIC8v
IGV4cGxpY2l0bHkgKHJhdGhlciB0aGFuIG9yIGhpZ2hlcikgZm9yIHRoaXMgc3RhdGUuIEl0J3Mg
dW5jbGVhcgorICAgICAgICAvLyBpZi9ob3cgdGhpbmdzIGxpa2UgbG9hZGVkbWV0YWRhdGFFdmVu
dCBzaG91bGQgaGFwcGVuIGlmCisgICAgICAgIC8vIHdlIGdvIGRpcmVjdGx5IGZyb20gYmVsb3cg
SEFWRV9NRVRBREFUQSB0byBoaWdoZXIgdGhhbgorICAgICAgICAvLyBIQVZFX01FVEFEQVRBLgor
ICAgICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBI
QVZFX01FVEFEQVRBKSB7CisgICAgICAgICAgICBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwor
ICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVu
dCk7CisgICAgICAgICAgICBzY2hlZHVsZVJlc2l6ZUV2ZW50KCk7CisgICAgICAgICAgICBzY2hl
ZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50KTsKICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMo
ZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50
KSkKLSAgICAgICAgICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRF
dmVudCgpOworICAgICAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53
ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkpCisgICAgICAgICAg
ICAgICAgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7CiAj
ZW5kaWYKLSAgICAgICAgbV9pbml0aWFsbHlNdXRlZCA9IG1fdm9sdW1lIDwgMC4wNSB8fCBtdXRl
ZCgpOworICAgICAgICAgICAgbV9pbml0aWFsbHlNdXRlZCA9IG1fdm9sdW1lIDwgMC4wNSB8fCBt
dXRlZCgpOwogCi0gICAgICAgIHVwZGF0ZVJlbmRlcmVyKCk7CisgICAgICAgICAgICB1cGRhdGVS
ZW5kZXJlcigpOwogCi0gICAgICAgIGlmIChpczxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PE1lZGlhRG9jdW1lbnQ+KGRvY3VtZW50KCkpLm1lZGlhRWxl
bWVudE5hdHVyYWxTaXplQ2hhbmdlZChleHBhbmRlZEludFNpemUobV9wbGF5ZXItPm5hdHVyYWxT
aXplKCkpKTsKKyAgICAgICAgICAgIGlmIChpczxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKSkK
KyAgICAgICAgICAgICAgICBkb3duY2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5tZWRp
YUVsZW1lbnROYXR1cmFsU2l6ZUNoYW5nZWQoZXhwYW5kZWRJbnRTaXplKG1fcGxheWVyLT5uYXR1
cmFsU2l6ZSgpKSk7CiAKLSAgICAgICAgbG9nTWVkaWFMb2FkUmVxdWVzdChkb2N1bWVudCgpLnBh
Z2UoKSwgbV9wbGF5ZXItPmVuZ2luZURlc2NyaXB0aW9uKCksIFN0cmluZygpLCB0cnVlKTsKKyAg
ICAgICAgICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9jdW1lbnQoKS5wYWdlKCksIG1fcGxheWVy
LT5lbmdpbmVEZXNjcmlwdGlvbigpLCBTdHJpbmcoKSwgdHJ1ZSk7CiAKICNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUo
KTsKKyAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogI2VuZGlmCiAKLSAg
ICAgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOwotICAg
IH0KKyAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5n
ZWQoKTsKIAotICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xk
U3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSkgewotICAgICAgICBpZiAoIW1faGF2ZUZpcmVkTG9h
ZGVkRGF0YSkgewotICAgICAgICAgICAgbV9oYXZlRmlyZWRMb2FkZWREYXRhID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCBpdCdzIGNvcnJlY3QgdG8g
c2tpcCB0aGVzZSB0aGlzIG9wZXJhdGlvbiBqdXN0Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIG1f
aGF2ZUZpcmVkTG9hZGVkRGF0YSBpcyBhbHJlYWR5IHRydWUuIEF0IG9uZSB0aW1lIHdlIHdlcmUg
c2tpcHBpbmcKLSAgICAgICAgICAgIC8vIHRoZSBjYWxsIHRvIHNldFNob3VsZERlbGF5TG9hZEV2
ZW50LCB3aGljaCB3YXMgZGVmaW5pdGVseSBpbmNvcnJlY3QuCi0gICAgICAgICAgICBhcHBseU1l
ZGlhRnJhZ21lbnRVUkkoKTsKKyAgICAgICAgICAgIC8vIEFzIHRoZSBzcGVjIG9ubHkgbWVudGlv
bmVzIEhBVkVfTUVUQURBVEEsIHJ1biB0aGUgbGF0ZXIKKyAgICAgICAgICAgIC8vIHN0ZXBzIGlm
IHdlIGFyZSBtb3ZpbmcgdG8gYSBoaWdoZXIgc3RhdGUuCisgICAgICAgICAgICBpZiAobV9yZWFk
eVN0YXRlID09IEhBVkVfTUVUQURBVEEpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwotICAgIH0KIAotICAg
IGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8PSBIQVZF
X0NVUlJFTlRfREFUQSAmJiB0cmFja3NBcmVSZWFkeSkKLSAgICAgICAgc2NoZWR1bGVFdmVudChl
dmVudE5hbWVzKCkuY2FucGxheUV2ZW50KTsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBI
QVZFX0NVUlJFTlRfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBKSB7CisgICAg
ICAgICAgICBpZiAoIW1faGF2ZUZpcmVkTG9hZGVkRGF0YSkgeworICAgICAgICAgICAgICAgIG1f
aGF2ZUZpcmVkTG9hZGVkRGF0YSA9IHRydWU7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVu
dChldmVudE5hbWVzKCkubG9hZGVkZGF0YUV2ZW50KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSXQncyBub3QgY2xlYXIgdGhhdCBpdCdzIGNvcnJlY3QgdG8gc2tpcCB0aGVzZSB0aGlzIG9w
ZXJhdGlvbiBqdXN0CisgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBtX2hhdmVGaXJlZExvYWRl
ZERhdGEgaXMgYWxyZWFkeSB0cnVlLiBBdCBvbmUgdGltZSB3ZSB3ZXJlIHNraXBwaW5nCisgICAg
ICAgICAgICAgICAgLy8gdGhlIGNhbGwgdG8gc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQsIHdoaWNo
IHdhcyBkZWZpbml0ZWx5IGluY29ycmVjdC4KKyAgICAgICAgICAgICAgICBhcHBseU1lZGlhRnJh
Z21lbnRVUkkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFNob3VsZERlbGF5TG9h
ZEV2ZW50KGZhbHNlKTsKIAotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9FTk9VR0hfREFU
QSAmJiBvbGRTdGF0ZSA8IEhBVkVfRU5PVUdIX0RBVEEgJiYgdHJhY2tzQXJlUmVhZHkpIHsKLSAg
ICAgICAgaWYgKG9sZFN0YXRlIDw9IEhBVkVfQ1VSUkVOVF9EQVRBKQorICAgICAgICAgICAgLy8g
SWYgdGhlIG5ldyByZWFkeSBzdGF0ZSBpcyBIQVZFX0ZVVFVSRV9EQVRBIG9yIEhBVkVfRU5PVUdI
X0RBVEEsIHRoZW4gdGhlIHJlbGV2YW50IHN0ZXBzIGJlbG93IG11c3QgdGhlbiBiZSBydW4gYWxz
by4KKyAgICAgICAgICAgIGlmICghKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBIHx8
IG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0VOT1VHSF9EQVRBKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVf
REFUQSAmJiBvbGRTdGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSAmJiB0cmFja3NBcmVSZWFkeSkg
ewogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuY2FucGxheUV2ZW50KTsK
IAotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5dGhyb3VnaEV2ZW50
KTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW504oCZcyBwYXVzZWQgYXR0cmlidXRlIGlz
IGZhbHNlLCB0aGUgdXNlciBhZ2VudCBtdXN0IHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxl
IGV2ZW50IG5hbWVkIHBsYXlpbmcgYXQgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICBpZiAoIXBh
dXNlZCgpKQorICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUg
PT0gSEFWRV9FTk9VR0hfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfRU5PVUdIX0RBVEEgJiYgdHJh
Y2tzQXJlUmVhZHkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyByZWFkeSBzdGF0
ZSB3YXMgSEFWRV9DVVJSRU5UX0RBVEEgb3IgbGVzcywKKyAgICAgICAgICAgIC8vIHRoZSB1c2Vy
IGFnZW50IG11c3QgcXVldWUgYSBtZWRpYSBlbGVtZW50IHRhc2sgZ2l2ZW4gdGhlIG1lZGlhIGVs
ZW1lbnQgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBjYW5wbGF5IGF0IHRoZSBlbGVtZW50LAorICAg
ICAgICAgICAgLy8gYW5kLCBpZiB0aGUgZWxlbWVudCdzIHBhdXNlZCBhdHRyaWJ1dGUgaXMgZmFs
c2UsIG5vdGlmeSBhYm91dCBwbGF5aW5nIGZvciB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgIGlm
IChvbGRTdGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSkgeworICAgICAgICAgICAgICAgIHNjaGVk
dWxlRXZlbnQoZXZlbnROYW1lcygpLmNhbnBsYXlFdmVudCk7CisgICAgICAgICAgICAgICAgaWYg
KCFwYXVzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVOb3RpZnlBYm91dFBsYXlp
bmcoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGNhblRyYW5zaXRpb24gPSBjYW5U
cmFuc2l0aW9uRnJvbUF1dG9wbGF5VG9QbGF5KCk7Ci0gICAgICAgIGlmIChjYW5UcmFuc2l0aW9u
KSB7Ci0gICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotICAgICAgICAgICAgc2V0U2hvd1Bv
c3RlckZsYWcoZmFsc2UpOwotICAgICAgICAgICAgaW52YWxpZGF0ZUNhY2hlZFRpbWUoKTsKLSAg
ICAgICAgICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5
YmFja1N0YXRlOjpTdGFydGVkV2l0aG91dFVzZXJHZXN0dXJlKTsKLSAgICAgICAgICAgIG1fcGxh
eWJhY2tTdGFydGVkVGltZSA9IGN1cnJlbnRNZWRpYVRpbWUoKS50b0RvdWJsZSgpOwotICAgICAg
ICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkucGxheUV2ZW50KTsKLSAgICAgICAgfSBl
bHNlIGlmIChjYW5UcmFuc2l0aW9uLmVycm9yKCkgPT0gTWVkaWFQbGF5YmFja0RlbmlhbFJlYXNv
bjo6VXNlckdlc3R1cmVSZXF1aXJlZCkgewotICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSLCAiQXV0b3BsYXkgYmxvY2tlZCwgdXNlciBnZXN0dXJlIHJlcXVpcmVkIik7Ci0gICAg
ICAgICAgICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJh
Y2tTdGF0ZTo6UHJldmVudGVkQXV0b3BsYXkpOworICAgICAgICAgICAgLy8gVGhlIHVzZXIgYWdl
bnQgbXVzdCBxdWV1ZSBhIG1lZGlhIGVsZW1lbnQgdGFzayBnaXZlbiB0aGUgbWVkaWEgZWxlbWVu
dCB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGNhbnBsYXl0aHJvdWdoIGF0IHRoZSBlbGVtZW50Lgor
ICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuY2FucGxheXRocm91Z2hFdmVu
dCk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBlbGlnaWJsZSBmb3Ig
YXV0b3BsYXksIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdCBhYm9ydCB0aGVzZSBzdWJzdGVwcy4K
KyAgICAgICAgICAgIC8vIFRoZSB1c2VyIGFnZW50IG1heSBydW4gdGhlIGZvbGxvd2luZyBzdWJz
dGVwczoKKyAgICAgICAgICAgIC8vIFNldCB0aGUgcGF1c2VkIGF0dHJpYnV0ZSB0byBmYWxzZS4K
KyAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50J3Mgc2hvdyBwb3N0ZXIgZmxhZyBpcyB0cnVl
LCBzZXQgaXQgdG8gZmFsc2UgYW5kIHJ1biB0aGUgdGltZSBtYXJjaGVzIG9uIHN0ZXBzLgorICAg
ICAgICAgICAgLy8gUXVldWUgYSBtZWRpYSBlbGVtZW50IHRhc2sgZ2l2ZW4gdGhlIGVsZW1lbnQg
dG8gZmlyZSBhbiBldmVudCBuYW1lZCBwbGF5IGF0IHRoZSBlbGVtZW50LgorICAgICAgICAgICAg
Ly8gTm90aWZ5IGFib3V0IHBsYXlpbmcgZm9yIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgYXV0
byBjYW5UcmFuc2l0aW9uID0gY2FuVHJhbnNpdGlvbkZyb21BdXRvcGxheVRvUGxheSgpOworICAg
ICAgICAgICAgaWYgKGNhblRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHNldFNob3dQb3N0ZXJGbGFnKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpOworICAgICAgICAgICAgICAgIHNldEF1
dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpTdGFy
dGVkV2l0aG91dFVzZXJHZXN0dXJlKTsKKyAgICAgICAgICAgICAgICBtX3BsYXliYWNrU3RhcnRl
ZFRpbWUgPSBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICAgICAgICAgICAgICBz
Y2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAgICAgICAgICAgIHNj
aGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhblRy
YW5zaXRpb24uZXJyb3IoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVy
ZVJlcXVpcmVkKSB7CisgICAgICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAi
QXV0b3BsYXkgYmxvY2tlZCwgdXNlciBnZXN0dXJlIHJlcXVpcmVkIik7CisgICAgICAgICAgICAg
ICAgc2V0QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3Rh
dGU6OlByZXZlbnRlZEF1dG9wbGF5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0K
KyAgICB9IHdoaWxlIChmYWxzZSk7CiAKICAgICAvLyBJZiB3ZSB0cmFuc2l0aW9uIHRvIHRoZSBG
dXR1cmUgRGF0YSBzdGF0ZSBhbmQgd2UncmUgYWJvdXQgdG8gYmVnaW4gcGxheWluZywgZW5zdXJl
IHBsYXliYWNrIGlzIGFjdHVhbGx5IHBlcm1pdHRlZCBmaXJzdCwKICAgICAvLyBob25vcmluZyBh
bnkgcGxheWJhY2sgZGVuaWFsIHJlYXNvbnMgc3VjaCBhcyB0aGUgcmVxdWlyZW1lbnQgb2YgYSB1
c2VyIGdlc3R1cmUuCkBAIC0zNTI4LDggKzM1NjUsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpwbGF5SW50ZXJuYWwoKQogCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnBs
YXlFdmVudCk7CiAKKyAgICAgICAgLy8gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0YXRl
IGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIEhBVkVfTk9USElORywgSEFWRV9NRVRBREFUQSwgb3Ig
SEFWRV9DVVJSRU5UX0RBVEEsCisgICAgICAgIC8vIHF1ZXVlIGEgbWVkaWEgZWxlbWVudCB0YXNr
IGdpdmVuIHRoZSBtZWRpYSBlbGVtZW50IHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgd2FpdGluZyBh
dCB0aGUgZWxlbWVudC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbWVkaWEgZWxlbWVudCdz
IHJlYWR5U3RhdGUgYXR0cmlidXRlIGhhcyB0aGUgdmFsdWUgSEFWRV9GVVRVUkVfREFUQSBvciBI
QVZFX0VOT1VHSF9EQVRBOgorICAgICAgICAvLyBub3RpZnkgYWJvdXQgcGxheWluZyBmb3IgdGhl
IGVsZW1lbnQuCiAgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPD0gSEFWRV9DVVJSRU5UX0RBVEEp
CiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS53YWl0aW5nRXZlbnQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzY2hlZHVsZU5vdGlmeUFib3V0UGxheWluZygpOwog
ICAgIH0gZWxzZSBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfRlVUVVJFX0RBVEEpCiAgICAgICAg
IHNjaGVkdWxlUmVzb2x2ZVBlbmRpbmdQbGF5UHJvbWlzZXMoKTsKIApAQCAtNTQ2Myw5ICs1NTA2
LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKIAog
ICAgIG1fcGxheWluZyA9IHBsYXlpbmc7CiAKLSAgICBpZiAobV9wbGF5aW5nKQotICAgICAgICBz
Y2hlZHVsZU5vdGlmeUFib3V0UGxheWluZygpOwotCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1Bs
YXlpbmdNZWRpYSgpOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
</data>
<flag name="review"
          id="456889"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434491</attachid>
            <date>2021-07-28 19:56:45 -0700</date>
            <delta_ts>2021-07-29 19:21:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-2.patch</filename>
            <type>text/plain</type>
            <size>17712</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMzg5YzQwYzY0N2EuLjE0M2YxMjkyZjcxMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIxLTA3LTI4ICBUb21va2kgSW1haSAgPFRvbW9raS5JbWFpQHNvbnkuY29tPgorCisgICAg
ICAgIE1pc3NpbmcgcGxheWluZyBldmVudHMgd2hlbiB0aGUgcmVhZHkgc3RhdGUgYmVjb21lcyBI
QVZFX0ZVVFVSRV9EQVRBL0hBVkVfRU5PVUdIX0RBVEEgZnJvbSBIQVZFX01FVEFEQVRBIHN0YXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0
aGUgdGVzdGNhc2UgdG8gY2hlY2tzIGlmIHRoZSBwbGF5aW5nIGV2ZW50IGlzIGZpcmVkIGNvcnJl
Y3RseSBvbiB0aGUgcmVhZHkgc3RhdGUgY2hhbmdlcy4KKworICAgICAgICAqIG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtbW9uaXRvci1wbGF5aW5nLWV2ZW50LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9y
LXBsYXlpbmctZXZlbnQuaHRtbDogQWRkZWQuCisKIDIwMjEtMDctMjUgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFBhcnRseSBpbXBsZW1lbnQgRnVu
Y3Rpb24ucHJvdG90eXBlLntjYWxsZXIsYXJndW1lbnRzfSByZWZsZWN0aW9uIHByb3Bvc2FsCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW1v
bml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMjgyZmZhZmEzZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMyBAQAor
VGhpcyB0ZXN0IGNoZWNrcyBpZiB0aGUgcGxheWluZyBldmVudCBmaXJlcyB3aGVuIHRoZSByZWFk
eSBzdGF0ZSBjaGFuZ2VzIGZyb20gSEFWRV9NRVRBREFUQSB0byBIQVZFX0ZVVFVSRV9EQVRBIG9y
IGhpZ2hlci4KKworRVhQRUNURUQgKHNvdXJjZS5yZWFkeVN0YXRlID09ICdjbG9zZWQnKSBPSwor
RVZFTlQobG9hZHN0YXJ0KQorRVZFTlQoc291cmNlb3BlbikKK1JVTihzb3VyY2VCdWZmZXIuYXBw
ZW5kQnVmZmVyKGluaXRTZWdtZW50KSkKK0VWRU5UKGxvYWRlZG1ldGFkYXRhKQorRVZFTlQodXBk
YXRlZW5kKQordmlkZW8ucmVhZHlTdGF0ZSA6IEhBVkVfTUVUQURBVEEKK1JVTihzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSkpCitFVkVOVCh1cGRhdGVlbmQpCit2aWRlby5yZWFkeVN0
YXRlIDogSEFWRV9GVVRVUkVfREFUQQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2Ft
cGxlKSkKK0VWRU5UKGxvYWRlZGRhdGEpCitFVkVOVChjYW5wbGF5KQorRVZFTlQodXBkYXRlZW5k
KQorRVZFTlQoY2FucGxheXRocm91Z2gpCitFVkVOVChwbGF5aW5nKQordmlkZW8ucmVhZHlTdGF0
ZSA6IEhBVkVfRU5PVUdIX0RBVEEKK1JVTihzb3VyY2VCdWZmZXIucmVtb3ZlKDAsMTApKQorRVZF
TlQodXBkYXRlZW5kKQorRVZFTlQod2FpdGluZykKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX01F
VEFEQVRBCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGUpKQorRVZFTlQodXBk
YXRlZW5kKQordmlkZW8ucmVhZHlTdGF0ZSA6IEhBVkVfTUVUQURBVEEKK1JVTihzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSkpCitFVkVOVCh1cGRhdGVlbmQpCitFVkVOVChjYW5wbGF5
KQorRVZFTlQocGxheWluZykKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX0VOT1VHSF9EQVRBCitF
TkQgT0YgVEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC5odG1sIGIvTGF5b3V0VGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9yLXBsYXlpbmctZXZlbnQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5MTdhZTBkMzc2OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtbW9uaXRvci1wbGF5aW5nLWV2ZW50Lmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5tZWRpYS1zb3VyY2UtbW9uaXRvci1w
bGF5aW5nLWV2ZW50PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9jay1tZWRpYS1zb3VyY2Uu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFyIHNvdXJjZUJ1ZmZlcjsK
KyAgICB2YXIgaW5pdFNlZ21lbnQ7CisgICAgdmFyIHNhbXBsZTsKKyAgICB2YXIgaGFuZGxlVmlk
ZW9FdmVudHMgPSBbCisgICAgICAgICJsb2Fkc3RhcnQiLAorICAgICAgICAid2FpdGluZyIsCisg
ICAgICAgICJsb2FkZWRtZXRhZGF0YSIsCisgICAgICAgICJsb2FkZWRkYXRhIiwKKyAgICAgICAg
ImNhbnBsYXkiLAorICAgICAgICAiY2FucGxheXRocm91Z2giLAorICAgICAgICAicGF1c2UiLAor
ICAgICAgICAiZW5kZWQiLAorICAgIF07CisgICAgdmFyIHJlYWR5U3RhdGVTdHJpbmcgPSBbCisg
ICAgICAgICJIQVZFX05PVEhJTkciLAorICAgICAgICAiSEFWRV9NRVRBREFUQSIsCisgICAgICAg
ICJIQVZFX0NVUlJFTlRfREFUQSIsCisgICAgICAgICJIQVZFX0ZVVFVSRV9EQVRBIiwKKyAgICAg
ICAgIkhBVkVfRU5PVUdIX0RBVEEiCisgICAgXTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KQorICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworCisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBhc3luYygpID0+IHsKKyAgICAgICAgZmlu
ZE1lZGlhRWxlbWVudCgpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlVmlk
ZW9FdmVudHMubGVuZ3RoIDsgaSsrKQorICAgICAgICAgICAgd2FpdEZvckV2ZW50KGhhbmRsZVZp
ZGVvRXZlbnRzW2ldKTsKKworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UoKTsKKyAg
ICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2UucmVhZHlTdGF0ZScsICdjbG9zZWQnKTsKKworICAg
ICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NvdXJjZScp
OworICAgICAgICB2aWRlb1NvdXJjZS50eXBlID0gJ3ZpZGVvL21vY2s7IGNvZGVjcz1tb2NrJzsK
KyAgICAgICAgdmlkZW9Tb3VyY2Uuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpOwor
ICAgICAgICB2aWRlby5hcHBlbmRDaGlsZCh2aWRlb1NvdXJjZSk7CisgICAgICAgIGF3YWl0IHdh
aXRGb3Ioc291cmNlLCAnc291cmNlb3BlbicpOworCisgICAgICAgIHNvdXJjZUJ1ZmZlciA9IHNv
dXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIik7CisgICAgICAg
IGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDEwMCwgW21ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFD
S19LSU5ELlZJREVPKV0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIo
aW5pdFNlZ21lbnQpJyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBk
YXRlZW5kJyk7CisKKyAgICAgICAgY29uc29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyAr
IHJlYWR5U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0ZV0pOworICAgICAgICBzYW1wbGUgPSBt
YWtlQVNhbXBsZSgwLCAwLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAxKTsKKyAgICAgICAg
Ly8gVGhpcyBhcHBlbmQgY2hhbmdlcyByZWFkeSBzdGF0ZSB0byBIQVZFX0ZVVFVSRV9EQVRBLgor
ICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlKScpOworICAgICAg
ICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcpOworCisgICAgICAgIGNv
bnNvbGVXcml0ZSgndmlkZW8ucmVhZHlTdGF0ZSA6ICcgKyByZWFkeVN0YXRlU3RyaW5nW3ZpZGVv
LnJlYWR5U3RhdGVdKTsKKyAgICAgICAgc2FtcGxlID0gbWFrZUFTYW1wbGUoMSwgMSwgOSwgMSwg
MSwgU0FNUExFX0ZMQUcuU1lOQywgMSk7CisgICAgICAgIC8vIFRoaXMgYXBwZW5kIGNoYW5nZXMg
dGhlIHJlYWR5IHN0YXRlIHRvIEhBVkVfRU5PVUdIX0RBVEEgYW5kIGZpcmVzIHRoZSBwbGF5aW5n
IGV2ZW50LgorICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlKScp
OworICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbd2FpdEZvcihtZWRpYUVsZW1lbnQsICdwbGF5
aW5nJyksIHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyldKTsKKworICAgICAgICBj
b25zb2xlV3JpdGUoJ3ZpZGVvLnJlYWR5U3RhdGUgOiAnICsgcmVhZHlTdGF0ZVN0cmluZ1t2aWRl
by5yZWFkeVN0YXRlXSk7CisgICAgICAgIC8vIFRoaXMgcmVtb3ZlIGNoYW5nZXMgcmVhZHkgc3Rh
dGUgdG8gSEFWRV9NRVRBREFUQS4KKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIucmVtb3ZlKDAs
MTApJyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7
CisKKyAgICAgICAgYXdhaXQgc2xlZXBGb3IoMTAwMCk7CisKKyAgICAgICAgY29uc29sZVdyaXRl
KCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0
ZV0pOworICAgICAgICBzYW1wbGUgPSBtYWtlQVNhbXBsZSgwLCAwLCAxLCAxLCAxLCBTQU1QTEVf
RkxBRy5TWU5DLCAxKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNh
bXBsZSknKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQn
KTsKKworICAgICAgICBjb25zb2xlV3JpdGUoJ3ZpZGVvLnJlYWR5U3RhdGUgOiAnICsgcmVhZHlT
dGF0ZVN0cmluZ1t2aWRlby5yZWFkeVN0YXRlXSk7CisgICAgICAgIHNhbXBsZSA9IG1ha2VBU2Ft
cGxlKDEsIDEsIDksIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDEpOworICAgICAgICAvLyBUaGlz
IGFwcGVuZCBjaGFuZ2VzIHRoZSByZWFkeSBzdGF0ZSB0byBIQVZFX0VOT1VHSF9EQVRBIGFuZCBm
aXJlcyB0aGUgcGxheWluZyBldmVudC4KKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5k
QnVmZmVyKHNhbXBsZSknKTsKKyAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3dhaXRGb3IobWVk
aWFFbGVtZW50LCAncGxheWluZycpLCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcp
XSk7CisKKyAgICAgICAgY29uc29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5
U3RhdGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0ZV0pOworICAgICAgICBlbmRUZXN0KCk7CisgICAg
fSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBj
aGVja3MgaWYgdGhlIHBsYXlpbmcgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcmVhZHkgc3RhdGUgY2hh
bmdlcyBmcm9tIEhBVkVfTUVUQURBVEEgdG8gSEFWRV9GVVRVUkVfREFUQSBvciBoaWdoZXIuPC9k
aXY+CisgICAgPHZpZGVvIGF1dG9wbGF5PjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMTU5YWQzYzA2YzU0Li42YmE0ODRlMjMxY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNCBAQAorMjAyMS0wNy0yOCAgVG9tb2tpIEltYWkgIDxUb21va2kuSW1haUBzb255LmNvbT4K
KworICAgICAgICBNaXNzaW5nIHBsYXlpbmcgZXZlbnRzIHdoZW4gdGhlIHJlYWR5IHN0YXRlIGJl
Y29tZXMgSEFWRV9GVVRVUkVfREFUQS9IQVZFX0VOT1VHSF9EQVRBIGZyb20gSEFWRV9NRVRBREFU
QSBzdGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI4NTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIG1haW4gaXNzdWUgaXMgdGhhdCBtaXNzaW5nIHBsYXlpbmcgZXZlbnQgd2hlbiB0aGUgcmVh
ZHkgc3RhdGUgYmVjb21lcyBIQVZFX0ZVVFVSRV9EQVRBIG9yIEhBVkVfRU5PVUdIX0RBVEEgZnJv
bSBIQVZFX01FVEFEQVRBLgorICAgICAgICBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24s
IHdlIG5lZWQgdG8gIm5vdGlmeSBhYm91dCBwbGF5aW5nIiBpbiB0aGUgZm9sbG93aW5nIGNhc2Vz
OgorICAgICAgICAtIElmIHRoZSBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFWRV9DVVJSRU5U
X0RBVEEgb3IgbGVzcywgYW5kIHRoZSBuZXcgcmVhZHkgc3RhdGUgaXMgSEFWRV9GVVRVUkVfREFU
QSwgYW5kIGl0J3Mgbm90IHBhdXNlZC4KKyAgICAgICAgLSBJZiB0aGUgbmV3IHJlYWR5IHN0YXRl
IGlzIEhBVkVfRU5PVUdIX0RBVEEsIGFuZCBpdCdzIGVsaWdpYmxlIGZvciBhdXRvcGxheQorICAg
ICAgICBUaGUgaW1wbGVtZW50YXRpb24gZGlkbid0IGNvdmVyIHRoZXNlIGNhc2VzIGFuZCBoYWQg
d2ViIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorCisgICAgICAgIFdlIGFsc28gc2hvdWxkIG1vdmUg
c2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgZnJvbSBzZXRQbGF5aW5nIHRvIHBsYXlJbnRlcm5h
bCBhbmQgY2hlY2tzIHRoZSByZWFkeSBzdGF0ZS4KKyAgICAgICAgLSBXaXRob3V0IHRoaXMgY2hh
bmdlLCBwbGF5aW5nIGV2ZW50IGlzIGZpcmVkIHR3aWNlLiBUaGUgZmlyc3Qgb25lIGlzIGZpcmVk
IGJ5IHNldFJlYWR5U3RhdGUsIGFuZCB0aGUgc2Vjb25kIGlzIGNhbGxlZCBmcm9tIHNldFBsYXlp
bmcuCisgICAgICAgIC0gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLCBzY2hlZHVsZU5v
dGlmeUFib3V0UGxheWluZyBzaG91bGQgYmUgaW4gICJpbnRlcm5hbCBwbGF5IHN0ZXBzIiBhbmQg
Y2hlY2sgdGhlIHJlYWR5IHN0YXRlLgorICAgICAgICAgIENoZWNraW5nIHJlYWR5IHN0YXRlIGZp
eGVzIHRoZSBpc3N1ZSB3aGVyZSBwbGF5aW5nIGV2ZW50IGlzIGZpcmVkIHR3aWNlLgorCisgICAg
ICAgIFRlc3Q6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbW9uaXRvci1wbGF5aW5n
LWV2ZW50Lmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKTogQWRkZWQgbWlz
c2luZyBzY2hlZHVsZU5vdGlmeUFib3V0UGxheWluZyBjYWxscy4gQWRkZWQgZG8td2hpbGUgdG8g
bWFrZSB0aGUgaW1wbGVtZW50YXRpb24gc2ltaWxhciB0byB0aGUgc3BlY2lmaWNhdGlvbiB0ZXh0
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5SW50ZXJuYWwpOiBBZGRl
ZCBzY2hlZHVsZU5vdGlmeUFib3V0UGxheWluZyBjYWxsLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0
aW9uLCAiaW50ZXJuYWwgcGxheSBzdGVwcyIgc2hvdWxkICJub3RpZnkgYWJvdXQgcGxheWluZyIg
d2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhlIHJlYWR5IHN0YXRlIGlzIEhBVkVfRlVUVVJFX0RBVEEgb3IgSEFWRV9FTk9VR0hfREFUQS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFBsYXlpbmcpOiBSZW1vdmVk
IHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nIGNhbGwgYmVjYXVzZSBwbGF5SW50ZXJuYWwgbm93
IGNhbGxzIHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nIGluc3RlYWQuCisKKyAgICAgICAgUmVm
ZXJlbmNlOgorICAgICAgICAtIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L21lZGlhLmh0bWwjaW50ZXJuYWwtcGxheS1zdGVwcworICAgICAgICAtIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL21lZGlhLmh0bWwjcmVhZHktc3RhdGVzCisKIDIwMjEt
MDctMjQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBs
ZSBQYXldIERvIG5vdCBhZGQgY291cG9uIGNvZGUgYEFwcGxlUGF5RXJyb3JDb2RlYCB2YWx1ZXMg
Zm9yIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKaW5kZXggYTNiM2EyZjExNTdjLi45YTUzM2VhNDY5ODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMjM5MCw2NSArMjM5MCwx
MDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIHN0YXRlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fcmVhZHlTdGF0
ZSA+PSBIQVZFX01FVEFEQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9NRVRBREFUQSkgewotICAgICAg
ICBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50
TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc2NoZWR1bGVSZXNpemVFdmVu
dCgpOwotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2
ZW50KTsKKyAgICAvLyBBcHBseSB0aGUgZmlyc3QgYXBwbGljYWJsZSBzZXQgb2Ygc3Vic3RlcHMg
ZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6CisgICAgZG8geworICAgICAgICAvLyBGSVhNRTogVGhl
IHNwZWNpZmljYXRpb24gc2VlbXMgdG8gb25seSBzYXkgSEFWRV9NRVRBREFUQQorICAgICAgICAv
LyBleHBsaWNpdGx5IChyYXRoZXIgdGhhbiBvciBoaWdoZXIpIGZvciB0aGlzIHN0YXRlLiBJdCdz
IHVuY2xlYXIKKyAgICAgICAgLy8gaWYvaG93IHRoaW5ncyBsaWtlIGxvYWRlZG1ldGFkYXRhRXZl
bnQgc2hvdWxkIGhhcHBlbiBpZgorICAgICAgICAvLyB3ZSBnbyBkaXJlY3RseSBmcm9tIGJlbG93
IEhBVkVfTUVUQURBVEEgdG8gaGlnaGVyIHRoYW4KKyAgICAgICAgLy8gSEFWRV9NRVRBREFUQS4K
KyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBICYmIG9sZFN0YXRlIDwg
SEFWRV9NRVRBREFUQSkgeworICAgICAgICAgICAgcHJlcGFyZU1lZGlhRnJhZ21lbnRVUkkoKTsK
KyAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmR1cmF0aW9uY2hhbmdlRXZl
bnQpOworICAgICAgICAgICAgc2NoZWR1bGVSZXNpemVFdmVudCgpOworICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRhdGFFdmVudCk7CiAjaWYgRU5BQkxF
KFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJz
KGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVu
dCkpCi0gICAgICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2Vk
RXZlbnQoKTsKKyAgICAgICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
d2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpKQorICAgICAgICAg
ICAgICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwog
I2VuZGlmCi0gICAgICAgIG1faW5pdGlhbGx5TXV0ZWQgPSBtX3ZvbHVtZSA8IDAuMDUgfHwgbXV0
ZWQoKTsKKyAgICAgICAgICAgIG1faW5pdGlhbGx5TXV0ZWQgPSBtX3ZvbHVtZSA8IDAuMDUgfHwg
bXV0ZWQoKTsKIAotICAgICAgICB1cGRhdGVSZW5kZXJlcigpOworICAgICAgICAgICAgdXBkYXRl
UmVuZGVyZXIoKTsKIAotICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
Ci0gICAgICAgICAgICBkb3duY2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5tZWRpYUVs
ZW1lbnROYXR1cmFsU2l6ZUNoYW5nZWQoZXhwYW5kZWRJbnRTaXplKG1fcGxheWVyLT5uYXR1cmFs
U2l6ZSgpKSk7CisgICAgICAgICAgICBpZiAoaXM8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkp
CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8TWVkaWFEb2N1bWVudD4oZG9jdW1lbnQoKSkubWVk
aWFFbGVtZW50TmF0dXJhbFNpemVDaGFuZ2VkKGV4cGFuZGVkSW50U2l6ZShtX3BsYXllci0+bmF0
dXJhbFNpemUoKSkpOwogCi0gICAgICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9jdW1lbnQoKS5w
YWdlKCksIG1fcGxheWVyLT5lbmdpbmVEZXNjcmlwdGlvbigpLCBTdHJpbmcoKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBsb2dNZWRpYUxvYWRSZXF1ZXN0KGRvY3VtZW50KCkucGFnZSgpLCBtX3BsYXll
ci0+ZW5naW5lRGVzY3JpcHRpb24oKSwgU3RyaW5nKCksIHRydWUpOwogCiAjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRl
KCk7CisgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKICNlbmRpZgogCi0g
ICAgICAgIG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQoKTsKLSAg
ICB9CisgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFu
Z2VkKCk7CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRBICYmIG9s
ZFN0YXRlIDwgSEFWRV9DVVJSRU5UX0RBVEEpIHsKLSAgICAgICAgaWYgKCFtX2hhdmVGaXJlZExv
YWRlZERhdGEpIHsKLSAgICAgICAgICAgIG1faGF2ZUZpcmVkTG9hZGVkRGF0YSA9IHRydWU7Ci0g
ICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZWRkYXRhRXZlbnQpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgaXQncyBjb3JyZWN0IHRv
IHNraXAgdGhlc2UgdGhpcyBvcGVyYXRpb24ganVzdAotICAgICAgICAgICAgLy8gYmVjYXVzZSBt
X2hhdmVGaXJlZExvYWRlZERhdGEgaXMgYWxyZWFkeSB0cnVlLiBBdCBvbmUgdGltZSB3ZSB3ZXJl
IHNraXBwaW5nCi0gICAgICAgICAgICAvLyB0aGUgY2FsbCB0byBzZXRTaG91bGREZWxheUxvYWRF
dmVudCwgd2hpY2ggd2FzIGRlZmluaXRlbHkgaW5jb3JyZWN0LgotICAgICAgICAgICAgYXBwbHlN
ZWRpYUZyYWdtZW50VVJJKCk7CisgICAgICAgICAgICAvLyBBcyB0aGUgc3BlYyBvbmx5IG1lbnRp
b25lcyBIQVZFX01FVEFEQVRBLCBydW4gdGhlIGxhdGVyCisgICAgICAgICAgICAvLyBzdGVwcyBp
ZiB3ZSBhcmUgbW92aW5nIHRvIGEgaGlnaGVyIHN0YXRlLgorICAgICAgICAgICAgaWYgKG1fcmVh
ZHlTdGF0ZSA9PSBIQVZFX01FVEFEQVRBKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2ZW50KGZhbHNlKTsKLSAgICB9CiAKLSAg
ICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfRlVUVVJFX0RBVEEgJiYgb2xkU3RhdGUgPD0gSEFW
RV9DVVJSRU5UX0RBVEEgJiYgdHJhY2tzQXJlUmVhZHkpCi0gICAgICAgIHNjaGVkdWxlRXZlbnQo
ZXZlbnROYW1lcygpLmNhbnBsYXlFdmVudCk7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPj0g
SEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSkgeworICAg
ICAgICAgICAgaWYgKCFtX2hhdmVGaXJlZExvYWRlZERhdGEpIHsKKyAgICAgICAgICAgICAgICBt
X2hhdmVGaXJlZExvYWRlZERhdGEgPSB0cnVlOworICAgICAgICAgICAgICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEl0J3Mgbm90IGNsZWFyIHRoYXQgaXQncyBjb3JyZWN0IHRvIHNraXAgdGhlc2UgdGhpcyBv
cGVyYXRpb24ganVzdAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgbV9oYXZlRmlyZWRMb2Fk
ZWREYXRhIGlzIGFscmVhZHkgdHJ1ZS4gQXQgb25lIHRpbWUgd2Ugd2VyZSBza2lwcGluZworICAg
ICAgICAgICAgICAgIC8vIHRoZSBjYWxsIHRvIHNldFNob3VsZERlbGF5TG9hZEV2ZW50LCB3aGlj
aCB3YXMgZGVmaW5pdGVseSBpbmNvcnJlY3QuCisgICAgICAgICAgICAgICAgYXBwbHlNZWRpYUZy
YWdtZW50VVJJKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRTaG91bGREZWxheUxv
YWRFdmVudChmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgcmVhZHkgc3RhdGUg
aXMgSEFWRV9GVVRVUkVfREFUQSBvciBIQVZFX0VOT1VHSF9EQVRBLCB0aGVuIHRoZSByZWxldmFu
dCBzdGVwcyBiZWxvdyBtdXN0IHRoZW4gYmUgcnVuIGFsc28uCisgICAgICAgICAgICBpZiAobV9y
ZWFkeVN0YXRlIDwgSEFWRV9GVVRVUkVfREFUQSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAm
JiBvbGRTdGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSkgeworICAgICAgICAgICAgaWYgKCF0cmFj
a3NBcmVSZWFkeSkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChtX3JlYWR5U3Rh
dGUgPT0gSEFWRV9FTk9VR0hfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfRU5PVUdIX0RBVEEgJiYg
dHJhY2tzQXJlUmVhZHkpIHsKLSAgICAgICAgaWYgKG9sZFN0YXRlIDw9IEhBVkVfQ1VSUkVOVF9E
QVRBKQogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuY2FucGxheUV2ZW50
KTsKIAotICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5dGhyb3VnaEV2
ZW50KTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW504oCZcyBwYXVzZWQgYXR0cmlidXRl
IGlzIGZhbHNlLCB0aGUgdXNlciBhZ2VudCBtdXN0IHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2lt
cGxlIGV2ZW50IG5hbWVkIHBsYXlpbmcgYXQgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICBpZiAo
IXBhdXNlZCgpKQorICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3JlYWR5U3Rh
dGUgPT0gSEFWRV9FTk9VR0hfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfRU5PVUdIX0RBVEEpIHsK
KyAgICAgICAgICAgIGlmICghdHJhY2tzQXJlUmVhZHkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgYXV0byBjYW5UcmFuc2l0aW9uID0gY2FuVHJhbnNpdGlvbkZyb21BdXRvcGxh
eVRvUGxheSgpOwotICAgICAgICBpZiAoY2FuVHJhbnNpdGlvbikgewotICAgICAgICAgICAgbV9w
YXVzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldFNob3dQb3N0ZXJGbGFnKGZhbHNlKTsKLSAg
ICAgICAgICAgIGludmFsaWRhdGVDYWNoZWRUaW1lKCk7Ci0gICAgICAgICAgICBzZXRBdXRvcGxh
eUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6U3RhcnRlZFdp
dGhvdXRVc2VyR2VzdHVyZSk7Ci0gICAgICAgICAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBj
dXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKLSAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQo
ZXZlbnROYW1lcygpLnBsYXlFdmVudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FuVHJhbnNpdGlv
bi5lcnJvcigpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJlUmVxdWly
ZWQpIHsKLSAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIkF1dG9wbGF5IGJs
b2NrZWQsIHVzZXIgZ2VzdHVyZSByZXF1aXJlZCIpOwotICAgICAgICAgICAgc2V0QXV0b3BsYXlF
dmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1
dG9wbGF5KTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMg
SEFWRV9DVVJSRU5UX0RBVEEgb3IgbGVzcywKKyAgICAgICAgICAgIC8vIHRoZSB1c2VyIGFnZW50
IG11c3QgcXVldWUgYSBtZWRpYSBlbGVtZW50IHRhc2sgZ2l2ZW4gdGhlIG1lZGlhIGVsZW1lbnQg
dG8gZmlyZSBhbiBldmVudCBuYW1lZCBjYW5wbGF5IGF0IHRoZSBlbGVtZW50LAorICAgICAgICAg
ICAgLy8gYW5kLCBpZiB0aGUgZWxlbWVudCdzIHBhdXNlZCBhdHRyaWJ1dGUgaXMgZmFsc2UsIG5v
dGlmeSBhYm91dCBwbGF5aW5nIGZvciB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgIGlmIChvbGRT
dGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSkgeworICAgICAgICAgICAgICAgIHNjaGVkdWxlRXZl
bnQoZXZlbnROYW1lcygpLmNhbnBsYXlFdmVudCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXVz
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIHVzZXIgYWdlbnQgbXVzdCBxdWV1
ZSBhIG1lZGlhIGVsZW1lbnQgdGFzayBnaXZlbiB0aGUgbWVkaWEgZWxlbWVudCB0byBmaXJlIGFu
IGV2ZW50IG5hbWVkIGNhbnBsYXl0aHJvdWdoIGF0IHRoZSBlbGVtZW50LgorICAgICAgICAgICAg
c2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuY2FucGxheXRocm91Z2hFdmVudCk7CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBlbGlnaWJsZSBmb3IgYXV0b3BsYXksIHRo
ZW4gdGhlIHVzZXIgYWdlbnQgbXVzdCBhYm9ydCB0aGVzZSBzdWJzdGVwcy4KKyAgICAgICAgICAg
IC8vIFRoZSB1c2VyIGFnZW50IG1heSBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAg
ICAgICAgIC8vIFNldCB0aGUgcGF1c2VkIGF0dHJpYnV0ZSB0byBmYWxzZS4KKyAgICAgICAgICAg
IC8vIElmIHRoZSBlbGVtZW50J3Mgc2hvdyBwb3N0ZXIgZmxhZyBpcyB0cnVlLCBzZXQgaXQgdG8g
ZmFsc2UgYW5kIHJ1biB0aGUgdGltZSBtYXJjaGVzIG9uIHN0ZXBzLgorICAgICAgICAgICAgLy8g
UXVldWUgYSBtZWRpYSBlbGVtZW50IHRhc2sgZ2l2ZW4gdGhlIGVsZW1lbnQgdG8gZmlyZSBhbiBl
dmVudCBuYW1lZCBwbGF5IGF0IHRoZSBlbGVtZW50LgorICAgICAgICAgICAgLy8gTm90aWZ5IGFi
b3V0IHBsYXlpbmcgZm9yIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgYXV0byBjYW5UcmFuc2l0
aW9uID0gY2FuVHJhbnNpdGlvbkZyb21BdXRvcGxheVRvUGxheSgpOworICAgICAgICAgICAgaWYg
KGNhblRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHNldFNob3dQb3N0ZXJGbGFnKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBp
bnZhbGlkYXRlQ2FjaGVkVGltZSgpOworICAgICAgICAgICAgICAgIHNldEF1dG9wbGF5RXZlbnRQ
bGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpTdGFydGVkV2l0aG91dFVz
ZXJHZXN0dXJlKTsKKyAgICAgICAgICAgICAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBjdXJy
ZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50
KGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5
QWJvdXRQbGF5aW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhblRyYW5zaXRpb24uZXJy
b3IoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVyZVJlcXVpcmVkKSB7
CisgICAgICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiQXV0b3BsYXkgYmxv
Y2tlZCwgdXNlciBnZXN0dXJlIHJlcXVpcmVkIik7CisgICAgICAgICAgICAgICAgc2V0QXV0b3Bs
YXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRl
ZEF1dG9wbGF5KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KKyAgICB9IHdoaWxl
IChmYWxzZSk7CiAKICAgICAvLyBJZiB3ZSB0cmFuc2l0aW9uIHRvIHRoZSBGdXR1cmUgRGF0YSBz
dGF0ZSBhbmQgd2UncmUgYWJvdXQgdG8gYmVnaW4gcGxheWluZywgZW5zdXJlIHBsYXliYWNrIGlz
IGFjdHVhbGx5IHBlcm1pdHRlZCBmaXJzdCwKICAgICAvLyBob25vcmluZyBhbnkgcGxheWJhY2sg
ZGVuaWFsIHJlYXNvbnMgc3VjaCBhcyB0aGUgcmVxdWlyZW1lbnQgb2YgYSB1c2VyIGdlc3R1cmUu
CkBAIC0zNTI4LDggKzM1NzEsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5SW50ZXJu
YWwoKQogCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnBsYXlFdmVudCk7CiAK
KyAgICAgICAgLy8gSWYgdGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBo
YXMgdGhlIHZhbHVlIEhBVkVfTk9USElORywgSEFWRV9NRVRBREFUQSwgb3IgSEFWRV9DVVJSRU5U
X0RBVEEsCisgICAgICAgIC8vIHF1ZXVlIGEgbWVkaWEgZWxlbWVudCB0YXNrIGdpdmVuIHRoZSBt
ZWRpYSBlbGVtZW50IHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgd2FpdGluZyBhdCB0aGUgZWxlbWVu
dC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbWVkaWEgZWxlbWVudCdzIHJlYWR5U3RhdGUg
YXR0cmlidXRlIGhhcyB0aGUgdmFsdWUgSEFWRV9GVVRVUkVfREFUQSBvciBIQVZFX0VOT1VHSF9E
QVRBOgorICAgICAgICAvLyBub3RpZnkgYWJvdXQgcGxheWluZyBmb3IgdGhlIGVsZW1lbnQuCiAg
ICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPD0gSEFWRV9DVVJSRU5UX0RBVEEpCiAgICAgICAgICAg
ICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS53YWl0aW5nRXZlbnQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY2hlZHVsZU5vdGlmeUFib3V0UGxheWluZygpOwogICAgIH0gZWxzZSBp
ZiAobV9yZWFkeVN0YXRlID49IEhBVkVfRlVUVVJFX0RBVEEpCiAgICAgICAgIHNjaGVkdWxlUmVz
b2x2ZVBlbmRpbmdQbGF5UHJvbWlzZXMoKTsKIApAQCAtNTQ2Myw5ICs1NTEyLDYgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKIAogICAgIG1fcGxheWlu
ZyA9IHBsYXlpbmc7CiAKLSAgICBpZiAobV9wbGF5aW5nKQotICAgICAgICBzY2hlZHVsZU5vdGlm
eUFib3V0UGxheWluZygpOwotCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgp
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
</data>
<flag name="review"
          id="457000"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434598</attachid>
            <date>2021-07-29 19:21:58 -0700</date>
            <delta_ts>2021-07-29 23:43:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-3.patch</filename>
            <type>text/plain</type>
            <size>17640</size>
            <attacher name="Tomoki Imai">tomoki.imai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMzg5YzQwYzY0N2EuLjMxZTJmZWRhZmQ3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIxLTA3LTI4ICBUb21va2kgSW1haSAgPFRvbW9raS5JbWFpQHNvbnkuY29tPgorCisgICAg
ICAgIE1pc3NpbmcgcGxheWluZyBldmVudHMgd2hlbiB0aGUgcmVhZHkgc3RhdGUgYmVjb21lcyBI
QVZFX0ZVVFVSRV9EQVRBL0hBVkVfRU5PVUdIX0RBVEEgZnJvbSBIQVZFX01FVEFEQVRBIHN0YXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg1MzEK
KworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQWRkZWQgdGhl
IHRlc3RjYXNlIHRvIGNoZWNrcyBpZiB0aGUgcGxheWluZyBldmVudCBpcyBmaXJlZCBjb3JyZWN0
bHkgb24gdGhlIHJlYWR5IHN0YXRlIGNoYW5nZXMuCisKKyAgICAgICAgKiBtZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLW1vbml0b3ItcGxheWluZy1ldmVudC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbW9uaXRvci1w
bGF5aW5nLWV2ZW50Lmh0bWw6IEFkZGVkLgorCiAyMDIxLTA3LTI1ICBBbGV4ZXkgU2h2YXlrYSAg
PHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBQYXJ0bHkgaW1wbGVtZW50IEZ1bmN0
aW9uLnByb3RvdHlwZS57Y2FsbGVyLGFyZ3VtZW50c30gcmVmbGVjdGlvbiBwcm9wb3NhbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25p
dG9yLXBsYXlpbmctZXZlbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9yLXBsYXlpbmctZXZlbnQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTI4MmZmYWZhM2VlCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS1tb25pdG9yLXBsYXlpbmctZXZlbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1Ro
aXMgdGVzdCBjaGVja3MgaWYgdGhlIHBsYXlpbmcgZXZlbnQgZmlyZXMgd2hlbiB0aGUgcmVhZHkg
c3RhdGUgY2hhbmdlcyBmcm9tIEhBVkVfTUVUQURBVEEgdG8gSEFWRV9GVVRVUkVfREFUQSBvciBo
aWdoZXIuCisKK0VYUEVDVEVEIChzb3VyY2UucmVhZHlTdGF0ZSA9PSAnY2xvc2VkJykgT0sKK0VW
RU5UKGxvYWRzdGFydCkKK0VWRU5UKHNvdXJjZW9wZW4pCitSVU4oc291cmNlQnVmZmVyLmFwcGVu
ZEJ1ZmZlcihpbml0U2VnbWVudCkpCitFVkVOVChsb2FkZWRtZXRhZGF0YSkKK0VWRU5UKHVwZGF0
ZWVuZCkKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX01FVEFEQVRBCitSVU4oc291cmNlQnVmZmVy
LmFwcGVuZEJ1ZmZlcihzYW1wbGUpKQorRVZFTlQodXBkYXRlZW5kKQordmlkZW8ucmVhZHlTdGF0
ZSA6IEhBVkVfRlVUVVJFX0RBVEEKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBs
ZSkpCitFVkVOVChsb2FkZWRkYXRhKQorRVZFTlQoY2FucGxheSkKK0VWRU5UKHVwZGF0ZWVuZCkK
K0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorRVZFTlQocGxheWluZykKK3ZpZGVvLnJlYWR5U3RhdGUg
OiBIQVZFX0VOT1VHSF9EQVRBCitSVU4oc291cmNlQnVmZmVyLnJlbW92ZSgwLDEwKSkKK0VWRU5U
KHVwZGF0ZWVuZCkKK0VWRU5UKHdhaXRpbmcpCit2aWRlby5yZWFkeVN0YXRlIDogSEFWRV9NRVRB
REFUQQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlKSkKK0VWRU5UKHVwZGF0
ZWVuZCkKK3ZpZGVvLnJlYWR5U3RhdGUgOiBIQVZFX01FVEFEQVRBCitSVU4oc291cmNlQnVmZmVy
LmFwcGVuZEJ1ZmZlcihzYW1wbGUpKQorRVZFTlQodXBkYXRlZW5kKQorRVZFTlQoY2FucGxheSkK
K0VWRU5UKHBsYXlpbmcpCit2aWRlby5yZWFkeVN0YXRlIDogSEFWRV9FTk9VR0hfREFUQQorRU5E
IE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1tb25pdG9yLXBsYXlpbmctZXZlbnQuaHRtbCBiL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbW9uaXRvci1wbGF5aW5nLWV2ZW50Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xOTE3YWUwZDM3NjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LW1vbml0b3ItcGxheWluZy1ldmVudC5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+bWVkaWEtc291cmNlLW1vbml0b3ItcGxh
eWluZy1ldmVudDwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3VyY2VCdWZmZXI7Cisg
ICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciBzYW1wbGU7CisgICAgdmFyIGhhbmRsZVZpZGVv
RXZlbnRzID0gWworICAgICAgICAibG9hZHN0YXJ0IiwKKyAgICAgICAgIndhaXRpbmciLAorICAg
ICAgICAibG9hZGVkbWV0YWRhdGEiLAorICAgICAgICAibG9hZGVkZGF0YSIsCisgICAgICAgICJj
YW5wbGF5IiwKKyAgICAgICAgImNhbnBsYXl0aHJvdWdoIiwKKyAgICAgICAgInBhdXNlIiwKKyAg
ICAgICAgImVuZGVkIiwKKyAgICBdOworICAgIHZhciByZWFkeVN0YXRlU3RyaW5nID0gWworICAg
ICAgICAiSEFWRV9OT1RISU5HIiwKKyAgICAgICAgIkhBVkVfTUVUQURBVEEiLAorICAgICAgICAi
SEFWRV9DVVJSRU5UX0RBVEEiLAorICAgICAgICAiSEFWRV9GVVRVUkVfREFUQSIsCisgICAgICAg
ICJIQVZFX0VOT1VHSF9EQVRBIgorICAgIF07CisKKyAgICBpZiAod2luZG93LmludGVybmFscykK
KyAgICAgICAgaW50ZXJuYWxzLmluaXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMoKSA9PiB7CisgICAgICAgIGZpbmRN
ZWRpYUVsZW1lbnQoKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZVZpZGVv
RXZlbnRzLmxlbmd0aCA7IGkrKykKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudChoYW5kbGVWaWRl
b0V2ZW50c1tpXSk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7CisgICAg
ICAgIHRlc3RFeHBlY3RlZCgnc291cmNlLnJlYWR5U3RhdGUnLCAnY2xvc2VkJyk7CisKKyAgICAg
ICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTsK
KyAgICAgICAgdmlkZW9Tb3VyY2UudHlwZSA9ICd2aWRlby9tb2NrOyBjb2RlY3M9bW9jayc7Cisg
ICAgICAgIHZpZGVvU291cmNlLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKTsKKyAg
ICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQodmlkZW9Tb3VyY2UpOworICAgICAgICBhd2FpdCB3YWl0
Rm9yKHNvdXJjZSwgJ3NvdXJjZW9wZW4nKTsKKworICAgICAgICBzb3VyY2VCdWZmZXIgPSBzb3Vy
Y2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpOworICAgICAgICBp
bml0U2VnbWVudCA9IG1ha2VBSW5pdCgxMDAsIFttYWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tf
S0lORC5WSURFTyldKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKGlu
aXRTZWdtZW50KScpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0
ZWVuZCcpOworCisgICAgICAgIGNvbnNvbGVXcml0ZSgndmlkZW8ucmVhZHlTdGF0ZSA6ICcgKyBy
ZWFkeVN0YXRlU3RyaW5nW3ZpZGVvLnJlYWR5U3RhdGVdKTsKKyAgICAgICAgc2FtcGxlID0gbWFr
ZUFTYW1wbGUoMCwgMCwgMSwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMSk7CisgICAgICAgIC8v
IFRoaXMgYXBwZW5kIGNoYW5nZXMgcmVhZHkgc3RhdGUgdG8gSEFWRV9GVVRVUkVfREFUQS4KKyAg
ICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSknKTsKKyAgICAgICAg
YXdhaXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKTsKKworICAgICAgICBjb25z
b2xlV3JpdGUoJ3ZpZGVvLnJlYWR5U3RhdGUgOiAnICsgcmVhZHlTdGF0ZVN0cmluZ1t2aWRlby5y
ZWFkeVN0YXRlXSk7CisgICAgICAgIHNhbXBsZSA9IG1ha2VBU2FtcGxlKDEsIDEsIDksIDEsIDEs
IFNBTVBMRV9GTEFHLlNZTkMsIDEpOworICAgICAgICAvLyBUaGlzIGFwcGVuZCBjaGFuZ2VzIHRo
ZSByZWFkeSBzdGF0ZSB0byBIQVZFX0VOT1VHSF9EQVRBIGFuZCBmaXJlcyB0aGUgcGxheWluZyBl
dmVudC4KKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZSknKTsK
KyAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3dhaXRGb3IobWVkaWFFbGVtZW50LCAncGxheWlu
ZycpLCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcpXSk7CisKKyAgICAgICAgY29u
c29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5U3RhdGVTdHJpbmdbdmlkZW8u
cmVhZHlTdGF0ZV0pOworICAgICAgICAvLyBUaGlzIHJlbW92ZSBjaGFuZ2VzIHJlYWR5IHN0YXRl
IHRvIEhBVkVfTUVUQURBVEEuCisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLnJlbW92ZSgwLDEw
KScpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcpOwor
CisgICAgICAgIGF3YWl0IHNsZWVwRm9yKDEwMDApOworCisgICAgICAgIGNvbnNvbGVXcml0ZSgn
dmlkZW8ucmVhZHlTdGF0ZSA6ICcgKyByZWFkeVN0YXRlU3RyaW5nW3ZpZGVvLnJlYWR5U3RhdGVd
KTsKKyAgICAgICAgc2FtcGxlID0gbWFrZUFTYW1wbGUoMCwgMCwgMSwgMSwgMSwgU0FNUExFX0ZM
QUcuU1lOQywgMSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1w
bGUpJyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7
CisKKyAgICAgICAgY29uc29sZVdyaXRlKCd2aWRlby5yZWFkeVN0YXRlIDogJyArIHJlYWR5U3Rh
dGVTdHJpbmdbdmlkZW8ucmVhZHlTdGF0ZV0pOworICAgICAgICBzYW1wbGUgPSBtYWtlQVNhbXBs
ZSgxLCAxLCA5LCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAxKTsKKyAgICAgICAgLy8gVGhpcyBh
cHBlbmQgY2hhbmdlcyB0aGUgcmVhZHkgc3RhdGUgdG8gSEFWRV9FTk9VR0hfREFUQSBhbmQgZmly
ZXMgdGhlIHBsYXlpbmcgZXZlbnQuCisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1
ZmZlcihzYW1wbGUpJyk7CisgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt3YWl0Rm9yKG1lZGlh
RWxlbWVudCwgJ3BsYXlpbmcnKSwgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKV0p
OworCisgICAgICAgIGNvbnNvbGVXcml0ZSgndmlkZW8ucmVhZHlTdGF0ZSA6ICcgKyByZWFkeVN0
YXRlU3RyaW5nW3ZpZGVvLnJlYWR5U3RhdGVdKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0p
OworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdj5UaGlzIHRlc3QgY2hl
Y2tzIGlmIHRoZSBwbGF5aW5nIGV2ZW50IGZpcmVzIHdoZW4gdGhlIHJlYWR5IHN0YXRlIGNoYW5n
ZXMgZnJvbSBIQVZFX01FVEFEQVRBIHRvIEhBVkVfRlVUVVJFX0RBVEEgb3IgaGlnaGVyLjwvZGl2
PgorICAgIDx2aWRlbyBhdXRvcGxheT48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDE1OWFkM2MwNmM1NC4uZTdlMTIwYWY4NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzQgQEAKKzIwMjEtMDctMjggIFRvbW9raSBJbWFpICA8VG9tb2tpLkltYWlAc29ueS5jb20+CisK
KyAgICAgICAgTWlzc2luZyBwbGF5aW5nIGV2ZW50cyB3aGVuIHRoZSByZWFkeSBzdGF0ZSBiZWNv
bWVzIEhBVkVfRlVUVVJFX0RBVEEvSEFWRV9FTk9VR0hfREFUQSBmcm9tIEhBVkVfTUVUQURBVEEg
c3RhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODUzMQorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBUaGUg
bWFpbiBpc3N1ZSBpcyB0aGF0IG1pc3NpbmcgcGxheWluZyBldmVudCB3aGVuIHRoZSByZWFkeSBz
dGF0ZSBiZWNvbWVzIEhBVkVfRlVUVVJFX0RBVEEgb3IgSEFWRV9FTk9VR0hfREFUQSBmcm9tIEhB
VkVfTUVUQURBVEEuCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiwgd2Ug
bmVlZCB0byAibm90aWZ5IGFib3V0IHBsYXlpbmciIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6Cisg
ICAgICAgIC0gSWYgdGhlIHByZXZpb3VzIHJlYWR5IHN0YXRlIHdhcyBIQVZFX0NVUlJFTlRfREFU
QSBvciBsZXNzLCBhbmQgdGhlIG5ldyByZWFkeSBzdGF0ZSBpcyBIQVZFX0ZVVFVSRV9EQVRBLCBh
bmQgaXQncyBub3QgcGF1c2VkLgorICAgICAgICAtIElmIHRoZSBuZXcgcmVhZHkgc3RhdGUgaXMg
SEFWRV9FTk9VR0hfREFUQSwgYW5kIGl0J3MgZWxpZ2libGUgZm9yIGF1dG9wbGF5CisgICAgICAg
IFRoZSBpbXBsZW1lbnRhdGlvbiBkaWRuJ3QgY292ZXIgdGhlc2UgY2FzZXMgYW5kIGhhZCB3ZWIg
Y29tcGF0aWJpbGl0eSBpc3N1ZXMuCisKKyAgICAgICAgV2UgYWxzbyBzaG91bGQgbW92ZSBzY2hl
ZHVsZU5vdGlmeUFib3V0UGxheWluZyBmcm9tIHNldFBsYXlpbmcgdG8gcGxheUludGVybmFsIGFu
ZCBjaGVja3MgdGhlIHJlYWR5IHN0YXRlLgorICAgICAgICAtIFdpdGhvdXQgdGhpcyBjaGFuZ2Us
IHBsYXlpbmcgZXZlbnQgaXMgZmlyZWQgdHdpY2UuIFRoZSBmaXJzdCBvbmUgaXMgZmlyZWQgYnkg
c2V0UmVhZHlTdGF0ZSwgYW5kIHRoZSBzZWNvbmQgaXMgY2FsbGVkIGZyb20gc2V0UGxheWluZy4K
KyAgICAgICAgLSBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24sIHNjaGVkdWxlTm90aWZ5
QWJvdXRQbGF5aW5nIHNob3VsZCBiZSBpbiAgImludGVybmFsIHBsYXkgc3RlcHMiIGFuZCBjaGVj
ayB0aGUgcmVhZHkgc3RhdGUuCisgICAgICAgICAgQ2hlY2tpbmcgcmVhZHkgc3RhdGUgZml4ZXMg
dGhlIGlzc3VlIHdoZXJlIHBsYXlpbmcgZXZlbnQgaXMgZmlyZWQgdHdpY2UuCisKKyAgICAgICAg
VGVzdDogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tb25pdG9yLXBsYXlpbmctZXZl
bnQuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUpOiBBZGRlZCBtaXNzaW5n
IHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nIGNhbGxzLiBBZGRlZCBkby13aGlsZSB0byBtYWtl
IHRoZSBpbXBsZW1lbnRhdGlvbiBzaW1pbGFyIHRvIHRoZSBzcGVjaWZpY2F0aW9uIHRleHQKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJbnRlcm5hbCk6IEFkZGVkIHNj
aGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nIGNhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24s
ICJpbnRlcm5hbCBwbGF5IHN0ZXBzIiBzaG91bGQgIm5vdGlmeSBhYm91dCBwbGF5aW5nIiB3aGVu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg
cmVhZHkgc3RhdGUgaXMgSEFWRV9GVVRVUkVfREFUQSBvciBIQVZFX0VOT1VHSF9EQVRBLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyk6IFJlbW92ZWQgc2No
ZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgY2FsbCBiZWNhdXNlIHBsYXlJbnRlcm5hbCBub3cgY2Fs
bHMgc2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcgaW5zdGVhZC4KKworICAgICAgICBSZWZlcmVu
Y2U6CisgICAgICAgIC0gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWVk
aWEuaHRtbCNpbnRlcm5hbC1wbGF5LXN0ZXBzCisgICAgICAgIC0gaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWVkaWEuaHRtbCNyZWFkeS1zdGF0ZXMKKwogMjAyMS0wNy0y
NCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FwcGxlIFBh
eV0gRG8gbm90IGFkZCBjb3Vwb24gY29kZSBgQXBwbGVQYXlFcnJvckNvZGVgIHZhbHVlcyBmb3Ig
c3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCBhM2IzYTJmMTE1N2MuLmYyNGY3MzlhZjMzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yMzkwLDY1ICsyMzkwLDEwNSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgc3RhdGUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID49
IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX01FVEFEQVRBKSB7Ci0gICAgICAgIHBy
ZXBhcmVNZWRpYUZyYWdtZW50VVJJKCk7Ci0gICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmR1cmF0aW9uY2hhbmdlRXZlbnQpOwotICAgICAgICBzY2hlZHVsZVJlc2l6ZUV2ZW50KCk7
Ci0gICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZlbnQp
OworICAgIC8vIEFwcGx5IHRoZSBmaXJzdCBhcHBsaWNhYmxlIHNldCBvZiBzdWJzdGVwcyBmcm9t
IHRoZSBmb2xsb3dpbmcgbGlzdDoKKyAgICBkbyB7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgc3Bl
Y2lmaWNhdGlvbiBzZWVtcyB0byBvbmx5IHNheSBIQVZFX01FVEFEQVRBCisgICAgICAgIC8vIGV4
cGxpY2l0bHkgKHJhdGhlciB0aGFuIG9yIGhpZ2hlcikgZm9yIHRoaXMgc3RhdGUuIEl0J3MgdW5j
bGVhcgorICAgICAgICAvLyBpZi9ob3cgdGhpbmdzIGxpa2UgbG9hZGVkbWV0YWRhdGFFdmVudCBz
aG91bGQgaGFwcGVuIGlmCisgICAgICAgIC8vIHdlIGdvIGRpcmVjdGx5IGZyb20gYmVsb3cgSEFW
RV9NRVRBREFUQSB0byBoaWdoZXIgdGhhbgorICAgICAgICAvLyBIQVZFX01FVEFEQVRBLgorICAg
ICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgb2xkU3RhdGUgPCBIQVZF
X01FVEFEQVRBKSB7CisgICAgICAgICAgICBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOworICAg
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCk7
CisgICAgICAgICAgICBzY2hlZHVsZVJlc2l6ZUV2ZW50KCk7CisgICAgICAgICAgICBzY2hlZHVs
ZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZWRtZXRhZGF0YUV2ZW50KTsKICNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSkK
LSAgICAgICAgICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVu
dCgpOworICAgICAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJr
aXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkpCisgICAgICAgICAgICAg
ICAgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7CiAjZW5k
aWYKLSAgICAgICAgbV9pbml0aWFsbHlNdXRlZCA9IG1fdm9sdW1lIDwgMC4wNSB8fCBtdXRlZCgp
OworICAgICAgICAgICAgbV9pbml0aWFsbHlNdXRlZCA9IG1fdm9sdW1lIDwgMC4wNSB8fCBtdXRl
ZCgpOwogCi0gICAgICAgIHVwZGF0ZVJlbmRlcmVyKCk7CisgICAgICAgICAgICB1cGRhdGVSZW5k
ZXJlcigpOwogCi0gICAgICAgIGlmIChpczxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKSkKLSAg
ICAgICAgICAgIGRvd25jYXN0PE1lZGlhRG9jdW1lbnQ+KGRvY3VtZW50KCkpLm1lZGlhRWxlbWVu
dE5hdHVyYWxTaXplQ2hhbmdlZChleHBhbmRlZEludFNpemUobV9wbGF5ZXItPm5hdHVyYWxTaXpl
KCkpKTsKKyAgICAgICAgICAgIGlmIChpczxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKSkKKyAg
ICAgICAgICAgICAgICBkb3duY2FzdDxNZWRpYURvY3VtZW50Pihkb2N1bWVudCgpKS5tZWRpYUVs
ZW1lbnROYXR1cmFsU2l6ZUNoYW5nZWQoZXhwYW5kZWRJbnRTaXplKG1fcGxheWVyLT5uYXR1cmFs
U2l6ZSgpKSk7CiAKLSAgICAgICAgbG9nTWVkaWFMb2FkUmVxdWVzdChkb2N1bWVudCgpLnBhZ2Uo
KSwgbV9wbGF5ZXItPmVuZ2luZURlc2NyaXB0aW9uKCksIFN0cmluZygpLCB0cnVlKTsKKyAgICAg
ICAgICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9jdW1lbnQoKS5wYWdlKCksIG1fcGxheWVyLT5l
bmdpbmVEZXNjcmlwdGlvbigpLCBTdHJpbmcoKSwgdHJ1ZSk7CiAKICNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQotICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsK
KyAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogI2VuZGlmCiAKLSAgICAg
ICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOwotICAgIH0K
KyAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQo
KTsKIAotICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xkU3Rh
dGUgPCBIQVZFX0NVUlJFTlRfREFUQSkgewotICAgICAgICBpZiAoIW1faGF2ZUZpcmVkTG9hZGVk
RGF0YSkgewotICAgICAgICAgICAgbV9oYXZlRmlyZWRMb2FkZWREYXRhID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZGRhdGFFdmVudCk7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhhdCBpdCdzIGNvcnJlY3QgdG8gc2tp
cCB0aGVzZSB0aGlzIG9wZXJhdGlvbiBqdXN0Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIG1faGF2
ZUZpcmVkTG9hZGVkRGF0YSBpcyBhbHJlYWR5IHRydWUuIEF0IG9uZSB0aW1lIHdlIHdlcmUgc2tp
cHBpbmcKLSAgICAgICAgICAgIC8vIHRoZSBjYWxsIHRvIHNldFNob3VsZERlbGF5TG9hZEV2ZW50
LCB3aGljaCB3YXMgZGVmaW5pdGVseSBpbmNvcnJlY3QuCi0gICAgICAgICAgICBhcHBseU1lZGlh
RnJhZ21lbnRVUkkoKTsKKyAgICAgICAgICAgIC8vIEFzIHRoZSBzcGVjIG9ubHkgbWVudGlvbmVz
IEhBVkVfTUVUQURBVEEsIHJ1biB0aGUgbGF0ZXIKKyAgICAgICAgICAgIC8vIHN0ZXBzIGlmIHdl
IGFyZSBtb3ZpbmcgdG8gYSBoaWdoZXIgc3RhdGUuCisgICAgICAgICAgICBpZiAobV9yZWFkeVN0
YXRlID09IEhBVkVfTUVUQURBVEEpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQoZmFsc2UpOwotICAgIH0KIAotICAgIGlm
IChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8PSBIQVZFX0NV
UlJFTlRfREFUQSAmJiB0cmFja3NBcmVSZWFkeSkKLSAgICAgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkuY2FucGxheUV2ZW50KTsKKyAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZF
X0NVUlJFTlRfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBKSB7CisgICAgICAg
ICAgICBpZiAoIW1faGF2ZUZpcmVkTG9hZGVkRGF0YSkgeworICAgICAgICAgICAgICAgIG1faGF2
ZUZpcmVkTG9hZGVkRGF0YSA9IHRydWU7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVudChl
dmVudE5hbWVzKCkubG9hZGVkZGF0YUV2ZW50KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXQncyBub3QgY2xlYXIgdGhhdCBpdCdzIGNvcnJlY3QgdG8gc2tpcCB0aGVzZSB0aGlzIG9wZXJh
dGlvbiBqdXN0CisgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBtX2hhdmVGaXJlZExvYWRlZERh
dGEgaXMgYWxyZWFkeSB0cnVlLiBBdCBvbmUgdGltZSB3ZSB3ZXJlIHNraXBwaW5nCisgICAgICAg
ICAgICAgICAgLy8gdGhlIGNhbGwgdG8gc2V0U2hvdWxkRGVsYXlMb2FkRXZlbnQsIHdoaWNoIHdh
cyBkZWZpbml0ZWx5IGluY29ycmVjdC4KKyAgICAgICAgICAgICAgICBhcHBseU1lZGlhRnJhZ21l
bnRVUkkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2
ZW50KGZhbHNlKTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyByZWFkeSBzdGF0ZSBpcyBI
QVZFX0ZVVFVSRV9EQVRBIG9yIEhBVkVfRU5PVUdIX0RBVEEsIHRoZW4gdGhlIHJlbGV2YW50IHN0
ZXBzIGJlbG93IG11c3QgdGhlbiBiZSBydW4gYWxzby4KKyAgICAgICAgICAgIGlmIChtX3JlYWR5
U3RhdGUgPCBIQVZFX0ZVVFVSRV9EQVRBKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF0cmFja3NBcmVSZWFkeSkKKyAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0VOT1VHSF9EQVRBICYmIG9sZFN0YXRlIDwg
SEFWRV9FTk9VR0hfREFUQSAmJiB0cmFja3NBcmVSZWFkeSkgewotICAgICAgICBpZiAob2xkU3Rh
dGUgPD0gSEFWRV9DVVJSRU5UX0RBVEEpCisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFW
RV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSkgewogICAgICAg
ICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuY2FucGxheUV2ZW50KTsKIAotICAgICAg
ICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5jYW5wbGF5dGhyb3VnaEV2ZW50KTsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBlbGVtZW504oCZcyBwYXVzZWQgYXR0cmlidXRlIGlzIGZhbHNlLCB0
aGUgdXNlciBhZ2VudCBtdXN0IHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5h
bWVkIHBsYXlpbmcgYXQgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICBpZiAoIXBhdXNlZCgpKQor
ICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY2FuVHJhbnNpdGlvbiA9IGNhblRy
YW5zaXRpb25Gcm9tQXV0b3BsYXlUb1BsYXkoKTsKLSAgICAgICAgaWYgKGNhblRyYW5zaXRpb24p
IHsKLSAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRTaG93UG9z
dGVyRmxhZyhmYWxzZSk7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVkVGltZSgpOwotICAg
ICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXli
YWNrU3RhdGU6OlN0YXJ0ZWRXaXRob3V0VXNlckdlc3R1cmUpOwotICAgICAgICAgICAgbV9wbGF5
YmFja1N0YXJ0ZWRUaW1lID0gY3VycmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7Ci0gICAgICAg
ICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICB9IGVs
c2UgaWYgKGNhblRyYW5zaXRpb24uZXJyb3IoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29u
OjpVc2VyR2VzdHVyZVJlcXVpcmVkKSB7Ci0gICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5U
SUZJRVIsICJBdXRvcGxheSBibG9ja2VkLCB1c2VyIGdlc3R1cmUgcmVxdWlyZWQiKTsKLSAgICAg
ICAgICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFj
a1N0YXRlOjpQcmV2ZW50ZWRBdXRvcGxheSk7CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0g
SEFWRV9FTk9VR0hfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVfRU5PVUdIX0RBVEEpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyByZWFkeSBzdGF0ZSB3YXMgSEFWRV9DVVJSRU5UX0RB
VEEgb3IgbGVzcywKKyAgICAgICAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgcXVldWUgYSBt
ZWRpYSBlbGVtZW50IHRhc2sgZ2l2ZW4gdGhlIG1lZGlhIGVsZW1lbnQgdG8gZmlyZSBhbiBldmVu
dCBuYW1lZCBjYW5wbGF5IGF0IHRoZSBlbGVtZW50LAorICAgICAgICAgICAgLy8gYW5kLCBpZiB0
aGUgZWxlbWVudCdzIHBhdXNlZCBhdHRyaWJ1dGUgaXMgZmFsc2UsIG5vdGlmeSBhYm91dCBwbGF5
aW5nIGZvciB0aGUgZWxlbWVudC4KKyAgICAgICAgICAgIGlmIChvbGRTdGF0ZSA8PSBIQVZFX0NV
UlJFTlRfREFUQSkgeworICAgICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygp
LmNhbnBsYXlFdmVudCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXVzZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2NoZWR1bGVOb3RpZnlBYm91dFBsYXlpbmcoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gVGhlIHVzZXIgYWdlbnQgbXVzdCBxdWV1ZSBhIG1lZGlhIGVsZW1l
bnQgdGFzayBnaXZlbiB0aGUgbWVkaWEgZWxlbWVudCB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGNh
bnBsYXl0aHJvdWdoIGF0IHRoZSBlbGVtZW50LgorICAgICAgICAgICAgc2NoZWR1bGVFdmVudChl
dmVudE5hbWVzKCkuY2FucGxheXRocm91Z2hFdmVudCk7CisKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBlbGVtZW50IGlzIG5vdCBlbGlnaWJsZSBmb3IgYXV0b3BsYXksIHRoZW4gdGhlIHVzZXIgYWdl
bnQgbXVzdCBhYm9ydCB0aGVzZSBzdWJzdGVwcy4KKyAgICAgICAgICAgIC8vIFRoZSB1c2VyIGFn
ZW50IG1heSBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczoKKyAgICAgICAgICAgIC8vIFNldCB0
aGUgcGF1c2VkIGF0dHJpYnV0ZSB0byBmYWxzZS4KKyAgICAgICAgICAgIC8vIElmIHRoZSBlbGVt
ZW50J3Mgc2hvdyBwb3N0ZXIgZmxhZyBpcyB0cnVlLCBzZXQgaXQgdG8gZmFsc2UgYW5kIHJ1biB0
aGUgdGltZSBtYXJjaGVzIG9uIHN0ZXBzLgorICAgICAgICAgICAgLy8gUXVldWUgYSBtZWRpYSBl
bGVtZW50IHRhc2sgZ2l2ZW4gdGhlIGVsZW1lbnQgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBwbGF5
IGF0IHRoZSBlbGVtZW50LgorICAgICAgICAgICAgLy8gTm90aWZ5IGFib3V0IHBsYXlpbmcgZm9y
IHRoZSBlbGVtZW50LgorICAgICAgICAgICAgYXV0byBjYW5UcmFuc2l0aW9uID0gY2FuVHJhbnNp
dGlvbkZyb21BdXRvcGxheVRvUGxheSgpOworICAgICAgICAgICAgaWYgKGNhblRyYW5zaXRpb24p
IHsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNl
dFNob3dQb3N0ZXJGbGFnKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVk
VGltZSgpOworICAgICAgICAgICAgICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1
dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpTdGFydGVkV2l0aG91dFVzZXJHZXN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBtX3BsYXliYWNrU3RhcnRlZFRpbWUgPSBjdXJyZW50TWVkaWFUaW1lKCku
dG9Eb3VibGUoKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5w
bGF5RXZlbnQpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5QWJvdXRQbGF5aW5nKCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNhblRyYW5zaXRpb24uZXJyb3IoKSA9PSBNZWRpYVBs
YXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVyZVJlcXVpcmVkKSB7CisgICAgICAgICAgICAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiQXV0b3BsYXkgYmxvY2tlZCwgdXNlciBnZXN0
dXJlIHJlcXVpcmVkIik7CisgICAgICAgICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXliYWNr
U3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9wbGF5KTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KKyAgICB9IHdoaWxlIChmYWxzZSk7CiAKICAg
ICAvLyBJZiB3ZSB0cmFuc2l0aW9uIHRvIHRoZSBGdXR1cmUgRGF0YSBzdGF0ZSBhbmQgd2UncmUg
YWJvdXQgdG8gYmVnaW4gcGxheWluZywgZW5zdXJlIHBsYXliYWNrIGlzIGFjdHVhbGx5IHBlcm1p
dHRlZCBmaXJzdCwKICAgICAvLyBob25vcmluZyBhbnkgcGxheWJhY2sgZGVuaWFsIHJlYXNvbnMg
c3VjaCBhcyB0aGUgcmVxdWlyZW1lbnQgb2YgYSB1c2VyIGdlc3R1cmUuCkBAIC0zNTI4LDggKzM1
NjgsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5SW50ZXJuYWwoKQogCiAgICAgICAg
IHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnBsYXlFdmVudCk7CiAKKyAgICAgICAgLy8gSWYg
dGhlIG1lZGlhIGVsZW1lbnQncyByZWFkeVN0YXRlIGF0dHJpYnV0ZSBoYXMgdGhlIHZhbHVlIEhB
VkVfTk9USElORywgSEFWRV9NRVRBREFUQSwgb3IgSEFWRV9DVVJSRU5UX0RBVEEsCisgICAgICAg
IC8vIHF1ZXVlIGEgbWVkaWEgZWxlbWVudCB0YXNrIGdpdmVuIHRoZSBtZWRpYSBlbGVtZW50IHRv
IGZpcmUgYW4gZXZlbnQgbmFtZWQgd2FpdGluZyBhdCB0aGUgZWxlbWVudC4KKyAgICAgICAgLy8g
T3RoZXJ3aXNlLCB0aGUgbWVkaWEgZWxlbWVudCdzIHJlYWR5U3RhdGUgYXR0cmlidXRlIGhhcyB0
aGUgdmFsdWUgSEFWRV9GVVRVUkVfREFUQSBvciBIQVZFX0VOT1VHSF9EQVRBOgorICAgICAgICAv
LyBub3RpZnkgYWJvdXQgcGxheWluZyBmb3IgdGhlIGVsZW1lbnQuCiAgICAgICAgIGlmIChtX3Jl
YWR5U3RhdGUgPD0gSEFWRV9DVVJSRU5UX0RBVEEpCiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50
KGV2ZW50TmFtZXMoKS53YWl0aW5nRXZlbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
Y2hlZHVsZU5vdGlmeUFib3V0UGxheWluZygpOwogICAgIH0gZWxzZSBpZiAobV9yZWFkeVN0YXRl
ID49IEhBVkVfRlVUVVJFX0RBVEEpCiAgICAgICAgIHNjaGVkdWxlUmVzb2x2ZVBlbmRpbmdQbGF5
UHJvbWlzZXMoKTsKIApAQCAtNTQ2Myw5ICs1NTA5LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKIAogICAgIG1fcGxheWluZyA9IHBsYXlpbmc7CiAK
LSAgICBpZiAobV9wbGF5aW5nKQotICAgICAgICBzY2hlZHVsZU5vdGlmeUFib3V0UGxheWluZygp
OwotCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogCiAjaWYgRU5BQkxF
KFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>