<?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>52676</bug_id>
          
          <creation_ts>2011-01-18 15:52:52 -0800</creation_ts>
          <short_desc>Stop instantiating legacy editing positions in InsertTextCommand, MoveSelectionCommand, ReplaceSelectionCommand, SelectionController, SpellChecker, TypingCommand, and markup.cpp</short_desc>
          <delta_ts>2011-01-24 18:22:04 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336165</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 15:52:52 -0800</bug_when>
    <thetext>This is a cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336167</commentid>
    <comment_count>1</comment_count>
      <attachid>79345</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 15:55:58 -0800</bug_when>
    <thetext>Created attachment 79345
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336169</commentid>
    <comment_count>2</comment_count>
      <attachid>79347</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 15:57:07 -0800</bug_when>
    <thetext>Created attachment 79347
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339031</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-24 08:31:25 -0800</bug_when>
    <thetext>Could someone review my patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339160</commentid>
    <comment_count>4</comment_count>
      <attachid>79347</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 12:03:10 -0800</bug_when>
    <thetext>Comment on attachment 79347
cleanup

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

Seems sane.  Please see comments.

&gt; Source/WebCore/editing/InsertTextCommand.cpp:175
&gt; +        endPosition = Position(textNode, offset + text.length(), Position::PositionIsOffsetInAnchor);

This seems like it will be off the end of the node?

&gt; Source/WebCore/editing/MoveSelectionCommand.cpp:50
&gt; +    if (pos.anchorType() == Position::PositionIsOffsetInAnchor &amp;&amp; selectionEnd.anchorType() == Position::PositionIsOffsetInAnchor

We need a less cumbersome way to write this check.

&gt; Source/WebCore/editing/TypingCommand.cpp:493
&gt; +            setEndingSelection(VisibleSelection(positionAfterNode(table), endingSelection().start(), DOWNSTREAM));

After node?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339196</commentid>
    <comment_count>5</comment_count>
      <attachid>79347</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-24 12:25:46 -0800</bug_when>
    <thetext>Comment on attachment 79347
cleanup

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

&gt;&gt; Source/WebCore/editing/InsertTextCommand.cpp:175
&gt;&gt; +        endPosition = Position(textNode, offset + text.length(), Position::PositionIsOffsetInAnchor);
&gt; 
&gt; This seems like it will be off the end of the node?

It won&apos;t be because we&apos;re inserting text at offset.  So endPosition is basically the position immediately after the text we just inserted.

&gt;&gt; Source/WebCore/editing/MoveSelectionCommand.cpp:50
&gt;&gt; +    if (pos.anchorType() == Position::PositionIsOffsetInAnchor &amp;&amp; selectionEnd.anchorType() == Position::PositionIsOffsetInAnchor
&gt; 
&gt; We need a less cumbersome way to write this check.

I totally agree but we can probably do that kind of cleanup after we&apos;re done with the first phase of cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339431</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-24 18:22:04 -0800</bug_when>
    <thetext>Committed r76560: &lt;http://trac.webkit.org/changeset/76560&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79345</attachid>
            <date>2011-01-18 15:55:58 -0800</date>
            <delta_ts>2011-01-18 15:56:16 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-52676-20110118155557.patch</filename>
            <type>text/plain</type>
            <size>20458</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjMjc0NTQ1OTk1NDAzNGM4ZGIwZGU3ZmRlODEyNjMwNTUxYzgzYzNiLi4z
YjZiMzU1M2FlNDk2Y2E3N2U3NzFjMmNjMTFhYjJkNjJjYjllZjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTEtMDEtMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RvcCBp
bnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucyBpbiBJbnNlcnRUZXh0Q29tbWFu
ZCwgTW92ZVNlbGVjdGlvbkNvbW1hbmQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLCBTZWxlY3Rp
b25Db250cm9sbGVyLCBTcGVsbENoZWNrZXIsIFR5cGluZ0NvbW1hbmQsIGFuZCBtYXJrdXAuY3Bw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY3Ngor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6
cHJlcGFyZUZvclRleHRJbnNlcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENv
bW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRU
ZXh0Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6
Omluc2VydFRhYik6CisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAg
ICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0
RW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VF
bmRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hv
dWxkUmVtb3ZlRW5kQlIpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRpZENoZWNrKToKKyAgICAgICAgKiBl
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6bWFrZUVkaXRhYmxlUm9vdEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0QW5jZXN0b3JUb1dyYXBNYXJrdXApOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFya3VwKToKKwogMjAxMS0wMS0xOCAgQWRhbSBSb2JlbiAg
PGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FsbCBhbHRlcm5hdGUgQ0ZIVFRQQ29va2ll
IGZ1bmN0aW9ucyBpZiBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKaW5kZXggZmMxOGU5MTJmOTUzNjM2YWZiMjcxNmYwYzE2MjNkNTA5MDY4
OWY1ZC4uODg3ZWU3NWIwY2ZjNzUxZDdhZTRkZDkwZmE2OThlYTEwMmIzZWRjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTYxLDEzICs2MSwx
MyBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6cHJlcGFyZUZvclRleHRJbnNlcnRpb24o
Y29uc3QgUG9zaXRpb24mIHApCiAgICAgaWYgKCFwb3Mubm9kZSgpLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGlu
Z1RleHROb2RlKCIiKTsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KHRleHROb2RlLmdldCgpLCBwb3Mp
OwotICAgICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIDApOworICAgICAgICBy
ZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZS5nZXQoKSk7CiAgICAgfQogCiAgICAg
aWYgKGlzVGFiU3BhblRleHROb2RlKHBvcy5ub2RlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxOb2Rl
PiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIik7CiAgICAg
ICAgIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgcG9zKTsKLSAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLmdldCgpLCAwKTsKKyAgICAgICAgcmV0dXJu
IGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVy
biBwb3M7CkBAIC04MywyMyArODMsMjUgQEAgYm9vbCBJbnNlcnRUZXh0Q29tbWFuZDo6cGVyZm9y
bVRyaXZpYWxSZXBsYWNlKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnMKICAgICBp
ZiAodGV4dC5jb250YWlucygnXHQnKSB8fCB0ZXh0LmNvbnRhaW5zKCcgJykgfHwgdGV4dC5jb250
YWlucygnXG4nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFBvc2l0aW9uIHN0
YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSBlbmRp
bmdTZWxlY3Rpb24oKS5lbmQoKTsKLSAgICAKLSAgICBpZiAoc3RhcnQubm9kZSgpICE9IGVuZC5u
b2RlKCkgfHwgIXN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpIHx8IGlzVGFiU3BhblRleHROb2Rl
KHN0YXJ0Lm5vZGUoKSkpCisgICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUG9zaXRpb24gZW5kID0gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBBU1NF
UlQoc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworICAgIEFTU0VSVChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpOworCisgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSAhPSBlbmQu
Y29udGFpbmVyTm9kZSgpIHx8ICFzdGFydC5jb250YWluZXJOb2RlKCktPmlzVGV4dE5vZGUoKSB8
fCBpc1RhYlNwYW5UZXh0Tm9kZShzdGFydC5jb250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRl
eHQqPihzdGFydC5ub2RlKCkpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIHRleHQpOwotICAgIAotICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIHRleHQubGVuZ3RoKCkpOwotICAgIAor
CisgICAgcmVwbGFjZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmNvbnRhaW5l
ck5vZGUoKSksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgLSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgdGV4dCk7CisKKyAg
ICBQb3NpdGlvbiBlbmRQb3NpdGlvbihzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpICsgdGV4dC5sZW5ndGgoKSk7CisKICAgICAvLyBXZSBjb3VsZCBo
YXZlIGluc2VydGVkIGEgcGFydCBvZiBjb21wb3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsCiAgICAg
Ly8gc28gd2UgYXJlIGJhc2ljYWxseSB0cmVhdGluZyBlbmRpbmcgc2VsZWN0aW9uIGFzIGEgcmFu
Z2UgdG8gYXZvaWQgdmFsaWRhdGlvbi4KICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU3ODE+CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBmb3JjZWRFbmRpbmdT
ZWxlY3Rpb247CiAgICAgZm9yY2VkRW5kaW5nU2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9u
KHN0YXJ0LCBlbmRQb3NpdGlvbik7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGZvcmNlZEVuZGlu
Z1NlbGVjdGlvbik7Ci0gICAgCisKICAgICBpZiAoIXNlbGVjdEluc2VydGVkVGV4dCkKICAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZUVuZCgpKSk7CiAgICAgCkBAIC0xNzAsNyArMTcyLDcgQEAgdm9pZCBJbnNlcnRUZXh0
Q29tbWFuZDo6aW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4
dCkKICAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKTsKIAogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5vZGUsIG9mZnNldCwg
dGV4dCk7Ci0gICAgICAgIGVuZFBvc2l0aW9uID0gUG9zaXRpb24odGV4dE5vZGUsIG9mZnNldCAr
IHRleHQubGVuZ3RoKCkpOworICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2Rl
LCBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKTsKIAogICAgICAgICAvLyBUaGUgaW5zZXJ0aW9uIG1heSByZXF1aXJlIGFkanVzdGluZyBh
ZGphY2VudCB3aGl0ZXNwYWNlLCBpZiBpdCBpcyBwcmVzZW50LgogICAgICAgICByZWJhbGFuY2VX
aGl0ZXNwYWNlQXQoZW5kUG9zaXRpb24pOwpAQCAtMjA3LDcgKzIwOSw3IEBAIFBvc2l0aW9uIElu
c2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICAvLyBr
ZWVwIHRhYnMgY29hbGVzY2VkIGluIHRhYiBzcGFuCiAgICAgaWYgKGlzVGFiU3BhblRleHROb2Rl
KG5vZGUpKSB7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShzdGF0aWNfY2FzdDxUZXh0ICo+
KG5vZGUpLCBvZmZzZXQsICJcdCIpOwotICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgb2Zm
c2V0ICsgMSk7CisgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBvZmZzZXQgKyAxLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICB9CiAgICAgCiAgICAgLy8gY3Jl
YXRlIG5ldyB0YWIgc3BhbgpAQCAtMjMwLDkgKzIzMiw5IEBAIFBvc2l0aW9uIEluc2VydFRleHRD
b21tYW5kOjppbnNlcnRUYWIoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUoc3Bhbk5vZGUsIHRleHROb2RlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIC8vIHJldHVybiB0aGUgcG9zaXRpb24gZm9sbG93aW5nIHRoZSBuZXcgdGFiCi0gICAg
cmV0dXJuIFBvc2l0aW9uKHNwYW5Ob2RlLT5sYXN0Q2hpbGQoKSwgY2FyZXRNYXhPZmZzZXQoc3Bh
bk5vZGUtPmxhc3RDaGlsZCgpKSk7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShzcGFu
Tm9kZS5nZXQoKSk7CiB9CiAKIGJvb2wgSW5zZXJ0VGV4dENvbW1hbmQ6OmlzSW5zZXJ0VGV4dENv
bW1hbmQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25D
b21tYW5kLmNwcAppbmRleCAzYTFjYWUwNzkwMDk0OTUxZTc5MmFiNzRjZTVkYzIyZjdmZjQ4NzUz
Li4wZjIzYjI5ZjM3NDdhY2VkZGRmM2M4YWZlMzEzYzc3ZjFlNjMwOTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzksMjUgKzM5
LDIxIEBAIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50CiAKIHZvaWQgTW92ZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5n
U2VsZWN0aW9uKCk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5pc05vbk9ycGhhbmVkUmFuZ2UoKSk7
CisgICAgQVNTRVJUKGVuZGluZ1NlbGVjdGlvbigpLmlzTm9uT3JwaGFuZWRSYW5nZSgpKTsKIAog
ICAgIFBvc2l0aW9uIHBvcyA9IG1fcG9zaXRpb247CiAgICAgaWYgKHBvcy5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb3Ro
ZXJ3aXNlIGl0IG1heSBiZWNvbWUgaW52YWxpZCBhZnRlciB0aGUgc2VsZWN0aW9uIGlzIGRlbGV0
ZWQuCi0gICAgTm9kZSAqcG9zaXRpb25Ob2RlID0gbV9wb3NpdGlvbi5ub2RlKCk7Ci0gICAgaW50
IHBvc2l0aW9uT2Zmc2V0ID0gbV9wb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwot
ICAgIFBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKLSAgICBpbnQgc2Vs
ZWN0aW9uRW5kT2Zmc2V0ID0gc2VsZWN0aW9uRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7
Ci0gICAgaWYgKHNlbGVjdGlvbkVuZC5ub2RlKCkgPT0gcG9zaXRpb25Ob2RlICYmIHNlbGVjdGlv
bkVuZE9mZnNldCA8IHBvc2l0aW9uT2Zmc2V0KSB7Ci0gICAgICAgIHBvc2l0aW9uT2Zmc2V0IC09
IHNlbGVjdGlvbkVuZE9mZnNldDsKLSAgICAgICAgUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBz
ZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0Lm5vZGUoKSA9PSBw
b3NpdGlvbk5vZGUpIHsKLSAgICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0ICs9IHNlbGVjdGlvblN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zID0g
UG9zaXRpb24ocG9zaXRpb25Ob2RlLCBwb3NpdGlvbk9mZnNldCk7CisgICAgUG9zaXRpb24gc2Vs
ZWN0aW9uRW5kID0gZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7CisgICAgaWYgKHBvcy5hbmNob3JU
eXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBzZWxlY3Rpb25F
bmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IKKyAg
ICAgICAgJiYgc2VsZWN0aW9uRW5kLmNvbnRhaW5lck5vZGUoKSA9PSBwb3MuY29udGFpbmVyTm9k
ZSgpICYmIHNlbGVjdGlvbkVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBvcy5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBwb3MubW92ZVRvT2Zmc2V0KHBvcy5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSAtIHNlbGVjdGlvbkVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CisKKyAgICAgICAgUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBlbmRpbmdTZWxlY3Rpb24oKS5z
dGFydCgpOworICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc2VsZWN0aW9uU3RhcnQuY29udGFpbmVy
Tm9kZSgpID09IHBvcy5jb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICBwb3MubW92ZVRvT2Zm
c2V0KHBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHNlbGVjdGlvblN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICB9CiAKICAgICBkZWxldGVTZWxlY3Rpb24obV9zbWFydERl
bGV0ZSk7CkBAIC03MCwxMSArNjYsMTEgQEAgdm9pZCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgICAgIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CiAKICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigp
LmFmZmluaXR5KCkpKTsKLSAgICBpZiAoIXBvc2l0aW9uTm9kZS0+aW5Eb2N1bWVudCgpKSB7Cisg
ICAgaWYgKCFwb3MuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRG9j
dW1lbnQgd2FzIG1vZGlmaWVkIG91dCBmcm9tIHVuZGVyIHVzLgogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUocG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX2ZyYWdtZW50LCB0cnVlLCBtX3Nt
YXJ0SW5zZXJ0KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX2ZyYWdtZW50LCB0cnVlLCBtX3NtYXJ0SW5z
ZXJ0KSk7CiB9CiAKIEVkaXRBY3Rpb24gTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmVkaXRpbmdBY3Rp
b24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAppbmRleCAwNDRjZTYzNDEyNjk0N2QzY2JiOGVkNWEyZGNjOWM2MGRjODM3
YzdmLi5lNzg0YWEzOTU3ZTA1ZTc1ZDQxNWYyYzY3NjI5OTMwOWIwNmVkODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDk1LDEwICs0OTUsMTAgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bmVnYXRlU3R5
bGVSdWxlc1RoYXRBZmZlY3RBcHBlYXJhbmNlKCkKIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoKQogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmICghbV9sYXN0
TGVhZkluc2VydGVkLT5yZW5kZXJlcigpICYmIAotICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQt
PmlzVGV4dE5vZGUoKSAmJiAKLSAgICAgICAgIWVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9u
KG1fbGFzdExlYWZJbnNlcnRlZC5nZXQoKSwgMCksIHNlbGVjdFRhZykgJiYgCi0gICAgICAgICFl
bmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbihtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCksIDAp
LCBzY3JpcHRUYWcpKSB7CisgICAgaWYgKCFtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCkK
KyAgICAgICAgJiYgbV9sYXN0TGVhZkluc2VydGVkLT5pc1RleHROb2RlKCkKKyAgICAgICAgJiYg
IWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2xhc3RM
ZWFmSW5zZXJ0ZWQuZ2V0KCkpLCBzZWxlY3RUYWcpCisgICAgICAgICYmICFlbmNsb3NpbmdOb2Rl
V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9sYXN0TGVhZkluc2VydGVkLmdl
dCgpKSwgc2NyaXB0VGFnKSkgewogICAgICAgICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBt
X2xhc3RMZWFmSW5zZXJ0ZWQpIHsKICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9sYXN0TGVhZklu
c2VydGVkLmdldCgpKTsKICAgICAgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IDA7CkBAIC03
NDIsNyArNzQyLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5l
ZWRlZCgpCiAgICAgaWYgKGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUpID09
IGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0
ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFj
ZWhvbGRlciwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7
Ci0gICAgICAgIGRlc3RpbmF0aW9uID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9s
ZGVyLmdldCgpLCAwKSk7CisgICAgICAgIGRlc3RpbmF0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHBv
c2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5nZXQoKSkpOwogICAgIH0KIAogICAgIG1vdmVQ
YXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZlBh
cmFncmFwaFRvTW92ZSksIGRlc3RpbmF0aW9uKTsKQEAgLTEwNDQsNyArMTA0NCw3IEBAIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGlmIChp
c0xpc3RJdGVtKGVuY2xvc2luZ05vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBuZXdMaXN0SXRlbSA9IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5ld0xpc3RJdGVtLCBlbmNsb3NpbmdO
b2RlKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihuZXdMaXN0SXRlbSwgMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5ld0xp
c3RJdGVtLmdldCgpKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgYSBkZWZhdWx0IHBhcmFncmFwaCBlbGVtZW50IChhIHBsYWluIGRpdikgZm9y
IHRoZSBlbXB0eSBwYXJhZ3JhcGgsIHVzaW5nIHRoZSBsYXN0IHBhcmFncmFwaAogICAgICAgICAg
ICAgICAgICAgICAvLyBibG9jaydzIHN0eWxlIHNlZW1zIHRvIGFubm95IHVzZXJzLgpAQCAtMTEy
Myw3ICsxMTIzLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkUmVtb3Zl
RW5kQlIoTm9kZSogZW5kQlIsIGNvbnN0IFZpc2libGVQb3NpdGkKICAgICBpZiAoIWVuZEJSIHx8
ICFlbmRCUi0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKFBvc2l0aW9uKGVuZEJSLCAwKSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MocG9zaXRpb25CZWZvcmVOb2RlKGVuZEJSKSk7CiAg
ICAgCiAgICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBiciBpZiBub3RoaW5nIHdhcyBpbnNlcnRlZC4K
ICAgICBpZiAodmlzaWJsZVBvcy5wcmV2aW91cygpID09IG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5k
QlIpCkBAIC0xMjYwLDcgKzEyNjAsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpw
ZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFjZW1lbnRGcmFnbWVudCYgZgogewogICAg
IGlmICghZnJhZ21lbnQuZmlyc3RDaGlsZCgpIHx8IGZyYWdtZW50LmZpcnN0Q2hpbGQoKSAhPSBm
cmFnbWVudC5sYXN0Q2hpbGQoKSB8fCAhZnJhZ21lbnQuZmlyc3RDaGlsZCgpLT5pc1RleHROb2Rl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAvLyBGSVhNRTogV291
bGQgYmUgbmljZSB0byBoYW5kbGUgc21hcnQgcmVwbGFjZSBpbiB0aGUgZmFzdCBwYXRoLgogICAg
IGlmIChtX3NtYXJ0UmVwbGFjZSB8fCBmcmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0
YXJ0KCkgfHwgZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTI2OSwyMCArMTI2OSwyMiBAQCBib29sIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFjZW1lbnRGcmFnbWVu
dCYgZgogICAgIC8vIE91ciBmcmFnbWVudCBjcmVhdGlvbiBjb2RlIGhhbmRsZXMgdGFicywgc3Bh
Y2VzLCBhbmQgbmV3bGluZXMsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhvc2Ug
aGVyZS4KICAgICBTdHJpbmcgdGV4dCh0ZXh0Tm9kZS0+ZGF0YSgpKTsKICAgICAKLSAgICBQb3Np
dGlvbiBzdGFydCA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgUG9zaXRpb24gZW5k
ID0gZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgCi0gICAgaWYgKHN0YXJ0LmFuY2hvck5v
ZGUoKSAhPSBlbmQuYW5jaG9yTm9kZSgpIHx8ICFzdGFydC5hbmNob3JOb2RlKCktPmlzVGV4dE5v
ZGUoKSkKKyAgICBQb3NpdGlvbiBzdGFydCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmRp
bmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBQb3NpdGlvbiBlbmQgPSByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQoZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCkpOworICAgIEFTU0VSVChzdGFydC5h
bmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAg
QVNTRVJUKGVuZC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcik7CisKKyAgICBpZiAoc3RhcnQuY29udGFpbmVyTm9kZSgpICE9IGVuZC5jb250YWluZXJO
b2RlKCkgfHwgIXN0YXJ0LmNvbnRhaW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0
PFRleHQqPihzdGFydC5hbmNob3JOb2RlKCkpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIHRleHQpOwotICAgIAotICAgIGVuZCA9IFBvc2l0aW9uKHN0YXJ0LmFuY2hvck5vZGUo
KSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpKTsKLSAgICAK
KworICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihzdGFydC5jb250YWlu
ZXJOb2RlKCkpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpIC0gc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHRleHQpOworCisg
ICAgZW5kID0gUG9zaXRpb24oc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSArIHRleHQubGVuZ3RoKCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOworCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclJlcGxhY2Uo
bV9zZWxlY3RSZXBsYWNlbWVudCA/IHN0YXJ0IDogZW5kLCBlbmQpOwotICAgIAorCiAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVyUmVwbGFjZSk7Ci0gICAgCisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKaW5kZXggNDQwNmI0MTJhYjUzYjUyYzJmMjNhZjhiZGY5YjIxZWQ2ZmFlZTQ2OS4u
MDkyZDIyYjJlY2FkYjkwY2MxMTZjNWU0MzY0NjY0YTA5YWQ1YWZiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xNzU1LDcgKzE3NTUs
NyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbkZyb21Ob25lKCkKICAg
ICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkKICAgICAgICAgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICBpZiAobm9kZSkKLSAgICAgICAgc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24obm9kZSwgMCksIERPV05TVFJFQU0p
KTsKKyAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKSk7CiB9CiAKIGJvb2wgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5l
d1NlbGVjdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApp
bmRleCAxODA3NDc0Yjc1Mzg2YmU3NzIxZWM4ZGVlMzBkOTkzMDdiMTAxZTI2Li5mMTRhNzRkNjc2
NDNmMjc4N2M0MGU0MTc4MGI3Yzc3MWExMzk4YTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRp
ZENoZWNrKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFNwZWxsQ2hlY2tpbmdSZXN1bHQ+JiBy
ZXMKICAgICB9CiAKICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIFBvc2l0aW9uSXRlcmF0
b3Igc3RhcnQgPSBQb3NpdGlvbihtX3JlcXVlc3ROb2RlLCAwKTsKKyAgICBQb3NpdGlvbkl0ZXJh
dG9yIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG1fcmVxdWVzdE5vZGUuZ2V0
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAocmVzdWx0c1tpXS50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
ICYmIHJlc3VsdHNbaV0udHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpHcmFtbWFyKQogICAgICAg
ICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApp
bmRleCBkNTRiMzg4NWJmOThmZTUyYmQ5YTY1YzU0YThkNzFkOTY3NjA3ZTlkLi45MjA3NTBjZGQ4
NTAzMjVjNGQ4ODk5NzRlNjRjNzQxNWQ1MTJmM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCBib29sIFR5cGluZ0NvbW1hbmQ6
Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSgpCiAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQpOwogCiAg
ICAgYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKHJvb3QpOwotICAgIHNldEVuZGluZ1NlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKHJvb3QsIDApLCBET1dOU1RSRUFNKSk7Cisg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluTm9k
ZShyb290KSwgRE9XTlNUUkVBTSkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00OTAsNyAr
NDkwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKICAgICAgICAgICAgIHNlbGVjdGlvbi5t
b2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFj
a3dhcmQsIGdyYW51bGFyaXR5KTsKICAgICAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYWZ0
ZXIgYSB0YWJsZSwgc2VsZWN0IHRoZSB0YWJsZSBhbmQgZG9uJ3QgZGVsZXRlIGFueXRoaW5nLgog
ICAgICAgICB9IGVsc2UgaWYgKE5vZGUqIHRhYmxlID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJs
ZSh2aXNpYmxlU3RhcnQpKSB7Ci0gICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihQb3NpdGlvbih0YWJsZSwgMCksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCks
IERPV05TVFJFQU0pKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHBvc2l0aW9uQWZ0ZXJOb2RlKHRhYmxlKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKERl
bGV0ZUtleSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU5MSw3ICs1OTEs
NyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraQogICAgICAgICAgICAgICAgICAgICBleHRyYUNo
YXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIC0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZXh0cmFDaGFyYWN0
ZXJzID0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
LSAgICAgICAgICAgICAgICBleHRlbnQgPSBQb3NpdGlvbihleHRlbnQubm9kZSgpLCBleHRlbnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGV4dHJhQ2hhcmFjdGVycyk7CisgICAgICAgICAg
ICAgICAgZXh0ZW50ID0gUG9zaXRpb24oZXh0ZW50Lm5vZGUoKSwgZXh0ZW50LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgKyBleHRyYUNoYXJhY3RlcnMsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJV
bmRvLnNldFdpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgZXh0
ZW50KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IDRjYmRjY2Vl
ZWM1OGE0NGNlMjc2MTEyYWRjNDUyMTIzODBkNGU5NWEuLjU0OWM4MTZlMzI4OGJlYTEyNWM1M2M2
MTI2YzAzYjZkZDRiNTJhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTE5NCw3
ICsxOTQsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9uKHRl
eHQsIDApLCBzZWxlY3RUYWcpOworICAgIGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2lu
Z05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dCksIHNlbGVjdFRhZyk7CiAgICAg
U3RyaW5nIGNvbnRlbnQgPSB1c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRleHQodGV4dCwgbV9y
YW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKHRleHQsIG1fcmFuZ2UpOwogICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyOwogICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhidWZm
ZXIsIGNvbnRlbnQuY2hhcmFjdGVycygpLCBjb250ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5Q
Q0RBVEEpOwpAQCAtMzM3LDcgKzMzNyw3IEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
OjpzZXJpYWxpemVOb2RlcyhOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpCiAgICAgICAg
ICAgICAvLyBEb24ndCB3cml0ZSBvdXQgZW1wdHkgYmxvY2sgY29udGFpbmVycyB0aGF0IGFyZW4n
dCBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICgh
bi0+cmVuZGVyZXIoKSAmJiAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoUG9zaXRpb24obiwgMCksIHNl
bGVjdFRhZykpIHsKKyAgICAgICAgaWYgKCFuLT5yZW5kZXJlcigpICYmICFlbmNsb3NpbmdOb2Rl
V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIHNlbGVjdFRhZykpIHsKICAg
ICAgICAgICAgIG5leHQgPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAv
LyBEb24ndCBza2lwIG92ZXIgcGFzdEVuZC4KICAgICAgICAgICAgIGlmIChwYXN0RW5kICYmIHBh
c3RFbmQtPmlzRGVzY2VuZGFudE9mKG4pKQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHN0YXRpYyBOb2Rl
KiBoaWdoZXN0QW5jZXN0b3JUb1dyYXBNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCBOb2RlKiBm
dWxseVNlbGVjdGVkCiAKICAgICBOb2RlKiBjaGVja0FuY2VzdG9yID0gc3BlY2lhbENvbW1vbkFu
Y2VzdG9yID8gc3BlY2lhbENvbW1vbkFuY2VzdG9yIDogY29tbW9uQW5jZXN0b3I7CiAgICAgaWYg
KGNoZWNrQW5jZXN0b3ItPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgTm9kZSogbmV3U3BlY2lhbENv
bW1vbkFuY2VzdG9yID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoUG9zaXRpb24oY2hlY2tB
bmNlc3RvciwgMCksICZpc0VsZW1lbnRQcmVzZW50YXRpb25hbCk7CisgICAgICAgIE5vZGUqIG5l
d1NwZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0
UG9zaXRpb25Jbk5vZGUoY2hlY2tBbmNlc3RvciksICZpc0VsZW1lbnRQcmVzZW50YXRpb25hbCk7
CiAgICAgICAgIGlmIChuZXdTcGVjaWFsQ29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICBzcGVj
aWFsQ29tbW9uQW5jZXN0b3IgPSBuZXdTcGVjaWFsQ29tbW9uQW5jZXN0b3I7CiAgICAgfQpAQCAt
NTA5LDcgKzUwOSw3IEBAIHN0YXRpYyBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1dyYXBNYXJrdXAo
Y29uc3QgUmFuZ2UqIHJhbmdlLCBOb2RlKiBmdWxseVNlbGVjdGVkCiAgICAgaWYgKCFzcGVjaWFs
Q29tbW9uQW5jZXN0b3IgJiYgaXNUYWJTcGFuTm9kZShjb21tb25BbmNlc3RvcikpCiAgICAgICAg
IHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yOwogCi0gICAgaWYgKE5vZGUg
KmVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9uKHNwZWNpYWxD
b21tb25BbmNlc3RvciA/IHNwZWNpYWxDb21tb25BbmNlc3RvciA6IGNvbW1vbkFuY2VzdG9yLCAw
KSwgYVRhZykpCisgICAgaWYgKE5vZGUgKmVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ05vZGVX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoc3BlY2lhbENvbW1vbkFuY2VzdG9yID8gc3BlY2lh
bENvbW1vbkFuY2VzdG9yIDogY29tbW9uQW5jZXN0b3IpLCBhVGFnKSkKICAgICAgICAgc3BlY2lh
bENvbW1vbkFuY2VzdG9yID0gZW5jbG9zaW5nQW5jaG9yOwogCiAgICAgaWYgKHNob3VsZEFubm90
YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UgJiYgZnVsbHlTZWxlY3RlZFJvb3QpIHsKQEAg
LTU3OSw3ICs1NzksNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwg
VmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBbm5vdGF0ZUZvckludGVyYwogICAgICAgICB9CiAgICAg
fQogCi0gICAgTm9kZSogYm9keSA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9uKGNvbW1v
bkFuY2VzdG9yLCAwKSwgYm9keVRhZyk7CisgICAgTm9kZSogYm9keSA9IGVuY2xvc2luZ05vZGVX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBib2R5VGFnKTsKICAg
ICBOb2RlKiBmdWxseVNlbGVjdGVkUm9vdCA9IDA7CiAgICAgLy8gRklYTUU6IERvIHRoaXMgZm9y
IGFsbCBmdWxseSBzZWxlY3RlZCBibG9ja3MsIG5vdCBqdXN0IHRoZSBib2R5LgogICAgIGlmIChi
b2R5ICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShib2R5KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByYW5nZSkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79347</attachid>
            <date>2011-01-18 15:57:07 -0800</date>
            <delta_ts>2011-01-24 12:25:46 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-52676-20110118155706.patch</filename>
            <type>text/plain</type>
            <size>20513</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjMjc0NTQ1OTk1NDAzNGM4ZGIwZGU3ZmRlODEyNjMwNTUxYzgzYzNiLi5i
ZWFiMzNhNjc5YmQ0MzBmY2U2YjMzY2JiYWQyN2FlYjE5M2JhMGQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTEtMDEtMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RvcCBp
bnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucyBpbiBJbnNlcnRUZXh0Q29tbWFu
ZCwgTW92ZVNlbGVjdGlvbkNvbW1hbmQsCisgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LCBTZWxlY3Rpb25Db250cm9sbGVyLCBTcGVsbENoZWNrZXIsIFR5cGluZ0NvbW1hbmQsIGFuZCBt
YXJrdXAuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MjY3NgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBwb3Np
dGlvbnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcy4KKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OnBy
ZXBhcmVGb3JUZXh0SW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21t
YW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dENvbW1hbmQ6OmlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpp
bnNlcnRUYWIpOgorICAgICAgICAqIGVkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlRW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3Vs
ZFJlbW92ZUVuZEJSKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRT
ZWxlY3Rpb25Gcm9tTm9uZSk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVjayk6CisgICAgICAgICogZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZv
cndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6CisKIDIwMTEtMDEtMTggIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENhbGwgYWx0ZXJuYXRlIENGSFRUUENvb2tpZSBm
dW5jdGlvbnMgaWYgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuY3BwCmluZGV4IGZjMThlOTEyZjk1MzYzNmFmYjI3MTZmMGMxNjIzZDUwOTA2ODlm
NWQuLjg4N2VlNzViMGNmYzc1MWQ3YWU0ZGQ5MGZhNjk4ZWExMDJiM2VkYzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC02MSwxMyArNjEsMTMg
QEAgUG9zaXRpb24gSW5zZXJ0VGV4dENvbW1hbmQ6OnByZXBhcmVGb3JUZXh0SW5zZXJ0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwKQogICAgIGlmICghcG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAg
ICAgICAgIFJlZlB0cjxOb2RlPiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdU
ZXh0Tm9kZSgiIik7CiAgICAgICAgIGluc2VydE5vZGVBdCh0ZXh0Tm9kZS5nZXQoKSwgcG9zKTsK
LSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLmdldCgpLCAwKTsKKyAgICAgICAgcmV0
dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkpOwogICAgIH0KIAogICAgIGlm
IChpc1RhYlNwYW5UZXh0Tm9kZShwb3Mubm9kZSgpKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4g
dGV4dE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpOwogICAgICAg
ICBpbnNlcnROb2RlQXRUYWJTcGFuUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIHBvcyk7Ci0gICAg
ICAgIHJldHVybiBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgMCk7CisgICAgICAgIHJldHVybiBm
aXJzdFBvc2l0aW9uSW5Ob2RlKHRleHROb2RlLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4g
cG9zOwpAQCAtODMsMjMgKzgzLDI1IEBAIGJvb2wgSW5zZXJ0VGV4dENvbW1hbmQ6OnBlcmZvcm1U
cml2aWFsUmVwbGFjZShjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zCiAgICAgaWYg
KHRleHQuY29udGFpbnMoJ1x0JykgfHwgdGV4dC5jb250YWlucygnICcpIHx8IHRleHQuY29udGFp
bnMoJ1xuJykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBQb3NpdGlvbiBzdGFy
dCA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gZW5kaW5n
U2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgCi0gICAgaWYgKHN0YXJ0Lm5vZGUoKSAhPSBlbmQubm9k
ZSgpIHx8ICFzdGFydC5ub2RlKCktPmlzVGV4dE5vZGUoKSB8fCBpc1RhYlNwYW5UZXh0Tm9kZShz
dGFydC5ub2RlKCkpKQorICAgIFBvc2l0aW9uIHN0YXJ0ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIFBvc2l0aW9uIGVuZCA9IHJhbmdl
Q29tcGxpYW50RXF1aXZhbGVudChlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgQVNTRVJU
KHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KTsKKyAgICBBU1NFUlQoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKTsKKworICAgIGlmIChzdGFydC5jb250YWluZXJOb2RlKCkgIT0gZW5kLmNv
bnRhaW5lck5vZGUoKSB8fCAhc3RhcnQuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2RlKCkgfHwg
aXNUYWJTcGFuVGV4dE5vZGUoc3RhcnQuY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICByZXBsYWNlVGV4dEluTm9kZShzdGF0aWNfY2FzdDxUZXh0
Kj4oc3RhcnQubm9kZSgpKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCB0ZXh0KTsKLSAgICAKLSAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbihzdGFydC5ub2RlKCksIHN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyB0ZXh0Lmxlbmd0aCgpKTsKLSAgICAKKwor
ICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihzdGFydC5jb250YWluZXJO
b2RlKCkpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIC0gc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHRleHQpOworCisgICAg
UG9zaXRpb24gZW5kUG9zaXRpb24oc3RhcnQuY29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVuZ3RoKCkpOworCiAgICAgLy8gV2UgY291bGQgaGF2
ZSBpbnNlcnRlZCBhIHBhcnQgb2YgY29tcG9zZWQgY2hhcmFjdGVyIHNlcXVlbmNlLAogICAgIC8v
IHNvIHdlIGFyZSBiYXNpY2FsbHkgdHJlYXRpbmcgZW5kaW5nIHNlbGVjdGlvbiBhcyBhIHJhbmdl
IHRvIGF2b2lkIHZhbGlkYXRpb24uCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzgxPgogICAgIFZpc2libGVTZWxlY3Rpb24gZm9yY2VkRW5kaW5nU2Vs
ZWN0aW9uOwogICAgIGZvcmNlZEVuZGluZ1NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihz
dGFydCwgZW5kUG9zaXRpb24pOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihmb3JjZWRFbmRpbmdT
ZWxlY3Rpb24pOwotICAgIAorCiAgICAgaWYgKCFzZWxlY3RJbnNlcnRlZFRleHQpCiAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZp
c2libGVFbmQoKSkpOwogICAgIApAQCAtMTcwLDcgKzE3Miw3IEBAIHZvaWQgSW5zZXJ0VGV4dENv
bW1hbmQ6OmlucHV0KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQp
CiAgICAgICAgIGludCBvZmZzZXQgPSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCk7CiAKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIHRl
eHQpOwotICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2RlLCBvZmZzZXQgKyB0
ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZSwg
b2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CiAKICAgICAgICAgLy8gVGhlIGluc2VydGlvbiBtYXkgcmVxdWlyZSBhZGp1c3RpbmcgYWRq
YWNlbnQgd2hpdGVzcGFjZSwgaWYgaXQgaXMgcHJlc2VudC4KICAgICAgICAgcmViYWxhbmNlV2hp
dGVzcGFjZUF0KGVuZFBvc2l0aW9uKTsKQEAgLTIwNyw3ICsyMDksNyBAQCBQb3NpdGlvbiBJbnNl
cnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiAgICAgLy8ga2Vl
cCB0YWJzIGNvYWxlc2NlZCBpbiB0YWIgc3BhbgogICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShu
b2RlKSkgewogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoc3RhdGljX2Nhc3Q8VGV4dCAqPihu
b2RlKSwgb2Zmc2V0LCAiXHQiKTsKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIG9mZnNl
dCArIDEpOworICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgb2Zmc2V0ICsgMSwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgfQogICAgIAogICAgIC8vIGNyZWF0
ZSBuZXcgdGFiIHNwYW4KQEAgLTIzMCw5ICsyMzIsOSBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29t
bWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiAgICAgICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKHNwYW5Ob2RlLCB0ZXh0Tm9kZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisK
ICAgICAvLyByZXR1cm4gdGhlIHBvc2l0aW9uIGZvbGxvd2luZyB0aGUgbmV3IHRhYgotICAgIHJl
dHVybiBQb3NpdGlvbihzcGFuTm9kZS0+bGFzdENoaWxkKCksIGNhcmV0TWF4T2Zmc2V0KHNwYW5O
b2RlLT5sYXN0Q2hpbGQoKSkpOworICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoc3Bhbk5v
ZGUuZ2V0KCkpOwogfQogCiBib29sIEluc2VydFRleHRDb21tYW5kOjppc0luc2VydFRleHRDb21t
YW5kKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggM2ExY2FlMDc5MDA5NDk1MWU3OTJhYjc0Y2U1ZGMyMmY3ZmY0ODc1My4u
MGYyM2IyOWYzNzQ3YWNlZGRkZjNjOGFmZTMxM2M3N2YxZTYzMDk0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTM5LDI1ICszOSwy
MSBAQCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6TW92ZVNlbGVjdGlvbkNvbW1hbmQoUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudAogCiB2b2lkIE1vdmVTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKIHsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVuZGluZ1Nl
bGVjdGlvbigpOwotICAgIEFTU0VSVChzZWxlY3Rpb24uaXNOb25PcnBoYW5lZFJhbmdlKCkpOwor
ICAgIEFTU0VSVChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkUmFuZ2UoKSk7CiAKICAg
ICBQb3NpdGlvbiBwb3MgPSBtX3Bvc2l0aW9uOwogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG90aGVy
d2lzZSBpdCBtYXkgYmVjb21lIGludmFsaWQgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBkZWxldGVk
LgotICAgIE5vZGUgKnBvc2l0aW9uTm9kZSA9IG1fcG9zaXRpb24ubm9kZSgpOwotICAgIGludCBw
b3NpdGlvbk9mZnNldCA9IG1fcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAg
ICBQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgaW50IHNlbGVj
dGlvbkVuZE9mZnNldCA9IHNlbGVjdGlvbkVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwot
ICAgIGlmIChzZWxlY3Rpb25FbmQubm9kZSgpID09IHBvc2l0aW9uTm9kZSAmJiBzZWxlY3Rpb25F
bmRPZmZzZXQgPCBwb3NpdGlvbk9mZnNldCkgewotICAgICAgICBwb3NpdGlvbk9mZnNldCAtPSBz
ZWxlY3Rpb25FbmRPZmZzZXQ7Ci0gICAgICAgIFBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnN0YXJ0KCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGFydC5ub2RlKCkgPT0gcG9z
aXRpb25Ob2RlKSB7Ci0gICAgICAgICAgICBwb3NpdGlvbk9mZnNldCArPSBzZWxlY3Rpb25TdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgICAgICB9Ci0gICAgICAgIHBvcyA9IFBv
c2l0aW9uKHBvc2l0aW9uTm9kZSwgcG9zaXRpb25PZmZzZXQpOworICAgIFBvc2l0aW9uIHNlbGVj
dGlvbkVuZCA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOworICAgIGlmIChwb3MuYW5jaG9yVHlw
ZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc2VsZWN0aW9uRW5k
LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCisgICAg
ICAgICYmIHNlbGVjdGlvbkVuZC5jb250YWluZXJOb2RlKCkgPT0gcG9zLmNvbnRhaW5lck5vZGUo
KSAmJiBzZWxlY3Rpb25FbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBwb3Mub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgcG9zLm1vdmVUb09mZnNldChwb3Mub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgLSBzZWxlY3Rpb25FbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
CisgICAgICAgIFBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKTsKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHNlbGVjdGlvblN0YXJ0LmNvbnRhaW5lck5v
ZGUoKSA9PSBwb3MuY29udGFpbmVyTm9kZSgpKQorICAgICAgICAgICAgcG9zLm1vdmVUb09mZnNl
dChwb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyBzZWxlY3Rpb25TdGFydC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSk7CiAgICAgfQogCiAgICAgZGVsZXRlU2VsZWN0aW9uKG1fc21hcnREZWxl
dGUpOwpAQCAtNzAsMTEgKzY2LDExIEBAIHZvaWQgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICBwb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwogCiAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5h
ZmZpbml0eSgpKSk7Ci0gICAgaWYgKCFwb3NpdGlvbk5vZGUtPmluRG9jdW1lbnQoKSkgeworICAg
IGlmICghcG9zLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIERvY3Vt
ZW50IHdhcyBtb2RpZmllZCBvdXQgZnJvbSB1bmRlciB1cy4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKHBvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwgbV9mcmFnbWVudCwgdHJ1ZSwgbV9zbWFy
dEluc2VydCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9mcmFnbWVudCwgdHJ1ZSwgbV9zbWFydEluc2Vy
dCkpOwogfQogCiBFZGl0QWN0aW9uIE1vdmVTZWxlY3Rpb25Db21tYW5kOjplZGl0aW5nQWN0aW9u
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKaW5kZXggMDQ0Y2U2MzQxMjY5NDdkM2NiYjhlZDVhMmRjYzljNjBkYzgzN2M3
Zi4uZTc4NGFhMzk1N2UwNWU3NWQ0MTVmMmM2NzYyOTkzMDliMDZlZDg4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQ5
NSwxMCArNDk1LDEwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om5lZ2F0ZVN0eWxl
UnVsZXNUaGF0QWZmZWN0QXBwZWFyYW5jZSgpCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKCkKIHsKICAgICBkb2N1bWVudCgpLT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoIW1fbGFzdExl
YWZJbnNlcnRlZC0+cmVuZGVyZXIoKSAmJiAKLSAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkLT5p
c1RleHROb2RlKCkgJiYgCi0gICAgICAgICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbiht
X2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCksIDApLCBzZWxlY3RUYWcpICYmIAotICAgICAgICAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoUG9zaXRpb24obV9sYXN0TGVhZkluc2VydGVkLmdldCgpLCAwKSwg
c2NyaXB0VGFnKSkgeworICAgIGlmICghbV9sYXN0TGVhZkluc2VydGVkLT5yZW5kZXJlcigpCisg
ICAgICAgICYmIG1fbGFzdExlYWZJbnNlcnRlZC0+aXNUZXh0Tm9kZSgpCisgICAgICAgICYmICFl
bmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9sYXN0TGVh
Zkluc2VydGVkLmdldCgpKSwgc2VsZWN0VGFnKQorICAgICAgICAmJiAhZW5jbG9zaW5nTm9kZVdp
dGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG1fbGFzdExlYWZJbnNlcnRlZC5nZXQo
KSksIHNjcmlwdFRhZykpIHsKICAgICAgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbV9s
YXN0TGVhZkluc2VydGVkKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG1fbGFzdExlYWZJbnNl
cnRlZC5nZXQoKSk7CiAgICAgICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSAwOwpAQCAtNzQy
LDcgKzc0Miw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlRW5kSWZOZWVk
ZWQoKQogICAgIGlmIChlbmRPZlBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKSA9PSBk
ZXN0aW5hdGlvbikgewogICAgICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBjcmVhdGVC
cmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUocGxhY2Vo
b2xkZXIsIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwot
ICAgICAgICBkZXN0aW5hdGlvbiA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihwbGFjZWhvbGRl
ci5nZXQoKSwgMCkpOworICAgICAgICBkZXN0aW5hdGlvbiA9IFZpc2libGVQb3NpdGlvbihwb3Np
dGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIuZ2V0KCkpKTsKICAgICB9CiAKICAgICBtb3ZlUGFy
YWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUpLCBkZXN0aW5hdGlvbik7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBpZiAoaXNM
aXN0SXRlbShlbmNsb3NpbmdOb2RlKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9k
ZT4gbmV3TGlzdEl0ZW0gPSBjcmVhdGVMaXN0SXRlbUVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdMaXN0SXRlbSwgZW5jbG9zaW5nTm9k
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obmV3TGlzdEl0ZW0sIDApKSk7CisgICAgICAgICAgICAgICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShuZXdMaXN0
SXRlbS5nZXQoKSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgLy8gVXNlIGEgZGVmYXVsdCBwYXJhZ3JhcGggZWxlbWVudCAoYSBwbGFpbiBkaXYpIGZvciB0
aGUgZW1wdHkgcGFyYWdyYXBoLCB1c2luZyB0aGUgbGFzdCBwYXJhZ3JhcGgKICAgICAgICAgICAg
ICAgICAgICAgLy8gYmxvY2sncyBzdHlsZSBzZWVtcyB0byBhbm5veSB1c2Vycy4KQEAgLTExMjMs
NyArMTEyMyw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZFJlbW92ZUVu
ZEJSKE5vZGUqIGVuZEJSLCBjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgaWYgKCFlbmRCUiB8fCAh
ZW5kQlItPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhQb3NpdGlvbihlbmRCUiwgMCkpOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHBvc2l0aW9uQmVmb3JlTm9kZShlbmRCUikpOwogICAg
IAogICAgIC8vIERvbid0IHJlbW92ZSB0aGUgYnIgaWYgbm90aGluZyB3YXMgaW5zZXJ0ZWQuCiAg
ICAgaWYgKHZpc2libGVQb3MucHJldmlvdXMoKSA9PSBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJS
KQpAQCAtMTI2MCw3ICsxMjYwLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cGVy
Zm9ybVRyaXZpYWxSZXBsYWNlKGNvbnN0IFJlcGxhY2VtZW50RnJhZ21lbnQmIGYKIHsKICAgICBp
ZiAoIWZyYWdtZW50LmZpcnN0Q2hpbGQoKSB8fCBmcmFnbWVudC5maXJzdENoaWxkKCkgIT0gZnJh
Z21lbnQubGFzdENoaWxkKCkgfHwgIWZyYWdtZW50LmZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9kZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgLy8gRklYTUU6IFdvdWxk
IGJlIG5pY2UgdG8gaGFuZGxlIHNtYXJ0IHJlcGxhY2UgaW4gdGhlIGZhc3QgcGF0aC4KICAgICBp
ZiAobV9zbWFydFJlcGxhY2UgfHwgZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFy
dCgpIHx8IGZyYWdtZW50Lmhhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTEyNjksMjAgKzEyNjksMjIgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKGNvbnN0IFJlcGxhY2VtZW50RnJhZ21lbnQm
IGYKICAgICAvLyBPdXIgZnJhZ21lbnQgY3JlYXRpb24gY29kZSBoYW5kbGVzIHRhYnMsIHNwYWNl
cywgYW5kIG5ld2xpbmVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRob3NlIGhl
cmUuCiAgICAgU3RyaW5nIHRleHQodGV4dE5vZGUtPmRhdGEoKSk7CiAgICAgCi0gICAgUG9zaXRp
b24gc3RhcnQgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFBvc2l0aW9uIGVuZCA9
IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwotICAgIAotICAgIGlmIChzdGFydC5hbmNob3JOb2Rl
KCkgIT0gZW5kLmFuY2hvck5vZGUoKSB8fCAhc3RhcnQuYW5jaG9yTm9kZSgpLT5pc1RleHROb2Rl
KCkpCisgICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUG9zaXRpb24gZW5kID0gcmFuZ2VDb21wbGlhbnRF
cXVpdmFsZW50KGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBBU1NFUlQoc3RhcnQuYW5j
aG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIEFT
U0VSVChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworCisgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSAhPSBlbmQuY29udGFpbmVyTm9k
ZSgpIHx8ICFzdGFydC5jb250YWluZXJOb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICByZXBsYWNlVGV4dEluTm9kZShzdGF0aWNfY2FzdDxU
ZXh0Kj4oc3RhcnQuYW5jaG9yTm9kZSgpKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCB0ZXh0KTsKLSAgICAKLSAgICBlbmQgPSBQb3NpdGlvbihzdGFydC5hbmNob3JOb2RlKCks
IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgdGV4dC5sZW5ndGgoKSk7Ci0gICAgCisK
KyAgICByZXBsYWNlVGV4dEluTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuY29udGFpbmVy
Tm9kZSgpKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCB0ZXh0KTsKKworICAg
IGVuZCA9IFBvc2l0aW9uKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKTsKKwogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJSZXBsYWNlKG1f
c2VsZWN0UmVwbGFjZW1lbnQgPyBzdGFydCA6IGVuZCwgZW5kKTsKLSAgICAKKwogICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclJlcGxhY2UpOwotICAgIAorCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IDQ0MDZiNDEyYWI1M2I1MmMyZjIzYWY4YmRmOWIyMWVkNmZhZWU0NjkuLjA5
MmQyMmIyZWNhZGI5MGNjMTE2YzVlNDM2NDY2NGEwOWFkNWFmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtMTc1NSw3ICsxNzU1LDcg
QEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiAgICAg
d2hpbGUgKG5vZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCiAgICAgICAgIG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgaWYgKG5vZGUpCi0gICAgICAgIHNldFNl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5vZGUsIDApLCBET1dOU1RSRUFNKSk7
CisgICAgICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSkpOwogfQogCiBib29sIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5k
ZXggMTgwNzQ3NGI3NTM4NmJlNzcyMWVjOGRlZTMwZDk5MzA3YjEwMWUyNi4uZjE0YTc0ZDY3NjQz
ZjI3ODdjNDBlNDE3ODBiN2M3NzFhMTM5OGEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRD
aGVjayhpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxTcGVsbENoZWNraW5nUmVzdWx0PiYgcmVz
CiAgICAgfQogCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICBQb3NpdGlvbkl0ZXJhdG9y
IHN0YXJ0ID0gUG9zaXRpb24obV9yZXF1ZXN0Tm9kZSwgMCk7CisgICAgUG9zaXRpb25JdGVyYXRv
ciBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX3JlcXVlc3ROb2RlLmdldCgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKHJlc3VsdHNbaV0udHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyAm
JiByZXN1bHRzW2ldLnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcikKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5k
ZXggZDU0YjM4ODViZjk4ZmU1MmJkOWE2NWM1NGE4ZDcxZDk2NzYwN2U5ZC4uOTIwNzUwY2RkODUw
MzI1YzRkODg5OTc0ZTY0Yzc0MTVkNTEyZjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCkBAIC00MzEsNyArNDMxLDcgQEAgYm9vbCBUeXBpbmdDb21tYW5kOjpt
YWtlRWRpdGFibGVSb290RW1wdHkoKQogICAgICAgICByZW1vdmVOb2RlKGNoaWxkKTsKIAogICAg
IGFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChyb290KTsKLSAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihyb290LCAwKSwgRE9XTlNUUkVBTSkpOworICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUo
cm9vdCksIERPV05TVFJFQU0pKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDkwLDcgKzQ5
MCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiAgICAgICAgICAgICBzZWxlY3Rpb24ubW9k
aWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3
YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVy
IGEgdGFibGUsIHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAg
ICAgICAgfSBlbHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUo
dmlzaWJsZVN0YXJ0KSkgewotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oUG9zaXRpb24odGFibGUsIDApLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBE
T1dOU1RSRUFNKSk7CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihwb3NpdGlvbkFmdGVyTm9kZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCks
IERPV05TVFJFQU0pKTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxl
dGVLZXkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01OTEsNyArNTkxLDcg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAgICAgICAgICAgZXh0cmFDaGFy
YWN0ZXJzID0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGV4dHJhQ2hhcmFjdGVy
cyA9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0g
ICAgICAgICAgICAgICAgZXh0ZW50ID0gUG9zaXRpb24oZXh0ZW50Lm5vZGUoKSwgZXh0ZW50LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBleHRyYUNoYXJhY3RlcnMpOworICAgICAgICAgICAg
ICAgIGV4dGVudCA9IFBvc2l0aW9uKGV4dGVudC5ub2RlKCksIGV4dGVudC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpICsgZXh0cmFDaGFyYWN0ZXJzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlbGVjdGlvbkFmdGVyVW5k
by5zZXRXaXRob3V0VmFsaWRhdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGV4dGVu
dCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA0Y2JkY2NlZWVj
NThhNDRjZTI3NjExMmFkYzQ1MjEyMzgwZDRlOTVhLi41NDljODE2ZTMyODhiZWExMjVjNTNjNjEy
NmMwM2I2ZGQ0YjUyYTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0xOTQsNyAr
MTk0LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8
VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBi
b29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbih0ZXh0
LCAwKSwgc2VsZWN0VGFnKTsKKyAgICBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdO
b2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHQpLCBzZWxlY3RUYWcpOwogICAgIFN0
cmluZyBjb250ZW50ID0gdXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KHRleHQsIG1fcmFu
Z2UpIDogc3RyaW5nVmFsdWVGb3JSYW5nZSh0ZXh0LCBtX3JhbmdlKTsKICAgICBWZWN0b3I8VUNo
YXI+IGJ1ZmZlcjsKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVy
LCBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29udGVudC5sZW5ndGgoKSwgRW50aXR5TWFza0luUENE
QVRBKTsKQEAgLTMzNyw3ICszMzcsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
c2VyaWFsaXplTm9kZXMoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5kKQogICAgICAgICAg
ICAgLy8gRG9uJ3Qgd3JpdGUgb3V0IGVtcHR5IGJsb2NrIGNvbnRhaW5lcnMgdGhhdCBhcmVuJ3Qg
ZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIW4t
PnJlbmRlcmVyKCkgJiYgIWVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9uKG4sIDApLCBzZWxl
Y3RUYWcpKSB7CisgICAgICAgIGlmICghbi0+cmVuZGVyZXIoKSAmJiAhZW5jbG9zaW5nTm9kZVdp
dGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG4pLCBzZWxlY3RUYWcpKSB7CiAgICAg
ICAgICAgICBuZXh0ID0gbi0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgICAgICAgICAgLy8g
RG9uJ3Qgc2tpcCBvdmVyIHBhc3RFbmQuCiAgICAgICAgICAgICBpZiAocGFzdEVuZCAmJiBwYXN0
RW5kLT5pc0Rlc2NlbmRhbnRPZihuKSkKQEAgLTQ5NSw3ICs0OTUsNyBAQCBzdGF0aWMgTm9kZSog
aGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgTm9kZSogZnVs
bHlTZWxlY3RlZAogCiAgICAgTm9kZSogY2hlY2tBbmNlc3RvciA9IHNwZWNpYWxDb21tb25BbmNl
c3RvciA/IHNwZWNpYWxDb21tb25BbmNlc3RvciA6IGNvbW1vbkFuY2VzdG9yOwogICAgIGlmIChj
aGVja0FuY2VzdG9yLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIE5vZGUqIG5ld1NwZWNpYWxDb21t
b25BbmNlc3RvciA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKFBvc2l0aW9uKGNoZWNrQW5j
ZXN0b3IsIDApLCAmaXNFbGVtZW50UHJlc2VudGF0aW9uYWwpOworICAgICAgICBOb2RlKiBuZXdT
cGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBv
c2l0aW9uSW5Ob2RlKGNoZWNrQW5jZXN0b3IpLCAmaXNFbGVtZW50UHJlc2VudGF0aW9uYWwpOwog
ICAgICAgICBpZiAobmV3U3BlY2lhbENvbW1vbkFuY2VzdG9yKQogICAgICAgICAgICAgc3BlY2lh
bENvbW1vbkFuY2VzdG9yID0gbmV3U3BlY2lhbENvbW1vbkFuY2VzdG9yOwogICAgIH0KQEAgLTUw
OSw3ICs1MDksNyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwKGNv
bnN0IFJhbmdlKiByYW5nZSwgTm9kZSogZnVsbHlTZWxlY3RlZAogICAgIGlmICghc3BlY2lhbENv
bW1vbkFuY2VzdG9yICYmIGlzVGFiU3Bhbk5vZGUoY29tbW9uQW5jZXN0b3IpKQogICAgICAgICBz
cGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3RvcjsKIAotICAgIGlmIChOb2RlICpl
bmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbihzcGVjaWFsQ29t
bW9uQW5jZXN0b3IgPyBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgOiBjb21tb25BbmNlc3RvciwgMCks
IGFUYWcpKQorICAgIGlmIChOb2RlICplbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdOb2RlV2l0
aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKHNwZWNpYWxDb21tb25BbmNlc3RvciA/IHNwZWNpYWxD
b21tb25BbmNlc3RvciA6IGNvbW1vbkFuY2VzdG9yKSwgYVRhZykpCiAgICAgICAgIHNwZWNpYWxD
b21tb25BbmNlc3RvciA9IGVuY2xvc2luZ0FuY2hvcjsKIAogICAgIGlmIChzaG91bGRBbm5vdGF0
ZSA9PSBBbm5vdGF0ZUZvckludGVyY2hhbmdlICYmIGZ1bGx5U2VsZWN0ZWRSb290KSB7CkBAIC01
NzksNyArNTc5LDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZl
Y3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmMKICAgICAgICAgfQogICAgIH0K
IAotICAgIE5vZGUqIGJvZHkgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbihjb21tb25B
bmNlc3RvciwgMCksIGJvZHlUYWcpOworICAgIE5vZGUqIGJvZHkgPSBlbmNsb3NpbmdOb2RlV2l0
aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkFuY2VzdG9yKSwgYm9keVRhZyk7CiAgICAg
Tm9kZSogZnVsbHlTZWxlY3RlZFJvb3QgPSAwOwogICAgIC8vIEZJWE1FOiBEbyB0aGlzIGZvciBh
bGwgZnVsbHkgc2VsZWN0ZWQgYmxvY2tzLCBub3QganVzdCB0aGUgYm9keS4KICAgICBpZiAoYm9k
eSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVu
dHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmFuZ2UpKQo=
</data>
<flag name="review"
          id="70760"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>