<?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>109218</bug_id>
          
          <creation_ts>2013-02-07 12:38:09 -0800</creation_ts>
          <short_desc>Yarr: Use OwnPtr to make pattern/disjunction/character-class ownership clearer.</short_desc>
          <delta_ts>2013-05-26 18:13:50 -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>JavaScriptCore</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>827800</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-07 12:38:09 -0800</bug_when>
    <thetext>Yarr could use a bit more OwnPtrs to simplify object lifetime management.
And while we&apos;re there, there are some easy memory wins in excessive Vector padding..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827801</commentid>
    <comment_count>1</comment_count>
      <attachid>187149</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-07 12:40:19 -0800</bug_when>
    <thetext>Created attachment 187149
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830657</commentid>
    <comment_count>2</comment_count>
      <attachid>187149</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-12 00:39:14 -0800</bug_when>
    <thetext>Comment on attachment 187149
Proposed patch

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

This looks great.

The one thing I am not a big fan is the swap() of allParenthesesInfo. It now clears the input vectors which could be unexpected for the caller of BytecodePattern.
I guess we cannot use C++ move syntax here because of Windows. Do we have any other way to specify the move semantic?

&gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1714
&gt; +        parenthesesDisjunction-&gt;terms.reserveInitialCapacity(endTerm - beginTerm + 1);

I think I&apos;d add a new variable for &quot;beginTerm + 1&quot;.
A +1 use twice out of nowhere could be an invitation for future disasters.

&gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:501
&gt; +        return m_pattern.m_disjunctions.last().get();

This is fairly ugly. Keeping the pointer around could be an option.

&gt; Source/JavaScriptCore/yarr/YarrPattern.h:284
&gt; +        return m_alternatives.last().get();

Again, not a fan of this notation. I think it reads worse than keeping a pointer separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834139</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-15 10:18:29 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 187149 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187149&amp;action=review
&gt; 
&gt; This looks great.
&gt; 
&gt; The one thing I am not a big fan is the swap() of allParenthesesInfo. It now clears the input vectors which could be unexpected for the caller of BytecodePattern.
&gt; I guess we cannot use C++ move syntax here because of Windows. Do we have any other way to specify the move semantic?

Right. I couldn&apos;t think of anything better. One idea would be changing the argument name to reflect the swapping behavior; e.g &quot;parenthesesInfoToAdopt&quot; or such. Do note that this swap() is not really a crucial part of the patch, I added it mostly to be symmetrical with the other swap() that was happening in the same function. It&apos;s also worth noting that BytecodePattern is only constructed in this fashion (at the moment):

PassOwnPtr&lt;BytecodePattern&gt; byteCompile(YarrPattern&amp; pattern, BumpPointerAllocator* allocator)
{
    return ByteCompiler(pattern).compile(allocator);
}

^and here, the vector getting moved/swapped is a member of the ByteCompiler class, so it is never really expected to survive compile(). Though I agree that it would be nice to be more future-proof. :/

&gt; &gt; Source/JavaScriptCore/yarr/YarrInterpreter.cpp:1714
&gt; &gt; +        parenthesesDisjunction-&gt;terms.reserveInitialCapacity(endTerm - beginTerm + 1);
&gt; 
&gt; I think I&apos;d add a new variable for &quot;beginTerm + 1&quot;.
&gt; A +1 use twice out of nowhere could be an invitation for future disasters.

True, I&apos;ll fix that.

&gt; &gt; Source/JavaScriptCore/yarr/YarrPattern.cpp:501
&gt; &gt; +        return m_pattern.m_disjunctions.last().get();
&gt; 
&gt; This is fairly ugly. Keeping the pointer around could be an option.
&gt; 
&gt; &gt; Source/JavaScriptCore/yarr/YarrPattern.h:284
&gt; &gt; +        return m_alternatives.last().get();
&gt; 
&gt; Again, not a fan of this notation. I think it reads worse than keeping a pointer separately.

My past self disagrees with your ugly and impure ideas. My present self agrees with you. Will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834178</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-15 10:58:18 -0800</bug_when>
    <thetext>Committed r143018: &lt;http://trac.webkit.org/changeset/143018&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893861</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-26 18:13:50 -0700</bug_when>
    <thetext>*** Bug 73778 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187149</attachid>
            <date>2013-02-07 12:40:19 -0800</date>
            <delta_ts>2013-02-12 00:39:14 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-109218.diff</filename>
            <type>text/plain</type>
            <size>24570</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMyNDRlYjQuLjU1YjhjNDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTAyLTA3ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBZYXJyOiBVc2UgT3duUHRyIHRvIG1ha2Ug
cGF0dGVybi9kaXNqdW5jdGlvbi9jaGFyYWN0ZXItY2xhc3Mgb3duZXJzaGlwIGNsZWFyZXIuCisg
ICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzEwOTIxOD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIExldCBjbGFzc2VzIHRoYXQgbWFuYWdlIGxp
ZmV0aW1lIG9mIG90aGVyIG9iamVjdHMgaG9sZCBvbiB0byB0aGVtIHdpdGggT3duUHRyIGluc3Rl
YWQgb2YgcmF3IHBvaW50ZXJzLgorICAgICAgICAtIFBsYWNlZCBzb21lIHN0cmF0ZWdpYyBWZWN0
b3I6OnNocmlua1RvRml0KCksIDo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgpIGFuZCA6OnN3YXAo
KS4KKworICAgICAgICA2Njgga0IgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyMy4KKworICAgICAg
ICAqIHlhcnIvWWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNv
bXBpbGVyOjphdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6Qnl0ZUNvbXBpbGVyOjplbWl0RGlzanVuY3Rpb24pOgorICAgICAgICAoQnl0ZUNvbXBpbGVy
KToKKyAgICAgICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJy
OjpCeXRlY29kZVBhdHRlcm46OkJ5dGVjb2RlUGF0dGVybik6CisgICAgICAgIChCeXRlY29kZVBh
dHRlcm4pOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZVBhcmVudGhlc2VzU3VicGF0dGVybik6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpvcENvbXBpbGVCb2R5KToK
KyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6Q2hh
cmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvcjo6Y2hhckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6OnJlc2V0KToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6YXRvbVBhdHRlcm5DaGFyYWN0ZXIpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjphdG9tQ2hhcmFjdGVy
Q2xhc3NFbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjpj
b3B5RGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVj
dG9yOjpzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQ
YXR0ZXJuQ29uc3RydWN0b3I6OmNoZWNrRm9yVGVybWluYWxQYXJlbnRoZXNlcyk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6Om9wdGltaXplQk9MKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6Y29udGFpbnNDYXB0dXJpbmdU
ZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6Om9wdGlt
aXplRG90U3RhcldyYXBwZWRFeHByZXNzaW9ucyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0dGVy
bi5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0ZXJuRGlzanVuY3Rpb246OmFkZE5ld0FsdGVy
bmF0aXZlKToKKyAgICAgICAgKFBhdHRlcm5EaXNqdW5jdGlvbik6CisgICAgICAgIChZYXJyUGF0
dGVybik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpyZXNldCk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpuZXdsaW5lQ2hhcmFjdGVyQ2xhc3MpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6ZGlnaXRzQ2hhcmFjdGVyQ2xhc3MpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6c3BhY2VzQ2hhcmFjdGVyQ2xhc3MpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6d29yZGNoYXJDaGFyYWN0ZXJDbGFzcyk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpub25kaWdpdHNDaGFyYWN0ZXJDbGFzcyk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpub25zcGFjZXNDaGFyYWN0ZXJDbGFzcyk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpub253b3JkY2hhckNoYXJhY3RlckNs
YXNzKToKKwogMjAxMy0wMi0wNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50YXRp
b246IGFzc2lnbiBjbGFzcyBuYW1lIHRvIHRoZSBoZWFwIGdyYXBoIG5vZGUgYXV0b21hdGljYWxs
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKaW5k
ZXggZjViYjBkNC4uNDc1OGNkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySW50ZXJwcmV0ZXIuY3BwCkBAIC0xNDU1LDggKzE0NTUsNiBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIHJlbWFpbmluZ01hdGNoQ291bnQ7CiB9OwogCi0KLQogY2xhc3MgQnl0ZUNvbXBpbGVy
IHsKICAgICBzdHJ1Y3QgUGFyZW50aGVzZXNTdGFja0VudHJ5IHsKICAgICAgICAgdW5zaWduZWQg
YmVnaW5UZXJtOwpAQCAtMTcxMiw3ICsxNzEwLDggQEAgcHVibGljOgogICAgICAgICB1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQgPSBwYXJlbnRoZXNlc0JlZ2luLmF0b20uc3VicGF0dGVybklkOwogCiAg
ICAgICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gbGFzdFN1YnBhdHRlcm5JZCAtIHN1YnBh
dHRlcm5JZCArIDE7Ci0gICAgICAgIEJ5dGVEaXNqdW5jdGlvbiogcGFyZW50aGVzZXNEaXNqdW5j
dGlvbiA9IG5ldyBCeXRlRGlzanVuY3Rpb24obnVtU3VicGF0dGVybnMsIGNhbGxGcmFtZVNpemUp
OworICAgICAgICBPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9u
ID0gYWRvcHRQdHIobmV3IEJ5dGVEaXNqdW5jdGlvbihudW1TdWJwYXR0ZXJucywgY2FsbEZyYW1l
U2l6ZSkpOworICAgICAgICBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLT50ZXJtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGVuZFRlcm0gLSBiZWdpblRlcm0gKyAxKTsKIAogICAgICAgICBwYXJlbnRo
ZXNlc0Rpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OlN1YnBhdHRlcm5CZWdpbigp
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCB0ZXJtSW5QYXJlbnRoZXNlcyA9IGJlZ2luVGVybSAr
IDE7IHRlcm1JblBhcmVudGhlc2VzIDwgZW5kVGVybTsgKyt0ZXJtSW5QYXJlbnRoZXNlcykKQEAg
LTE3MjEsOCArMTcyMCw4IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXMuc2hyaW5rKGJlZ2luVGVybSk7CiAKLSAgICAgICAgbV9hbGxQYXJlbnRoZXNlc0luZm8u
YXBwZW5kKHBhcmVudGhlc2VzRGlzanVuY3Rpb24pOwotICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuLCBzdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGNhcHR1cmUsIGlucHV0
UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRl
VGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBw
YXJlbnRoZXNlc0Rpc2p1bmN0aW9uLmdldCgpLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7Cisg
ICAgICAgIG1fYWxsUGFyZW50aGVzZXNJbmZvLmFwcGVuZChwYXJlbnRoZXNlc0Rpc2p1bmN0aW9u
LnJlbGVhc2UoKSk7CiAKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVy
bV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudC51bnNhZmVHZXQoKTsKICAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eVR5cGUg
PSBxdWFudGl0eVR5cGU7CkBAIC0xODA5LDcgKzE4MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZv
ciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNp
emUoKTsgKythbHQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDb3VudEFscmVhZHlD
aGVja2VkID0gaW5wdXRDb3VudEFscmVhZHlDaGVja2VkOwogCi0gICAgICAgICAgICBQYXR0ZXJu
QWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2Fs
dF07CisgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVu
Y3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0uZ2V0KCk7CiAKICAgICAgICAgICAgIGlmIChhbHQp
IHsKICAgICAgICAgICAgICAgICBpZiAoZGlzanVuY3Rpb24gPT0gbV9wYXR0ZXJuLm1fYm9keSkK
QEAgLTE5MjAsNyArMTkxOSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEJ5dGVEaXNqdW5jdGlv
bj4gbV9ib2R5RGlzanVuY3Rpb247CiAgICAgdW5zaWduZWQgbV9jdXJyZW50QWx0ZXJuYXRpdmVJ
bmRleDsKICAgICBWZWN0b3I8UGFyZW50aGVzZXNTdGFja0VudHJ5PiBtX3BhcmVudGhlc2VzU3Rh
Y2s7Ci0gICAgVmVjdG9yPEJ5dGVEaXNqdW5jdGlvbio+IG1fYWxsUGFyZW50aGVzZXNJbmZvOwor
ICAgIFZlY3RvcjxPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiA+IG1fYWxsUGFyZW50aGVzZXNJbmZv
OwogfTsKIAogUGFzc093blB0cjxCeXRlY29kZVBhdHRlcm4+IGJ5dGVDb21waWxlKFlhcnJQYXR0
ZXJuJiBwYXR0ZXJuLCBCdW1wUG9pbnRlckFsbG9jYXRvciogYWxsb2NhdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaAppbmRleCBmYjYwYmQ5Li40ZjUy
OGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuaApA
QCAtMzM3LDI3ICszMzcsMjIgQEAgcHVibGljOgogc3RydWN0IEJ5dGVjb2RlUGF0dGVybiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQnl0ZWNvZGVQYXR0ZXJu
KFBhc3NPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiBib2R5LCBWZWN0b3I8Qnl0ZURpc2p1bmN0aW9u
Kj4gYWxsUGFyZW50aGVzZXNJbmZvLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgQnVtcFBvaW50ZXJB
bGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICBCeXRlY29kZVBhdHRlcm4oUGFzc093blB0cjxCeXRl
RGlzanVuY3Rpb24+IGJvZHksIFZlY3RvcjxPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiA+JiBhbGxQ
YXJlbnRoZXNlc0luZm8sIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBCdW1wUG9pbnRlckFsbG9jYXRv
ciogYWxsb2NhdG9yKQogICAgICAgICA6IG1fYm9keShib2R5KQogICAgICAgICAsIG1faWdub3Jl
Q2FzZShwYXR0ZXJuLm1faWdub3JlQ2FzZSkKICAgICAgICAgLCBtX211bHRpbGluZShwYXR0ZXJu
Lm1fbXVsdGlsaW5lKQogICAgICAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICB7Cisg
ICAgICAgIG1fYm9keS0+dGVybXMuc2hyaW5rVG9GaXQoKTsKKwogICAgICAgICBuZXdsaW5lQ2hh
cmFjdGVyQ2xhc3MgPSBwYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpOwogICAgICAgICB3
b3JkY2hhckNoYXJhY3RlckNsYXNzID0gcGF0dGVybi53b3JkY2hhckNoYXJhY3RlckNsYXNzKCk7
CiAKLSAgICAgICAgbV9hbGxQYXJlbnRoZXNlc0luZm8uYXBwZW5kKGFsbFBhcmVudGhlc2VzSW5m
byk7Ci0gICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBwZW5kKHBhdHRlcm4ubV91c2Vy
Q2hhcmFjdGVyQ2xhc3Nlcyk7Ci0gICAgICAgIC8vICdTdGVhbCcgdGhlIFlhcnJQYXR0ZXJuJ3Mg
Q2hhcmFjdGVyQ2xhc3NlcyEgIFdlIGNsZWFyIGl0cwotICAgICAgICAvLyBhcnJheSwgc28gdGhh
dCBpdCB3b24ndCBkZWxldGUgdGhlbSBvbiBkZXN0cnVjdGlvbi4gIFdlJ2xsCi0gICAgICAgIC8v
IHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoYXQuCi0gICAgICAgIHBhdHRlcm4ubV91c2VyQ2hh
cmFjdGVyQ2xhc3Nlcy5jbGVhcigpOwotICAgIH0KKyAgICAgICAgbV9hbGxQYXJlbnRoZXNlc0lu
Zm8uc3dhcChhbGxQYXJlbnRoZXNlc0luZm8pOworICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5m
by5zaHJpbmtUb0ZpdCgpOwogCi0gICAgfkJ5dGVjb2RlUGF0dGVybigpCi0gICAgewotICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMobV9hbGxQYXJlbnRoZXNlc0luZm8pOwotICAgICAgICBkZWxldGVB
bGxWYWx1ZXMobV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcyk7CisgICAgICAgIG1fdXNlckNoYXJhY3Rl
ckNsYXNzZXMuc3dhcChwYXR0ZXJuLm1fdXNlckNoYXJhY3RlckNsYXNzZXMpOworICAgICAgICBt
X3VzZXJDaGFyYWN0ZXJDbGFzc2VzLnNocmlua1RvRml0KCk7CiAgICAgfQogCiAgICAgT3duUHRy
PEJ5dGVEaXNqdW5jdGlvbj4gbV9ib2R5OwpAQCAtMzcxLDggKzM2Niw4IEBAIHB1YmxpYzoKICAg
ICBDaGFyYWN0ZXJDbGFzcyogd29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKIAogcHJpdmF0ZToKLSAg
ICBWZWN0b3I8Qnl0ZURpc2p1bmN0aW9uKj4gbV9hbGxQYXJlbnRoZXNlc0luZm87Ci0gICAgVmVj
dG9yPENoYXJhY3RlckNsYXNzKj4gbV91c2VyQ2hhcmFjdGVyQ2xhc3NlczsKKyAgICBWZWN0b3I8
T3duUHRyPEJ5dGVEaXNqdW5jdGlvbj4gPiBtX2FsbFBhcmVudGhlc2VzSW5mbzsKKyAgICBWZWN0
b3I8T3duUHRyPENoYXJhY3RlckNsYXNzPiA+IG1fdXNlckNoYXJhY3RlckNsYXNzZXM7CiB9Owog
CiBKU19FWFBPUlRfUFJJVkFURSBQYXNzT3duUHRyPEJ5dGVjb2RlUGF0dGVybj4gYnl0ZUNvbXBp
bGUoWWFyclBhdHRlcm4mLCBCdW1wUG9pbnRlckFsbG9jYXRvciopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmNwcAppbmRleCBjMDE5YzlhLi5lNGRhMWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcApAQCAtMjMxNSwxMSArMjMxNSwxMSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIG1fb3BzLmFw
cGVuZChhbHRlcm5hdGl2ZUJlZ2luT3BDb2RlKTsKICAgICAgICAgbV9vcHMubGFzdCgpLm1fcHJl
dmlvdXNPcCA9IG5vdEZvdW5kOwogICAgICAgICBtX29wcy5sYXN0KCkubV90ZXJtID0gdGVybTsK
LSAgICAgICAgVmVjdG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMgPSAgdGVy
bS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOworICAgICAgICBWZWN0
b3I8T3duUHRyPFBhdHRlcm5BbHRlcm5hdGl2ZT4gPiYgYWx0ZXJuYXRpdmVzID0gIHRlcm0tPnBh
cmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlczsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
c2l6ZV90IGxhc3RPcEluZGV4ID0gbV9vcHMuc2l6ZSgpIC0gMTsKIAotICAgICAgICAgICAgUGF0
dGVybkFsdGVybmF0aXZlKiBuZXN0ZWRBbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tpXTsKKyAg
ICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbmVzdGVkQWx0ZXJuYXRpdmUgPSBhbHRlcm5h
dGl2ZXNbaV0uZ2V0KCk7CiAgICAgICAgICAgICBvcENvbXBpbGVBbHRlcm5hdGl2ZShuZXN0ZWRB
bHRlcm5hdGl2ZSk7CiAKICAgICAgICAgICAgIHNpemVfdCB0aGlzT3BJbmRleCA9IG1fb3BzLnNp
emUoKTsKQEAgLTIzNjYsMTEgKzIzNjYsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZh
dGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBtX29wcy5hcHBlbmQoT3BTaW1wbGVOZXN0ZWRB
bHRlcm5hdGl2ZUJlZ2luKTsKICAgICAgICAgbV9vcHMubGFzdCgpLm1fcHJldmlvdXNPcCA9IG5v
dEZvdW5kOwogICAgICAgICBtX29wcy5sYXN0KCkubV90ZXJtID0gdGVybTsKLSAgICAgICAgVmVj
dG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMgPSAgdGVybS0+cGFyZW50aGVz
ZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOworICAgICAgICBWZWN0b3I8T3duUHRyPFBh
dHRlcm5BbHRlcm5hdGl2ZT4gPiYgYWx0ZXJuYXRpdmVzID0gIHRlcm0tPnBhcmVudGhlc2VzLmRp
c2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgc2l6ZV90IGxhc3RP
cEluZGV4ID0gbV9vcHMuc2l6ZSgpIC0gMTsKIAotICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0
aXZlKiBuZXN0ZWRBbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tpXTsKKyAgICAgICAgICAgIFBh
dHRlcm5BbHRlcm5hdGl2ZSogbmVzdGVkQWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbaV0uZ2V0
KCk7CiAgICAgICAgICAgICBvcENvbXBpbGVBbHRlcm5hdGl2ZShuZXN0ZWRBbHRlcm5hdGl2ZSk7
CiAKICAgICAgICAgICAgIHNpemVfdCB0aGlzT3BJbmRleCA9IG1fb3BzLnNpemUoKTsKQEAgLTI0
NDAsNyArMjQ0MCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAvLyB0byByZXR1cm4gdGhlIGZhaWxpbmcgcmVzdWx0LgogICAgIHZvaWQgb3BD
b21waWxlQm9keShQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uKQogICAgIHsKLSAgICAg
ICAgVmVjdG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMgPSAgZGlzanVuY3Rp
b24tPm1fYWx0ZXJuYXRpdmVzOworICAgICAgICBWZWN0b3I8T3duUHRyPFBhdHRlcm5BbHRlcm5h
dGl2ZT4gPiYgYWx0ZXJuYXRpdmVzID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOwogICAg
ICAgICBzaXplX3QgY3VycmVudEFsdGVybmF0aXZlSW5kZXggPSAwOwogCiAgICAgICAgIC8vIEVt
aXQgdGhlICdvbmNlIHRocm91Z2gnIGFsdGVybmF0aXZlcy4KQEAgLTI0NTAsNyArMjQ1MCw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKIAogICAgICAg
ICAgICAgZG8gewogICAgICAgICAgICAgICAgIHNpemVfdCBsYXN0T3BJbmRleCA9IG1fb3BzLnNp
emUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2
ZSA9IGFsdGVybmF0aXZlc1tjdXJyZW50QWx0ZXJuYXRpdmVJbmRleF07CisgICAgICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tjdXJyZW50
QWx0ZXJuYXRpdmVJbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgb3BDb21waWxlQWx0ZXJu
YXRpdmUoYWx0ZXJuYXRpdmUpOwogCiAgICAgICAgICAgICAgICAgc2l6ZV90IHRoaXNPcEluZGV4
ID0gbV9vcHMuc2l6ZSgpOwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBtX29wcy5sYXN0KCkubV9wcmV2
aW91c09wID0gbm90Rm91bmQ7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHNpemVfdCBsYXN0
T3BJbmRleCA9IG1fb3BzLnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRp
dmUqIGFsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmVzW2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4XTsK
KyAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2
ZXNbY3VycmVudEFsdGVybmF0aXZlSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKCFh
bHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSk7CiAgICAgICAgICAgICBvcENvbXBpbGVBbHRlcm5h
dGl2ZShhbHRlcm5hdGl2ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJQYXR0ZXJuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmNwcAppbmRleCBlMzU5ZTc2Li44MjY1Njg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhdHRlcm4uY3BwCkBAIC0xNzUsMTYgKzE3NSwxNiBAQCBwdWJsaWM6CiAKICAg
ICB9CiAKLSAgICBDaGFyYWN0ZXJDbGFzcyogY2hhckNsYXNzKCkKKyAgICBQYXNzT3duUHRyPENo
YXJhY3RlckNsYXNzPiBjaGFyQ2xhc3MoKQogICAgIHsKLSAgICAgICAgQ2hhcmFjdGVyQ2xhc3Mq
IGNoYXJhY3RlckNsYXNzID0gbmV3IENoYXJhY3RlckNsYXNzKDApOworICAgICAgICBPd25QdHI8
Q2hhcmFjdGVyQ2xhc3M+IGNoYXJhY3RlckNsYXNzID0gYWRvcHRQdHIobmV3IENoYXJhY3RlckNs
YXNzKDApKTsKIAogICAgICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9tYXRjaGVzLnN3YXAobV9tYXRj
aGVzKTsKICAgICAgICAgY2hhcmFjdGVyQ2xhc3MtPm1fcmFuZ2VzLnN3YXAobV9yYW5nZXMpOwog
ICAgICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9tYXRjaGVzVW5pY29kZS5zd2FwKG1fbWF0Y2hlc1Vu
aWNvZGUpOwogICAgICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlLnN3YXAobV9y
YW5nZXNVbmljb2RlKTsKIAotICAgICAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7CisgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJDbGFzcy5yZWxlYXNlKCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAt
Mjc0LDkgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jaGFyYWN0ZXJDbGFzc0NvbnN0
cnVjdG9yKHBhdHRlcm4ubV9pZ25vcmVDYXNlKQogICAgICAgICAsIG1faW52ZXJ0UGFyZW50aGV0
aWNhbEFzc2VydGlvbihmYWxzZSkKICAgICB7Ci0gICAgICAgIG1fcGF0dGVybi5tX2JvZHkgPSBu
ZXcgUGF0dGVybkRpc2p1bmN0aW9uKCk7Ci0gICAgICAgIG1fYWx0ZXJuYXRpdmUgPSBtX3BhdHRl
cm4ubV9ib2R5LT5hZGROZXdBbHRlcm5hdGl2ZSgpOwotICAgICAgICBtX3BhdHRlcm4ubV9kaXNq
dW5jdGlvbnMuYXBwZW5kKG1fcGF0dGVybi5tX2JvZHkpOworICAgICAgICBPd25QdHI8UGF0dGVy
bkRpc2p1bmN0aW9uPiBib2R5ID0gYWRvcHRQdHIobmV3IFBhdHRlcm5EaXNqdW5jdGlvbik7Cisg
ICAgICAgIG1fcGF0dGVybi5tX2JvZHkgPSBib2R5LmdldCgpOworICAgICAgICBtX2FsdGVybmF0
aXZlID0gYm9keS0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgbV9wYXR0ZXJuLm1fZGlz
anVuY3Rpb25zLmFwcGVuZChib2R5LnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgfllhcnJQYXR0
ZXJuQ29uc3RydWN0b3IoKQpAQCAtMjg4LDkgKzI4OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cGF0dGVybi5yZXNldCgpOwogICAgICAgICBtX2NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IucmVz
ZXQoKTsKIAotICAgICAgICBtX3BhdHRlcm4ubV9ib2R5ID0gbmV3IFBhdHRlcm5EaXNqdW5jdGlv
bigpOwotICAgICAgICBtX2FsdGVybmF0aXZlID0gbV9wYXR0ZXJuLm1fYm9keS0+YWRkTmV3QWx0
ZXJuYXRpdmUoKTsKLSAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChtX3Bh
dHRlcm4ubV9ib2R5KTsKKyAgICAgICAgT3duUHRyPFBhdHRlcm5EaXNqdW5jdGlvbj4gYm9keSA9
IGFkb3B0UHRyKG5ldyBQYXR0ZXJuRGlzanVuY3Rpb24pOworICAgICAgICBtX3BhdHRlcm4ubV9i
b2R5ID0gYm9keS5nZXQoKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZSA9IGJvZHktPmFkZE5ld0Fs
dGVybmF0aXZlKCk7CisgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQoYm9k
eS5yZWxlYXNlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFzc2VydGlvbkJPTCgpCkBAIC0z
MjcsOSArMzI5LDkgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgbV9jaGFyYWN0ZXJD
bGFzc0NvbnN0cnVjdG9yLnB1dFVuaWNvZGVJZ25vcmVDYXNlKGNoLCBpbmZvKTsKLSAgICAgICAg
Q2hhcmFjdGVyQ2xhc3MqIG5ld0NoYXJhY3RlckNsYXNzID0gbV9jaGFyYWN0ZXJDbGFzc0NvbnN0
cnVjdG9yLmNoYXJDbGFzcygpOwotICAgICAgICBtX3BhdHRlcm4ubV91c2VyQ2hhcmFjdGVyQ2xh
c3Nlcy5hcHBlbmQobmV3Q2hhcmFjdGVyQ2xhc3MpOwotICAgICAgICBtX2FsdGVybmF0aXZlLT5t
X3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVybShuZXdDaGFyYWN0ZXJDbGFzcywgZmFsc2UpKTsKKyAg
ICAgICAgT3duUHRyPENoYXJhY3RlckNsYXNzPiBuZXdDaGFyYWN0ZXJDbGFzcyA9IG1fY2hhcmFj
dGVyQ2xhc3NDb25zdHJ1Y3Rvci5jaGFyQ2xhc3MoKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+
bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0obmV3Q2hhcmFjdGVyQ2xhc3MuZ2V0KCksIGZhbHNl
KSk7CisgICAgICAgIG1fcGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChuZXdD
aGFyYWN0ZXJDbGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXRvbUJ1aWx0SW5D
aGFyYWN0ZXJDbGFzcyhCdWlsdEluQ2hhcmFjdGVyQ2xhc3NJRCBjbGFzc0lELCBib29sIGludmVy
dCkKQEAgLTM4OSw5ICszOTEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGF0b21DaGFyYWN0ZXJD
bGFzc0VuZCgpCiAgICAgewotICAgICAgICBDaGFyYWN0ZXJDbGFzcyogbmV3Q2hhcmFjdGVyQ2xh
c3MgPSBtX2NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY2hhckNsYXNzKCk7Ci0gICAgICAgIG1f
cGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChuZXdDaGFyYWN0ZXJDbGFzcyk7
Ci0gICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKG5ld0No
YXJhY3RlckNsYXNzLCBtX2ludmVydENoYXJhY3RlckNsYXNzKSk7CisgICAgICAgIE93blB0cjxD
aGFyYWN0ZXJDbGFzcz4gbmV3Q2hhcmFjdGVyQ2xhc3MgPSBtX2NoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3IuY2hhckNsYXNzKCk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5k
KFBhdHRlcm5UZXJtKG5ld0NoYXJhY3RlckNsYXNzLmdldCgpLCBtX2ludmVydENoYXJhY3RlckNs
YXNzKSk7CisgICAgICAgIG1fcGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChu
ZXdDaGFyYWN0ZXJDbGFzcy5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIHZvaWQgYXRvbVBhcmVu
dGhlc2VzU3VicGF0dGVybkJlZ2luKGJvb2wgY2FwdHVyZSA9IHRydWUpCkBAIC00MDAsMTkgKzQw
MiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChjYXB0dXJlKQogICAgICAgICAgICAgbV9wYXR0
ZXJuLm1fbnVtU3VicGF0dGVybnMrKzsKIAotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHBh
cmVudGhlc2VzRGlzanVuY3Rpb24gPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRp
dmUpOwotICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBhcmVudGhlc2Vz
RGlzanVuY3Rpb24pOwotICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0
ZXJuVGVybShQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVy
bklkLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBjYXB0dXJlLCBmYWxzZSkpOworICAgICAgICBP
d25QdHI8UGF0dGVybkRpc2p1bmN0aW9uPiBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uID0gYWRvcHRQ
dHIobmV3IFBhdHRlcm5EaXNqdW5jdGlvbihtX2FsdGVybmF0aXZlKSk7CisgICAgICAgIG1fYWx0
ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFy
ZW50aGVzZXNTdWJwYXR0ZXJuLCBzdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24u
Z2V0KCksIGNhcHR1cmUsIGZhbHNlKSk7CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUgPSBwYXJlbnRo
ZXNlc0Rpc2p1bmN0aW9uLT5hZGROZXdBbHRlcm5hdGl2ZSgpOworICAgICAgICBtX3BhdHRlcm4u
bV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBhcmVudGhlc2VzRGlzanVuY3Rpb24ucmVsZWFzZSgpKTsK
ICAgICB9CiAKICAgICB2b2lkIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4oYm9vbCBp
bnZlcnQgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogcGFyZW50
aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBQYXR0ZXJuRGlzanVuY3Rpb24obV9hbHRlcm5hdGl2ZSk7
Ci0gICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNq
dW5jdGlvbik7Ci0gICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5U
ZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbiwgbV9wYXR0ZXJuLm1f
bnVtU3VicGF0dGVybnMgKyAxLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBmYWxzZSwgaW52ZXJ0
KSk7CisgICAgICAgIE93blB0cjxQYXR0ZXJuRGlzanVuY3Rpb24+IHBhcmVudGhlc2VzRGlzanVu
Y3Rpb24gPSBhZG9wdFB0cihuZXcgUGF0dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRpdmUpKTsK
KyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVy
blRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0
ZXJucyArIDEsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24uZ2V0KCksIGZhbHNlLCBpbnZlcnQpKTsK
ICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9IHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPmFkZE5ld0Fs
dGVybmF0aXZlKCk7CiAgICAgICAgIG1faW52ZXJ0UGFyZW50aGV0aWNhbEFzc2VydGlvbiA9IGlu
dmVydDsKKyAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChwYXJlbnRoZXNl
c0Rpc2p1bmN0aW9uLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhdG9tUGFyZW50aGVz
ZXNFbmQoKQpAQCAtNDc3LDIzICs0NzksMjYgQEAgcHVibGljOgogICAgIC8vIHNraXAgYWx0ZXJu
YXRpdmVzIHdpdGggbV9zdGFydHNXaXRoQk9MIHNldCB0cnVlLgogICAgIFBhdHRlcm5EaXNqdW5j
dGlvbiogY29weURpc2p1bmN0aW9uKFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24sIGJv
b2wgZmlsdGVyU3RhcnRzV2l0aEJPTCA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgUGF0dGVybkRp
c2p1bmN0aW9uKiBuZXdEaXNqdW5jdGlvbiA9IDA7CisgICAgICAgIE93blB0cjxQYXR0ZXJuRGlz
anVuY3Rpb24+IG5ld0Rpc2p1bmN0aW9uOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7
IGFsdCA8IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7Ci0gICAg
ICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rpb24tPm1f
YWx0ZXJuYXRpdmVzW2FsdF07CisgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVy
bmF0aXZlID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0uZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoIWZpbHRlclN0YXJ0c1dpdGhCT0wgfHwgIWFsdGVybmF0aXZlLT5tX3N0YXJ0c1dp
dGhCT0wpIHsKICAgICAgICAgICAgICAgICBpZiAoIW5ld0Rpc2p1bmN0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG5ld0Rpc2p1bmN0aW9uID0gbmV3IFBhdHRlcm5EaXNqdW5jdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBuZXdEaXNqdW5jdGlvbiA9IGFkb3B0UHRyKG5ldyBQYXR0ZXJu
RGlzanVuY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0Rpc2p1bmN0aW9uLT5tX3Bh
cmVudCA9IGRpc2p1bmN0aW9uLT5tX3BhcmVudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXdBbHRlcm5hdGl2ZSA9IG5ld0Rpc2p1bmN0
aW9uLT5hZGROZXdBbHRlcm5hdGl2ZSgpOworICAgICAgICAgICAgICAgIG5ld0FsdGVybmF0aXZl
LT5tX3Rlcm1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWx0ZXJuYXRpdmUtPm1fdGVybXMuc2l6
ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRp
dmUtPm1fdGVybXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG5ld0FsdGVybmF0
aXZlLT5tX3Rlcm1zLmFwcGVuZChjb3B5VGVybShhbHRlcm5hdGl2ZS0+bV90ZXJtc1tpXSwgZmls
dGVyU3RhcnRzV2l0aEJPTCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBpZiAobmV3RGlzanVuY3Rpb24pCi0gICAgICAgICAgICBtX3BhdHRlcm4ubV9kaXNq
dW5jdGlvbnMuYXBwZW5kKG5ld0Rpc2p1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5ld0Rpc2p1
bmN0aW9uOworICAgICAgICBpZiAoIW5ld0Rpc2p1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChuZXdEaXNqdW5j
dGlvbi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25z
Lmxhc3QoKS5nZXQoKTsKICAgICB9CiAgICAgCiAgICAgUGF0dGVyblRlcm0gY29weVRlcm0oUGF0
dGVyblRlcm0mIHRlcm0sIGJvb2wgZmlsdGVyU3RhcnRzV2l0aEJPTCA9IGZhbHNlKQpAQCAtNjU1
LDcgKzY2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBoYXNGaXhlZFNpemUgPSB0cnVlOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgZGlzanVuY3Rpb24tPm1fYWx0
ZXJuYXRpdmVzLnNpemUoKTsgKythbHQpIHsKLSAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2
ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XTsKKyAgICAg
ICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9h
bHRlcm5hdGl2ZXNbYWx0XS5nZXQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBbHRl
cm5hdGl2ZUNhbGxGcmFtZVNpemUgPSBzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyhhbHRlcm5hdGl2
ZSwgaW5pdGlhbENhbGxGcmFtZVNpemUsIGluaXRpYWxJbnB1dFBvc2l0aW9uKTsKICAgICAgICAg
ICAgIG1pbmltdW1JbnB1dFNpemUgPSBzdGQ6Om1pbihtaW5pbXVtSW5wdXRTaXplLCBhbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSk7CiAgICAgICAgICAgICBtYXhpbXVtQ2FsbEZyYW1lU2l6ZSA9
IHN0ZDo6bWF4KG1heGltdW1DYWxsRnJhbWVTaXplLCBjdXJyZW50QWx0ZXJuYXRpdmVDYWxsRnJh
bWVTaXplKTsKQEAgLTY5MCw3ICs2OTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9udW1TdWJwYXR0ZXJucykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBWZWN0
b3I8UGF0dGVybkFsdGVybmF0aXZlKj4mIGFsdGVybmF0aXZlcyA9IG1fcGF0dGVybi5tX2JvZHkt
Pm1fYWx0ZXJuYXRpdmVzOworICAgICAgICBWZWN0b3I8T3duUHRyPFBhdHRlcm5BbHRlcm5hdGl2
ZT4gPiYgYWx0ZXJuYXRpdmVzID0gbV9wYXR0ZXJuLm1fYm9keS0+bV9hbHRlcm5hdGl2ZXM7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBWZWN0b3I8UGF0dGVyblRlcm0+JiB0ZXJtcyA9IGFsdGVybmF0aXZlc1tp
XS0+bV90ZXJtczsKICAgICAgICAgICAgIGlmICh0ZXJtcy5zaXplKCkpIHsKQEAgLTcyNSw3ICs3
MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChsb29wRGlzanVuY3Rpb24pIHsKICAgICAgICAg
ICAgIC8vIE1vdmUgYWx0ZXJuYXRpdmVzIGZyb20gbG9vcERpc2p1bmN0aW9uIHRvIGRpc2p1bmN0
aW9uCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGxvb3BEaXNqdW5j
dGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2FsdCkKLSAgICAgICAgICAgICAgICBkaXNq
dW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuYXBwZW5kKGxvb3BEaXNqdW5jdGlvbi0+bV9hbHRlcm5h
dGl2ZXNbYWx0XSk7CisgICAgICAgICAgICAgICAgZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVz
LmFwcGVuZChsb29wRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0ucmVsZWFzZSgpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGxvb3BEaXNqdW5jdGlvbi0+bV9hbHRlcm5h
dGl2ZXMuY2xlYXIoKTsKICAgICAgICAgfQpAQCAtNzQ0LDcgKzc0OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmICh0ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1
YnBhdHRlcm4pIHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIG5lc3RlZERp
c2p1bmN0aW9uID0gdGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbjsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IG5lc3RlZERpc2p1bmN0aW9uLT5tX2FsdGVy
bmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWlu
c0NhcHR1cmluZ1Rlcm1zKG5lc3RlZERpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdLCAw
LCBuZXN0ZWREaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS0+bV90ZXJtcy5zaXplKCkg
LSAxKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zQ2FwdHVyaW5nVGVybXMobmVz
dGVkRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0uZ2V0KCksIDAsIG5lc3RlZERpc2p1
bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdLT5tX3Rlcm1zLnNpemUoKSAtIDEpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtNzYwLDExICs3NjUsMTEgQEAgcHVibGljOgogICAgIC8vIGJlZ2lubmluZyBh
bmQgdGhlIGVuZCBvZiB0aGUgbWF0Y2guCiAgICAgdm9pZCBvcHRpbWl6ZURvdFN0YXJXcmFwcGVk
RXhwcmVzc2lvbnMoKQogICAgIHsKLSAgICAgICAgVmVjdG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+
JiBhbHRlcm5hdGl2ZXMgPSBtX3BhdHRlcm4ubV9ib2R5LT5tX2FsdGVybmF0aXZlczsKKyAgICAg
ICAgVmVjdG9yPE93blB0cjxQYXR0ZXJuQWx0ZXJuYXRpdmU+ID4mIGFsdGVybmF0aXZlcyA9IG1f
cGF0dGVybi5tX2JvZHktPm1fYWx0ZXJuYXRpdmVzOwogICAgICAgICBpZiAoYWx0ZXJuYXRpdmVz
LnNpemUoKSAhPSAxKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFBhdHRlcm5BbHRl
cm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbMF07CisgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbMF0uZ2V0KCk7CiAgICAgICAg
IFZlY3RvcjxQYXR0ZXJuVGVybT4mIHRlcm1zID0gYWx0ZXJuYXRpdmUtPm1fdGVybXM7CiAgICAg
ICAgIGlmICh0ZXJtcy5zaXplKCkgPj0gMykgewogICAgICAgICAgICAgYm9vbCBzdGFydHNXaXRo
Qk9MID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGF0dGVybi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAppbmRl
eCAxNGU4OWI4Li5iZjBmNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyUGF0dGVybi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmgKQEAgLTI4LDYgKzI4LDggQEAKICNkZWZpbmUgWWFyclBhdHRlcm5faAogCiAjaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC0yNzUsMTkgKzI3NywxNCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB+UGF0
dGVybkRpc2p1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2FsdGVy
bmF0aXZlcyk7Ci0gICAgfQotCiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhZGROZXdBbHRlcm5h
dGl2ZSgpCiAgICAgewotICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0g
bmV3IFBhdHRlcm5BbHRlcm5hdGl2ZSh0aGlzKTsKLSAgICAgICAgbV9hbHRlcm5hdGl2ZXMuYXBw
ZW5kKGFsdGVybmF0aXZlKTsKLSAgICAgICAgcmV0dXJuIGFsdGVybmF0aXZlOworICAgICAgICBP
d25QdHI8UGF0dGVybkFsdGVybmF0aXZlPiBhbHRlcm5hdGl2ZSA9IGFkb3B0UHRyKG5ldyBQYXR0
ZXJuQWx0ZXJuYXRpdmUodGhpcykpOworICAgICAgICBtX2FsdGVybmF0aXZlcy5hcHBlbmQoYWx0
ZXJuYXRpdmUucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVzLmxhc3Qo
KS5nZXQoKTsKICAgICB9CiAKLSAgICBWZWN0b3I8UGF0dGVybkFsdGVybmF0aXZlKj4gbV9hbHRl
cm5hdGl2ZXM7CisgICAgVmVjdG9yPE93blB0cjxQYXR0ZXJuQWx0ZXJuYXRpdmU+ID4gbV9hbHRl
cm5hdGl2ZXM7CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX3BhcmVudDsKICAgICB1bnNpZ25l
ZCBtX21pbmltdW1TaXplOwogICAgIHVuc2lnbmVkIG1fY2FsbEZyYW1lU2l6ZTsKQEAgLTMxOCwx
MiArMzE1LDYgQEAgc3RydWN0IFRlcm1DaGFpbiB7CiBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFlhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgYm9v
bCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSwgY29uc3QgY2hhcioqIGVycm9yKTsKIAotICAg
IH5ZYXJyUGF0dGVybigpCi0gICAgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9kaXNqdW5j
dGlvbnMpOwotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcyk7
Ci0gICAgfQotCiAgICAgdm9pZCByZXNldCgpCiAgICAgewogICAgICAgICBtX251bVN1YnBhdHRl
cm5zID0gMDsKQEAgLTM0MCw5ICszMzEsNyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgICAg
ICBub25zcGFjZXNDYWNoZWQgPSAwOwogICAgICAgICBub253b3JkY2hhckNhY2hlZCA9IDA7CiAK
LSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZGlzanVuY3Rpb25zKTsKICAgICAgICAgbV9kaXNq
dW5jdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdXNlckNoYXJhY3Rl
ckNsYXNzZXMpOwogICAgICAgICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmNsZWFyKCk7CiAgICAg
fQogCkBAIC0zNTQsNDMgKzM0Myw0MyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgIENoYXJh
Y3RlckNsYXNzKiBuZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKQogICAgIHsKICAgICAgICAgaWYgKCFu
ZXdsaW5lQ2FjaGVkKQotICAgICAgICAgICAgbV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcy5hcHBlbmQo
bmV3bGluZUNhY2hlZCA9IG5ld2xpbmVDcmVhdGUoKSk7CisgICAgICAgICAgICBtX3VzZXJDaGFy
YWN0ZXJDbGFzc2VzLmFwcGVuZChhZG9wdFB0cihuZXdsaW5lQ2FjaGVkID0gbmV3bGluZUNyZWF0
ZSgpKSk7CiAgICAgICAgIHJldHVybiBuZXdsaW5lQ2FjaGVkOwogICAgIH0KICAgICBDaGFyYWN0
ZXJDbGFzcyogZGlnaXRzQ2hhcmFjdGVyQ2xhc3MoKQogICAgIHsKICAgICAgICAgaWYgKCFkaWdp
dHNDYWNoZWQpCi0gICAgICAgICAgICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChkaWdp
dHNDYWNoZWQgPSBkaWdpdHNDcmVhdGUoKSk7CisgICAgICAgICAgICBtX3VzZXJDaGFyYWN0ZXJD
bGFzc2VzLmFwcGVuZChhZG9wdFB0cihkaWdpdHNDYWNoZWQgPSBkaWdpdHNDcmVhdGUoKSkpOwog
ICAgICAgICByZXR1cm4gZGlnaXRzQ2FjaGVkOwogICAgIH0KICAgICBDaGFyYWN0ZXJDbGFzcyog
c3BhY2VzQ2hhcmFjdGVyQ2xhc3MoKQogICAgIHsKICAgICAgICAgaWYgKCFzcGFjZXNDYWNoZWQp
Ci0gICAgICAgICAgICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChzcGFjZXNDYWNoZWQg
PSBzcGFjZXNDcmVhdGUoKSk7CisgICAgICAgICAgICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFw
cGVuZChhZG9wdFB0cihzcGFjZXNDYWNoZWQgPSBzcGFjZXNDcmVhdGUoKSkpOwogICAgICAgICBy
ZXR1cm4gc3BhY2VzQ2FjaGVkOwogICAgIH0KICAgICBDaGFyYWN0ZXJDbGFzcyogd29yZGNoYXJD
aGFyYWN0ZXJDbGFzcygpCiAgICAgewogICAgICAgICBpZiAoIXdvcmRjaGFyQ2FjaGVkKQotICAg
ICAgICAgICAgbV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcy5hcHBlbmQod29yZGNoYXJDYWNoZWQgPSB3
b3JkY2hhckNyZWF0ZSgpKTsKKyAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBw
ZW5kKGFkb3B0UHRyKHdvcmRjaGFyQ2FjaGVkID0gd29yZGNoYXJDcmVhdGUoKSkpOwogICAgICAg
ICByZXR1cm4gd29yZGNoYXJDYWNoZWQ7CiAgICAgfQogICAgIENoYXJhY3RlckNsYXNzKiBub25k
aWdpdHNDaGFyYWN0ZXJDbGFzcygpCiAgICAgewogICAgICAgICBpZiAoIW5vbmRpZ2l0c0NhY2hl
ZCkKLSAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBwZW5kKG5vbmRpZ2l0c0Nh
Y2hlZCA9IG5vbmRpZ2l0c0NyZWF0ZSgpKTsKKyAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNs
YXNzZXMuYXBwZW5kKGFkb3B0UHRyKG5vbmRpZ2l0c0NhY2hlZCA9IG5vbmRpZ2l0c0NyZWF0ZSgp
KSk7CiAgICAgICAgIHJldHVybiBub25kaWdpdHNDYWNoZWQ7CiAgICAgfQogICAgIENoYXJhY3Rl
ckNsYXNzKiBub25zcGFjZXNDaGFyYWN0ZXJDbGFzcygpCiAgICAgewogICAgICAgICBpZiAoIW5v
bnNwYWNlc0NhY2hlZCkKLSAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBwZW5k
KG5vbnNwYWNlc0NhY2hlZCA9IG5vbnNwYWNlc0NyZWF0ZSgpKTsKKyAgICAgICAgICAgIG1fdXNl
ckNoYXJhY3RlckNsYXNzZXMuYXBwZW5kKGFkb3B0UHRyKG5vbnNwYWNlc0NhY2hlZCA9IG5vbnNw
YWNlc0NyZWF0ZSgpKSk7CiAgICAgICAgIHJldHVybiBub25zcGFjZXNDYWNoZWQ7CiAgICAgfQog
ICAgIENoYXJhY3RlckNsYXNzKiBub253b3JkY2hhckNoYXJhY3RlckNsYXNzKCkKICAgICB7CiAg
ICAgICAgIGlmICghbm9ud29yZGNoYXJDYWNoZWQpCi0gICAgICAgICAgICBtX3VzZXJDaGFyYWN0
ZXJDbGFzc2VzLmFwcGVuZChub253b3JkY2hhckNhY2hlZCA9IG5vbndvcmRjaGFyQ3JlYXRlKCkp
OworICAgICAgICAgICAgbV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcy5hcHBlbmQoYWRvcHRQdHIobm9u
d29yZGNoYXJDYWNoZWQgPSBub253b3JkY2hhckNyZWF0ZSgpKSk7CiAgICAgICAgIHJldHVybiBu
b253b3JkY2hhckNhY2hlZDsKICAgICB9CiAKQEAgLTQwMSw4ICszOTAsOCBAQCBzdHJ1Y3QgWWFy
clBhdHRlcm4gewogICAgIHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CiAgICAgdW5zaWduZWQg
bV9tYXhCYWNrUmVmZXJlbmNlOwogICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbV9ib2R5OwotICAg
IFZlY3RvcjxQYXR0ZXJuRGlzanVuY3Rpb24qLCA0PiBtX2Rpc2p1bmN0aW9uczsKLSAgICBWZWN0
b3I8Q2hhcmFjdGVyQ2xhc3MqPiBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzOworICAgIFZlY3RvcjxP
d25QdHI8UGF0dGVybkRpc2p1bmN0aW9uPiwgND4gbV9kaXNqdW5jdGlvbnM7CisgICAgVmVjdG9y
PE93blB0cjxDaGFyYWN0ZXJDbGFzcz4gPiBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzOwogCiBwcml2
YXRlOgogICAgIGNvbnN0IGNoYXIqIGNvbXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5n
KTsK
</data>
<flag name="review"
          id="206862"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>