<?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>229168</bug_id>
          
          <creation_ts>2021-08-16 15:39:47 -0700</creation_ts>
          <short_desc>Make ThreadSafeRefCounted::deref race condition safe</short_desc>
          <delta_ts>2025-12-18 10:12:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</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>
          <dependson>229018</dependson>
          <blocked>229171</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784667</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-16 15:39:47 -0700</bug_when>
    <thetext>Address a subtle race condition in ThreadSafeRefCountedBase::derefBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784694</commentid>
    <comment_count>1</comment_count>
      <attachid>435645</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-16 16:59:44 -0700</bug_when>
    <thetext>Created attachment 435645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784695</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-16 17:00:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/82004905&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784863</commentid>
    <comment_count>3</comment_count>
      <attachid>435645</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-08-17 10:08:13 -0700</bug_when>
    <thetext>Comment on attachment 435645
Patch

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

&gt; Source/WTF/ChangeLog:16
&gt; +        This patch also makes use of appropraite std::memory_order in ThreadSafeRefCountedBase&apos;s

appropriate

&gt; Source/WTF/wtf/CheckedRef.h:233
&gt; +    void incrementPtrCount() { m_count.fetch_add(std::memory_order_release); }

std::shared_ptr does not use a memory order on increment. Are you sure we need one?

If we need one, I believe acquire is the appropriate memory order, not release -- because we are acquiring access to this object.

&gt; Source/WTF/wtf/ThreadSafeRefCounted.h:51
&gt; +        ASSERT_WITH_SECURITY_IMPLICATION(!deletionHasBegun());

What should we do about code that puts an object into a RefPtr during its destructor, simply because our programming idiom demands it, and not to extend the lifetime of the object?

&gt; Source/WTF/wtf/ThreadSafeRefCounted.h:74
&gt; +        // Setting m_refCount to 1 here prevents double delete within the destructor. See webkit.org/b/201576.
&gt; +        unsigned refCountToBeginDeletingThis = 1;
&gt; +        if (m_refCount.compare_exchange_strong(refCountToBeginDeletingThis, s_deletionHasBegunRefCount, std::memory_order_acq_rel))

This line of code tests for 1; it does not set to 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784910</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-17 13:01:27 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #3)
&gt; Comment on attachment 435645 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=435645&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:16
&gt; &gt; +        This patch also makes use of appropraite std::memory_order in ThreadSafeRefCountedBase&apos;s
&gt; 
&gt; appropriate

Fixed.

&gt; &gt; Source/WTF/wtf/CheckedRef.h:233
&gt; &gt; +    void incrementPtrCount() { m_count.fetch_add(std::memory_order_release); }
&gt; 
&gt; std::shared_ptr does not use a memory order on increment. Are you sure we
&gt; need one?

Yes, because in the case of std::shared_ptr or RefPtr, there is no effect from ref() call. That is, as long as another Ref/RefPtr&apos;s deref doesn&apos;t happen after this ref() call, we don&apos;t end up deleting the object.

CheckedPtr/CheckedRef is different. incrementPtrCount() has an effect in that the destructor may release assert that the counter is 0.

Consider the following code:
1. bar-&gt;incrementPtrCount()
2. bar-&gt;f()
3. bar-&gt;decrementPtrCount()

The compiler may re-order (2) to be either before (1) or after (3) if it can determine that there is no single thread memory dependency:

2. bar-&gt;f()
1. bar-&gt;incrementPtrCount()
3. bar-&gt;decrementPtrCount()

1. bar-&gt;incrementPtrCount()
3. bar-&gt;decrementPtrCount()
2. bar-&gt;f()

Either codegen is problematic because we rely on f() call to happen while ptrCount is positive for the destructor&apos;s release assertion to catch UAF.

&gt; If we need one, I believe acquire is the appropriate memory order, not
&gt; release -- because we are acquiring access to this object.

No, acquire/release really refers to load/store memory operations. Here, we don&apos;t really care when ptrCount is loaded. If it happens many instructions / statements earlier, we don&apos;t care. What we care is *store* of new ptrCount because we want to ensure ptrCount is positive, not zero; not that it was zero or non-zero immediately before calling incrementPtrCount.

&gt; &gt; Source/WTF/wtf/ThreadSafeRefCounted.h:51
&gt; &gt; +        ASSERT_WITH_SECURITY_IMPLICATION(!deletionHasBegun());
&gt; 
&gt; What should we do about code that puts an object into a RefPtr during its
&gt; destructor, simply because our programming idiom demands it, and not to
&gt; extend the lifetime of the object?

Right, we discussed getting rid of these assertions. But we have the same assertion in RefCounted so I decided to keep it for now. It&apos;s probably a good idea to get rid of altogether in a separate patch.

&gt; 
&gt; &gt; Source/WTF/wtf/ThreadSafeRefCounted.h:74
&gt; &gt; +        // Setting m_refCount to 1 here prevents double delete within the destructor. See webkit.org/b/201576.
&gt; &gt; +        unsigned refCountToBeginDeletingThis = 1;
&gt; &gt; +        if (m_refCount.compare_exchange_strong(refCountToBeginDeletingThis, s_deletionHasBegunRefCount, std::memory_order_acq_rel))
&gt; 
&gt; This line of code tests for 1; it does not set to 1.

Yeah, I&apos;d update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784926</commentid>
    <comment_count>5</comment_count>
      <attachid>435711</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-17 13:45:10 -0700</bug_when>
    <thetext>Created attachment 435711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784954</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-08-17 15:34:32 -0700</bug_when>
    <thetext>&gt; Consider the following code:
&gt; 1. bar-&gt;incrementPtrCount()
&gt; 2. bar-&gt;f()
&gt; 3. bar-&gt;decrementPtrCount()
&gt; 
&gt; The compiler may re-order (2) to be either before (1) or after (3) if it can
&gt; determine that there is no single thread memory dependency:
&gt; 
&gt; 2. bar-&gt;f()
&gt; 1. bar-&gt;incrementPtrCount()
&gt; 3. bar-&gt;decrementPtrCount()

My understanding is that loads and stores cannot be moved *below* a release, but can be moved *above* a release. Therefore, a release in incrementPtrCount() does not prohibit this reordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784988</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-17 16:39:51 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #6)
&gt; &gt; Consider the following code:
&gt; &gt; 1. bar-&gt;incrementPtrCount()
&gt; &gt; 2. bar-&gt;f()
&gt; &gt; 3. bar-&gt;decrementPtrCount()
&gt; &gt; 
&gt; &gt; The compiler may re-order (2) to be either before (1) or after (3) if it can
&gt; &gt; determine that there is no single thread memory dependency:
&gt; &gt; 
&gt; &gt; 2. bar-&gt;f()
&gt; &gt; 1. bar-&gt;incrementPtrCount()
&gt; &gt; 3. bar-&gt;decrementPtrCount()
&gt; 
&gt; My understanding is that loads and stores cannot be moved *below* a release,
&gt; but can be moved *above* a release. Therefore, a release in
&gt; incrementPtrCount() does not prohibit this reordering.

Oh, I see. Yeah, I guess we need memory_order_acq_rel then because we need to prohibit both reordering possibilities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784989</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-17 16:42:01 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #7)
&gt; (In reply to Geoffrey Garen from comment #6)
&gt; &gt; &gt; Consider the following code:
&gt; &gt; &gt; 1. bar-&gt;incrementPtrCount()
&gt; &gt; &gt; 2. bar-&gt;f()
&gt; &gt; &gt; 3. bar-&gt;decrementPtrCount()
&gt; &gt; &gt; 
&gt; &gt; &gt; The compiler may re-order (2) to be either before (1) or after (3) if it can
&gt; &gt; &gt; determine that there is no single thread memory dependency:
&gt; &gt; &gt; 
&gt; &gt; &gt; 2. bar-&gt;f()
&gt; &gt; &gt; 1. bar-&gt;incrementPtrCount()
&gt; &gt; &gt; 3. bar-&gt;decrementPtrCount()
&gt; &gt; 
&gt; &gt; My understanding is that loads and stores cannot be moved *below* a release,
&gt; &gt; but can be moved *above* a release. Therefore, a release in
&gt; &gt; incrementPtrCount() does not prohibit this reordering.
&gt; 
&gt; Oh, I see. Yeah, I guess we need memory_order_acq_rel then because we need
&gt; to prohibit both reordering possibilities.

Never mind. Reordering things to be after incrementPtrCount() is safe, just not decrementPtrCount() so memory_order_acquire will suffice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785067</commentid>
    <comment_count>9</comment_count>
      <attachid>435753</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-18 00:50:00 -0700</bug_when>
    <thetext>Created attachment 435753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785174</commentid>
    <comment_count>10</comment_count>
      <attachid>435753</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-08-18 10:59:14 -0700</bug_when>
    <thetext>Comment on attachment 435753
Patch

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

r=me

&gt; Source/WTF/wtf/ThreadSafeRefCounted.h:78
&gt; +        // Using s_deletionHasBegunRefCount instead of 0 prevents double delete. See webkit.org/b/201576.
&gt; +        unsigned refCountToBeginDeletingThis = 1;
&gt; +        if (m_refCount.compare_exchange_strong(refCountToBeginDeletingThis, s_deletionHasBegunRefCount, std::memory_order_acq_rel))
&gt;              return true;
&gt; -        }
&gt;  
&gt; +        m_refCount.fetch_sub(1, std::memory_order_release);
&gt;          return false;

I think we might be able to make this more efficient by doing a naked load, then branching to decide whether to take the delete or decrement path, then doing a compare_exchange to commit our decision, then looping if the compare_exchange fails. That way, in the normal non-deleting case, there&apos;s only one atomic refcount change instead of two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785224</commentid>
    <comment_count>11</comment_count>
      <attachid>435753</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-18 14:42:32 -0700</bug_when>
    <thetext>Comment on attachment 435753
Patch

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

&gt;&gt; Source/WTF/wtf/ThreadSafeRefCounted.h:78
&gt;&gt;          return false;
&gt; 
&gt; I think we might be able to make this more efficient by doing a naked load, then branching to decide whether to take the delete or decrement path, then doing a compare_exchange to commit our decision, then looping if the compare_exchange fails. That way, in the normal non-deleting case, there&apos;s only one atomic refcount change instead of two.

You mean something like this?

while (1) {
    auto currentRefCount = m_refCount.load(std::memory_order_relaxed);
    bool shouldDelete = currentRefCount == 1;
    auto newRefCount = shouldDelete ? s_deletionHasBegunRefCount : currentRefCount - 1;
    if (m_refCount.compare_exchange_weak(currentRefCount, newRefCount, std::memory_order_release))
        return shouldDelete;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785247</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-08-18 15:32:47 -0700</bug_when>
    <thetext>&gt; You mean something like this?
&gt; 
&gt; while (1) {
&gt;     auto currentRefCount = m_refCount.load(std::memory_order_relaxed);
&gt;     bool shouldDelete = currentRefCount == 1;
&gt;     auto newRefCount = shouldDelete ? s_deletionHasBegunRefCount :
&gt; currentRefCount - 1;
&gt;     if (m_refCount.compare_exchange_weak(currentRefCount, newRefCount,
&gt; std::memory_order_release))
&gt;         return shouldDelete;
&gt; }

Yeah.

Or:

while (1) {
    auto refCount = m_refCount.load(std::memory_order_relaxed);
    if (refCount == 1) {
        if (m_refCount.compare_exchange_weak(refCount, s_deletionHasBegunRefCount, memory_order_release)
            break;
    } else {
        if (m_refCount.compare_exchange_weak(refCount, refCount - 1,
std::memory_order_release))
            break;
    }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785298</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-18 17:37:32 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #12)
&gt; &gt; You mean something like this?
&gt; &gt; 
&gt; &gt; while (1) {
&gt; &gt;     auto currentRefCount = m_refCount.load(std::memory_order_relaxed);
&gt; &gt;     bool shouldDelete = currentRefCount == 1;
&gt; &gt;     auto newRefCount = shouldDelete ? s_deletionHasBegunRefCount :
&gt; &gt; currentRefCount - 1;
&gt; &gt;     if (m_refCount.compare_exchange_weak(currentRefCount, newRefCount,
&gt; &gt; std::memory_order_release))
&gt; &gt;         return shouldDelete;
&gt; &gt; }
&gt; 
&gt; Yeah.
&gt; 
&gt; Or:
&gt; 
&gt; while (1) {
&gt;     auto refCount = m_refCount.load(std::memory_order_relaxed);
&gt;     if (refCount == 1) {
&gt;         if (m_refCount.compare_exchange_weak(refCount,
&gt; s_deletionHasBegunRefCount, memory_order_release)
&gt;             break;
&gt;     } else {
&gt;         if (m_refCount.compare_exchange_weak(refCount, refCount - 1,
&gt; std::memory_order_release))
&gt;             break;
&gt;     }
&gt; }

Ok. I&apos;d do this:
while (1) {
    auto currentRefCount = m_refCount.load(std::memory_order_relaxed);
    auto newRefCount = currentRefCount - 1;
    if (!newRefCount) {
        // Using s_deletionHasBegunRefCount instead of 0 prevents double delete. See webkit.org/b/201576.
        if (m_refCount.compare_exchange_weak(currentRefCount, s_deletionHasBegunRefCount, std::memory_order_release))
            return true;
    } else {
        if (m_refCount.compare_exchange_weak(currentRefCount, newRefCount, std::memory_order_release))
            return false;
    }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785301</commentid>
    <comment_count>14</comment_count>
      <attachid>435822</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-18 17:39:48 -0700</bug_when>
    <thetext>Created attachment 435822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785389</commentid>
    <comment_count>15</comment_count>
      <attachid>435822</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-18 23:54:44 -0700</bug_when>
    <thetext>Comment on attachment 435822
Patch

Actually, this patch has already been reviewed by Geoff. Just making it go through EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786682</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-08-24 00:58:50 -0700</bug_when>
    <thetext>Hm... looks like this will result in 0.2~0.4% Speedometer 2 regression on iPad Pro 2. That sucks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435645</attachid>
            <date>2021-08-16 16:59:44 -0700</date>
            <delta_ts>2021-08-17 13:45:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229168-20210816165943.patch</filename>
            <type>text/plain</type>
            <size>7266</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUzMzdlZmE2YWIwNzcwNDBmZjNiYWQ1
NzEwNTAxYThlNGUxOTgxMzUuLmI5NjcwMjk2ZTYxZDZkYjlmZGE5YTA3Njc1ZmJjNWJjZDIyMWFj
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDgtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZDo6ZGVyZWYg
cmFjZSBjb25kaXRpb24gc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI5MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4ZWQgdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiBUaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSB3aGVyZSBtdWx0aXBsZSB0aHJlYWRzCisgICAgICAg
IHRyeWluZyB0byBjYWxsIHRoZSBsYXN0IGRlcmVmKCkgYXQgdGhlIHNhbWUgdGltZSBjYW4gcmVz
dWx0IGluIGRvdWJsZSBkZWxldGVzLgorCisgICAgICAgIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2gg
c2V0cyBtX3JlZkNvdW50IHRvIDJeMzEgaW5kaWNhdGluZyB3aGVuIHRoZSBvYmplY3QgZGVsZXRp
b24gaGFzIGJlZ3VuCisgICAgICAgIGluc3RlYWQgb2YgcmUtc2V0dGluZyB0byAxIGFmdGVyIHRo
ZSBmYWN0ICh3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gYmVpbmcgZml4ZWQpLgorICAgICAg
ICBUaGlzIHZhbHVlIGlzIHNhZmUgZnJvbSAyXjMxIGJhZCBpbmNyZW1lbnRzIG9yIDJeMzEgYmFk
IGRlY3JlbWVudHM7IGkuZS4gdGhlIHNhZmVzdCB2YWx1ZQorICAgICAgICB0byBhdm9pZCBkb3Vi
bGUgZGVsZXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2VzIHVzZSBvZiBhcHBy
b3ByYWl0ZSBzdGQ6Om1lbW9yeV9vcmRlciBpbiBUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2Uncwor
ICAgICAgICByZWYsIGFuZCBkZXJlZkJhc2UgYXMgd2VsbCBhcyBDYW5NYWtlQ2hlY2tlZFB0ckJh
c2UncyBpbmNyZW1lbnRQdHJDb3VudCBhbmQgZGVjcmVtZW50UHRyQ291bnQKKyAgICAgICAgYXMg
cGVyZiBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogd3RmL0NoZWNrZWRSZWYuaDoKKyAgICAg
ICAgKFdURjo6Q2FuTWFrZUNoZWNrZWRQdHJCYXNlOjppbmNyZW1lbnRQdHJDb3VudCk6IAorICAg
ICAgICAoV1RGOjpDYW5NYWtlQ2hlY2tlZFB0ckJhc2U6OmRlY3JlbWVudFB0ckNvdW50KToKKyAg
ICAgICAgKFdURjo6U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46OmZl
dGNoX2FkZCk6CisgICAgICAgIChXVEY6OlNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRl
Z3JhbFR5cGU+OjpmZXRjaF9zdWIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6On5UaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6
OnJlZiBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6aGFz
T25lUmVmIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlOjpy
ZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6
ZGVsZXRpb25IYXNCZWd1biBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZTo6ZGVyZWZCYXNlIGNvbnN0KToKKwogMjAyMS0wOC0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdGhyZWFkIHNhZmUgdmVyc2lvbiBvZiBD
YW5NYWtlQ2hlY2tlZFB0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5o
IGIvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5oCmluZGV4IDM5M2YxMjM4YTY1ZmU2MDQ0YmE1
Nzg5Y2JjMDgyMWIxM2VmMGEyOGMuLmFkY2YzNWE1ZDVkMjdhM2E4OThlZDRhZjE2YzNmY2UzYTFi
NDNiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkUmVmLmgKQEAgLTIzMCw4ICsyMzAsOCBAQCBwdWJsaWM6CiAgICAg
fkNhbk1ha2VDaGVja2VkUHRyQmFzZSgpIHsgUkVMRUFTRV9BU1NFUlQoIW1fY291bnQpOyB9CiAK
ICAgICBQdHJDb3VudGVyVHlwZSBwdHJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
LSAgICB2b2lkIGluY3JlbWVudFB0ckNvdW50KCkgeyArK21fY291bnQ7IH0KLSAgICB2b2lkIGRl
Y3JlbWVudFB0ckNvdW50KCkgeyBBU1NFUlQobV9jb3VudCk7IC0tbV9jb3VudDsgfQorICAgIHZv
aWQgaW5jcmVtZW50UHRyQ291bnQoKSB7IG1fY291bnQuZmV0Y2hfYWRkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOyB9CisgICAgdm9pZCBkZWNyZW1lbnRQdHJDb3VudCgpIHsgQVNTRVJUKG1f
Y291bnQpOyBtX2NvdW50LmZldGNoX3N1YihzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsgfQog
CiBwcml2YXRlOgogICAgIFN0b3JhZ2VUeXBlIG1fY291bnQgeyAwIH07CkBAIC0yNDQsNiArMjQ0
LDggQEAgcHVibGljOgogCiAgICAgb3BlcmF0b3IgSW50ZWdyYWxUeXBlKCkgY29uc3Q7CiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdDsKKyAgICBJbnRlZ3JhbFR5cGUgZmV0Y2hfYWRkKHN0ZDo6
bWVtb3J5X29yZGVyKTsKKyAgICBJbnRlZ3JhbFR5cGUgZmV0Y2hfc3ViKHN0ZDo6bWVtb3J5X29y
ZGVyKTsKICAgICBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXImIG9wZXJhdG9yKysoKTsKICAg
ICBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXImIG9wZXJhdG9yLS0oKTsKIApAQCAtMjc4LDYg
KzI4MCwyMCBAQCBpbmxpbmUgYm9vbCBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8SW50ZWdy
YWxUeXBlPjo6b3BlcmF0b3IhKCkgY29uc3QKICAgICByZXR1cm4gIW1fdmFsdWU7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CitpbmxpbmUgSW50ZWdyYWxUeXBlIFNpbmds
ZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRlZ3JhbFR5cGU+OjpmZXRjaF9hZGQoc3RkOjptZW1v
cnlfb3JkZXIpCit7CisgICAgYXNzZXJ0VGhyZWFkKCk7CisgICAgcmV0dXJuIG1fdmFsdWUrKzsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEludGVncmFsVHlwZT4KK2lubGluZSBJbnRlZ3JhbFR5
cGUgU2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46OmZldGNoX3N1Yihz
dGQ6Om1lbW9yeV9vcmRlcikKK3sKKyAgICBhc3NlcnRUaHJlYWQoKTsKKyAgICByZXR1cm4gbV92
YWx1ZS0tOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPgogaW5saW5lIFNp
bmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRlZ3JhbFR5cGU+JiBTaW5nbGVUaHJlYWRJbnRl
Z3JhbFdyYXBwZXI8SW50ZWdyYWxUeXBlPjo6b3BlcmF0b3IrKygpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaAppbmRleCAzZWZiMDFhZWNkMDAyMzQ0YWU5Zjg3ZGViMjYzMjFh
YjUyMDUzM2RmLi41MDNmZDQ4NjBhZDY0MzFkYzFmMDhmYzUyZWQ1NDEzYWNlM2EyZWVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKQEAgLTMyLDc2ICszMiw1OSBAQAogCiBu
YW1lc3BhY2UgV1RGIHsKIAotI2lmIGRlZmluZWQoTkRFQlVHKSAmJiAhRU5BQkxFKFNFQ1VSSVRZ
X0FTU0VSVElPTlMpCi0jZGVmaW5lIENIRUNLX1RIUkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVD
WUNMRSAwCi0jZWxzZQotI2RlZmluZSBDSEVDS19USFJFQURfU0FGRV9SRUZfQ09VTlRFRF9MSUZF
Q1lDTEUgMQotI2VuZGlmCi0KIGNsYXNzIFRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZEJh
c2UoKSA9IGRlZmF1bHQ7CiAKLSNpZiBDSEVDS19USFJFQURfU0FGRV9SRUZfQ09VTlRFRF9MSUZF
Q1lDTEUKKyNpZiBFTkFCTEUoU0VDVVJJVFlfQVNTRVJUSU9OUykKICAgICB+VGhyZWFkU2FmZVJl
ZkNvdW50ZWRCYXNlKCkKICAgICB7CiAgICAgICAgIC8vIFdoZW4gdGhpcyBUaHJlYWRTYWZlUmVm
Q291bnRlZCBvYmplY3QgaXMgYSBwYXJ0IG9mIGFub3RoZXIgb2JqZWN0LCBkZXJlZkJhc2UoKSBp
cyBuZXZlciBjYWxsZWQgb24gdGhpcyBvYmplY3QuCi0gICAgICAgIG1fZGVsZXRpb25IYXNCZWd1
biA9IHRydWU7CisgICAgICAgIG1fcmVmQ291bnQgPSBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3Vu
dDsKICAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQgcmVmKCkgY29uc3QKICAgICB7Ci0jaWYgQ0hF
Q0tfVEhSRUFEX1NBRkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0gICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFtX2RlbGV0aW9uSGFzQmVndW4pOwotI2VuZGlmCi0gICAg
ICAgICsrbV9yZWZDb3VudDsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CisgICAgICAgIG1fcmVmQ291bnQuZmV0Y2hfYWRkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogICAgIH0KIAogICAgIGJvb2wgaGFzT25lUmVmKCkg
Y29uc3QKICAgICB7Ci0jaWYgQ0hFQ0tfVEhSRUFEX1NBRkVfUkVGX0NPVU5URURfTElGRUNZQ0xF
Ci0gICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKLSNlbmRpZgotICAgICAgICBy
ZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighZGVsZXRpb25IYXNCZWd1bigpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQg
PT0gMTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9yZWZDb3VudDsKLSAgICB9CisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3JlZkNvdW50ICYgc19yZWZDb3VudE1hc2s7IH0KKyAgICBib29sIGRl
bGV0aW9uSGFzQmVndW4oKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ID09IHNfZGVsZXRpb25I
YXNCZWd1blJlZkNvdW50OyB9CiAKIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIg
dGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KICAgICBib29sIGRlcmVmQmFzZSgp
IGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7CisgICAgICAgIEFTU0VS
VChyZWZDb3VudCgpKTsKIAotI2lmIENIRUNLX1RIUkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVD
WUNMRQotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9kZWxldGlv
bkhhc0JlZ3VuKTsKLSNlbmRpZgorICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighZGVsZXRpb25IYXNCZWd1bigpKTsKIAotICAgICAgICBpZiAoVU5MSUtFTFkoIS0tbV9y
ZWZDb3VudCkpIHsKLSAgICAgICAgICAgIC8vIFNldHRpbmcgbV9yZWZDb3VudCB0byAxIGhlcmUg
cHJldmVudHMgZG91YmxlIGRlbGV0ZSB3aXRoaW4gdGhlIGRlc3RydWN0b3IgYnV0IG5vdCBmcm9t
IGFub3RoZXIgdGhyZWFkCi0gICAgICAgICAgICAvLyBzaW5jZSBzdWNoIGEgdGhyZWFkIGNvdWxk
IGhhdmUgcmVmJ2VkIHRoaXMgb2JqZWN0IGxvbmcgYWZ0ZXIgaXQgaGFkIGJlZW4gZGVsZXRlZC4g
U2VlIHdlYmtpdC5vcmcvYi8yMDE1NzYuCi0gICAgICAgICAgICBtX3JlZkNvdW50ID0gMTsKLSNp
ZiBDSEVDS19USFJFQURfU0FGRV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUKLSAgICAgICAgICAgIG1f
ZGVsZXRpb25IYXNCZWd1biA9IHRydWU7Ci0jZW5kaWYKKyAgICAgICAgLy8gU2V0dGluZyBtX3Jl
ZkNvdW50IHRvIDEgaGVyZSBwcmV2ZW50cyBkb3VibGUgZGVsZXRlIHdpdGhpbiB0aGUgZGVzdHJ1
Y3Rvci4gU2VlIHdlYmtpdC5vcmcvYi8yMDE1NzYuCisgICAgICAgIHVuc2lnbmVkIHJlZkNvdW50
VG9CZWdpbkRlbGV0aW5nVGhpcyA9IDE7CisgICAgICAgIGlmIChtX3JlZkNvdW50LmNvbXBhcmVf
ZXhjaGFuZ2Vfc3Ryb25nKHJlZkNvdW50VG9CZWdpbkRlbGV0aW5nVGhpcywgc19kZWxldGlvbkhh
c0JlZ3VuUmVmQ291bnQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KIAorICAgICAgICBtX3JlZkNvdW50LmZldGNoX3N1Yihz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBtdXRhYmxlIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBtX3JlZkNvdW50
IHsgMSB9OworICAgIC8vIFNldCB0aGUgaGlnaGVzdCBiaXQgKDB4MTAwLi4wKS4gRG9uJ3Qgc2V0
IGFsbCBiaXRzIHRvIDEgc2luY2UgdGhhdCBjYW4gY2F1c2Ugb3ZlcmZsb3cgZWFzaWx5LgorICAg
IC8vIEl0IHJlcXVpcmVzIHRoZSBtaW5pbXVtIG9mIDJeMzEgLSAxIG9wZXJhdGlvbnMgdG8gb3Zl
cmZsb3cgb3IgdW5kZXJmbG93IGZyb20gdGhpcyB2YWx1ZS4KKyAgICBjb25zdGV4cHIgc3RhdGlj
IHVuc2lnbmVkIHNfcmVmQ291bnRNYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSA+PiAx
OworICAgIGNvbnN0ZXhwciBzdGF0aWMgdW5zaWduZWQgc19kZWxldGlvbkhhc0JlZ3VuUmVmQ291
bnQgPSB+c19yZWZDb3VudE1hc2s7CiAKLSNpZiBDSEVDS19USFJFQURfU0FGRV9SRUZfQ09VTlRF
RF9MSUZFQ1lDTEUKLSAgICBtdXRhYmxlIHN0ZDo6YXRvbWljPGJvb2w+IG1fZGVsZXRpb25IYXNC
ZWd1biB7IGZhbHNlIH07Ci0jZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6YXRvbWljPHVuc2lnbmVk
PiBtX3JlZkNvdW50IHsgMSB9OwogfTsKIAogZW51bSBjbGFzcyBEZXN0cnVjdGlvblRocmVhZCB7
IEFueSwgTWFpbiwgTWFpblJ1bkxvb3AgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435711</attachid>
            <date>2021-08-17 13:45:10 -0700</date>
            <delta_ts>2021-08-18 00:49:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229168-20210817134509.patch</filename>
            <type>text/plain</type>
            <size>7457</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUzMzdlZmE2YWIwNzcwNDBmZjNiYWQ1
NzEwNTAxYThlNGUxOTgxMzUuLjAzYThkY2QyYTUzMTlmNDNkMGE1OGI3MjczYzcwZmY3YWVjMDE5
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDgtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZDo6ZGVyZWYg
cmFjZSBjb25kaXRpb24gc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI5MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4ZWQgdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiBUaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSB3aGVyZSBtdWx0aXBsZSB0aHJlYWRzCisgICAgICAg
IHRyeWluZyB0byBjYWxsIHRoZSBsYXN0IGRlcmVmKCkgYXQgdGhlIHNhbWUgdGltZSBjYW4gcmVz
dWx0IGluIGRvdWJsZSBkZWxldGVzLgorCisgICAgICAgIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2gg
c2V0cyBtX3JlZkNvdW50IHRvIDJeMzEgaW5kaWNhdGluZyB3aGVuIHRoZSBvYmplY3QgZGVsZXRp
b24gaGFzIGJlZ3VuCisgICAgICAgIGluc3RlYWQgb2YgcmUtc2V0dGluZyB0byAxIGFmdGVyIHRo
ZSBmYWN0ICh3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gYmVpbmcgZml4ZWQpLgorICAgICAg
ICBUaGlzIHZhbHVlIGlzIHNhZmUgZnJvbSAyXjMxIGJhZCBpbmNyZW1lbnRzIG9yIDJeMzEgYmFk
IGRlY3JlbWVudHM7IGkuZS4gdGhlIHNhZmVzdCB2YWx1ZQorICAgICAgICB0byBhdm9pZCBkb3Vi
bGUgZGVsZXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2VzIHVzZSBvZiBhcHBy
b3ByaWF0ZSBzdGQ6Om1lbW9yeV9vcmRlciBpbiBUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2Uncwor
ICAgICAgICByZWYsIGFuZCBkZXJlZkJhc2UgYXMgd2VsbCBhcyBDYW5NYWtlQ2hlY2tlZFB0ckJh
c2UncyBpbmNyZW1lbnRQdHJDb3VudCBhbmQgZGVjcmVtZW50UHRyQ291bnQKKyAgICAgICAgYXMg
cGVyZiBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogd3RmL0NoZWNrZWRSZWYuaDoKKyAgICAg
ICAgKFdURjo6Q2FuTWFrZUNoZWNrZWRQdHJCYXNlOjppbmNyZW1lbnRQdHJDb3VudCk6IAorICAg
ICAgICAoV1RGOjpDYW5NYWtlQ2hlY2tlZFB0ckJhc2U6OmRlY3JlbWVudFB0ckNvdW50KToKKyAg
ICAgICAgKFdURjo6U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46OmZl
dGNoX2FkZCk6CisgICAgICAgIChXVEY6OlNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRl
Z3JhbFR5cGU+OjpmZXRjaF9zdWIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6On5UaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6
OnJlZiBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6aGFz
T25lUmVmIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlOjpy
ZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6
ZGVsZXRpb25IYXNCZWd1biBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZTo6ZGVyZWZCYXNlIGNvbnN0KToKKwogMjAyMS0wOC0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdGhyZWFkIHNhZmUgdmVyc2lvbiBvZiBD
YW5NYWtlQ2hlY2tlZFB0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5o
IGIvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5oCmluZGV4IDM5M2YxMjM4YTY1ZmU2MDQ0YmE1
Nzg5Y2JjMDgyMWIxM2VmMGEyOGMuLmQ1MDYxNmNmOTY4YTc5ZjQ1ZjFjM2QwZjM1YTc1MTFiNDFi
ZmYyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkUmVmLmgKQEAgLTIzMCw4ICsyMzAsOCBAQCBwdWJsaWM6CiAgICAg
fkNhbk1ha2VDaGVja2VkUHRyQmFzZSgpIHsgUkVMRUFTRV9BU1NFUlQoIW1fY291bnQpOyB9CiAK
ICAgICBQdHJDb3VudGVyVHlwZSBwdHJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
LSAgICB2b2lkIGluY3JlbWVudFB0ckNvdW50KCkgeyArK21fY291bnQ7IH0KLSAgICB2b2lkIGRl
Y3JlbWVudFB0ckNvdW50KCkgeyBBU1NFUlQobV9jb3VudCk7IC0tbV9jb3VudDsgfQorICAgIHZv
aWQgaW5jcmVtZW50UHRyQ291bnQoKSB7IG1fY291bnQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGVhc2UpOyB9CisgICAgdm9pZCBkZWNyZW1lbnRQdHJDb3VudCgpIHsgQVNTRVJU
KG1fY291bnQpOyBtX2NvdW50LmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNl
KTsgfQogCiBwcml2YXRlOgogICAgIFN0b3JhZ2VUeXBlIG1fY291bnQgeyAwIH07CkBAIC0yNDQs
NiArMjQ0LDggQEAgcHVibGljOgogCiAgICAgb3BlcmF0b3IgSW50ZWdyYWxUeXBlKCkgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdDsKKyAgICBJbnRlZ3JhbFR5cGUgZmV0Y2hfYWRk
KEludGVncmFsVHlwZSwgc3RkOjptZW1vcnlfb3JkZXIpOworICAgIEludGVncmFsVHlwZSBmZXRj
aF9zdWIoSW50ZWdyYWxUeXBlLCBzdGQ6Om1lbW9yeV9vcmRlcik7CiAgICAgU2luZ2xlVGhyZWFk
SW50ZWdyYWxXcmFwcGVyJiBvcGVyYXRvcisrKCk7CiAgICAgU2luZ2xlVGhyZWFkSW50ZWdyYWxX
cmFwcGVyJiBvcGVyYXRvci0tKCk7CiAKQEAgLTI3OCw2ICsyODAsMjQgQEAgaW5saW5lIGJvb2wg
U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yISgpIGNv
bnN0CiAgICAgcmV0dXJuICFtX3ZhbHVlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlPgoraW5saW5lIEludGVncmFsVHlwZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8
SW50ZWdyYWxUeXBlPjo6ZmV0Y2hfYWRkKEludGVncmFsVHlwZSBhcmcsIHN0ZDo6bWVtb3J5X29y
ZGVyKQoreworICAgIGFzc2VydFRocmVhZCgpOworICAgIGF1dG8gcHJldmlvdXNWYWx1ZSA9IG1f
dmFsdWU7CisgICAgbV92YWx1ZSArPSBhcmc7CisgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CitpbmxpbmUgSW50ZWdyYWxUeXBl
IFNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRlZ3JhbFR5cGU+OjpmZXRjaF9zdWIoSW50
ZWdyYWxUeXBlIGFyZywgc3RkOjptZW1vcnlfb3JkZXIpCit7CisgICAgYXNzZXJ0VGhyZWFkKCk7
CisgICAgYXV0byBwcmV2aW91c1ZhbHVlID0gbV92YWx1ZTsKKyAgICBtX3ZhbHVlIC09IGFyZzsK
KyAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEludGVn
cmFsVHlwZT4KIGlubGluZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8SW50ZWdyYWxUeXBl
PiYgU2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yKyso
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKaW5kZXggM2VmYjAxYWVjZDAw
MjM0NGFlOWY4N2RlYjI2MzIxYWI1MjA1MzNkZi4uYmZlMDM0MWQyZTBiZDIyMDFkZTU5MDdiZjEz
MmRmYTdkYTQ2ZmZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCkBAIC0z
Miw3NiArMzIsNTkgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSNpZiBkZWZpbmVkKE5ERUJVRykg
JiYgIUVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQotI2RlZmluZSBDSEVDS19USFJFQURfU0FG
RV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUgMAotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFIDEKLSNlbmRpZgotCiBjbGFzcyBUaHJlYWRTYWZlUmVm
Q291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgVGhy
ZWFkU2FmZVJlZkNvdW50ZWRCYXNlKCkgPSBkZWZhdWx0OwogCi0jaWYgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCisjaWYgRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMp
CiAgICAgflRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSgpCiAgICAgewogICAgICAgICAvLyBXaGVu
IHRoaXMgVGhyZWFkU2FmZVJlZkNvdW50ZWQgb2JqZWN0IGlzIGEgcGFydCBvZiBhbm90aGVyIG9i
amVjdCwgZGVyZWZCYXNlKCkgaXMgbmV2ZXIgY2FsbGVkIG9uIHRoaXMgb2JqZWN0LgotICAgICAg
ICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOworICAgICAgICBtX3JlZkNvdW50ID0gc19kZWxl
dGlvbkhhc0JlZ3VuUmVmQ291bnQ7CiAgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIHJlZigpIGNv
bnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQot
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9kZWxldGlvbkhhc0Jl
Z3VuKTsKLSNlbmRpZgotICAgICAgICArK21fcmVmQ291bnQ7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFkZWxldGlvbkhhc0JlZ3VuKCkpOworICAgICAgICBtX3Jl
ZkNvdW50LmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAgICB9CiAK
ICAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZF
X1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1
bik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CisgICAg
ICAgIHJldHVybiBtX3JlZkNvdW50ID09IDE7CiAgICAgfQogCi0gICAgdW5zaWduZWQgcmVmQ291
bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7Ci0gICAgfQorICAg
IHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAmIHNfcmVmQ291
bnRNYXNrOyB9CisgICAgYm9vbCBkZWxldGlvbkhhc0JlZ3VuKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZDb3VudCA9PSBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudDsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3Qu
CiAgICAgYm9vbCBkZXJlZkJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVm
Q291bnQpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CiAKLSNpZiBDSEVDS19USFJFQURf
U0FGRV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIW1fZGVsZXRpb25IYXNCZWd1bik7Ci0jZW5kaWYKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CiAKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCEtLW1fcmVmQ291bnQpKSB7Ci0gICAgICAgICAgICAvLyBTZXR0aW5n
IG1fcmVmQ291bnQgdG8gMSBoZXJlIHByZXZlbnRzIGRvdWJsZSBkZWxldGUgd2l0aGluIHRoZSBk
ZXN0cnVjdG9yIGJ1dCBub3QgZnJvbSBhbm90aGVyIHRocmVhZAotICAgICAgICAgICAgLy8gc2lu
Y2Ugc3VjaCBhIHRocmVhZCBjb3VsZCBoYXZlIHJlZidlZCB0aGlzIG9iamVjdCBsb25nIGFmdGVy
IGl0IGhhZCBiZWVuIGRlbGV0ZWQuIFNlZSB3ZWJraXQub3JnL2IvMjAxNTc2LgotICAgICAgICAg
ICAgbV9yZWZDb3VudCA9IDE7Ci0jaWYgQ0hFQ0tfVEhSRUFEX1NBRkVfUkVGX0NPVU5URURfTElG
RUNZQ0xFCi0gICAgICAgICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlmCisg
ICAgICAgIC8vIFVzaW5nIHNfZGVsZXRpb25IYXNCZWd1blJlZkNvdW50IGluc3RlYWQgb2YgMCBw
cmV2ZW50cyBkb3VibGUgZGVsZXRlLiBTZWUgd2Via2l0Lm9yZy9iLzIwMTU3Ni4KKyAgICAgICAg
dW5zaWduZWQgcmVmQ291bnRUb0JlZ2luRGVsZXRpbmdUaGlzID0gMTsKKyAgICAgICAgaWYgKG1f
cmVmQ291bnQuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcocmVmQ291bnRUb0JlZ2luRGVsZXRpbmdU
aGlzLCBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3Jl
bCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQogCisgICAgICAgIG1fcmVm
Q291bnQuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiBwcml2YXRlOgotICAgIG11dGFibGUgc3RkOjphdG9taWM8
dW5zaWduZWQ+IG1fcmVmQ291bnQgeyAxIH07CisgICAgLy8gU2V0IHRoZSBoaWdoZXN0IGJpdCAo
MHgxMDAuLjApLiBEb24ndCBzZXQgYWxsIGJpdHMgdG8gMSBzaW5jZSB0aGF0IGNhbiBjYXVzZSBv
dmVyZmxvdyBlYXNpbHkuCisgICAgLy8gSXQgcmVxdWlyZXMgdGhlIG1pbmltdW0gb2YgMl4zMSAt
IDEgb3BlcmF0aW9ucyB0byBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZnJvbSB0aGlzIHZhbHVlLgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgdW5zaWduZWQgc19yZWZDb3VudE1hc2sgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oLTEpID4+IDE7CisgICAgY29uc3RleHByIHN0YXRpYyB1bnNpZ25lZCBzX2Rl
bGV0aW9uSGFzQmVndW5SZWZDb3VudCA9IH5zX3JlZkNvdW50TWFzazsKIAotI2lmIENIRUNLX1RI
UkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgIG11dGFibGUgc3RkOjphdG9taWM8
Ym9vbD4gbV9kZWxldGlvbkhhc0JlZ3VuIHsgZmFsc2UgfTsKLSNlbmRpZgorICAgIG11dGFibGUg
c3RkOjphdG9taWM8dW5zaWduZWQ+IG1fcmVmQ291bnQgeyAxIH07CiB9OwogCiBlbnVtIGNsYXNz
IERlc3RydWN0aW9uVGhyZWFkIHsgQW55LCBNYWluLCBNYWluUnVuTG9vcCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435753</attachid>
            <date>2021-08-18 00:50:00 -0700</date>
            <delta_ts>2021-08-18 17:39:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229168-20210818004959.patch</filename>
            <type>text/plain</type>
            <size>7457</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUzMzdlZmE2YWIwNzcwNDBmZjNiYWQ1
NzEwNTAxYThlNGUxOTgxMzUuLjAzYThkY2QyYTUzMTlmNDNkMGE1OGI3MjczYzcwZmY3YWVjMDE5
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDgtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZDo6ZGVyZWYg
cmFjZSBjb25kaXRpb24gc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI5MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4ZWQgdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiBUaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSB3aGVyZSBtdWx0aXBsZSB0aHJlYWRzCisgICAgICAg
IHRyeWluZyB0byBjYWxsIHRoZSBsYXN0IGRlcmVmKCkgYXQgdGhlIHNhbWUgdGltZSBjYW4gcmVz
dWx0IGluIGRvdWJsZSBkZWxldGVzLgorCisgICAgICAgIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2gg
c2V0cyBtX3JlZkNvdW50IHRvIDJeMzEgaW5kaWNhdGluZyB3aGVuIHRoZSBvYmplY3QgZGVsZXRp
b24gaGFzIGJlZ3VuCisgICAgICAgIGluc3RlYWQgb2YgcmUtc2V0dGluZyB0byAxIGFmdGVyIHRo
ZSBmYWN0ICh3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gYmVpbmcgZml4ZWQpLgorICAgICAg
ICBUaGlzIHZhbHVlIGlzIHNhZmUgZnJvbSAyXjMxIGJhZCBpbmNyZW1lbnRzIG9yIDJeMzEgYmFk
IGRlY3JlbWVudHM7IGkuZS4gdGhlIHNhZmVzdCB2YWx1ZQorICAgICAgICB0byBhdm9pZCBkb3Vi
bGUgZGVsZXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2VzIHVzZSBvZiBhcHBy
b3ByaWF0ZSBzdGQ6Om1lbW9yeV9vcmRlciBpbiBUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2Uncwor
ICAgICAgICByZWYsIGFuZCBkZXJlZkJhc2UgYXMgd2VsbCBhcyBDYW5NYWtlQ2hlY2tlZFB0ckJh
c2UncyBpbmNyZW1lbnRQdHJDb3VudCBhbmQgZGVjcmVtZW50UHRyQ291bnQKKyAgICAgICAgYXMg
cGVyZiBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogd3RmL0NoZWNrZWRSZWYuaDoKKyAgICAg
ICAgKFdURjo6Q2FuTWFrZUNoZWNrZWRQdHJCYXNlOjppbmNyZW1lbnRQdHJDb3VudCk6IAorICAg
ICAgICAoV1RGOjpDYW5NYWtlQ2hlY2tlZFB0ckJhc2U6OmRlY3JlbWVudFB0ckNvdW50KToKKyAg
ICAgICAgKFdURjo6U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46OmZl
dGNoX2FkZCk6CisgICAgICAgIChXVEY6OlNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRl
Z3JhbFR5cGU+OjpmZXRjaF9zdWIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6On5UaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6
OnJlZiBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6aGFz
T25lUmVmIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlOjpy
ZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6
ZGVsZXRpb25IYXNCZWd1biBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZTo6ZGVyZWZCYXNlIGNvbnN0KToKKwogMjAyMS0wOC0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdGhyZWFkIHNhZmUgdmVyc2lvbiBvZiBD
YW5NYWtlQ2hlY2tlZFB0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5o
IGIvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5oCmluZGV4IDM5M2YxMjM4YTY1ZmU2MDQ0YmE1
Nzg5Y2JjMDgyMWIxM2VmMGEyOGMuLjQxNDhkMzIyOWE0YTRhY2E5ODlkY2I5ZDQzMDc2NGJhMzU2
OGFiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkUmVmLmgKQEAgLTIzMCw4ICsyMzAsOCBAQCBwdWJsaWM6CiAgICAg
fkNhbk1ha2VDaGVja2VkUHRyQmFzZSgpIHsgUkVMRUFTRV9BU1NFUlQoIW1fY291bnQpOyB9CiAK
ICAgICBQdHJDb3VudGVyVHlwZSBwdHJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
LSAgICB2b2lkIGluY3JlbWVudFB0ckNvdW50KCkgeyArK21fY291bnQ7IH0KLSAgICB2b2lkIGRl
Y3JlbWVudFB0ckNvdW50KCkgeyBBU1NFUlQobV9jb3VudCk7IC0tbV9jb3VudDsgfQorICAgIHZv
aWQgaW5jcmVtZW50UHRyQ291bnQoKSB7IG1fY291bnQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpOyB9CisgICAgdm9pZCBkZWNyZW1lbnRQdHJDb3VudCgpIHsgQVNTRVJU
KG1fY291bnQpOyBtX2NvdW50LmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNl
KTsgfQogCiBwcml2YXRlOgogICAgIFN0b3JhZ2VUeXBlIG1fY291bnQgeyAwIH07CkBAIC0yNDQs
NiArMjQ0LDggQEAgcHVibGljOgogCiAgICAgb3BlcmF0b3IgSW50ZWdyYWxUeXBlKCkgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdDsKKyAgICBJbnRlZ3JhbFR5cGUgZmV0Y2hfYWRk
KEludGVncmFsVHlwZSwgc3RkOjptZW1vcnlfb3JkZXIpOworICAgIEludGVncmFsVHlwZSBmZXRj
aF9zdWIoSW50ZWdyYWxUeXBlLCBzdGQ6Om1lbW9yeV9vcmRlcik7CiAgICAgU2luZ2xlVGhyZWFk
SW50ZWdyYWxXcmFwcGVyJiBvcGVyYXRvcisrKCk7CiAgICAgU2luZ2xlVGhyZWFkSW50ZWdyYWxX
cmFwcGVyJiBvcGVyYXRvci0tKCk7CiAKQEAgLTI3OCw2ICsyODAsMjQgQEAgaW5saW5lIGJvb2wg
U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yISgpIGNv
bnN0CiAgICAgcmV0dXJuICFtX3ZhbHVlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlPgoraW5saW5lIEludGVncmFsVHlwZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8
SW50ZWdyYWxUeXBlPjo6ZmV0Y2hfYWRkKEludGVncmFsVHlwZSBhcmcsIHN0ZDo6bWVtb3J5X29y
ZGVyKQoreworICAgIGFzc2VydFRocmVhZCgpOworICAgIGF1dG8gcHJldmlvdXNWYWx1ZSA9IG1f
dmFsdWU7CisgICAgbV92YWx1ZSArPSBhcmc7CisgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CitpbmxpbmUgSW50ZWdyYWxUeXBl
IFNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRlZ3JhbFR5cGU+OjpmZXRjaF9zdWIoSW50
ZWdyYWxUeXBlIGFyZywgc3RkOjptZW1vcnlfb3JkZXIpCit7CisgICAgYXNzZXJ0VGhyZWFkKCk7
CisgICAgYXV0byBwcmV2aW91c1ZhbHVlID0gbV92YWx1ZTsKKyAgICBtX3ZhbHVlIC09IGFyZzsK
KyAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEludGVn
cmFsVHlwZT4KIGlubGluZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8SW50ZWdyYWxUeXBl
PiYgU2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yKyso
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKaW5kZXggM2VmYjAxYWVjZDAw
MjM0NGFlOWY4N2RlYjI2MzIxYWI1MjA1MzNkZi4uYmZlMDM0MWQyZTBiZDIyMDFkZTU5MDdiZjEz
MmRmYTdkYTQ2ZmZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCkBAIC0z
Miw3NiArMzIsNTkgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSNpZiBkZWZpbmVkKE5ERUJVRykg
JiYgIUVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQotI2RlZmluZSBDSEVDS19USFJFQURfU0FG
RV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUgMAotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFIDEKLSNlbmRpZgotCiBjbGFzcyBUaHJlYWRTYWZlUmVm
Q291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgVGhy
ZWFkU2FmZVJlZkNvdW50ZWRCYXNlKCkgPSBkZWZhdWx0OwogCi0jaWYgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCisjaWYgRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMp
CiAgICAgflRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSgpCiAgICAgewogICAgICAgICAvLyBXaGVu
IHRoaXMgVGhyZWFkU2FmZVJlZkNvdW50ZWQgb2JqZWN0IGlzIGEgcGFydCBvZiBhbm90aGVyIG9i
amVjdCwgZGVyZWZCYXNlKCkgaXMgbmV2ZXIgY2FsbGVkIG9uIHRoaXMgb2JqZWN0LgotICAgICAg
ICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOworICAgICAgICBtX3JlZkNvdW50ID0gc19kZWxl
dGlvbkhhc0JlZ3VuUmVmQ291bnQ7CiAgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIHJlZigpIGNv
bnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQot
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9kZWxldGlvbkhhc0Jl
Z3VuKTsKLSNlbmRpZgotICAgICAgICArK21fcmVmQ291bnQ7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFkZWxldGlvbkhhc0JlZ3VuKCkpOworICAgICAgICBtX3Jl
ZkNvdW50LmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAgICB9CiAK
ICAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZF
X1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1
bik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CisgICAg
ICAgIHJldHVybiBtX3JlZkNvdW50ID09IDE7CiAgICAgfQogCi0gICAgdW5zaWduZWQgcmVmQ291
bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7Ci0gICAgfQorICAg
IHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAmIHNfcmVmQ291
bnRNYXNrOyB9CisgICAgYm9vbCBkZWxldGlvbkhhc0JlZ3VuKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZDb3VudCA9PSBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudDsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3Qu
CiAgICAgYm9vbCBkZXJlZkJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVm
Q291bnQpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CiAKLSNpZiBDSEVDS19USFJFQURf
U0FGRV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIW1fZGVsZXRpb25IYXNCZWd1bik7Ci0jZW5kaWYKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CiAKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCEtLW1fcmVmQ291bnQpKSB7Ci0gICAgICAgICAgICAvLyBTZXR0aW5n
IG1fcmVmQ291bnQgdG8gMSBoZXJlIHByZXZlbnRzIGRvdWJsZSBkZWxldGUgd2l0aGluIHRoZSBk
ZXN0cnVjdG9yIGJ1dCBub3QgZnJvbSBhbm90aGVyIHRocmVhZAotICAgICAgICAgICAgLy8gc2lu
Y2Ugc3VjaCBhIHRocmVhZCBjb3VsZCBoYXZlIHJlZidlZCB0aGlzIG9iamVjdCBsb25nIGFmdGVy
IGl0IGhhZCBiZWVuIGRlbGV0ZWQuIFNlZSB3ZWJraXQub3JnL2IvMjAxNTc2LgotICAgICAgICAg
ICAgbV9yZWZDb3VudCA9IDE7Ci0jaWYgQ0hFQ0tfVEhSRUFEX1NBRkVfUkVGX0NPVU5URURfTElG
RUNZQ0xFCi0gICAgICAgICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlmCisg
ICAgICAgIC8vIFVzaW5nIHNfZGVsZXRpb25IYXNCZWd1blJlZkNvdW50IGluc3RlYWQgb2YgMCBw
cmV2ZW50cyBkb3VibGUgZGVsZXRlLiBTZWUgd2Via2l0Lm9yZy9iLzIwMTU3Ni4KKyAgICAgICAg
dW5zaWduZWQgcmVmQ291bnRUb0JlZ2luRGVsZXRpbmdUaGlzID0gMTsKKyAgICAgICAgaWYgKG1f
cmVmQ291bnQuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcocmVmQ291bnRUb0JlZ2luRGVsZXRpbmdU
aGlzLCBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3Jl
bCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQogCisgICAgICAgIG1fcmVm
Q291bnQuZmV0Y2hfc3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiBwcml2YXRlOgotICAgIG11dGFibGUgc3RkOjphdG9taWM8
dW5zaWduZWQ+IG1fcmVmQ291bnQgeyAxIH07CisgICAgLy8gU2V0IHRoZSBoaWdoZXN0IGJpdCAo
MHgxMDAuLjApLiBEb24ndCBzZXQgYWxsIGJpdHMgdG8gMSBzaW5jZSB0aGF0IGNhbiBjYXVzZSBv
dmVyZmxvdyBlYXNpbHkuCisgICAgLy8gSXQgcmVxdWlyZXMgdGhlIG1pbmltdW0gb2YgMl4zMSAt
IDEgb3BlcmF0aW9ucyB0byBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZnJvbSB0aGlzIHZhbHVlLgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgdW5zaWduZWQgc19yZWZDb3VudE1hc2sgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oLTEpID4+IDE7CisgICAgY29uc3RleHByIHN0YXRpYyB1bnNpZ25lZCBzX2Rl
bGV0aW9uSGFzQmVndW5SZWZDb3VudCA9IH5zX3JlZkNvdW50TWFzazsKIAotI2lmIENIRUNLX1RI
UkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgIG11dGFibGUgc3RkOjphdG9taWM8
Ym9vbD4gbV9kZWxldGlvbkhhc0JlZ3VuIHsgZmFsc2UgfTsKLSNlbmRpZgorICAgIG11dGFibGUg
c3RkOjphdG9taWM8dW5zaWduZWQ+IG1fcmVmQ291bnQgeyAxIH07CiB9OwogCiBlbnVtIGNsYXNz
IERlc3RydWN0aW9uVGhyZWFkIHsgQW55LCBNYWluLCBNYWluUnVuTG9vcCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435822</attachid>
            <date>2021-08-18 17:39:48 -0700</date>
            <delta_ts>2021-08-19 22:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229168-20210818173948.patch</filename>
            <type>text/plain</type>
            <size>7787</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUzMzdlZmE2YWIwNzcwNDBmZjNiYWQ1
NzEwNTAxYThlNGUxOTgxMzUuLjAzYThkY2QyYTUzMTlmNDNkMGE1OGI3MjczYzcwZmY3YWVjMDE5
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjEtMDgtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZDo6ZGVyZWYg
cmFjZSBjb25kaXRpb24gc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI5MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4ZWQgdGhlIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiBUaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSB3aGVyZSBtdWx0aXBsZSB0aHJlYWRzCisgICAgICAg
IHRyeWluZyB0byBjYWxsIHRoZSBsYXN0IGRlcmVmKCkgYXQgdGhlIHNhbWUgdGltZSBjYW4gcmVz
dWx0IGluIGRvdWJsZSBkZWxldGVzLgorCisgICAgICAgIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2gg
c2V0cyBtX3JlZkNvdW50IHRvIDJeMzEgaW5kaWNhdGluZyB3aGVuIHRoZSBvYmplY3QgZGVsZXRp
b24gaGFzIGJlZ3VuCisgICAgICAgIGluc3RlYWQgb2YgcmUtc2V0dGluZyB0byAxIGFmdGVyIHRo
ZSBmYWN0ICh3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gYmVpbmcgZml4ZWQpLgorICAgICAg
ICBUaGlzIHZhbHVlIGlzIHNhZmUgZnJvbSAyXjMxIGJhZCBpbmNyZW1lbnRzIG9yIDJeMzEgYmFk
IGRlY3JlbWVudHM7IGkuZS4gdGhlIHNhZmVzdCB2YWx1ZQorICAgICAgICB0byBhdm9pZCBkb3Vi
bGUgZGVsZXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2VzIHVzZSBvZiBhcHBy
b3ByaWF0ZSBzdGQ6Om1lbW9yeV9vcmRlciBpbiBUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2Uncwor
ICAgICAgICByZWYsIGFuZCBkZXJlZkJhc2UgYXMgd2VsbCBhcyBDYW5NYWtlQ2hlY2tlZFB0ckJh
c2UncyBpbmNyZW1lbnRQdHJDb3VudCBhbmQgZGVjcmVtZW50UHRyQ291bnQKKyAgICAgICAgYXMg
cGVyZiBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogd3RmL0NoZWNrZWRSZWYuaDoKKyAgICAg
ICAgKFdURjo6Q2FuTWFrZUNoZWNrZWRQdHJCYXNlOjppbmNyZW1lbnRQdHJDb3VudCk6IAorICAg
ICAgICAoV1RGOjpDYW5NYWtlQ2hlY2tlZFB0ckJhc2U6OmRlY3JlbWVudFB0ckNvdW50KToKKyAg
ICAgICAgKFdURjo6U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46OmZl
dGNoX2FkZCk6CisgICAgICAgIChXVEY6OlNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRl
Z3JhbFR5cGU+OjpmZXRjaF9zdWIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6On5UaHJlYWRTYWZl
UmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2U6
OnJlZiBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6aGFz
T25lUmVmIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlOjpy
ZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3VudGVkQmFzZTo6
ZGVsZXRpb25IYXNCZWd1biBjb25zdCk6CisgICAgICAgIChXVEY6OlRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZTo6ZGVyZWZCYXNlIGNvbnN0KToKKwogMjAyMS0wOC0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdGhyZWFkIHNhZmUgdmVyc2lvbiBvZiBD
YW5NYWtlQ2hlY2tlZFB0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5o
IGIvU291cmNlL1dURi93dGYvQ2hlY2tlZFJlZi5oCmluZGV4IDM5M2YxMjM4YTY1ZmU2MDQ0YmE1
Nzg5Y2JjMDgyMWIxM2VmMGEyOGMuLjQxNDhkMzIyOWE0YTRhY2E5ODlkY2I5ZDQzMDc2NGJhMzU2
OGFiYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRSZWYuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DaGVja2VkUmVmLmgKQEAgLTIzMCw4ICsyMzAsOCBAQCBwdWJsaWM6CiAgICAg
fkNhbk1ha2VDaGVja2VkUHRyQmFzZSgpIHsgUkVMRUFTRV9BU1NFUlQoIW1fY291bnQpOyB9CiAK
ICAgICBQdHJDb3VudGVyVHlwZSBwdHJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
LSAgICB2b2lkIGluY3JlbWVudFB0ckNvdW50KCkgeyArK21fY291bnQ7IH0KLSAgICB2b2lkIGRl
Y3JlbWVudFB0ckNvdW50KCkgeyBBU1NFUlQobV9jb3VudCk7IC0tbV9jb3VudDsgfQorICAgIHZv
aWQgaW5jcmVtZW50UHRyQ291bnQoKSB7IG1fY291bnQuZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpOyB9CisgICAgdm9pZCBkZWNyZW1lbnRQdHJDb3VudCgpIHsgQVNTRVJU
KG1fY291bnQpOyBtX2NvdW50LmZldGNoX3N1YigxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNl
KTsgfQogCiBwcml2YXRlOgogICAgIFN0b3JhZ2VUeXBlIG1fY291bnQgeyAwIH07CkBAIC0yNDQs
NiArMjQ0LDggQEAgcHVibGljOgogCiAgICAgb3BlcmF0b3IgSW50ZWdyYWxUeXBlKCkgY29uc3Q7
CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdDsKKyAgICBJbnRlZ3JhbFR5cGUgZmV0Y2hfYWRk
KEludGVncmFsVHlwZSwgc3RkOjptZW1vcnlfb3JkZXIpOworICAgIEludGVncmFsVHlwZSBmZXRj
aF9zdWIoSW50ZWdyYWxUeXBlLCBzdGQ6Om1lbW9yeV9vcmRlcik7CiAgICAgU2luZ2xlVGhyZWFk
SW50ZWdyYWxXcmFwcGVyJiBvcGVyYXRvcisrKCk7CiAgICAgU2luZ2xlVGhyZWFkSW50ZWdyYWxX
cmFwcGVyJiBvcGVyYXRvci0tKCk7CiAKQEAgLTI3OCw2ICsyODAsMjQgQEAgaW5saW5lIGJvb2wg
U2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yISgpIGNv
bnN0CiAgICAgcmV0dXJuICFtX3ZhbHVlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdy
YWxUeXBlPgoraW5saW5lIEludGVncmFsVHlwZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8
SW50ZWdyYWxUeXBlPjo6ZmV0Y2hfYWRkKEludGVncmFsVHlwZSBhcmcsIHN0ZDo6bWVtb3J5X29y
ZGVyKQoreworICAgIGFzc2VydFRocmVhZCgpOworICAgIGF1dG8gcHJldmlvdXNWYWx1ZSA9IG1f
dmFsdWU7CisgICAgbV92YWx1ZSArPSBhcmc7CisgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+CitpbmxpbmUgSW50ZWdyYWxUeXBl
IFNpbmdsZVRocmVhZEludGVncmFsV3JhcHBlcjxJbnRlZ3JhbFR5cGU+OjpmZXRjaF9zdWIoSW50
ZWdyYWxUeXBlIGFyZywgc3RkOjptZW1vcnlfb3JkZXIpCit7CisgICAgYXNzZXJ0VGhyZWFkKCk7
CisgICAgYXV0byBwcmV2aW91c1ZhbHVlID0gbV92YWx1ZTsKKyAgICBtX3ZhbHVlIC09IGFyZzsK
KyAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIEludGVn
cmFsVHlwZT4KIGlubGluZSBTaW5nbGVUaHJlYWRJbnRlZ3JhbFdyYXBwZXI8SW50ZWdyYWxUeXBl
PiYgU2luZ2xlVGhyZWFkSW50ZWdyYWxXcmFwcGVyPEludGVncmFsVHlwZT46Om9wZXJhdG9yKyso
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKaW5kZXggM2VmYjAxYWVjZDAw
MjM0NGFlOWY4N2RlYjI2MzIxYWI1MjA1MzNkZi4uYWM4NTdiMTc0YTdhOGYyODI4MWE3Y2FlOGI3
YjUzMTEyZjhlMjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oCkBAIC0z
Miw3NiArMzIsNjYgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSNpZiBkZWZpbmVkKE5ERUJVRykg
JiYgIUVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQotI2RlZmluZSBDSEVDS19USFJFQURfU0FG
RV9SRUZfQ09VTlRFRF9MSUZFQ1lDTEUgMAotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFIDEKLSNlbmRpZgotCiBjbGFzcyBUaHJlYWRTYWZlUmVm
Q291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZFNhZmVSZWZDb3Vu
dGVkQmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgVGhy
ZWFkU2FmZVJlZkNvdW50ZWRCYXNlKCkgPSBkZWZhdWx0OwogCi0jaWYgQ0hFQ0tfVEhSRUFEX1NB
RkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCisjaWYgRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMp
CiAgICAgflRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSgpCiAgICAgewogICAgICAgICAvLyBXaGVu
IHRoaXMgVGhyZWFkU2FmZVJlZkNvdW50ZWQgb2JqZWN0IGlzIGEgcGFydCBvZiBhbm90aGVyIG9i
amVjdCwgZGVyZWZCYXNlKCkgaXMgbmV2ZXIgY2FsbGVkIG9uIHRoaXMgb2JqZWN0LgotICAgICAg
ICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOworICAgICAgICBtX3JlZkNvdW50ID0gc19kZWxl
dGlvbkhhc0JlZ3VuUmVmQ291bnQ7CiAgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIHJlZigpIGNv
bnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZFX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQot
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9kZWxldGlvbkhhc0Jl
Z3VuKTsKLSNlbmRpZgotICAgICAgICArK21fcmVmQ291bnQ7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFkZWxldGlvbkhhc0JlZ3VuKCkpOworICAgICAgICBtX3Jl
ZkNvdW50LmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAgICB9CiAK
ICAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CiAgICAgewotI2lmIENIRUNLX1RIUkVBRF9TQUZF
X1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1
bik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRlbGV0aW9uSGFzQmVndW4oKSk7CisgICAg
ICAgIHJldHVybiBtX3JlZkNvdW50ID09IDE7CiAgICAgfQogCi0gICAgdW5zaWduZWQgcmVmQ291
bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7Ci0gICAgfQorICAg
IHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAmIHNfcmVmQ291
bnRNYXNrOyB9CisgICAgYm9vbCBkZWxldGlvbkhhc0JlZ3VuKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZDb3VudCA9PSBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudDsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCBvciBub3Qu
CiAgICAgYm9vbCBkZXJlZkJhc2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVm
Q291bnQpOwotCi0jaWYgQ0hFQ0tfVEhSRUFEX1NBRkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0g
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFtX2RlbGV0aW9uSGFzQmVn
dW4pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKFVOTElLRUxZKCEtLW1fcmVmQ291bnQpKSB7Ci0g
ICAgICAgICAgICAvLyBTZXR0aW5nIG1fcmVmQ291bnQgdG8gMSBoZXJlIHByZXZlbnRzIGRvdWJs
ZSBkZWxldGUgd2l0aGluIHRoZSBkZXN0cnVjdG9yIGJ1dCBub3QgZnJvbSBhbm90aGVyIHRocmVh
ZAotICAgICAgICAgICAgLy8gc2luY2Ugc3VjaCBhIHRocmVhZCBjb3VsZCBoYXZlIHJlZidlZCB0
aGlzIG9iamVjdCBsb25nIGFmdGVyIGl0IGhhZCBiZWVuIGRlbGV0ZWQuIFNlZSB3ZWJraXQub3Jn
L2IvMjAxNTc2LgotICAgICAgICAgICAgbV9yZWZDb3VudCA9IDE7Ci0jaWYgQ0hFQ0tfVEhSRUFE
X1NBRkVfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0gICAgICAgICAgICBtX2RlbGV0aW9uSGFzQmVn
dW4gPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgQVNT
RVJUKHJlZkNvdW50KCkpOworCisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFkZWxldGlvbkhhc0JlZ3VuKCkpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICBhdXRvIGN1cnJlbnRSZWZDb3VudCA9IG1fcmVmQ291bnQubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGF1dG8gbmV3UmVmQ291bnQgPSBjdXJyZW50UmVm
Q291bnQgLSAxOworICAgICAgICAgICAgaWYgKCFuZXdSZWZDb3VudCkgeworICAgICAgICAgICAg
ICAgIC8vIFVzaW5nIHNfZGVsZXRpb25IYXNCZWd1blJlZkNvdW50IGluc3RlYWQgb2YgMCBwcmV2
ZW50cyBkb3VibGUgZGVsZXRlLiBTZWUgd2Via2l0Lm9yZy9iLzIwMTU3Ni4KKyAgICAgICAgICAg
ICAgICBpZiAobV9yZWZDb3VudC5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoY3VycmVudFJlZkNvdW50
LCBzX2RlbGV0aW9uSGFzQmVndW5SZWZDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9yZWZDb3VudC5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoY3Vy
cmVudFJlZkNvdW50LCBuZXdSZWZDb3VudCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQotCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIG11dGFibGUgc3RkOjphdG9taWM8dW5zaWduZWQ+IG1f
cmVmQ291bnQgeyAxIH07CisgICAgLy8gU2V0IHRoZSBoaWdoZXN0IGJpdCAoMHgxMDAuLjApLiBE
b24ndCBzZXQgYWxsIGJpdHMgdG8gMSBzaW5jZSB0aGF0IGNhbiBjYXVzZSBvdmVyZmxvdyBlYXNp
bHkuCisgICAgLy8gSXQgcmVxdWlyZXMgdGhlIG1pbmltdW0gb2YgMl4zMSAtIDEgb3BlcmF0aW9u
cyB0byBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZnJvbSB0aGlzIHZhbHVlLgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgdW5zaWduZWQgc19yZWZDb3VudE1hc2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpID4+IDE7CisgICAgY29uc3RleHByIHN0YXRpYyB1bnNpZ25lZCBzX2RlbGV0aW9uSGFzQmVn
dW5SZWZDb3VudCA9IH5zX3JlZkNvdW50TWFzazsKIAotI2lmIENIRUNLX1RIUkVBRF9TQUZFX1JF
Rl9DT1VOVEVEX0xJRkVDWUNMRQotICAgIG11dGFibGUgc3RkOjphdG9taWM8Ym9vbD4gbV9kZWxl
dGlvbkhhc0JlZ3VuIHsgZmFsc2UgfTsKLSNlbmRpZgorICAgIG11dGFibGUgc3RkOjphdG9taWM8
dW5zaWduZWQ+IG1fcmVmQ291bnQgeyAxIH07CiB9OwogCiBlbnVtIGNsYXNzIERlc3RydWN0aW9u
VGhyZWFkIHsgQW55LCBNYWluLCBNYWluUnVuTG9vcCB9Owo=
</data>
<flag name="commit-queue"
          id="458879"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>