<?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>206364</bug_id>
          
          <creation_ts>2020-01-16 11:22:16 -0800</creation_ts>
          <short_desc>Make the callAsyncJavaScriptFunction function actually be async (so await works)</short_desc>
          <delta_ts>2020-01-17 10:47:05 -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>WebKit Website</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>hi</cc>
    
    <cc>jond</cc>
    
    <cc>keith_miller</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607558</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-16 11:22:16 -0800</bug_when>
    <thetext>Make the callAsyncJavaScriptFunction function actually be async (so await works)

&lt;rdar://problem/58571682&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607569</commentid>
    <comment_count>1</comment_count>
      <attachid>387938</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-16 11:39:11 -0800</bug_when>
    <thetext>Created attachment 387938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607571</commentid>
    <comment_count>2</comment_count>
      <attachid>387938</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-01-16 11:41:31 -0800</bug_when>
    <thetext>Comment on attachment 387938
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607576</commentid>
    <comment_count>3</comment_count>
      <attachid>387938</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-16 11:47:02 -0800</bug_when>
    <thetext>Comment on attachment 387938
Patch

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

&gt; Source/WebCore/bindings/js/ScriptController.cpp:607
&gt; +    functionStringBuilder.append(&quot;(async function(&quot;);

One issue with making a function `async` is that they _always_ return a `Promise`.  I think it would be better to have `ScriptController:callInWorld` take an `enum class IsAsync { Yes, No };` so that callers can decide whether or not they want this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607583</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-16 11:57:38 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #3)
&gt; Comment on attachment 387938 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387938&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/ScriptController.cpp:607
&gt; &gt; +    functionStringBuilder.append(&quot;(async function(&quot;);
&gt; 
&gt; One issue with making a function `async` is that they _always_ return a
&gt; `Promise`.  

Which is fine, because literally the only client of this is &quot;callAsyncJavaScriptFunction&quot; which expects promise results.

&gt; I think it would be better to have
&gt; `ScriptController:callInWorld` take an `enum class IsAsync { Yes, No };` so
&gt; that callers can decide whether or not they want this.

There&apos;s no reason to do now that because there would be no client of &quot;No&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607626</commentid>
    <comment_count>5</comment_count>
      <attachid>387938</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-16 13:30:43 -0800</bug_when>
    <thetext>Comment on attachment 387938
Patch

Clearing flags on attachment: 387938

Committed r254704: &lt;https://trac.webkit.org/changeset/254704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607627</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-16 13:30:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607892</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-16 23:45:11 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #3)
&gt; Comment on attachment 387938 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387938&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/ScriptController.cpp:607
&gt; &gt; +    functionStringBuilder.append(&quot;(async function(&quot;);
&gt; 
&gt; One issue with making a function `async` is that they _always_ return a
&gt; `Promise`.  I think it would be better to have
&gt; `ScriptController:callInWorld` take an `enum class IsAsync { Yes, No };` so
&gt; that callers can decide whether or not they want this.

Why would the API change here? When the Promise that’s returned is resolved, we IPC the result back to the UI process, so I think it should not be (very) observable to users. (Like if you treat it like a non async function, and do something like “return 42;”, everything Just Works and the UI process is called back with “42”.)

I think the only concern here is that async functions have slightly different semantics than non async functions. I think(?) things like reserved identifiers and such. But I think that’s ok here, especially because this will be documented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608081</commentid>
    <comment_count>8</comment_count>
      <attachid>387938</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-17 10:47:05 -0800</bug_when>
    <thetext>Comment on attachment 387938
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/bindings/js/ScriptController.cpp:607
&gt;&gt;&gt;&gt; +    functionStringBuilder.append(&quot;(async function(&quot;);
&gt;&gt;&gt; 
&gt;&gt;&gt; One issue with making a function `async` is that they _always_ return a `Promise`.  I think it would be better to have `ScriptController:callInWorld` take an `enum class IsAsync { Yes, No };` so that callers can decide whether or not they want this.
&gt;&gt; 
&gt;&gt; Which is fine, because literally the only client of this is &quot;callAsyncJavaScriptFunction&quot; which expects promise results.
&gt; 
&gt; Why would the API change here? When the Promise that’s returned is resolved, we IPC the result back to the UI process, so I think it should not be (very) observable to users. (Like if you treat it like a non async function, and do something like “return 42;”, everything Just Works and the UI process is called back with “42”.)
&gt; 
&gt; I think the only concern here is that async functions have slightly different semantics than non async functions. I think(?) things like reserved identifiers and such. But I think that’s ok here, especially because this will be documented.

I misread how `ScriptController::callInWorld` was being used.  My apologies for the confusion.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387938</attachid>
            <date>2020-01-16 11:39:11 -0800</date>
            <delta_ts>2020-01-16 13:30:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7673</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDVkNDk3OGJiNy4uODE3YjFkMGFmYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMC0wMS0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CisKKyAgICAgICAgTWFrZSB0aGUgY2FsbEFzeW5jSmF2YVNjcmlwdEZ1bmN0aW9uIGZ1bmN0aW9u
IGFjdHVhbGx5IGJlIGFzeW5jIChzbyBhd2FpdCB3b3JrcykuCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81ODU3MTY4Mj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDYzNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FsbElu
V29ybGQpOgorCiAyMDIwLTAxLTE2ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgTWVkaWFTdHJlYW0gdmlkZW8gdHJhY2sgcmVuZGVy
aW5nIGluIEdQVVByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAKaW5kZXggNDY3ZWNhZTM3YjcuLjAwYzYwZWZmZDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNjA0LDcg
KzYwNCw3IEBAIFZhbHVlT3JFeGNlcHRpb24gU2NyaXB0Q29udHJvbGxlcjo6Y2FsbEluV29ybGQo
UnVuSmF2YVNjcmlwdFBhcmFtZXRlcnMmJiBwYXJhbWV0CiAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKIAogICAgIC8vIEJ1aWxkIHVwIGEgbmV3IHNjcmlwdCBzdHJpbmcgdGhhdCBpcyBhbiBhc3lu
YyBmdW5jdGlvbiB3aXRoIGFyZ3VtZW50cywgYW5kIGRlc2VyaWFsaXplIHRob3NlIGFyZ3VtZW50
cy4KLSAgICBmdW5jdGlvblN0cmluZ0J1aWxkZXIuYXBwZW5kKCIoZnVuY3Rpb24oIik7CisgICAg
ZnVuY3Rpb25TdHJpbmdCdWlsZGVyLmFwcGVuZCgiKGFzeW5jIGZ1bmN0aW9uKCIpOwogICAgIGZv
ciAoYXV0byBhcmd1bWVudCA9IHBhcmFtZXRlcnMuYXJndW1lbnRzLT5iZWdpbigpOyBhcmd1bWVu
dCAhPSBwYXJhbWV0ZXJzLmFyZ3VtZW50cy0+ZW5kKCk7KSB7CiAgICAgICAgIGZ1bmN0aW9uU3Ry
aW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnQtPmtleSk7CiAgICAgICAgIGF1dG8gc2VyaWFsaXpl
ZEFyZ3VtZW50ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKFdU
Rk1vdmUoYXJndW1lbnQtPnZhbHVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRjMTcyNTMwZmUzLi4zZjE3MGQx
NDM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0xNiAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSB0aGUgY2FsbEFzeW5jSmF2YVNj
cmlwdEZ1bmN0aW9uIGZ1bmN0aW9uIGFjdHVhbGx5IGJlIGFzeW5jIChzbyBhd2FpdCB3b3Jrcyku
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODU3MTY4Mj4gYW5kIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYzNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJp
dmF0ZS5oOiBVcGRhdGUgY2FsbEFzeW5jSmF2YVNjcmlwdEZ1bmN0aW9uOiBoZWFkZXIgZG9jcy4K
KwogMjAyMC0wMS0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTjogKHIyNTQ2NjgpIFtNYWMgRGVidWcgd2syXSAyMSBodHRwL3Rlc3RzL25h
dmlnYXRpb24vKiB0ZXN0cyBhcmUgY3Jhc2hpbmcgd2l0aCBBU1NFUlRJT04gRkFJTEVEOiB3b3Js
ZC5maXJzdCAhPSAxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmgKaW5kZXggNmFlNjFjYzRlOTMuLmVmYzFiNjBiNTY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgKQEAgLTMyNSw4ICszMjUsMTEgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIs
IF9XS1JlY3RFZGdlKSB7CiAgQHBhcmFtIGNvbnRlbnRXb3JsZCBUaGUgV0tDb250ZW50V29ybGQg
aW4gd2hpY2ggdG8gY2FsbCB0aGUgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICBAcGFyYW0gY29tcGxl
dGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBmdW5jdGlvbiBjYWxsLCBvciB3aXRoIHRoZSBhc3luY2hyb25vdXMgcmVzb2x1dGlvbiBvZiB0
aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuCiAgQGRpc2N1c3Npb24gVGhlIEphdmFTY3JpcHQg
c3RyaW5nIGlzIHRyZWF0ZWQgYXMgYW4gYW5vbnltb3VzIEphdmFTY3JpcHQgZnVuY3Rpb24gdGhh
dCBjYW4gYmUgY2FsbGVkIHdpdGggbmFtZWQgYXJndW1lbnRzLgotIFBhc3MgaW4gSmF2YVNjcmlw
dCBzdHJpbmcgZm9ybWF0dGVkIGZvciBldmFsdWF0aW9uLCBub3QgYXMgb25lIG9mIHRoZSB2YXJp
YW50cyBvZiBmdW5jdGlvbiBjYWxsIGF2YWlsYWJsZSBpbiBKYXZhU2NyaXB0LgotIEZvciBleGFt
cGxlOgorIERvIG5vdCBmb3JtYXQgeW91ciBzdHJpbmcgYXMgb25lIG9mIHRoZSB2YXJpYW50cyBv
ZiBmdW5jdGlvbiBjYWxsIGF2YWlsYWJsZSBpbiBKYXZhU2NyaXB0LgorIEluc3RlYWQgcGFzcyBp
biBhIEphdmFTY3JpcHQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gdGV4dCwgZm9y
bWF0dGVkIGZvciBldmFsdWF0aW9uLgorIEZvciBleGFtcGxlIGRvIG5vdCBwYXNzIGluIHRoZSBz
dHJpbmc6CisgICAgIGZ1bmN0aW9uKHgsIHksIHopIHsgcmV0dXJuIHggPyB5IDogejsgfQorIElu
c3RlYWQgcGFzcyBpbiB0aGUgc3RyaW5nOgogICAgICByZXR1cm4geCA/IHkgOiB6OwogCiAgVGhl
IGFyZ3VtZW50cyBkaWN0aW9uYXJ5IHN1cHBsaWVzIHRoZSB2YWx1ZXMgZm9yIHRob3NlIGFyZ3Vt
ZW50cyB3aGljaCBhcmUgc2VyaWFsaXplZCBpbnRvIEphdmFTY3JpcHQgZXF1aXZhbGVudHMuCkBA
IC0zNTUsNiArMzU4LDE2IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0
RWRnZSkgewogIElmIHRoZSBvYmplY3QgY2FsbHMgImZ1bGZpbGwiLCB5b3VyIGNvbXBsZXRpb24g
aGFuZGxlciB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQuCiAgSWYgdGhlIG9iamVjdCBj
YWxscyAicmVqZWN0IiwgeW91ciBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgd2l0
aCBhIFdLRXJyb3JKYXZhU2NyaXB0QXN5bmNGdW5jdGlvblJlc3VsdFJlamVjdGVkIGVycm9yIGNv
bnRhaW5pbmcgdGhlIHJlamVjdCByZWFzb24gaW4gdGhlIHVzZXJJbmZvIGRpY3Rpb25hcnkuCiAg
SWYgdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBiZWZvcmUgaXQgaXMgcmVzb2x2ZWQs
IHlvdXIgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXJyb3IgaW5k
aWNhdGluZyB0aGF0IGl0IHdpbGwgbmV2ZXIgYmUgcmVzb2x2ZWQuCisKKyBTaW5jZSB0aGUgZnVu
Y3Rpb24gaXMgYSBKYXZhU2NyaXB0ICJhc3luYyIgZnVuY3Rpb24geW91IGNhbiB1c2UgSmF2YVNj
cmlwdCAiYXdhaXQiIG9uIHRob3NlIG9iamVjdHMgaW5zaWRlIHlvdXIgZnVuY3Rpb24gdGV4dC4K
KyBGb3IgZXhhbXBsZToKKyAgICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocikgewor
ICAgICAgICAgcig0Mik7CisgICAgIH0pOworICAgICBhd2FpdCBwOworICAgICByZXR1cm4gcDsK
KworIFRoZSBhYm92ZSBmdW5jdGlvbiB0ZXh0IHdpbGwgY3JlYXRlIGEgcHJvbWlzZSB0aGF0IHdp
bGwgZnVsZnVsbCB3aXRoIHRoZSB2YWx1ZSA0Miwgd2FpdCBmb3IgaXQgdG8gcmVzb2x2ZSwgdGhl
biByZXR1cm4gdGhlIGZ1bGZpbGxtZW50IHZhbHVlIG9mIDQyLgogKi8KIC0gKHZvaWQpX2NhbGxB
c3luY0phdmFTY3JpcHRGdW5jdGlvbjooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIHdpdGhB
cmd1bWVudHM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilhcmd1bWVudHMgaW5Xb3Js
ZDooX1dLQ29udGVudFdvcmxkICopY29udGVudFdvcmxkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShpZCwgTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyOwogCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmU4ZWVmNWI2NjUuLjc4
MjBiNjUxZDkyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDEtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdGhlIGNhbGxBc3luY0phdmFTY3JpcHRGdW5jdGlv
biBmdW5jdGlvbiBhY3R1YWxseSBiZSBhc3luYyAoc28gYXdhaXQgd29ya3MpLgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTg1NzE2ODI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA2MzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0FzeW5jRnVuY3Rp
b24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wMS0xNiAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBoaWxuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1b
V1BFXSBDbGllbnQtc2lkZSB2aWRlbyByZW5kZXJpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tCmluZGV4
IDc4Y2RkNzcyMDQ3Li43MmI5NGZhYzdiNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Bc3luY0Z1bmN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQXN5bmNGdW5jdGlvbi5tbQpAQCAtMjQzLDYgKzI0Myw0
MiBAQCBURVNUKEFzeW5jRnVuY3Rpb24sIFByb21pc2UpCiAgICAgfV07CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKIAorICAgIC8vIFZlcmlmeSB3ZSBjYW4gYXdhaXQgZm9y
IGEgcHJvbWlzZSB0byBiZSByZXNvbHZlZCBiZWZvcmUgcmV0dXJuaW5nLgorICAgIGZ1bmN0aW9u
Qm9keSA9IEAidmFyIHIgPSAwOyB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKGZ1bGZpbGws
IHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHIgPSA0MjsgZnVsZmlsbCgpOyB9LCA1
KTt9KTsgYXdhaXQgcDsgcmV0dXJuIHI7IjsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBfY2FsbEFzeW5jSmF2YVNjcmlwdEZ1bmN0aW9uOmZ1bmN0aW9uQm9keSB3aXRoQXJndW1l
bnRzOm5pbCBpbldvcmxkOl9XS0NvbnRlbnRXb3JsZC5wYWdlQ29udGVudFdvcmxkIGNvbXBsZXRp
b25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBF
Q1RfTlVMTChlcnJvcik7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5kT2ZDbGFz
czpbTlNOdW1iZXIgY2xhc3NdXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNFcXVh
bFRvTnVtYmVyOkA0Ml0pOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgLy8gUmV0dXJuaW5nIGFuIGFscmVh
ZHkgcmVzb2x2ZWQgcHJvbWlzZSBnaXZlcyB0aGUgdmFsdWUgaXQgd2FzIHJlc29sdmVkIHdpdGgu
CisgICAgZnVuY3Rpb25Cb2R5ID0gQCJ2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKGZ1bGZp
bGwsIHJlamVjdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGZ1bGZpbGwoJ0Z1bGZpbGxlZCEn
KSB9LCA1KTt9KTsgYXdhaXQgcDsgcmV0dXJuIHA7IjsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBfY2FsbEFzeW5jSmF2YVNjcmlwdEZ1bmN0aW9uOmZ1bmN0aW9uQm9keSB3aXRo
QXJndW1lbnRzOm5pbCBpbldvcmxkOl9XS0NvbnRlbnRXb3JsZC5wYWdlQ29udGVudFdvcmxkIGNv
bXBsZXRpb25IYW5kbGVyOlsmXSAoaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQgaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQg
aXNFcXVhbFRvU3RyaW5nOkAiRnVsZmlsbGVkISJdKTsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIENo
YWluaW5nIHRoZW5hYmxlcyBzaG91bGQgd29yay4KKyAgICBmdW5jdGlvbkJvZHkgPSBAInZhciBw
ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIpIHsgcihuZXcgUHJvbWlzZShmdW5jdGlvbiAocikg
eyByKDQyKTsgfSkpOyB9KTsgYXdhaXQgcDsgcmV0dXJuICdEb25lJzsiOworCisgICAgZG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jYWxsQXN5bmNKYXZhU2NyaXB0RnVuY3Rpb246ZnVuY3Rp
b25Cb2R5IHdpdGhBcmd1bWVudHM6bmlsIGluV29ybGQ6X1dLQ29udGVudFdvcmxkLnBhZ2VDb250
ZW50V29ybGQgY29tcGxldGlvbkhhbmRsZXI6WyZdIChpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3Jl
c3VsdCBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoW3Jlc3VsdCBpc0VxdWFsVG9TdHJpbmc6QCJEb25lIl0pOworICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCiAgICAg
ZG9uZSA9IGZhbHNlOwogICAgIHRyeUdDUHJvbWlzZSh3ZWJWaWV3LmdldCgpLCBkb25lKTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>