<?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>153617</bug_id>
          
          <creation_ts>2016-01-28 14:45:41 -0800</creation_ts>
          <short_desc>Add a variadic function template for creating new RefCounted objects and use it instead of the numerous per-class create() functions</short_desc>
          <delta_ts>2016-02-22 16:24:53 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=153612</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>andersca</cc>
    
    <cc>bburg</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1159888</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-01-28 14:45:41 -0800</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=153612, DedicatedWorkerThread::create() was changed to be a variadic function template to remove duplication when adding arguments to DedicatedWorkerThread&apos;s constructor. It would be nice to generalize this to all RefCounted objects, so that we do not have to create a custom create() function for each RefCounted class, duplicating the constructor signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162551</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-02-05 17:19:42 -0800</bug_when>
    <thetext>This would be awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162989</commentid>
    <comment_count>2</comment_count>
      <attachid>270876</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-02-08 13:13:38 -0800</bug_when>
    <thetext>Created attachment 270876
Proof of concept

I took a stab at this over the weekend. Here&apos;s a proof of concept with a few examples of how this would be adopted.

I ended up adding a static create function in WTF::Ref. It&apos;s not possible to do this correctly in RefCounted, since the RefCounted template is not always instantiated with the class that needs to be constructed. I like the way this ended up looking, since it plays really nicely with auto, e.g.:

    auto stopwatch = Ref&lt;Stopwatch&gt;::create();

There are a few things I don&apos;t love about this approach, though:

1. Classes that wish to use this function need to become friends with WTF::Ref so that it can call their private/protected constructors. Making constructors public would defeat the point of this exercise, so this is probably an acceptable trade-off.
2. Some classes have non-trivial create functions, where extra work needs to be done before or after calling constructors, and some classes even return a null RefPtr in some cases. Those classes should be ineligible for using Ref::create() (even though they might choose to use that function internally). I&apos;d like to add some enforcement at compile time that prevents callers from using Ref::create if a per-class create function exists. It might make sense to add a trait to classes that wish to retain a custom create function that Ref::create can static_assert() on.

I&apos;d welcome any feedback on how to make this better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166801</commentid>
    <comment_count>3</comment_count>
      <attachid>270876</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-02-20 21:56:28 -0800</bug_when>
    <thetext>Comment on attachment 270876
Proof of concept

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

&gt; Source/JavaScriptCore/API/JSProfilerPrivate.cpp:39
&gt; +    auto stopwatch = Ref&lt;Stopwatch&gt;::create();

Does this mean that the caller could accidentally create a RefPtr&lt;T&gt; even if the custom T::create() would always return a Ref&lt;T&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166802</commentid>
    <comment_count>4</comment_count>
      <attachid>270876</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-02-20 22:00:46 -0800</bug_when>
    <thetext>Comment on attachment 270876
Proof of concept

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

&gt; Source/JavaScriptCore/API/JSWeakObjectMapRefInternal.h:52
&gt; +    friend class Ref&lt;OpaqueJSWeakObjectMap&gt;;

Depending on the current tastes among reviewers, this could be a macro a la MAKE_FAST_ALLOCATED or whatever it is. It would definitely make the pervasive friend&apos;ing more obvious if, say, it said ALLOW_CREATE_FUNCTION_FOR(OpaqueJSWeakObjectMap). Even better if the class name could be derived automatically, so the macro would be ALLOW_CREATE_FUNCTION or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167238</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-02-22 16:23:38 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 270876 [details]
&gt; Proof of concept
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270876&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSProfilerPrivate.cpp:39
&gt; &gt; +    auto stopwatch = Ref&lt;Stopwatch&gt;::create();
&gt; 
&gt; Does this mean that the caller could accidentally create a RefPtr&lt;T&gt; even if
&gt; the custom T::create() would always return a Ref&lt;T&gt;?

Yeah, I alluded to this issue in comment #2. I agree that a custom T::create() and Ref::create() should be mutually exclusive. We should have a mechanism that prevents you at compile time opting into Ref::create() if you have a custom create() functions.

This could be part of the macro you describe in your following comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167239</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-02-22 16:24:53 -0800</bug_when>
    <thetext>... and the same macro would also prevent you from adding a custom create() function once you&apos;ve opted in to Ref::create().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270876</attachid>
            <date>2016-02-08 13:13:38 -0800</date>
            <delta_ts>2016-02-08 13:13:38 -0800</delta_ts>
            <desc>Proof of concept</desc>
            <filename>wtf-ref-create.diff</filename>
            <type>text/plain</type>
            <size>12792</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNQcm9maWxlclByaXZhdGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Byb2ZpbGVyUHJpdmF0ZS5jcHAKaW5k
ZXggYWMxMTJhZS4uMmM2MjBmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1Byb2ZpbGVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1Byb2ZpbGVyUHJpdmF0ZS5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgdm9pZCBKU1N0YXJ0UHJvZmls
aW5nKEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHRpdGxlKQogewogICAgIC8vIFVzZSBh
biBpbmRlcGVuZGVudCBzdG9wd2F0Y2ggZm9yIEFQSS1pbml0aWF0ZWQgcHJvZmlsaW5nLCBzaW5j
ZSB0aGUgdXNlciB3aWxsIGV4cGVjdCBpdAogICAgIC8vIHRvIGJlIHJlbGF0aXZlIHRvIHdoZW4g
dGhlaXIgY29tbWFuZCB3YXMgaXNzdWVkLgotICAgIFJlZlB0cjxTdG9wd2F0Y2g+IHN0b3B3YXRj
aCA9IFN0b3B3YXRjaDo6Y3JlYXRlKCk7CisgICAgYXV0byBzdG9wd2F0Y2ggPSBSZWY8U3RvcHdh
dGNoPjo6Y3JlYXRlKCk7CiAgICAgc3RvcHdhdGNoLT5zdGFydCgpOwotICAgIExlZ2FjeVByb2Zp
bGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyh0b0pTKGN0eCksIHRpdGxlLT5zdHJpbmco
KSwgc3RvcHdhdGNoLnJlbGVhc2UoKSk7CisgICAgTGVnYWN5UHJvZmlsZXI6OnByb2ZpbGVyKCkt
PnN0YXJ0UHJvZmlsaW5nKHRvSlMoY3R4KSwgdGl0bGUtPnN0cmluZygpLCBXVEZNb3ZlKHN0b3B3
YXRjaCkpOwogfQogCiB2b2lkIEpTRW5kUHJvZmlsaW5nKEpTQ29udGV4dFJlZiBjdHgsIEpTU3Ry
aW5nUmVmIHRpdGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dl
YWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dl
YWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oCmluZGV4IDkwMzc5NDcuLjFlNjM5OGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmgKQEAgLTQxLDExICs0MSw2IEBAIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8dm9pZCosIEpT
Qzo6SlNPYmplY3Q+IFdlYWtNYXBUeXBlOwogCiBzdHJ1Y3QgT3BhcXVlSlNXZWFrT2JqZWN0TWFw
IDogcHVibGljIFJlZkNvdW50ZWQ8T3BhcXVlSlNXZWFrT2JqZWN0TWFwPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxPcGFxdWVKU1dlYWtPYmplY3RNYXA+IGNyZWF0ZShKU0M6OlZNJiB2bSwg
dm9pZCogZGF0YSwgSlNXZWFrTWFwRGVzdHJveWVkQ2FsbGJhY2sgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPcGFxdWVKU1dlYWtPYmplY3RNYXAodm0sIGRh
dGEsIGNhbGxiYWNrKSk7Ci0gICAgfQotCiAgICAgV2Vha01hcFR5cGUmIG1hcCgpIHsgcmV0dXJu
IG1fbWFwOyB9CiAgICAgCiAgICAgfk9wYXF1ZUpTV2Vha09iamVjdE1hcCgpCkBAIC01NCw2ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlZjxP
cGFxdWVKU1dlYWtPYmplY3RNYXA+OwogICAgIE9wYXF1ZUpTV2Vha09iamVjdE1hcChKU0M6OlZN
JiB2bSwgdm9pZCogZGF0YSwgSlNXZWFrTWFwRGVzdHJveWVkQ2FsbGJhY2sgY2FsbGJhY2spCiAg
ICAgICAgIDogbV9tYXAodm0pCiAgICAgICAgICwgbV9kYXRhKGRhdGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcApp
bmRleCA5MjVjMDBmLi41MzQwYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAKQEAgLTQ3LDkgKzQ3LDkgQEAg
SlNXZWFrT2JqZWN0TWFwUmVmIEpTV2Vha09iamVjdE1hcENyZWF0ZShKU0NvbnRleHRSZWYgY29u
dGV4dCwgdm9pZCogcHJpdmF0ZURhdGEKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNv
bnRleHQpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgUmVmUHRyPE9wYXF1
ZUpTV2Vha09iamVjdE1hcD4gbWFwID0gT3BhcXVlSlNXZWFrT2JqZWN0TWFwOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgcHJpdmF0ZURhdGEsIGNhbGxiYWNrKTsKLSAgICBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ2lzdGVyV2Vha01hcChtYXAuZ2V0KCkpOwotICAgIHJldHVybiBtYXAuZ2V0
KCk7CisgICAgYXV0byBtYXAgPSBSZWY8T3BhcXVlSlNXZWFrT2JqZWN0TWFwPjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIHByaXZhdGVEYXRhLCBjYWxsYmFjayk7CisgICAgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5yZWdpc3RlcldlYWtNYXAobWFwLnB0cigpKTsKKyAgICByZXR1cm4gbWFwLnB0
cigpOwogfQogCiB2b2lkIEpTV2Vha09iamVjdE1hcFNldChKU0NvbnRleHRSZWYgY3R4LCBKU1dl
YWtPYmplY3RNYXBSZWYgbWFwLCB2b2lkKiBrZXksIEpTT2JqZWN0UmVmIG9iamVjdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggMzE4YTlmMC4uOTEzYWQ0
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKQEAgLTM3LDEw
ICszNywxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVdvcmtsaXN0
OjpXb3JrbGlzdChDU3RyaW5nIHdvcmtsaXN0TmFtZSkKK1dvcmtsaXN0OjpXb3JrbGlzdChDU3Ry
aW5nIHdvcmtsaXN0TmFtZSwgdW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQ
cmlvcml0eSkKICAgICA6IG1fdGhyZWFkTmFtZSh0b0NTdHJpbmcod29ya2xpc3ROYW1lLCAiIFdv
cmtlciBUaHJlYWQiKSkKICAgICAsIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKDApCiB7CisgICAg
UkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZUaHJlYWRzKTsKKyAgICBtX3RocmVhZHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1iZXJPZlRocmVhZHMpOworICAgIGZvciAodW5zaWduZWQgaSA9IG51
bWJlck9mVGhyZWFkczsgaS0tOykgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRGF0
YT4gZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRGF0YT4odGhpcyk7CisgICAgICAgIGRh
dGEtPm1faWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRGdW5jdGlvbiwgZGF0YS5nZXQo
KSwgbV90aHJlYWROYW1lLmRhdGEoKSk7CisgICAgICAgIGlmIChyZWxhdGl2ZVByaW9yaXR5KQor
ICAgICAgICAgICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoZGF0YS0+bV9pZGVudGlmaWVyLCByZWxh
dGl2ZVByaW9yaXR5KTsKKyAgICAgICAgbV90aHJlYWRzLmFwcGVuZChXVEZNb3ZlKGRhdGEpKTsK
KyAgICB9CiB9CiAKIFdvcmtsaXN0Ojp+V29ya2xpc3QoKQpAQCAtNTYsMjUgKzY1LDYgQEAgV29y
a2xpc3Q6On5Xb3JrbGlzdCgpCiAgICAgQVNTRVJUKCFtX251bWJlck9mQWN0aXZlVGhyZWFkcyk7
CiB9CiAKLXZvaWQgV29ya2xpc3Q6OmZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhy
ZWFkcywgaW50IHJlbGF0aXZlUHJpb3JpdHkpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobnVtYmVy
T2ZUaHJlYWRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1iZXJPZlRocmVhZHM7IGktLTsp
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZERhdGE+IGRhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFRocmVhZERhdGE+KHRoaXMpOwotICAgICAgICBkYXRhLT5tX2lkZW50aWZpZXIgPSBj
cmVhdGVUaHJlYWQodGhyZWFkRnVuY3Rpb24sIGRhdGEuZ2V0KCksIG1fdGhyZWFkTmFtZS5kYXRh
KCkpOwotICAgICAgICBpZiAocmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNoYW5nZVRo
cmVhZFByaW9yaXR5KGRhdGEtPm1faWRlbnRpZmllciwgcmVsYXRpdmVQcmlvcml0eSk7Ci0gICAg
ICAgIG1fdGhyZWFkcy5hcHBlbmQoV1RGTW92ZShkYXRhKSk7Ci0gICAgfQotfQotCi1SZWY8V29y
a2xpc3Q+IFdvcmtsaXN0OjpjcmVhdGUoQ1N0cmluZyB3b3JrbGlzdE5hbWUsIHVuc2lnbmVkIG51
bWJlck9mVGhyZWFkcywgaW50IHJlbGF0aXZlUHJpb3JpdHkpCi17Ci0gICAgUmVmPFdvcmtsaXN0
PiByZXN1bHQgPSBhZG9wdFJlZigqbmV3IFdvcmtsaXN0KHdvcmtsaXN0TmFtZSkpOwotICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24obnVtYmVyT2ZUaHJlYWRzLCByZWxhdGl2ZVByaW9yaXR5KTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBib29sIFdvcmtsaXN0Ojppc0FjdGl2ZUZvclZNKFZN
JiB2bSkgY29uc3QKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpAQCAtNDE3LDcg
KzQwNyw3IEBAIFdvcmtsaXN0KiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpCiB7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2VGbGFnOwogICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2VGbGFnLCBbXSB7Ci0g
ICAgICAgIHRoZUdsb2JhbERGR1dvcmtsaXN0ID0gJldvcmtsaXN0OjpjcmVhdGUoIkRGRyBXb3Jr
bGlzdCIsIE9wdGlvbnM6Om51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzKCksIE9wdGlvbnM6OnBy
aW9yaXR5RGVsdGFPZkRGR0NvbXBpbGVyVGhyZWFkcygpKS5sZWFrUmVmKCk7CisgICAgICAgIHRo
ZUdsb2JhbERGR1dvcmtsaXN0ID0gJlJlZjxXb3JrbGlzdD46OmNyZWF0ZSgiREZHIFdvcmtsaXN0
IiwgT3B0aW9uczo6bnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMoKSwgT3B0aW9uczo6cHJpb3Jp
dHlEZWx0YU9mREZHQ29tcGlsZXJUaHJlYWRzKCkpLmxlYWtSZWYoKTsKICAgICB9KTsKICAgICBy
ZXR1cm4gdGhlR2xvYmFsREZHV29ya2xpc3Q7CiB9CkBAIC00MzMsNyArNDIzLDcgQEAgV29ya2xp
c3QqIGVuc3VyZUdsb2JhbEZUTFdvcmtsaXN0KCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uo
aW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZUZsYWcsIFtdIHsKLSAgICAgICAgdGhlR2xvYmFs
RlRMV29ya2xpc3QgPSAmV29ya2xpc3Q6OmNyZWF0ZSgiRlRMIFdvcmtsaXN0IiwgT3B0aW9uczo6
bnVtYmVyT2ZGVExDb21waWxlclRocmVhZHMoKSwgT3B0aW9uczo6cHJpb3JpdHlEZWx0YU9mRlRM
Q29tcGlsZXJUaHJlYWRzKCkpLmxlYWtSZWYoKTsKKyAgICAgICAgdGhlR2xvYmFsRlRMV29ya2xp
c3QgPSAmUmVmPFdvcmtsaXN0Pjo6Y3JlYXRlKCJGVEwgV29ya2xpc3QiLCBPcHRpb25zOjpudW1i
ZXJPZkZUTENvbXBpbGVyVGhyZWFkcygpLCBPcHRpb25zOjpwcmlvcml0eURlbHRhT2ZGVExDb21w
aWxlclRocmVhZHMoKSkubGVha1JlZigpOwogICAgIH0pOwogICAgIHJldHVybiB0aGVHbG9iYWxG
VExXb3JrbGlzdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAppbmRl
eCAwNzVmN2NjLi4wYzM2YWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCkBAIC00OCw4ICs0OCw2IEBAIHB1YmxpYzoKIAogICAgIH5Xb3JrbGlzdCgpOwogICAgIAot
ICAgIHN0YXRpYyBSZWY8V29ya2xpc3Q+IGNyZWF0ZShDU3RyaW5nIHdvcmtsaXN0TmFtZSwgdW5z
aWduZWQgbnVtYmVyT2ZUaHJlYWRzLCBpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotICAgIAog
ICAgIHZvaWQgZW5xdWV1ZShQYXNzUmVmUHRyPFBsYW4+KTsKICAgICAKICAgICAvLyBUaGlzIGlz
IGVxdWl2YWxlbnQgdG86CkBAIC03OSw4ICs3Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgV29ya2xpc3QoQ1N0cmlu
ZyB3b3JrbGlzdE5hbWUpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24odW5zaWduZWQgbnVtYmVy
T2ZUaHJlYWRzLCBpbnQpOworICAgIGZyaWVuZCBjbGFzcyBSZWY8V29ya2xpc3Q+OworICAgIFdv
cmtsaXN0KENTdHJpbmcgd29ya2xpc3ROYW1lLCB1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGlu
dCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CiAgICAgCiAgICAgdm9pZCBydW5UaHJlYWQoVGhyZWFk
RGF0YSopOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAppbmRleCA1NDdiMTgxLi5jM2JiMmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC04NDUsNDQgKzg0NSw5IEBA
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAogICAgIHJldHVybiBtX2RhdGFbaW5kZXhdOwogfQogCi1SZWY8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW5zcGVjdG9yT2JqZWN0KTsKLX0KLQotUmVmPEluc3BlY3RvckFycmF5PiBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JB
cnJheSk7Ci19Ci0KIFJlZjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKQog
ewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclZhbHVlKTsKIH0KIAotUmVmPElu
c3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHJpbmcodmFsdWUpKTsK
LX0KLQotUmVmPEluc3BlY3RvclN0cmluZz4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoY29uc3Qg
Y2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3RyaW5n
KHZhbHVlKSk7Ci19Ci0KLVJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjpjcmVhdGUoYm9vbCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKHZhbHVlKSk7Ci19Ci0KLVJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUoaW50IHZhbHVlKQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEluc3BlY3RvckJhc2ljVmFsdWUodmFsdWUpKTsKLX0KLQotUmVmPEluc3BlY3Rv
ckJhc2ljVmFsdWU+IEluc3BlY3RvckJhc2ljVmFsdWU6OmNyZWF0ZShkb3VibGUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yQmFzaWNWYWx1ZSh2YWx1ZSkpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDgxYjg3MDMuLmI5ZWYzY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
SW5zcGVjdG9yQmFzaWNWYWx1ZSA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0K
LSAgICBzdGF0aWMgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShib29sKTsKLSAgICBz
dGF0aWMgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+IGNyZWF0ZShpbnQpOwotICAgIHN0YXRpYyBS
ZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT4gY3JlYXRlKGRvdWJsZSk7Ci0KICAgICB2aXJ0dWFsIGJv
b2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdCBvdmVycmlkZTsKICAgICAvLyBOdW1iZXJzIGZyb20g
dGhlIGZyb250ZW5kIGFyZSBhbHdheXMgcGFyc2VkIGFzIGRvdWJsZXMsIHNvIHdlIGFsbG93CiAg
ICAgLy8gY2xpZW50cyB0byBjb252ZXJ0IHRvIGludGVncmFsIHZhbHVlcyB3aXRoIHRoaXMgZnVu
Y3Rpb24uCkBAIC0xMTksNiArMTE0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUmVmPEluc3BlY3RvckJhc2ljVmFsdWU+OwogICAgIGV4cGxpY2l0
IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkKICAgICAgICAgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlOjpCb29sZWFuKQogICAgICAgICAsIG1fYm9vbGVhblZhbHVlKHZhbHVlKSB7IH0KQEAg
LTEzOSwxNCArMTM1LDEyIEBAIHByaXZhdGU6CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclN0cmluZyA6IHB1YmxpYyBJbnNwZWN0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxJbnNwZWN0b3JTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0
aWMgUmVmPEluc3BlY3RvclN0cmluZz4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKLQogICAgIHZpcnR1
YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlZjxJbnNwZWN0b3JTdHJpbmc+Owog
ICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZykKICAgICAgICAgLCBtX3N0cmluZ1ZhbHVl
KHZhbHVlKSB7IH0KQEAgLTIzMCw4ICsyMjQsNiBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0
b3JPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIEpTX0VYUE9SVF9QUklWQVRFIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZSgpOwotCiAg
ICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6YXNPYmplY3Q7CiAKICAgICB1c2luZyBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRCb29sZWFuOwpAQCAtMjU3LDYgKzI0OSwxMCBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0QmFzZTo6ZW5kOwogCiAgICAgdXNpbmcgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6c2l6ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVmPElu
c3BlY3Rvck9iamVjdD47CisgICAgSW5zcGVjdG9yT2JqZWN0KCkgPSBkZWZhdWx0OwogfTsKIAog
CkBAIC0yOTgsOCArMjk0LDYgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXkgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXlCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSlNfRVhQT1JU
X1BSSVZBVEUgUmVmPEluc3BlY3RvckFycmF5PiBjcmVhdGUoKTsKLQogICAgIHVzaW5nIEluc3Bl
Y3RvckFycmF5QmFzZTo6YXNBcnJheTsKIAogICAgIHVzaW5nIEluc3BlY3RvckFycmF5QmFzZTo6
cHVzaEJvb2xlYW47CkBAIC0zMTQsNiArMzA4LDEwIEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIElu
c3BlY3RvckFycmF5QmFzZTo6YmVnaW47CiAgICAgdXNpbmcgSW5zcGVjdG9yQXJyYXlCYXNlOjpl
bmQ7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBSZWY8SW5zcGVjdG9yQXJyYXk+
OworICAgIEluc3BlY3RvckFycmF5KCkgPSBkZWZhdWx0OwogfTsKIAogCkBAIC0zMjksMjIgKzMy
NywyMiBAQCBpbmxpbmUgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Y29uc3RfaXRlcmF0b3IgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6ZmluZChjb25zdCBTdHJpbgogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSkKIHsK
LSAgICBzZXRWYWx1ZShuYW1lLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsK
KyAgICBzZXRWYWx1ZShuYW1lLCBSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT46OmNyZWF0ZSh2YWx1
ZSkpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRJbnRlZ2VyKGNv
bnN0IFN0cmluZyYgbmFtZSwgaW50IHZhbHVlKQogewotICAgIHNldFZhbHVlKG5hbWUsIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworICAgIHNldFZhbHVlKG5hbWUsIFJlZjxJ
bnNwZWN0b3JCYXNpY1ZhbHVlPjo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKIGlubGluZSB2b2lkIElu
c3BlY3Rvck9iamVjdEJhc2U6OnNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB2
YWx1ZSkKIHsKLSAgICBzZXRWYWx1ZShuYW1lLCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUo
dmFsdWUpKTsKKyAgICBzZXRWYWx1ZShuYW1lLCBSZWY8SW5zcGVjdG9yQmFzaWNWYWx1ZT46OmNy
ZWF0ZSh2YWx1ZSkpOwogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHNl
dFZhbHVlKG5hbWUsIEluc3BlY3RvclN0cmluZzo6Y3JlYXRlKHZhbHVlKSk7CisgICAgc2V0VmFs
dWUobmFtZSwgUmVmPEluc3BlY3RvclN0cmluZz46OmNyZWF0ZSh2YWx1ZSkpOwogfQogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKQEAgLTM3MCwyMiArMzY4LDIyIEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUmVmUHRyPEluc3BlY3RvckFyCiAKIGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6
cHVzaEJvb2xlYW4oYm9vbCB2YWx1ZSkKIHsKLSAgICBtX2RhdGEuYXBwZW5kKEluc3BlY3RvckJh
c2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworICAgIG1fZGF0YS5hcHBlbmQoUmVmPEluc3BlY3Rv
ckJhc2ljVmFsdWU+OjpjcmVhdGUodmFsdWUpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9y
QXJyYXlCYXNlOjpwdXNoSW50ZWdlcihpbnQgdmFsdWUpCiB7Ci0gICAgbV9kYXRhLmFwcGVuZChJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsKKyAgICBtX2RhdGEuYXBwZW5kKFJl
ZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPjo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKIGlubGluZSB2b2lk
IEluc3BlY3RvckFycmF5QmFzZTo6cHVzaERvdWJsZShkb3VibGUgdmFsdWUpCiB7Ci0gICAgbV9k
YXRhLmFwcGVuZChJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsKKyAgICBtX2Rh
dGEuYXBwZW5kKFJlZjxJbnNwZWN0b3JCYXNpY1ZhbHVlPjo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIG1fZGF0YS5hcHBlbmQoSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUodmFs
dWUpKTsKKyAgICBtX2RhdGEuYXBwZW5kKFJlZjxJbnNwZWN0b3JTdHJpbmc+OjpjcmVhdGUodmFs
dWUpKTsKIH0KIAogaW5saW5lIHZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVm
UHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UmVmLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAppbmRleCA1MGE1ZTc2Li40ZmQ5NzI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWYuaApA
QCAtNjIsNiArNjIsMTEgQEAgcHVibGljOgogICAgICAgICBtX3B0ci0+cmVmKCk7CiAgICAgfQog
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFBhcmFtZXRlcnM+IHN0YXRpYyBSZWY8VD4gY3Jl
YXRlKFBhcmFtZXRlcnMmJi4uLiBwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVChzdGQ6OmZvcndhcmQ8UGFyYW1ldGVycz4ocGFyYW1ldGVycykuLi4pKTsK
KyAgICB9CisKICAgICAvLyBVc2UgY29weVJlZigpIGluc3RlYWQuCiAgICAgUmVmKGNvbnN0IFJl
ZiYgb3RoZXIpID0gZGVsZXRlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZihjb25zdCBS
ZWY8VT4mIG90aGVyKSA9IGRlbGV0ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>