<?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>158638</bug_id>
          
          <creation_ts>2016-06-10 16:05:49 -0700</creation_ts>
          <short_desc>Make HashMap and HashSet work with Refs</short_desc>
          <delta_ts>2020-08-16 13:47:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>158932</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fujii</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1201419</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-06-10 16:05:49 -0700</bug_when>
    <thetext>Make HashMap and HashSet work with Refs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201426</commentid>
    <comment_count>1</comment_count>
      <attachid>281059</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-06-10 16:13:58 -0700</bug_when>
    <thetext>Created attachment 281059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201427</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-06-10 16:14:17 -0700</bug_when>
    <thetext>First pass, may need some tweaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201428</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-10 16:14:57 -0700</bug_when>
    <thetext>Attachment 281059 did not pass style-queue:


ERROR: Source/WTF/wtf/Ref.h:118:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Ref.h:122:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/HashFunctions.h:201:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201459</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-10 17:43:51 -0700</bug_when>
    <thetext>HashMap.take can lead to null Ref&apos;s, like this:

        HashMap&lt;int, Ref&lt;RefLogger&gt;&gt; map;
        RefLogger a(&quot;a&quot;);
        Ref&lt;RefLogger&gt; ref(a);
        map.add(1, WTFMove(ref));
        //Ref&lt;RefLogger&gt; v = map.get(1); // get returns a RefLogger*, so this doesn&apos;t compile.  Great!
        RefPtr&lt;RefLogger&gt; w = map.get(1); // This does exactly what&apos;s expected.  Great!
        Ref&lt;RefLogger&gt; x = map.take(1); // This does what&apos;s expected.
        Ref&lt;RefLogger&gt; y = map.take(1); // This makes a null Ref :(
        Ref&lt;RefLogger&gt; z = map.take(2); // This makes a null Ref :(
        WTFLogAlways(&quot;A %p W %p X %p Y %p Z %p&quot;, &amp;a, *(void**)(&amp;w), *(void**)(&amp;x), *(void**)(&amp;y), *(void**)(&amp;z));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201581</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-11 10:34:27 -0700</bug_when>
    <thetext>Not as big a disaster as you might think. After all, there are even simpler ways to make a null Ref:

     RefLogger a(&quot;a&quot;);
     Ref&lt;RefLogger&gt; b(a);
     Ref&lt;RefLogger&gt; c = WTFMove(ref); // This makes b into a null Ref.
     RefLogger&amp; d = c.leakRef(); // This makes c into a null Ref.

I think it’s true, however, that we would want the take function to return Optional&lt;Ref&gt; or RefPtr instead of returning a null Ref. Probably worthwhile to return here and make that refinement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201583</commentid>
    <comment_count>6</comment_count>
      <attachid>281059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-11 10:37:51 -0700</bug_when>
    <thetext>Comment on attachment 281059
Patch

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

&gt; Source/WTF/wtf/GetPtr.h:29
&gt; +enum HashTableDeletedValueType { HashTableDeletedValue };
&gt; +enum HashTableEmptyValueType { HashTableEmptyValue };

Sneaky place to put this; no real logical reason for it to be here. I guess it’s OK, treating this as the “common useful pointer-y stuff” header.

&gt; Source/WTF/wtf/HashTraits.h:176
&gt; +    static Ref&lt;P&gt; emptyValue() { return Ref&lt;P&gt;(HashTableEmptyValue); }

Since the constructor is not marked explicit, I don’t think you need to use Ref&lt;P&gt;() around HashTableEmptyValue here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201912</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-06-13 12:44:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Not as big a disaster as you might think. After all, there are even simpler
&gt; ways to make a null Ref:
&gt; 
&gt;      RefLogger a(&quot;a&quot;);
&gt;      Ref&lt;RefLogger&gt; b(a);
&gt;      Ref&lt;RefLogger&gt; c = WTFMove(ref); // This makes b into a null Ref.
&gt;      RefLogger&amp; d = c.leakRef(); // This makes c into a null Ref.
&gt; 
&gt; I think it’s true, however, that we would want the take function to return
&gt; Optional&lt;Ref&gt; or RefPtr instead of returning a null Ref. Probably worthwhile
&gt; to return here and make that refinement.

I was considering having take() return a RefPtr&lt;&gt;, but Optional&lt;Ref&lt;&gt;&gt; would work too. Do you have a preference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201918</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-13 12:46:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I was considering having take() return a RefPtr&lt;&gt;, but Optional&lt;Ref&lt;&gt;&gt; would
&gt; work too. Do you have a preference?
I would prefer RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201924</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-13 13:01:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I was considering having take() return a RefPtr&lt;&gt;, but Optional&lt;Ref&lt;&gt;&gt; would
&gt; &gt; work too. Do you have a preference?
&gt; I would prefer RefPtr.
If we do Optional, it should return Optional for all types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201925</commentid>
    <comment_count>10</comment_count>
      <attachid>281059</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-13 13:04:47 -0700</bug_when>
    <thetext>Comment on attachment 281059
Patch

Clearing flags on attachment: 281059

Committed r202002: &lt;http://trac.webkit.org/changeset/202002&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201926</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-13 13:04:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202979</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-16 13:39:49 -0700</bug_when>
    <thetext>Reverted r202002 and r202111 for reason:

Ryosuke says this was a JSBench regression on iOS

Committed r202136: &lt;http://trac.webkit.org/changeset/202136&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680685</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-16 13:46:18 -0700</bug_when>
    <thetext>r202254 reverted r202136.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680686</commentid>
    <comment_count>14</comment_count>
      <attachid>281059</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-16 13:47:46 -0700</bug_when>
    <thetext>Comment on attachment 281059
Patch

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

&gt; Source/WTF/wtf/HashTraits.h:185
&gt; +    }

This code has a problem.
Filed: Bug 215550 – [WTF] HashTable&lt;Ref&lt;K&gt;, V&gt;::HashTable(const HashTable&amp; other) can&apos;t compile</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281059</attachid>
            <date>2016-06-10 16:13:58 -0700</date>
            <delta_ts>2016-06-13 13:04:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158638-20160610161529.patch</filename>
            <type>text/plain</type>
            <size>19852</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDE5NDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDE2LTA2LTEwICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBIYXNoTWFwIGFuZCBIYXNoU2V0IHdvcmsgd2l0aCBS
ZWZzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2
MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9HZXRQdHIuaDoKKyAgICAgICAgTW92ZSBIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIGFuZCBI
YXNoVGFibGVFbXB0eVZhbHVlVHlwZSBoZXJlLCBhcyB0aGV5IGFyZSBub3cgc2hhcmVkCisgICAg
ICAgIGJ5IG1vcmUgdGhhbiBvbmUgc21hcnQgcG9pbnRlci4gVGhpcyBmaWxlIHNob3VsZCBwcm9i
YWJseSBiZSByZW5hbWVkIHRvIHNvbWV0aGluZyBlbHNlCisgICAgICAgIGF0IHNvbWUgcG9pbnQg
dG8gaW5kaWNhdGUgdGhhdCBpdCBjb250YWlucyBoZWxwZXJzIGZvciBwb2ludGVyIGFuZCByZWYg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogd3RmL0hhc2hGdW5jdGlvbnMuaDoK
KyAgICAgICAgQWRkIGEgRGVmYXVsdEhhc2ggZm9yIFJlZnMuIEN1c3RvbWl6ZSB0aGUgUHRySGFz
aCB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIG5vdCBzYWZlIHRvIGNvbXBhcmUKKyAgICAgICAgdG8g
ZW1wdHkgb3IgZGVsZXRlZCBSZWZzLgorCisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAg
ICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6SGFzaE1h
cFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Okhhc2hNYXBFbnN1cmVUcmFu
c2xhdG9yOjplcXVhbCk6CisgICAgICAgIChXVEY6Okhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yOjp0
cmFuc2xhdGUpOgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OklkZW50
aXR5RXh0cmFjdG9yOjpleHRyYWN0KToKKyAgICAgICAgKFdURjo6SGFzaFNldFRyYW5zbGF0b3I6
Omhhc2gpOgorICAgICAgICAoV1RGOjpIYXNoU2V0VHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAg
ICAoV1RGOjpIYXNoU2V0VHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKiB3dGYvSGFz
aFRhYmxlLmg6CisgICAgICAgIChXVEY6OklkZW50aXR5SGFzaFRyYW5zbGF0b3I6Omhhc2gpOgor
ICAgICAgICAoV1RGOjpJZGVudGl0eUhhc2hUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChX
VEY6OklkZW50aXR5SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIFVzZSB0aGUg
bmV3IGFzc2lnblRvRW1wdHkgdHJhaXQgZnVuY3Rpb24gdG8gYWxsb3cgdW5pbml0aWFsaXplZCBS
ZWYncyB0byBiZSBzYWZlbHkgYXNzaWduZWQgdG8uCisKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0
cy5oOgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPFJlZjxQPj46OmVtcHR5VmFsdWUpOgorICAg
ICAgICAoV1RGOjpIYXNoVHJhaXRzPFJlZjxQPj46OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChX
VEY6Okhhc2hUcmFpdHM8UmVmPFA+Pjo6YXNzaWduVG9FbXB0eSk6CisgICAgICAgIChXVEY6Okhh
c2hUcmFpdHM8UmVmPFA+Pjo6cGVlayk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8UmVmPFA+
Pjo6Y3VzdG9tRGVsZXRlQnVja2V0KToKKyAgICAgICAgQWRkIGN1c3RvbSBIYXNoVHJhaXRzIGZv
ciBSZWYuIEFsc28sIGludHJvZHVjZSBhIG5ldyB0cmFpdCBmdW5jdGlvbiwgYXNzaWduVG9FbXB0
eSwgZm9yIHVzZQorICAgICAgICBpbiB0cmFuc2xhdGlvbiBhc3NpZ25tZW50cy4gVGhpcyBpcyBu
ZWNlc3Nhcnkgc2luY2UgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBvcGVyYXRvciBmb3IgUmVmCisg
ICAgICAgIHdpbGwgbm90IGFsbG93IGFzc2lnbm1lbnQgdG8gdGhlIGVtcHR5IFJlZiwgd2hpY2gg
d2UgbmVlZCB0byBkbyBoZXJlLgorCisgICAgICAgICogd3RmL1JlZi5oOgorICAgICAgICAoV1RG
OjpSZWY6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OlJlZjo6UmVmKToKKyAgICAgICAgKFdU
Rjo6UmVmOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OlJlZjo6aGFz
aFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6UmVmOjppc0hhc2hUYWJsZUVtcHR5
VmFsdWUpOgorICAgICAgICAoV1RGOjpSZWY6Omhhc2hUYWJsZUVtcHR5VmFsdWUpOgorICAgICAg
ICBBZGQgZXhwbGljaXQgY29uc3RydWN0b3JzL3ByZWRpY2F0ZXMgZm9yIG1ha2luZyBkZWxldGVk
L2VtcHR5IFJlZnMuCisKKyAgICAgICAgKFdURjo6UmVmOjphc3NpZ25Ub0hhc2hUYWJsZUVtcHR5
VmFsdWUpOgorICAgICAgICBBZGQgYSBzcGVjaWFsIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIGFzc2ln
bm1lbnQgdG8gYW4gZW1wdHkgUmVmLCB3aGljaCB0aGUKKyAgICAgICAgYXNzaWdubWVudCBvcGVy
YXRvciBkb2VzIG5vdC4KKyAgICAgICAgCisgICAgICAgIChXVEY6OklzU21hcnRQdHIpOgorICAg
ICAgICBBZGQgYW4gSXNTbWFydFB0ciBvdmVycmlkZSB0byBpbmRpY2F0ZSB0aGF0IFJlZiBpcyBh
IHNtYXJ0IHBvaW50ZXIuCisKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIE1vdmUg
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB0byBHZXRQdHIuaC4KKwogMjAxNi0wNi0xMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEludHJv
ZHVjZSBXVEY6OlVuaXF1ZVJlZgpJbmRleDogU291cmNlL1dURi93dGYvR2V0UHRyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvR2V0UHRyLmgJKHJldmlzaW9uIDIwMTk0OSkKKysrIFNv
dXJjZS9XVEYvd3RmL0dldFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw5IEBACiAK
IG5hbWVzcGFjZSBXVEYgewogCitlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgeyBIYXNo
VGFibGVEZWxldGVkVmFsdWUgfTsKK2VudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNo
VGFibGVFbXB0eVZhbHVlIH07CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyKFQqIHApIHsgcmV0dXJuIHA7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBJ
c1NtYXJ0UHRyIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIwMTk0OSkK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDYgKzE0OSwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgUHRySGFzaCA6IFB0ckhhc2hCYXNlPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPiB7CiAg
ICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPFJlZjxQPj4g
OiBQdHJIYXNoQmFzZTxSZWY8UD4sIElzU21hcnRQdHI8UmVmPFA+Pjo6dmFsdWU+IHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKKyAgICB9OworCiAgICAgLy8gZGVmYXVsdCBoYXNoIGZ1bmN0aW9uIGZvciBlYWNoIHR5cGUK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKQEAgLTE5NCw2
ICsxOTgsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0
cnVjdCBEZWZhdWx0SGFzaDxQKj4geyB0eXBlZGVmIFB0ckhhc2g8UCo+IEhhc2g7IH07CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPFJlZlB0cjxQPj4geyB0eXBl
ZGVmIFB0ckhhc2g8UmVmUHRyPFA+PiBIYXNoOyB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+
IHN0cnVjdCBEZWZhdWx0SGFzaDxSZWY8UD4+IHsgdHlwZWRlZiBQdHJIYXNoPFJlZjxQPj4gSGFz
aDsgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAsIHR5cGVuYW1lIERlbGV0ZXI+IHN0cnVj
dCBEZWZhdWx0SGFzaDxzdGQ6OnVuaXF1ZV9wdHI8UCwgRGVsZXRlcj4+IHsgdHlwZWRlZiBQdHJI
YXNoPHN0ZDo6dW5pcXVlX3B0cjxQLCBEZWxldGVyPj4gSGFzaDsgfTsKIAogICAgIC8vIG1ha2Ug
SW50UGFpckhhc2ggdGhlIGRlZmF1bHQgaGFzaCBmdW5jdGlvbiBmb3IgcGFpcnMgb2YgKGF0IG1v
c3QpIDMyLWJpdCBpbnRlZ2Vycy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHJldmlzaW9uIDIwMTk0OSkKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDggKzE4MSw4
IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvciB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyBy
ZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9j
YXRpb24sIFUmJiBrZXksIFYmJiBtYXBwZWQpCiAgICAgewotICAgICAgICBsb2NhdGlvbi5rZXkg
PSBzdGQ6OmZvcndhcmQ8VT4oa2V5KTsKLSAgICAgICAgbG9jYXRpb24udmFsdWUgPSBzdGQ6OmZv
cndhcmQ8Vj4obWFwcGVkKTsKKyAgICAgICAgVmFsdWVUcmFpdHM6OktleVRyYWl0czo6YXNzaWdu
VG9FbXB0eShsb2NhdGlvbi5rZXksIHN0ZDo6Zm9yd2FyZDxVPihrZXkpKTsKKyAgICAgICAgVmFs
dWVUcmFpdHM6OlZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KGxvY2F0aW9uLnZhbHVlLCBzdGQ6
OmZvcndhcmQ8Vj4obWFwcGVkKSk7CiAgICAgfQogfTsKIApAQCAtMTkyLDggKzE5Miw4IEBAIHN0
cnVjdCBIYXNoTWFwRW5zdXJlVHJhbnNsYXRvciB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyBy
ZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jdG9yPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUo
VCYgbG9jYXRpb24sIFUmJiBrZXksIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAg
ICAgICBsb2NhdGlvbi5rZXkgPSBzdGQ6OmZvcndhcmQ8VT4oa2V5KTsKLSAgICAgICAgbG9jYXRp
b24udmFsdWUgPSBmdW5jdG9yKCk7CisgICAgICAgIFZhbHVlVHJhaXRzOjpLZXlUcmFpdHM6OmFz
c2lnblRvRW1wdHkobG9jYXRpb24ua2V5LCBzdGQ6OmZvcndhcmQ8VT4oa2V5KSk7CisgICAgICAg
IFZhbHVlVHJhaXRzOjpWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbi52YWx1ZSwg
ZnVuY3RvcigpKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAyMDE5NDkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMSAr
MTI4LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGF0aWMgY29uc3QgVCYgZXh0cmFjdChjb25zdCBUJiB0KSB7IHJldHVybiB0OyB9CiAgICAgfTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+CiAgICAgc3RydWN0IEhh
c2hTZXRUcmFuc2xhdG9yIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNoKGtl
eSk7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6
ZXF1YWwoYSwgYik7IH0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBVJiYsIFYmJiB2
YWx1ZSkgeyBsb2NhdGlvbiA9IHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSk7IH0KKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJh
bnNsYXRlKFQmIGxvY2F0aW9uLCBVJiYsIFYmJiB2YWx1ZSkKKyAgICAgICAgeyAKKyAgICAgICAg
ICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KGxvY2F0aW9uLCBzdGQ6OmZvcndhcmQ8Vj4o
dmFsdWUpKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFu
c2xhdG9yPgpAQCAtMjkyLDE0ICsyOTUsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVj4KICAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGl0ZXJhdG9yPjo6dHlwZQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hTZXRUcmFuc2xhdG9yPEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hG
dW5jdGlvbnM+Pih2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWPgogICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCiAgICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRh
aW5zPEhhc2hTZXRUcmFuc2xhdG9yPEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBI
YXNoRnVuY3Rpb25zPj4odmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNo
VGFibGUuaAkocmV2aXNpb24gMjAxOTQ5KQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSwxMSArMjc5LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zPiBjbGFzcyBJZGVudGl0eUhhc2hUcmFuc2xhdG9yIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4g
Y2xhc3MgSWRlbnRpdHlIYXNoVHJhbnNsYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0
dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBi
KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xh
dGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmLCBWJiYgdmFsdWUpIHsgbG9jYXRpb24gPSBzdGQ6OmZv
cndhcmQ8Vj4odmFsdWUpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgY29uc3Qg
VSYsIFYmJiB2YWx1ZSkKKyAgICAgICAgeyAKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3Np
Z25Ub0VtcHR5KGxvY2F0aW9uLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsgCisgICAgICAgIH0K
ICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPiBzdHJ1Y3QgSGFz
aFRhYmxlQWRkUmVzdWx0IHsKQEAgLTMwMyw3ICszMDYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtl
eVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVm
IElkZW50aXR5SGFzaFRyYW5zbGF0b3I8SGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTsKKyAgICAgICAgdHlwZWRlZiBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRz
LCBIYXNoRnVuY3Rpb25zPiBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOwogICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4gQWRkUmVzdWx0OwogCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFNfUEVSX1RBQkxFCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiAyMDE5
NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDYgKzQzLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFQKICAg
ICAvLyBmb3IgY2FzZXMgbGlrZSBTdHJpbmcgdGhhdCBuZWVkIHRoZW0uCiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSBmYWxzZTsKIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IAorICAgIHN0YXRpYyB2b2lkIGFzc2lnblRvRW1wdHko
VSYgZW1wdHlWYWx1ZSwgViYmIHZhbHVlKQorICAgIHsgCisgICAgICAgIGVtcHR5VmFsdWUgPSBz
dGQ6OmZvcndhcmQ8Vj4odmFsdWUpOworICAgIH0KKwogICAgIC8vIFRoZSBzdGFydGluZyB0YWJs
ZSBzaXplLiBDYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHdlIGtub3cgYmVmb3JlaGFuZCB0aGF0CiAg
ICAgLy8gYSBoYXNoIHRhYmxlIHdpbGwgaGF2ZSBhdCBsZWFzdCBOIGVudHJpZXMuCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSA4OwpAQCAtMTY1LDYgKzE3MSwz
MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgSGFzaFRyYWl0czxSCiAgICAgfQogfTsK
IAordGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UmVmPFA+PiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxSZWY8UD4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgUmVmPFA+IGVtcHR5VmFsdWUoKSB7IHJldHVy
biBSZWY8UD4oSGFzaFRhYmxlRW1wdHlWYWx1ZSk7IH0KKworICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
VmFsdWUoY29uc3QgUmVmPFA+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVFbXB0
eVZhbHVlKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFzc2lnblRvRW1wdHkoUmVmPFA+JiBlbXB0
eVZhbHVlLCBSZWY8UD4mJiBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VtcHR5
VmFsdWUoZW1wdHlWYWx1ZSkpOworICAgICAgICBlbXB0eVZhbHVlLmFzc2lnblRvSGFzaFRhYmxl
RW1wdHlWYWx1ZShXVEZNb3ZlKG5ld1ZhbHVlKSk7CisgICAgfQorCisgICAgdHlwZWRlZiBQKiBQ
ZWVrVHlwZTsKKyAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhjb25zdCBSZWY8UD4mIHZhbHVlKSB7
IHJldHVybiBjb25zdF9jYXN0PFBlZWtUeXBlPih2YWx1ZS5wdHIoKSk7IH0KKyAgICBzdGF0aWMg
UGVla1R5cGUgcGVlayhQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKworICAgIHN0YXRpYyB2
b2lkIGN1c3RvbURlbGV0ZUJ1Y2tldChSZWY8UD4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8g
U2VlIHVuaXF1ZV9wdHIncyBjdXN0b21EZWxldGVCdWNrZXQoKSBmb3IgYW4gZXhwbGFuYXRpb24u
CisgICAgICAgIEFTU0VSVCghU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlZjxQPj46OmlzRGVsZXRl
ZFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWVUb0JlRGVzdHJveWVkID0gV1RGTW92
ZSh2YWx1ZSk7CisgICAgICAgIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxSZWY8UD4+Ojpjb25zdHJ1
Y3REZWxldGVkVmFsdWUodmFsdWUpOworICAgIH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8U3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxTdHJpbmc+IHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgc3Rh
dGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dURi93
dGYvUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVmLmgJKHJldmlzaW9uIDIw
MTk0OSkKKysrIFNvdXJjZS9XVEYvd3RmL1JlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAorICAgIC8v
IEhhc2ggdGFibGUgZGVsZXRlZC9lbXB0eSB2YWx1ZXMsIHdoaWNoIGFyZSBvbmx5IGNvbnN0cnVj
dGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgorICAgIFJlZihIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKSA6IG1fcHRyKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gaGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9CisKKyAgICBSZWYoSGFz
aFRhYmxlRW1wdHlWYWx1ZVR5cGUpIDogbV9wdHIoaGFzaFRhYmxlRW1wdHlWYWx1ZSgpKSB7IH0K
KyAgICBib29sIGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09
IGhhc2hUYWJsZUVtcHR5VmFsdWUoKTsgfQorICAgIHN0YXRpYyBUKiBoYXNoVGFibGVFbXB0eVZh
bHVlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgdm9pZCBhc3NpZ25Ub0hhc2hUYWJsZUVt
cHR5VmFsdWUoUmVmJiYgcmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcHRyID09
IGhhc2hUYWJsZUVtcHR5VmFsdWUoKSk7CisgICAgICAgIG1fcHRyID0gJnJlZmVyZW5jZS5sZWFr
UmVmKCk7CisgICAgICAgIEFTU0VSVChtX3B0cik7CisgICAgfQorCiAgICAgY29uc3QgVCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyOyB9CiAgICAgVCog
b3BlcmF0b3ItPigpIHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJuIG1fcHRyOyB9CiAKQEAgLTE4Niwx
MiArMjAyLDE2IEBAIHN0cnVjdCBHZXRQdHJIZWxwZXI8UmVmPFQ+PiB7CiAgICAgc3RhdGljIFQq
IGdldFB0cihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHAucHRyKCkp
OyB9CiB9OwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gCitzdHJ1Y3QgSXNTbWFydFB0cjxSZWY8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7Cit9OworCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogaW5saW5lIFJlZjxUPiBhZG9wdFJlZihUJiByZWZlcmVuY2UpCiB7CiAg
ICAgYWRvcHRlZCgmcmVmZXJlbmNlKTsKICAgICByZXR1cm4gUmVmPFQ+KHJlZmVyZW5jZSwgUmVm
PFQ+OjpBZG9wdCk7Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBl
bmFtZSBBcmdUeXBlPiBpbmxpbmUgYm9vbCBpcyhSZWY8QXJnVHlwZT4mIHNvdXJjZSkKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Jl
ZlB0ci5oCShyZXZpc2lvbiAyMDE5NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFJlZlB0cjxUPiBh
ZG9wdFJlZihUKik7CiAKLWVudW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB7IEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSB9OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxOTQ5KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDYt
MTAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEhhc2hNYXAg
YW5kIEhhc2hTZXQgd29yayB3aXRoIFJlZnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODYzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICBBZGQgdGVzdHMgZm9yIHVzaW5nIFJlZnMgaW4gSGFzaE1hcHMgKGJvdGggYXMga2V5
IGFuZCB2YWx1ZSkgYW5kIEhhc2hTZXRzLgorCiAyMDE2LTA2LTEwICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIFN0cmVzcyBUZXN0IGZhaWxpbmc6IGpzYWly
LXRlc3RzLnlhbWwvdGVzdC5qcy5mdGwtZWFnZXItbm8tY2ppdApJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAJKHJldmlzaW9uIDIwMTk0OSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MDEsNCArNzAxLDE3OSBAQCBURVNUKFdURl9IYXNoTWFwLCBSZWZQdHJOb3RaZXJvZWRCZWZvcmVE
CiAgICAgRVhQRUNUX0VRKG9ic2VydmVyLT5jb3VudCwgMHUpOwogfQogCitURVNUKFdURl9IYXNo
TWFwLCBSZWZfS2V5KQoreworICAgIHsKKyAgICAgICAgSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwg
aW50PiBtYXA7CisKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxv
Z2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQ+IG1hcDsK
KworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYo
YSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShyZWYpLCAxKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludD4gbWFwOworCisgICAgICAg
IFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAg
ICAgIG1hcC5hZGQoV1RGTW92ZShyZWZBKSwgMSk7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4g
cmVmQTIoYSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShyZWZBMiksIDEpOworICAgIH0KKwor
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEhhc2hNYXA8UmVmPFJlZkxvZ2dl
cj4sIGludD4gbWFwOworCisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxS
ZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmVuc3VyZShXVEZNb3ZlKHJlZiksIFtdKCkg
eyAKKyAgICAgICAgICAgIHJldHVybiAxOyAKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQVNT
RVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQ+IG1hcDsKKworICAgICAg
ICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gaXQg
PSBtYXAuZmluZCgmYSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGl0ICE9IG1hcC5lbmQoKSk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlRfRVEoaXQtPmtleS5wdHIoKSwgJmEpOworICAgICAgICBB
U1NFUlRfRVEoaXQtPnZhbHVlLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEhh
c2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludD4gbWFwOworCisgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZN
b3ZlKHJlZiksIDEpOworCisgICAgICAgIG1hcC5yZW1vdmUoJmEpOworICAgIH0KKworICAgIEFT
U0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIHsKKyAgICAgICAgSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50PiBtYXA7CisKKyAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgaW50IGkgPSBtYXAudGFr
ZSgmYSk7CisgICAgICAgIEFTU0VSVF9FUShpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1Qo
V1RGX0hhc2hNYXAsIFJlZl9WYWx1ZSkKK3sKKyAgICB7CisgICAgICAgIEhhc2hNYXA8aW50LCBS
ZWY8UmVmTG9nZ2VyPj4gbWFwOworCisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikp
OworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dn
ZXI+PiBtYXA7CisKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxv
Z2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuc2V0KDEsIFdURk1vdmUocmVmKSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4+IG1hcDsK
KworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZB
KGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmQSkpOworCisgICAgICAgIFJlZkxv
Z2dlciBiKCJiIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkIoYik7CisgICAgICAgIG1h
cC5zZXQoMSwgV1RGTW92ZShyZWZCKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYo
YSkgcmVmKGIpIGRlcmVmKGEpIGRlcmVmKGIpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+PiBtYXA7CisKKyAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlRf
RVEobWFwLmdldCgxKSwgJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgSGFzaE1h
cDxpbnQsIFJlZjxSZWZMb2dnZXI+PiBtYXA7CisKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1v
dmUocmVmKSk7CisgICAgICAgIAorICAgICAgICBSZWY8UmVmTG9nZ2VyPiBhT3V0ID0gbWFwLnRh
a2UoMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBIYXNoTWFwPGludCwgUmVmPFJl
ZkxvZ2dlcj4+IG1hcDsKKworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsKKyAg
ICAgICAgbWFwLnJlbW92ZSgxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEhhc2hN
YXA8aW50LCBSZWY8UmVmTG9nZ2VyPj4gbWFwOworCisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisgICAgICAgIG1hcC5lbnN1cmUoMSwgWyZdKCkgeyAKKyAgICAgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgICAgIHJldHVybiByZWY7IAorICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7Cit9CisKKworCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkocmV2aXNpb24gMjAxOTQ5KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvdW50ZXJzLmgiCiAjaW5jbHVkZSAi
TW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzQ4LDUgKzM0OSw1MCBAQCBURVNU
KFdURl9IYXNoU2V0LCBVbmlxdWVQdHJOb3RaZXJvZWRCZWZvCiAgICAgRVhQRUNUX1RSVUUob2Jz
ZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXJBZGRyZXNzIHx8IG9ic2VydmVkQnVja2V0ID09IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVzdHJ1Y3Rvck9ic2VydmVyKj4oLTEpKTsKIH0KIAorVEVTVChX
VEZfSGFzaFNldCwgUmVmKQoreworICAgIHsKKyAgICAgICAgSGFzaFNldDxSZWY8UmVmTG9nZ2Vy
Pj4gc2V0OworCisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworICAgIH0KKworICAg
IEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KworICAgIHsKKyAgICAgICAgSGFzaFNldDxSZWY8UmVmTG9nZ2VyPj4gc2V0OworCisgICAgICAg
IFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgc2V0LmFkZChyZWYuY29weVJlZigpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJl
ZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBIYXNoU2V0PFJlZjxSZWZMb2dnZXI+PiBzZXQ7CisKKyAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAg
ICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisgICAgICAgIHNldC5yZW1vdmUoJmEpOworICAgIH0K
KworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKKworICAgIHsKKyAgICAgICAgSGFzaFNldDxSZWY8UmVmTG9nZ2VyPj4gc2V0OworCisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
X1RSVUUoc2V0LmNvbnRhaW5zKCZhKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>