<?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>234282</bug_id>
          
          <creation_ts>2021-12-13 18:25:21 -0800</creation_ts>
          <short_desc>Remove showModalDialog-specific logic from JSDOMWindow::getOwnPropertySlot()</short_desc>
          <delta_ts>2022-01-28 16:06:01 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://github.com/endojs/endo/issues/947</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark S. Miller">erights</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>erights</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mathieu.hofman.dev+webkit</cc>
    
    <cc>ntim</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1823869</commentid>
    <comment_count>0</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2021-12-13 18:25:21 -0800</bug_when>
    <thetext>At https://jsfiddle.net/kryLa94b/ we have the code

console.log(Object.getOwnPropertyNames(globalThis).includes(&apos;showModalDialog&apos;));
console.log(Object.getOwnPropertyDescriptor(globalThis, &apos;showModalDialog&apos;));

The first line tests whether `&apos;showModalDialog&apos;` is a property of the global object. The second line gets its own property descriptor. 

If there is no such own property, as seen for example on Brave on MacOS, the answers are `false` and `undefined`, which is consistent. 

If there is such an own property, as seen for example on Safari 15.1 on MacOS 12.0.1, the answers are

```
true
{
  configurable: true,
  enumerable: true,
  value: function showModalDialog() {
    [native code]
  },
  writable: true
}
```
which is consistent.

However, on iOS 15.1, the answers are `true` and `undefined`. These are inconsistent answers. Is there such an own property or not.

See also https://github.com/endojs/endo/issues/947 where Ash Connell originally reported this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824148</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-12-14 15:20:35 -0800</bug_when>
    <thetext>Thanks for detailed report, Mark.

The issue occurs due to some complicated logic for &quot;showModalDialog&quot; in Window&apos;s [[GetOwnProperty]], which is not aligned with other internal methods.

showModalDialog() was removed from Chrome in 2015 and from Firefox in 2017, so I guess we are safe to remove it for Web content only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825841</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-20 18:26:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/86749078&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833296</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-24 07:22:49 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; Thanks for detailed report, Mark.
&gt; 
&gt; The issue occurs due to some complicated logic for &quot;showModalDialog&quot; in
&gt; Window&apos;s [[GetOwnProperty]], which is not aligned with other internal
&gt; methods.
&gt; 
&gt; showModalDialog() was removed from Chrome in 2015 and from Firefox in 2017,
&gt; so I guess we are safe to remove it for Web content only.

Correction, we&apos;ll be safe to remove showModalDialog() ONCE we ship the &lt;dialog&gt; element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833304</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-24 07:34:05 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; (In reply to Alexey Shvayka from comment #1)
&gt; &gt; Thanks for detailed report, Mark.
&gt; &gt; 
&gt; &gt; The issue occurs due to some complicated logic for &quot;showModalDialog&quot; in
&gt; &gt; Window&apos;s [[GetOwnProperty]], which is not aligned with other internal
&gt; &gt; methods.
&gt; &gt; 
&gt; &gt; showModalDialog() was removed from Chrome in 2015 and from Firefox in 2017,
&gt; &gt; so I guess we are safe to remove it for Web content only.
&gt; 
&gt; Correction, we&apos;ll be safe to remove showModalDialog() ONCE we ship the
&gt; &lt;dialog&gt; element.

Blink removed showModalDialog() in M43, while shipped &lt;dialog&gt; (on by default) in M37.
However, Gecko removed showModalDialog() in M55, yet still hasn&apos;t shipped the &lt;dialog&gt; on by default.

What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833305</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-01-24 07:36:54 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #4)
&gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; (In reply to Alexey Shvayka from comment #1)
&gt; &gt; &gt; Thanks for detailed report, Mark.
&gt; &gt; &gt; 
&gt; &gt; &gt; The issue occurs due to some complicated logic for &quot;showModalDialog&quot; in
&gt; &gt; &gt; Window&apos;s [[GetOwnProperty]], which is not aligned with other internal
&gt; &gt; &gt; methods.
&gt; &gt; &gt; 
&gt; &gt; &gt; showModalDialog() was removed from Chrome in 2015 and from Firefox in 2017,
&gt; &gt; &gt; so I guess we are safe to remove it for Web content only.
&gt; &gt; 
&gt; &gt; Correction, we&apos;ll be safe to remove showModalDialog() ONCE we ship the
&gt; &gt; &lt;dialog&gt; element.
&gt; 
&gt; Blink removed showModalDialog() in M43, while shipped &lt;dialog&gt; (on by
&gt; default) in M37.
&gt; However, Gecko removed showModalDialog() in M55, yet still hasn&apos;t shipped
&gt; the &lt;dialog&gt; on by default.
&gt; 
&gt; What am I missing?

We&apos;ve discussed removing showModalDialog several times in the past and every time we made the decision to delay until we have a good alternative implemented (&lt;dialog&gt; element). Not to say that you cannot get that particular discussion started again. I am just telling you removing showModalDialog() at this point will be controversial.

Also, I see good patches landing for &lt;dialog&gt; support so maybe we won&apos;t have to wait long?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833308</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-24 07:43:15 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; (In reply to Alexey Shvayka from comment #4)
&gt; &gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; &gt; (In reply to Alexey Shvayka from comment #1)
&gt; &gt; &gt; &gt; Thanks for detailed report, Mark.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The issue occurs due to some complicated logic for &quot;showModalDialog&quot; in
&gt; &gt; &gt; &gt; Window&apos;s [[GetOwnProperty]], which is not aligned with other internal
&gt; &gt; &gt; &gt; methods.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; showModalDialog() was removed from Chrome in 2015 and from Firefox in 2017,
&gt; &gt; &gt; &gt; so I guess we are safe to remove it for Web content only.
&gt; &gt; &gt; 
&gt; &gt; &gt; Correction, we&apos;ll be safe to remove showModalDialog() ONCE we ship the
&gt; &gt; &gt; &lt;dialog&gt; element.
&gt; &gt; 
&gt; &gt; Blink removed showModalDialog() in M43, while shipped &lt;dialog&gt; (on by
&gt; &gt; default) in M37.
&gt; &gt; However, Gecko removed showModalDialog() in M55, yet still hasn&apos;t shipped
&gt; &gt; the &lt;dialog&gt; on by default.
&gt; &gt; 
&gt; &gt; What am I missing?
&gt; 
&gt; We&apos;ve discussed removing showModalDialog several times in the past and every
&gt; time we made the decision to delay until we have a good alternative
&gt; implemented (&lt;dialog&gt; element). Not to say that you cannot get that
&gt; particular discussion started again. I am just telling you removing
&gt; showModalDialog() at this point will be controversial.
&gt; 
&gt; Also, I see good patches landing for &lt;dialog&gt; support so maybe we won&apos;t have
&gt; to wait long?

Yeah, Tim has done great job with &lt;dialog&gt; implementation.

Either way, apart from web content, there might be iOS apps using it, and there is WebKit2 GTK+ API for it, meaning removing it will take some consideration even after we ship the &lt;dialog&gt;.

For this particular issue issue, going with [CustomEnabled] for showModalDialog() seems like a good move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833343</commentid>
    <comment_count>7</comment_count>
    <who name="Mathieu Hofman">mathieu.hofman.dev+webkit</who>
    <bug_when>2022-01-24 08:34:03 -0800</bug_when>
    <thetext>The point of this bug is regarding the consistency of `getOwnPropertyNames` and `getOwnPropertyDescriptor` for `showModalDialog`.

If iOS doesn&apos;t have that property (undefined descriptor), it should not be included in the list of global property names. That should be independent of alternative implementations for the feature, as the feature is already missing. Or am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833352</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-24 08:54:56 -0800</bug_when>
    <thetext>(In reply to Mathieu Hofman from comment #7)
&gt; The point of this bug is regarding the consistency of `getOwnPropertyNames`
&gt; and `getOwnPropertyDescriptor` for `showModalDialog`.
&gt; 
&gt; If iOS doesn&apos;t have that property (undefined descriptor), it should not be
&gt; included in the list of global property names. That should be independent of
&gt; alternative implementations for the feature, as the feature is already
&gt; missing. Or am I missing something?

You are absolutely right, it&apos;s just that removing the feature completely is one way of achieving that consistency (but we are not doing that).

The other ways would be to either a) remove showModalDialog-specific code from Window&apos;s getOwnPropertyDescriptor() and expose it in some other way (like via WebIDL attribute we use for experimental features) or b) add some more method overrides for Window, including getOwnPropertyNames(), to make all the methods consistent.

I would very much like to do the a).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833368</commentid>
    <comment_count>9</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2022-01-24 09:29:13 -0800</bug_when>
    <thetext>I am puzzled about why this issue arises in the first place, and about the nature of the discussion about how to fix it. We&apos;re talking about object invariants that should be true for all objects reachable in the language, whether created by JS or by the host. As a universal regularity, it should not be the responsibility of each feature to separately decide whether to uphold the invariant. There should be a common mechanism they all use, so there would be little danger of any individual feature breaking these invariants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833376</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-24 10:05:26 -0800</bug_when>
    <thetext>(In reply to Mark S. Miller from comment #9)
&gt; I am puzzled about why this issue arises in the first place, and about the
&gt; nature of the discussion about how to fix it. We&apos;re talking about object
&gt; invariants that should be true for all objects reachable in the language,
&gt; whether created by JS or by the host. As a universal regularity, it should
&gt; not be the responsibility of each feature to separately decide whether to
&gt; uphold the invariant. There should be a common mechanism they all use, so
&gt; there would be little danger of any individual feature breaking these
&gt; invariants.

In WebKit, it&apos;s up for individual classes to ensure their overrides of ordinary methods abide to the invariants.
Some of those classes implement the spec directly, like ProxyObject, while some others override ordinary methods for performance.
While we are always happy to remove or fix these overrides (recently we resolved similar issues with RegExp legacy features and sloppy function&apos;s caller / arguments), I don&apos;t see how we can enforce the essential invariants in our code base except for rigorous testing and code review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833450</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-24 13:18:47 -0800</bug_when>
    <thetext>Another related and very troubling inconsistency in r288438 (MiniBrowser):

&gt; window.showModalDialog
&lt; undefined

&gt; showModalDialog
&lt; function showModalDialog() { [native code] }

STP 134 returns a function for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833836</commentid>
    <comment_count>12</comment_count>
      <attachid>449961</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-25 13:42:52 -0800</bug_when>
    <thetext>Created attachment 449961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835093</commentid>
    <comment_count>13</comment_count>
      <attachid>449961</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-28 12:06:02 -0800</bug_when>
    <thetext>Comment on attachment 449961
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:132
&gt; +    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().showModalDialogPublicName(), CustomGetterSetter::create(vm, showModalDialogGetter, nullptr), static_cast&lt;unsigned&gt;(PropertyAttribute::CustomValue));

Do we need to have custom-accessor instead of just defining a function as a method?
Since it is a function (not attribute), I think we can just define it via `JSC_NATIVE_FUNCTION`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835095</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 12:08:47 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #13)
&gt; Comment on attachment 449961 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449961&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:132
&gt; &gt; +    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().showModalDialogPublicName(), CustomGetterSetter::create(vm, showModalDialogGetter, nullptr), static_cast&lt;unsigned&gt;(PropertyAttribute::CustomValue));
&gt; 
&gt; Do we need to have custom-accessor instead of just defining a function as a
&gt; method?
&gt; Since it is a function (not attribute), I think we can just define it via
&gt; `JSC_NATIVE_FUNCTION`.

I believe we to do support a case when modals are initially (on Window init) disabled (function is currently `undefined` in this case) and then get enabled via an API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835098</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 12:14:00 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #14)
&gt; (In reply to Yusuke Suzuki from comment #13)
&gt; &gt; Comment on attachment 449961 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=449961&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:132
&gt; &gt; &gt; +    putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().showModalDialogPublicName(), CustomGetterSetter::create(vm, showModalDialogGetter, nullptr), static_cast&lt;unsigned&gt;(PropertyAttribute::CustomValue));
&gt; &gt; 
&gt; &gt; Do we need to have custom-accessor instead of just defining a function as a
&gt; &gt; method?
&gt; &gt; Since it is a function (not attribute), I think we can just define it via
&gt; &gt; `JSC_NATIVE_FUNCTION`.
&gt; 
&gt; I believe we to do support a case when modals are initially (on Window init)
&gt; disabled (function is currently `undefined` in this case) and then get
&gt; enabled via an API.

In other words, there may be some code that relies on showModalDialog() working if its non-undefined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835113</commentid>
    <comment_count>16</comment_count>
      <attachid>449961</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-28 13:01:41 -0800</bug_when>
    <thetext>Comment on attachment 449961
Patch

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

Ah, I misunderstood. r=me

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:510
&gt; +    return encodedJSUndefined();

Use { } in new code.

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:528
&gt; +        return encodedJSUndefined();

Use { } in new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835116</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 13:08:41 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #16)
&gt; Comment on attachment 449961 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449961&amp;action=review
&gt; 
&gt; Ah, I misunderstood. r=me

Thank you!

&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:510
&gt; &gt; +    return encodedJSUndefined();
&gt; 
&gt; Use { } in new code.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:528
&gt; &gt; +        return encodedJSUndefined();
&gt; 
&gt; Use { } in new code.

One clarification: isn&apos;t { } equivalent to encodedJSValue() (empty value), while we need to return encoded `undefined` here? Passing empty value to userland code may causes crashes, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835129</commentid>
    <comment_count>18</comment_count>
      <attachid>449961</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-28 13:31:55 -0800</bug_when>
    <thetext>Comment on attachment 449961
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:510
&gt;&gt;&gt; +    return encodedJSUndefined();
&gt;&gt; 
&gt;&gt; Use { } in new code.
&gt; 
&gt; One clarification: isn&apos;t { } equivalent to encodedJSValue() (empty value), while we need to return encoded `undefined` here? Passing empty value to userland code may causes crashes, right?

Ah, oops. I was thinking it is encodedJSValue(). Is there any reason using `encodedJSUndefined` over `JSValue::encode(jsUndefined())`? I rarely see `encodedJSUndefined()`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835131</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 13:37:05 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #18)
&gt; Comment on attachment 449961 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449961&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:510
&gt; &gt;&gt;&gt; +    return encodedJSUndefined();
&gt; &gt;&gt; 
&gt; &gt;&gt; Use { } in new code.
&gt; &gt; 
&gt; &gt; One clarification: isn&apos;t { } equivalent to encodedJSValue() (empty value), while we need to return encoded `undefined` here? Passing empty value to userland code may causes crashes, right?
&gt; 
&gt; Ah, oops. I was thinking it is encodedJSValue(). Is there any reason using
&gt; `encodedJSUndefined` over `JSValue::encode(jsUndefined())`? I rarely see
&gt; `encodedJSUndefined()`.

encodedJSUndefined() is indeed very rare outside jsc.cpp / JSDollarVM.cpp / ObjC API. Will change to `JSValue::encode(jsUndefined())`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835132</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 13:37:55 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #18)
&gt; Is there any reason using `encodedJSUndefined` over `JSValue::encode(jsUndefined())`?

No reason at all, it&apos;s the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835175</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-28 16:06:01 -0800</bug_when>
    <thetext>Committed r288763 (246551@trunk): &lt;https://commits.webkit.org/246551@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449961</attachid>
            <date>2022-01-25 13:42:52 -0800</date>
            <delta_ts>2022-01-28 13:01:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234282-20220125214250.patch</filename>
            <type>text/plain</type>
            <size>12825</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4ODU4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDIyLTAxLTI1ICBBbGV4ZXkg
U2h2YXlrYSAgPGFzaHZheWthQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc2hvd01vZGFs
RGlhbG9nLXNwZWNpZmljIGxvZ2ljIGZyb20gSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xv
dCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQy
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGNoYW5nZSByZW1vdmVzIHNob3dNb2RhbERpYWxvZy1zcGVjaWZpYyBsb2dpYyBmcm9tIEpTRE9N
V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoKQorICAgICAgICBpbiBmYXZvciBvZiBhIHNldHRl
ci1sZXNzIEN1c3RvbVZhbHVlIHByb3BlcnR5IG9uIGB3aW5kb3dgLCB3aGljaCByZXR1cm5zIGEg
ZnVuY3Rpb24gb25seQorICAgICAgICBpZiBtb2RhbHMgYXJlIGFsbG93ZWQsIGFuZCBjYW4gYmUg
b3ZlcnJpZGVuIGJ5IHVzZXJsYW5kIGNvZGUuCisKKyAgICAgICAgU2luY2Ugd2UgbmVlZCB0byBz
dXBwb3J0IHNldENhblJ1bk1vZGFsKHRydWUpIGJlaW5nIGNhbGxlZCBhZnRlciBET01XaW5kb3cg
aXMgaW5pdGlhbGl6ZWQsCisgICAgICAgIFtDdXN0b21FbmFibGVkXSBhbmQgZnJpZW5kcyBjb3Vs
ZCBub3QgYmUgdXNlZC4gSG93ZXZlciwgb25jZSB0aGUgZnVuY3Rpb24gd2FzIGV4cG9zZWQsCisg
ICAgICAgIHRoZXJlIGlzIG5vIHBvaW50IGluIGhpZGluZyBpdCwgc28gdGhlIEN1c3RvbVZhbHVl
IGdldHRlciBvdmVycmlkZXMgaXRzZWxmIHdpdGggYSBKU0Z1bmN0aW9uCisgICAgICAgIHRvIHBy
ZXNlcnZlIGl0cyBpZGVudGl0eSAoY292ZXJlZCBieSBmYXN0L2RvbS93cmFwcGVyLWlkZW50aXR5
Lmh0bWwpLgorCisgICAgICAgIFRoZSBwYXRjaCBtYWtlcyBKU0RPTVdpbmRvdydzIGdldE93blBy
b3BlcnR5U2xvdCgpIGNvbnNpc3RlbnQgd2l0aCBpdHMgZ2V0T3duUHJvcGVydHlOYW1lcygpCisg
ICAgICAgIHJlZ2FyZGluZyB0aGUgcHJlc2VuY2Ugb2YgInNob3dNb2RhbERpYWxvZyIgcHJvcGVy
dHksIGFuZCBmaXhlcyBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KCkKKyAgICAgICAg
YmVpbmcgaWdub3JlZCBieSBMTEludCB3aGVuIGFjY2Vzc2luZyAic2hvd01vZGFsRGlhbG9nIiBm
cm9tIHNjb3BlLCB3aGljaCByZXN1bHRlZCBpbiBleHBvc2luZworICAgICAgICB0aGUgZnVuY3Rp
b24gZXZlbiBpZiBtb2RhbHMgd2VyZSBkaXNhbGxvd2VkLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
ZG9tL1dpbmRvdy9mb3JiaWQtc2hvd01vZGFsRGlhbG9nLmh0bWwKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRv
dy5pZGw6CisKIDIwMjItMDEtMjUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgog
CiAgICAgICAgIFtDU1MgQ29udGFpbmVyIFF1ZXJpZXNdIFBhcnNpbmcgc3VwcG9ydCBmb3IgY29u
dGFpbmVyIHNob3J0aGFuZCBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyODg0OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNiArMTI4LDggQEAgdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmZpbmlzaENyZWF0aW9uKFZN
JgogCiAgICAgaWYgKG1fd3JhcHBlZCAmJiBtX3dyYXBwZWQtPmZyYW1lKCkgJiYgbV93cmFwcGVk
LT5mcmFtZSgpLT5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAg
IHNldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHRydWUpOworCisgICAgcHV0RGlyZWN0Q3VzdG9t
QWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSkt
PmJ1aWx0aW5OYW1lcygpLnNob3dNb2RhbERpYWxvZ1B1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVy
U2V0dGVyOjpjcmVhdGUodm0sIHNob3dNb2RhbERpYWxvZ0dldHRlciwgbnVsbHB0ciksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tVmFsdWUpKTsKIH0KIAog
dm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjg4NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMjAgKzIwOCw5IEBAIGJvb2wgSlNET01XaW5k
b3c6OmdldE93blByb3BlcnR5U2xvdChKU08KICAgICAgICAgc2xvdC5zZXRXYXRjaHBvaW50U2V0
KCp0aGlzT2JqZWN0LT5tX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMpOwogCiAgICAgLy8gKDIpIFJl
Z3VsYXIgb3duIHByb3BlcnRpZXMuCi0gICAgUHJvcGVydHlTbG90IHNsb3RDb3B5ID0gc2xvdDsK
LSAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKLSAgICAgICAgYXV0byogZnJhbWUgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKLQotICAgICAgICAvLyBEZXRlY3Qgd2hlbiB3
ZSdyZSBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAnc2hvd01vZGFsRGlhbG9nJywgdGhpcyBpcyBkaXNh
YmxlZCwgYW5kIGhhcyBpdHMgb3JpZ2luYWwgdmFsdWUuCi0gICAgICAgIGJvb2wgaXNTaG93TW9k
YWxEaWFsb2dBbmRTaG91bGRIaWRlID0gcHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4obGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKS5jbGllbnREYXRhKS0+YnVpbHRp
bk5hbWVzKCkuc2hvd01vZGFsRGlhbG9nUHVibGljTmFtZSgpCi0gICAgICAgICAgICAmJiAoIWZy
YW1lIHx8ICFET01XaW5kb3c6OmNhblNob3dNb2RhbERpYWxvZygqZnJhbWUpKQotICAgICAgICAg
ICAgJiYgc2xvdC5pc1ZhbHVlKCkgJiYgaXNIb3N0RnVuY3Rpb24oc2xvdC5nZXRWYWx1ZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpLCBzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJs
ZS0+ZW50cnkocHJvcGVydHlOYW1lKS0+ZnVuY3Rpb24oKSk7Ci0gICAgICAgIC8vIFVubGVzcyB3
ZSdyZSBpbiB0aGUgc2hvd01vZGFsRGlhbG9nIHNwZWNpYWwgY2FzZSwgd2UncmUgZG9uZS4KLSAg
ICAgICAgaWYgKCFpc1Nob3dNb2RhbERpYWxvZ0FuZFNob3VsZEhpZGUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgc2xvdCA9IHNsb3RDb3B5OwotCi0gICAgfSBlbHNlIGlmIChV
TkxJS0VMWShzbG90LmlzVk1JbnF1aXJ5KCkgJiYgc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVj
dCgpKSkKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmIChVTkxJS0VMWShzbG90LmlzVk1JbnF1aXJ5KCkgJiYgc2xvdC5pc1RhaW50ZWRC
eU9wYXF1ZU9iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKQEAgLTQ5OSwyNiArNDg4LDYwIEBAIGlubGluZSBKU1ZhbHVl
IERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHUKICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZSgmbV9n
bG9iYWxPYmplY3QsIGlkZW50aWZpZXIpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93
TW9kYWxEaWFsb2coSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSYgY2FsbEZyYW1lKQorc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oc2hvd01vZGFs
RGlhbG9nKTsKKworSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHNob3dNb2RhbERpYWxvZ0dldHRl
ciwgKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpKQoreworICAgIGF1dG8mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0VGhpc1ZhbHVl
PEpTRE9NV2luZG93PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRE9NQXR0cmlidXRlR2V0dGVyVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIEpTRE9NV2luZG93OjppbmZvKCksIHByb3BlcnR5TmFtZSk7CisKKyAgICBpZiAo
YXV0byogZnJhbWUgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkgeworICAgICAgICBp
ZiAoRE9NV2luZG93OjpjYW5TaG93TW9kYWxEaWFsb2coKmZyYW1lKSkgeworICAgICAgICAgICAg
YXV0byoganNGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgMSwgInNob3dNb2RhbERpYWxvZyJfcywgc2hvd01vZGFsRGlhbG9nKTsKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCBqc0Z1bmN0aW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNGdW5jdGlvbik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihzaG93TW9kYWxEaWFsb2csIChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdFB0ciwgQ2FsbEZyYW1lKiBjYWxsRnJhbWVQdHIpKQogeworICAgIGF1
dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqbGV4aWNhbEdsb2JhbE9iamVjdFB0cjsKKyAgICBh
dXRvJiBjYWxsRnJhbWUgPSAqY2FsbEZyYW1lUHRyOworCiAgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAorICAgIGF1dG8qIHRoaXNPYmplY3QgPSBJRExPcGVyYXRpb248SlNET01XaW5kb3c+Ojpj
YXN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CisgICAgaWYgKFVOTElLRUxZKCF0
aGlzT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIldpbmRvdyJfcywgInNob3dNb2RhbERpYWxvZyJfcyk7CisKKyAg
ICBib29sIHNob3VsZEFsbG93QWNjZXNzID0gQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3RQdHIsIHRoaXNPYmplY3QtPndyYXBw
ZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKTsKKyAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChz
Y29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRBbGxvd0FjY2Vzcyk7CisgICAgaWYg
KCFzaG91bGRBbGxvd0FjY2VzcykKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgp
OworCiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
CiAgICAgU3RyaW5nIHVybFN0cmluZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMRE9NU3RyaW5n
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLmFyZ3VtZW50KDApKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gY29udmVy
dDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUuYXJndW1lbnQoMikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIERpYWxvZ0hh
bmRsZXIgaGFuZGxlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogCi0gICAgd3Jh
cHBlZCgpLnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBh
Y3RpdmVET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCksIGZpcnN0RE9NV2luZG93KGxleGlj
YWxHbG9iYWxPYmplY3QpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9nKSB7CisgICAgdGhp
c09iamVjdC0+d3JhcHBlZCgpLnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1
cmVzU3RyaW5nLCBhY3RpdmVET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCksIGZpcnN0RE9N
V2luZG93KGxleGljYWxHbG9iYWxPYmplY3QpLCBbJmhhbmRsZXJdKERPTVdpbmRvdyYgZGlhbG9n
KSB7CiAgICAgICAgIGhhbmRsZXIuZGlhbG9nQ3JlYXRlZChkaWFsb2cpOwogICAgIH0pOwogCi0g
ICAgcmV0dXJuIGhhbmRsZXIucmV0dXJuVmFsdWUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGhhbmRsZXIucmV0dXJuVmFsdWUoKSk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnF1
ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUmIGNhbGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uaAkocmV2aXNpb24gMjg4NDkyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNCArNTQs
NiBAQCBpbmxpbmUgSlNET01XaW5kb3cqIG1haW5Xb3JsZEdsb2JhbE9iamVjCiAgICAgcmV0dXJu
IGZyYW1lID8gJm1haW5Xb3JsZEdsb2JhbE9iamVjdCgqZnJhbWUpIDogbnVsbHB0cjsKIH0KIAor
SlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihzaG93TW9kYWxEaWFsb2dHZXR0ZXIpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZp
c2lvbiAyODg0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTExNCw5ICsxMTQsNiBAQAogICAgIFtOb3RFbnVtZXJhYmxlLCBDb25kaXRp
b25hbD1JT1NfR0VTVFVSRV9FVkVOVFNdIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25nZXN0dXJl
ZW5kOwogICAgIFtOb3RFbnVtZXJhYmxlLCBDb25kaXRpb25hbD1JT1NfR0VTVFVSRV9FVkVOVFNd
IGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25nZXN0dXJlc3RhcnQ7CiAKLSAgICAvLyBOb24tc3Rh
bmRhcmQ6IFRoaXMgaGFzIGJlZW4gZHJvcHBlZCBmcm9tIHRoZSBIVE1MIHNwZWNpZmljYXRpb24g
YW5kIGJ5IG90aGVyIGJyb3dzZXJzLgotICAgIFtDdXN0b21dIGFueSBzaG93TW9kYWxEaWFsb2co
RE9NU3RyaW5nIHVybCwgb3B0aW9uYWwgYW55IGRpYWxvZ0FyZ3MsIG9wdGlvbmFsIERPTVN0cmlu
ZyBmZWF0dXJlQXJncyk7Ci0KICAgICAvLyBOb24tc3RhbmRhcmQ6IHNob3VsZCBwcm9iYWJseSBk
ZXByZWNhdGUgdGhpcyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5
NjUzKS4KICAgICAvLyBCbGluayBhbHJlYWR5IGRlcHJlY2F0ZWQgaXQgKGh0dHBzOi8vYnVncy5j
aHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQzNzU2OSkuCiAgICAgQ1NT
UnVsZUxpc3QgZ2V0TWF0Y2hlZENTU1J1bGVzKG9wdGlvbmFsIEVsZW1lbnQ/IGVsZW1lbnQgPSBu
dWxsLCBvcHRpb25hbCBET01TdHJpbmc/IHBzZXVkb0VsZW1lbnQgPSBudWxsKTsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI4ODQ5MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAxLTI1ICBBbGV4ZXkgU2h2YXlrYSAgPGFzaHZheWth
QGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc2hvd01vZGFsRGlhbG9nLXNwZWNpZmljIGxv
Z2ljIGZyb20gSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCgpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQyODIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9mb3Ji
aWQtc2hvd01vZGFsRGlhbG9nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5k
b3cvZm9yYmlkLXNob3dNb2RhbERpYWxvZy5odG1sOgorCiAyMDIyLTAxLTI0ICBQYXRyaWNrIEFu
Z2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRmxleGJv
eF0gQWRkIGluc3RydW1lbnRhdGlvbi9wcm90b2NvbCBiaXRzIGZvciBmbGV4IGxheW91dCBjb250
YWluZXJzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZm9yYmlkLXNob3dNb2Rh
bERpYWxvZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L2ZvcmJpZC1zaG93TW9kYWxEaWFsb2ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyODg0
OTIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvZm9yYmlkLXNob3dNb2RhbERpYWxv
Zy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsMTEgKzYsMTIgQEAgT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogTWFrZSBzdXJlIHdpbmRvdy5zaG93TW9k
YWxEaWFsb2cgaXMgdW5kZWZpbmVkIHdoZW4gbW9kYWwgZGlhbG9ncyBhcmUgbm90IGFsbG93ZWQu
CiBpbnRlcm5hbHMuc2V0Q2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUoZmFsc2UpCiBQQVNTIHdp
bmRvdy5zaG93TW9kYWxEaWFsb2cgaXMgdW5kZWZpbmVkCi1QQVNTIHdpbmRvdy5oYXNPd25Qcm9w
ZXJ0eSgnc2hvd01vZGFsRGlhbG9nJykgaXMgZmFsc2UKK1BBU1Mgd2luZG93Lmhhc093blByb3Bl
cnR5KCdzaG93TW9kYWxEaWFsb2cnKSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzKHdpbmRvdykuaW5jbHVkZXMoJ3Nob3dNb2RhbERpYWxvZycpIGlzIHRydWUKIAogVGVz
dHMgaGF2aW5nIGEgbmFtZWQgcHJvcGVydHkgd2l0aCBuYW1lICdzaG93TW9kYWxEaWFsb2cnLgog
ZG9jdW1lbnQuYm9keS5hcHBlbmQodGVzdEZyYW1lKQotUEFTUyB3aW5kb3cuc2hvd01vZGFsRGlh
bG9nIGlzIHRlc3RGcmFtZS5jb250ZW50V2luZG93CitQQVNTIHdpbmRvdy5zaG93TW9kYWxEaWFs
b2cgaXMgdW5kZWZpbmVkCiB0ZXN0RnJhbWUucmVtb3ZlKCkKIFBBU1Mgd2luZG93LnNob3dNb2Rh
bERpYWxvZyBpcyB1bmRlZmluZWQKIApAQCAtMTksNiArMjAsNyBAQCBpbnRlcm5hbHMuc2V0Q2Fu
U2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUoCiBQQVNTIHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgaXMg
bm90IHVuZGVmaW5lZAogUEFTUyB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3Nob3dNb2RhbERpYWxv
ZycpIGlzIHRydWUKIFBBU1Mgd2luZG93LnNob3dNb2RhbERpYWxvZyBpcyBhbiBpbnN0YW5jZSBv
ZiBGdW5jdGlvbgorUEFTUyB3aW5kb3cuc2hvd01vZGFsRGlhbG9nLm5hbWUgaXMgJ3Nob3dNb2Rh
bERpYWxvZycKIAogTWFrZSBzdXJlIHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgY2FuIGJlIHNoYWRv
d2VkLgogd2luZG93LnNob3dNb2RhbERpYWxvZyA9IDEKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL1dpbmRvdy9mb3JiaWQtc2hvd01vZGFsRGlhbG9nLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2ZvcmJpZC1zaG93TW9kYWxEaWFsb2cuaHRtbAkocmV2
aXNpb24gMjg4NDkyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2ZvcmJpZC1zaG93
TW9kYWxEaWFsb2cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOCwxNSArOCwxOCBAQCBkZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCBXaW5kb3cuc2hvd01vZGFsCiBkZWJ1ZygiTWFrZSBzdXJlIHdpbmRv
dy5zaG93TW9kYWxEaWFsb2cgaXMgdW5kZWZpbmVkIHdoZW4gbW9kYWwgZGlhbG9ncyBhcmUgbm90
IGFsbG93ZWQuIik7CiBldmFsQW5kTG9nKCJpbnRlcm5hbHMuc2V0Q2FuU2hvd01vZGFsRGlhbG9n
T3ZlcnJpZGUoZmFsc2UpIik7CiBzaG91bGRCZSgid2luZG93LnNob3dNb2RhbERpYWxvZyIsICJ1
bmRlZmluZWQiKTsKLXNob3VsZEJlRmFsc2UoIndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnc2hvd01v
ZGFsRGlhbG9nJykiKTsKK3Nob3VsZEJlVHJ1ZSgid2luZG93Lmhhc093blByb3BlcnR5KCdzaG93
TW9kYWxEaWFsb2cnKSIpOworc2hvdWxkQmVUcnVlKCJPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l
cyh3aW5kb3cpLmluY2x1ZGVzKCdzaG93TW9kYWxEaWFsb2cnKSIpOwogCitpZiAoc2hvd01vZGFs
RGlhbG9nICE9PSB1bmRlZmluZWQpCisgICAgdGVzdEZhaWxlZCgic2hvd01vZGFsRGlhbG9nICE9
PSB1bmRlZmluZWQiKTsKIAogZGVidWcoIiIpOwogZGVidWcoIlRlc3RzIGhhdmluZyBhIG5hbWVk
IHByb3BlcnR5IHdpdGggbmFtZSAnc2hvd01vZGFsRGlhbG9nJy4iKTsKIHZhciB0ZXN0RnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKIHRlc3RGcmFtZS5uYW1lID0gInNo
b3dNb2RhbERpYWxvZyI7CiBldmFsQW5kTG9nKCJkb2N1bWVudC5ib2R5LmFwcGVuZCh0ZXN0RnJh
bWUpIik7Ci1zaG91bGRCZSgid2luZG93LnNob3dNb2RhbERpYWxvZyIsICJ0ZXN0RnJhbWUuY29u
dGVudFdpbmRvdyIpOworc2hvdWxkQmUoIndpbmRvdy5zaG93TW9kYWxEaWFsb2ciLCAidW5kZWZp
bmVkIik7CiBldmFsQW5kTG9nKCJ0ZXN0RnJhbWUucmVtb3ZlKCkiKTsKIHNob3VsZEJlKCJ3aW5k
b3cuc2hvd01vZGFsRGlhbG9nIiwgInVuZGVmaW5lZCIpOwogCkBAIC0yNiw2ICsyOSw3IEBAIGV2
YWxBbmRMb2coImludGVybmFscy5zZXRDYW5TaG93TW9kYWxEaWEKIHNob3VsZE5vdEJlKCJ3aW5k
b3cuc2hvd01vZGFsRGlhbG9nIiwgInVuZGVmaW5lZCIpOwogc2hvdWxkQmVUcnVlKCJ3aW5kb3cu
aGFzT3duUHJvcGVydHkoJ3Nob3dNb2RhbERpYWxvZycpIik7CiBzaG91bGRCZVR5cGUoIndpbmRv
dy5zaG93TW9kYWxEaWFsb2ciLCAiRnVuY3Rpb24iKTsKK3Nob3VsZEJlKCJ3aW5kb3cuc2hvd01v
ZGFsRGlhbG9nLm5hbWUiLCAiJ3Nob3dNb2RhbERpYWxvZyciKTsKIAogZGVidWcoIiIpOwogZGVi
dWcoIk1ha2Ugc3VyZSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nIGNhbiBiZSBzaGFkb3dlZC4iKTsK
</data>
<flag name="review"
          id="476201"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="476215"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>