<?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>68874</bug_id>
          
          <creation_ts>2011-09-27 00:23:51 -0700</creation_ts>
          <short_desc>Replace m_firstNodeInserted and m_lastLeafInserted in ReplaceSelectionCommand by positions</short_desc>
          <delta_ts>2011-10-03 16:04:39 -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>HTML Editing</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>
          <dependson>68866</dependson>
    
    <dependson>68875</dependson>
    
    <dependson>68939</dependson>
    
    <dependson>69023</dependson>
    
    <dependson>69153</dependson>
          <blocked>45784</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>sullivan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>473733</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 00:23:51 -0700</bug_when>
    <thetext>As mentioned in several FIXMEs in ReplaceSelectionCommand, m_firstNodeInserted and m_lastLeafInserted should be replaced by real positions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476320</commentid>
    <comment_count>1</comment_count>
      <attachid>109349</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-30 14:32:36 -0700</bug_when>
    <thetext>Created attachment 109349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476321</commentid>
    <comment_count>2</comment_count>
      <attachid>109350</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-30 14:34:41 -0700</bug_when>
    <thetext>Created attachment 109350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476322</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 14:35:56 -0700</bug_when>
    <thetext>Attachment 109349 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/ChangeLog:20:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:21:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476323</commentid>
    <comment_count>4</comment_count>
      <attachid>109350</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-30 14:36:01 -0700</bug_when>
    <thetext>Comment on attachment 109350
Patch

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:1001
&gt; +    // Setup m_startOfInsertedContent and m_endOfInsertedContent. This should be the last two lines of code that access insertedNodes.

We can do a follow up patch that puts the entire section that uses insertedNodes in a block to enforce this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477250</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 14:38:48 -0700</bug_when>
    <thetext>Any reviewers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477305</commentid>
    <comment_count>6</comment_count>
      <attachid>109350</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-10-03 15:53:14 -0700</bug_when>
    <thetext>Comment on attachment 109350
Patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477312</commentid>
    <comment_count>7</comment_count>
      <attachid>109350</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 16:04:35 -0700</bug_when>
    <thetext>Comment on attachment 109350
Patch

Clearing flags on attachment: 109350

Committed r96553: &lt;http://trac.webkit.org/changeset/96553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477313</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-03 16:04:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109349</attachid>
            <date>2011-09-30 14:32:36 -0700</date>
            <delta_ts>2011-09-30 14:33:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68874-20110930143235.patch</filename>
            <type>text/plain</type>
            <size>21754</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NDI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDktMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBtX2ZpcnN0Tm9kZUlu
c2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaW4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQg
YnkgcG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlcGxhY2VkIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgYW5kIG1fbGFzdExlYWZJbnNlcnRlZCBi
eSBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgYW5kIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQKKyAg
ICAgICAgcmVzcGVjdGl2ZWx5LiBBbHNvIHJlbW92ZWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbiBhbmQgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzIGluIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kCisgICAgICAgIGJlY2F1c2UgdGhleSB3ZXJlIG5vdCB2aXJ0dWFsIGluIENvbXBvc2l0
ZUVkaXRDb21tYW5kIGFuZCBpbXBsaWNpdGx5IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9ucyB3YXMg
Y29uZnVzaW5nLgorICAgICAgICBTaW5jZSBlYWNoIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMg
dXNlZCBhdCBleGFjdGx5IG9uZSBwbGFjZSwganVzdCB1cGRhdGUgcG9zaXRpb25zIGFuZCBpbnNl
cnRlZE5vZGVzIGV4cGxpY2l0bHkuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJl
bmRlcmVkVGV4dE5vZGVzQXRFbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjptZXJnZUVuZElmTmVlZGVkKTogVXBkYXRlIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgYnkgZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpCisJaW5zdGVhZCBvZiBtX2xhc3RMZWFmSW5zZXJ0
ZWQgd2l0aCBkZXN0aW5hdGlvbi5wcmV2aW91cygpIGJlY2F1c2UgbW92ZVBhcmFncmFwaCBjb3Vs
ZCBoYXZlIHJlbW92ZWQgbGVhZGluZyB3aGl0ZXNwYWNlIGluCisJdGhlIHRleHQgbm9kZSByZWZl
cmVuY2VkIGJ5IGRlc3RpbmF0aW9uLiBUaGlzIGlzIHRlc3RlZCBieSBhbiBleGlzdGluZyBsYXlv
dXQgdGVzdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0Fw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFj
ZXNGb3JTbWFydFJlcGxhY2UpOiBVcGRhdGUgcG9zaXRpb25zIGFzIG5lZWRlZC4gQWxsIGNoYW5n
ZXMgYXJlIHRlc3RlZAorICAgICAgICBieSB0aGUgZXhpc3RpbmcgbGF5b3V0IHRlc3RzIGluIGVk
aXRpbmcvcGFzdGVib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjp1cGRhdGVOb2Rlc0luc2VydGVkKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KTogTW92ZWQgZnJvbSBDb21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpoaWdoZXN0Tm9kZVRvUmVtb3Zl
SW5QcnVuaW5nKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAy
MDExLTA5LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxNjcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA5
NjQyMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMzQgKzI0Nyw2IEBAIEhUTUxFbGVtZW50KiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVwbGEKICAgICByZXR1cm4gY29tbWFuZC0+c3BhbkVsZW1lbnQoKTsK
IH0KIAotc3RhdGljIGJvb2wgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChOb2RlKiBub2RlLCBOb2Rl
KiBleGNsdWRlZE5vZGUpCi17Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBuOykgewotICAgICAgICBpZiAobiA9PSBleGNsdWRlZE5vZGUpIHsKLSAgICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKG5vZGUpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG4tPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSk7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIE5vZGUqIGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBy
dW5pbmcoTm9kZSogbm9kZSkKLXsKLSAgICBOb2RlKiBwcmV2aW91c05vZGUgPSAwOwotICAgIE5v
ZGUqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpIDogMDsKLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewot
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsK
LSAgICAgICAgICAgIGlmICghcmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpIHx8IGhhc0FSZW5k
ZXJlZERlc2NlbmRhbnQobm9kZSwgcHJldmlvdXNOb2RlKSB8fCByb290RWRpdGFibGVFbGVtZW50
ID09IG5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzTm9kZTsKLSAgICAgICAg
fQotICAgICAgICBwcmV2aW91c05vZGUgPSBub2RlOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0K
LQogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUoUGFzc1JlZlB0cjxOb2RlPiBub2Rl
KQogewogICAgIGlmIChSZWZQdHI8Tm9kZT4gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IGhpZ2hlc3RO
b2RlVG9SZW1vdmVJblBydW5pbmcobm9kZS5nZXQoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gOTY0
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDMzICs0NDIsNiBAQCBzdGF0aWMgYm9vbCBpc01haWxQ
YXN0ZUFzUXVvdGF0aW9uTm9kZShjCiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFt
ZShibG9ja3F1b3RlVGFnKSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8
Y29uc3QgRWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBBcHBsZVBh
c3RlQXNRdW90YXRpb247CiB9CiAKLS8vIFdyYXAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKSBzbyB3ZSBjYW4gdXBkYXRlIHRoZSBub2RlcyB3ZSB0
cmFjawotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbihOb2RlKiBub2RlKQotewotICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG5v
ZGUpCi0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7Ci0gICAgaWYgKG1fbGFzdExlYWZJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2xhc3RM
ZWFmSW5zZXJ0ZWQgPSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogbm9k
ZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwotICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwotfQotCi0vLyBXcmFwIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKSBzbyB3ZSBjYW4gdXBkYXRl
IHRoZSBub2RlcyB3ZSB0cmFjawotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
Tm9kZUFuZFBydW5lQW5jZXN0b3JzKE5vZGUqIG5vZGUpCi17Ci0gICAgLy8gcHJlcGFyZSBpbiBj
YXNlIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgYW5kL29yIG1fbGFzdExlYWZJbnNlcnRlZCBnZXQgcmVt
b3ZlZAotICAgIC8vIEZJWE1FOiBzaG91bGRuJ3QgbV9sYXN0TGVhZkluc2VydGVkIGJlIGFkanVz
dGVkIHVzaW5nIHRyYXZlcnNlUHJldmlvdXNOb2RlKCk/Ci0gICAgTm9kZSogYWZ0ZXJGaXJzdCA9
IG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPyBtX2ZpcnN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCkgOiAwOwotICAgIE5vZGUqIGFmdGVyTGFzdCA9IG1fbGFzdExlYWZJbnNlcnRlZCA/
IG1fbGFzdExlYWZJbnNlcnRlZC0+dHJhdmVyc2VOZXh0U2libGluZygpIDogMDsKLSAgICAKLSAg
ICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG5vZGUp
OwotICAgIAotICAgIC8vIGFkanVzdCBtX2ZpcnN0Tm9kZUluc2VydGVkIGFuZCBtX2xhc3RMZWFm
SW5zZXJ0ZWQgc2luY2UgZWl0aGVyIG9yIGJvdGggbWF5IGhhdmUgYmVlbiByZW1vdmVkCi0gICAg
aWYgKG1fbGFzdExlYWZJbnNlcnRlZCAmJiAhbV9sYXN0TGVhZkluc2VydGVkLT5pbkRvY3VtZW50
KCkpCi0gICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGFmdGVyTGFzdDsKLSAgICBpZiAobV9m
aXJzdE5vZGVJbnNlcnRlZCAmJiAhbV9maXJzdE5vZGVJbnNlcnRlZC0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gbV9sYXN0TGVhZkluc2VydGVkICYmIG1fbGFz
dExlYWZJbnNlcnRlZC0+aW5Eb2N1bWVudCgpID8gYWZ0ZXJGaXJzdCA6IDA7Ci19Ci0KIHN0YXRp
YyBib29sIGlzSGVhZGVyRWxlbWVudChOb2RlKiBhKQogewogICAgIGlmICghYSkKQEAgLTU4Miw3
ICs1NTUsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlCiAgICAg
ICAgIHJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7CiAgICAgfQogCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBtX2ZpcnN0Tm9kZUluc2VydGVkIGlzbid0IGluc2lk
ZSBhIHNlbGVjdCBvciBzY3JpcHQgZWxlbWVudCwgYmVjYXVzZQorICAgIC8vIFdlIGRvbid0IGhh
dmUgdG8gbWFrZSBzdXJlIHRoYXQgZmlyc3ROb2RlSW5zZXJ0ZWQgaXNuJ3QgaW5zaWRlIGEgc2Vs
ZWN0IG9yIHNjcmlwdCBlbGVtZW50LCBiZWNhdXNlCiAgICAgLy8gaXQgaXMgYSB0b3AgbGV2ZWwg
bm9kZSBpbiB0aGUgZnJhZ21lbnQgYW5kIHRoZSB1c2VyIGNhbid0IGluc2VydCBpbnRvIHRob3Nl
IGVsZW1lbnRzLgogICAgIE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5m
aXJzdE5vZGVJbnNlcnRlZCgpOwogICAgIGxhc3RMZWFmSW5zZXJ0ZWQgPSBpbnNlcnRlZE5vZGVz
Lmxhc3RMZWFmSW5zZXJ0ZWQoKTsKQEAgLTU5NCwxNyArNTY3LDE0IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmUKIAogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdAogewot
ICAgIE5vZGUqIGxhc3ROb2RlID0gbV9sYXN0TGVhZkluc2VydGVkLmdldCgpOwogICAgIC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2VsZWN0
PiB0YWdzPwotICAgIE5vZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFn
KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShsYXN0Tm9kZSksIHNlbGVjdFRhZyk7Ci0gICAg
aWYgKGVuY2xvc2luZ1NlbGVjdCkKLSAgICAgICAgbGFzdE5vZGUgPSBlbmNsb3NpbmdTZWxlY3Q7
Ci0gICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobGFzdE5vZGUpOworICAgIE5v
ZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKG1fZW5kT2ZJbnNlcnRl
ZENvbnRlbnQsIHNlbGVjdFRhZyk7CisgICAgcmV0dXJuIGVuY2xvc2luZ1NlbGVjdCA/IGxhc3RQ
b3NpdGlvbkluT3JBZnRlck5vZGUoZW5jbG9zaW5nU2VsZWN0KSA6IG1fZW5kT2ZJbnNlcnRlZENv
bnRlbnQ7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9z
aXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CisgICAg
cmV0dXJuIG1fc3RhcnRPZkluc2VydGVkQ29udGVudDsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3Zl
SGVhZENvbnRlbnRzKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50KQpAQCAtNjYwLDEzICs2
MzAsMTMgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydAogLy8gV2Ug
c2hvdWxkIHJlbW92ZSB0aGUgQXBwbGUtc3R5bGUtc3BhbiBjbGFzcyB3aGVuIHdlJ3JlIGRvbmUs
IHNlZSA8cmRhcjovL3Byb2JsZW0vNTY4NTYwMD4uCiAvLyBXZSBzaG91bGQgcmVtb3ZlIHN0eWxl
cyBmcm9tIHNwYW5zIHRoYXQgYXJlIG92ZXJyaWRkZW4gYnkgYWxsIG9mIHRoZWlyIGNoaWxkcmVu
LCBlaXRoZXIgaGVyZQogLy8gb3IgYXQgY29weSB0aW1lLgotdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhOb2RlKiBmaXJzdE5vZGVJbnNlcnRlZCkKK3ZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMoSW5zZXJ0ZWROb2RlcyYg
aW5zZXJ0ZWROb2RlcykKIHsKICAgICBIVE1MRWxlbWVudCogd3JhcHBpbmdTdHlsZVNwYW4gPSAw
OwogICAgIC8vIFRoZSBzdHlsZSBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBkb2N1bWVu
dCdzIGRlZmF1bHQgc3R5bGUgc2hvdWxkIGJlIGF0CiAgICAgLy8gdGhlIHRvcCBvZiB0aGUgZnJh
Z21lbnQsIGJ1dCBNYWlsIHNvbWV0aW1lcyBhZGRzIGEgd3JhcHBlciAoZm9yIFBhc3RlIEFzIFF1
b3RhdGlvbiksCiAgICAgLy8gc28gc2VhcmNoIGZvciB0aGUgdG9wIGxldmVsIHN0eWxlIHNwYW4g
aW5zdGVhZCBvZiBhc3N1bWluZyBpdCdzIGF0IHRoZSB0b3AuCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3ROb2RlSW5zZXJ0ZWQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2Vy
dGVkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAg
aWYgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4obm9kZSkpIHsKICAgICAgICAgICAgIHdyYXBwaW5n
U3R5bGVTcGFuID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
Njk3LDkgKzY2NywxMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHls
CiAgICAgLy8gd2l0aCBibG9jayBzdHlsZXMgYnkgdGhlIGVkaXRpbmcgZW5naW5lIHVzZWQgdG8g
c3R5bGUgdGhlbS4gIFdlYktpdCBkb2Vzbid0IGRvIHRoaXMsIGJ1dCBvdGhlcnMgbWlnaHQuCiAg
ICAgc3R5bGUtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogCi0gICAgaWYgKHN0eWxlLT5pc0Vt
cHR5KCkgfHwgIXdyYXBwaW5nU3R5bGVTcGFuLT5maXJzdENoaWxkKCkpCisgICAgaWYgKHN0eWxl
LT5pc0VtcHR5KCkgfHwgIXdyYXBwaW5nU3R5bGVTcGFuLT5maXJzdENoaWxkKCkpIHsKKyAgICAg
ICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGlu
Z1N0eWxlU3Bhbik7CiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBp
bmdTdHlsZVNwYW4pOwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgc2V0Tm9kZUF0dHJp
YnV0ZSh3cmFwcGluZ1N0eWxlU3Bhbiwgc3R5bGVBdHRyLCBzdHlsZS0+c3R5bGUoKS0+Y3NzVGV4
dCgpKTsKIH0KIApAQCAtNzM2LDE4ICs3MDcsMTQgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6bWVyZ2VFbmRJZgogCiAgICAgbW92ZVBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLCBlbmRPZlBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKSwgZGVzdGluYXRpb24p
OwogICAgIAotICAgIC8vIE1lcmdpbmcgZm9yd2FyZCB3aWxsIHJlbW92ZSBtX2xhc3RMZWFmSW5z
ZXJ0ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAgLy8gRklYTUU6IE1haW50YWluIHBvc2l0aW9u
cyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgaW5zZXJ0ZWQgY29udGVudCBpbnN0ZWFkIG9mIGtl
ZXBpbmcgbm9kZXMuICBUaGUgbm9kZXMgYXJlCi0gICAgLy8gb25seSBldmVyIHVzZWQgdG8gY3Jl
YXRlIHBvc2l0aW9ucyB3aGVyZSBpbnNlcnRlZCBjb250ZW50IHN0YXJ0cy9lbmRzLiAgQWxzbywg
d2Ugc29tZXRpbWVzIGluc2VydCBjb250ZW50Ci0gICAgLy8gZGlyZWN0bHkgaW50byB0ZXh0IG5v
ZGVzIGFscmVhZHkgaW4gdGhlIGRvY3VtZW50LCBpbiB3aGljaCBjYXNlIHRyYWNraW5nIGluc2Vy
dGVkIG5vZGVzIGlzIGluYWRlcXVhdGUuCisgICAgLy8gTWVyZ2luZyBmb3J3YXJkIHdpbGwgcmVt
b3ZlIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgaWYgKG1l
cmdlRm9yd2FyZCkgewotICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBkZXN0aW5hdGlvbi5w
cmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAgaWYg
KCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5pbkRvY3VtZW50KCkpCi0gICAgICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICAvLyBJZiB3ZSBtZXJnZWQgdGV4dCBu
b2RlcywgbV9sYXN0TGVhZkluc2VydGVkIGNvdWxkIGJlIG51bGwuIElmIHRoaXMgaXMgdGhlIGNh
c2UsCi0gICAgICAgIC8vIHdlIHVzZSBtX2ZpcnN0Tm9kZUluc2VydGVkLgotICAgICAgICBpZiAo
IW1fbGFzdExlYWZJbnNlcnRlZCkKLSAgICAgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQ7CisgICAgICAgIGlmIChtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQu
aXNPcnBoYW4oKSkKKyAgICAgICAgICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCA9IGVuZGlu
Z1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICBt
X2VuZE9mSW5zZXJ0ZWRDb250ZW50ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgICAgIC8vIElmIHdlIG1lcmdlZCB0ZXh0IG5vZGVzLCBtX2Vu
ZE9mSW5zZXJ0ZWRDb250ZW50IGNvdWxkIGJlIG51bGwuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdl
IHVzZSBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuCisgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0
ZWRDb250ZW50LmlzTnVsbCgpKQorICAgICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudCA9
IG1fc3RhcnRPZkluc2VydGVkQ29udGVudDsKICAgICB9CiB9CiAKQEAgLTk2NSw4ICs5MzIsNiBA
QCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBpbmNvbWlu
ZyBmcmFnbWVudC4KICAgICAvLyA1KSBBZGQgc3BhY2VzIGZvciBzbWFydCByZXBsYWNlLgogICAg
IC8vIDYpIFNlbGVjdCB0aGUgcmVwbGFjZW1lbnQgaWYgcmVxdWVzdGVkLCBhbmQgbWF0Y2ggc3R5
bGUgaWYgcmVxdWVzdGVkLgotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mSW5zZXJ0
ZWRDb250ZW50LCBlbmRPZkluc2VydGVkQ29udGVudDsKIAogICAgIEluc2VydGVkTm9kZXMgaW5z
ZXJ0ZWROb2RlczsKICAgICBSZWZQdHI8Tm9kZT4gcmVmTm9kZSA9IGZyYWdtZW50LmZpcnN0Q2hp
bGQoKTsKQEAgLTEwMDgsMzcgKzk3Myw0MiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKICAgICByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKGluc2VydGVkTm9kZXMpOwogCiAgICAgcmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5k
cyhpbnNlcnRlZE5vZGVzKTsKLSAgICAKLSAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gaW5zZXJ0
ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOwotICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGlu
c2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpOwogCiAgICAgaWYgKCFoYW5kbGVkU3R5bGVT
cGFucykKLSAgICAgICAgaGFuZGxlU3R5bGVTcGFucyhtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgp
KTsKKyAgICAgICAgaGFuZGxlU3R5bGVTcGFucyhpbnNlcnRlZE5vZGVzKTsKIAogICAgIC8vIE11
dGF0aW9uIGV2ZW50cyAoYnVnIDIwMTYxKSBtYXkgaGF2ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGlu
c2VydGVkIGNvbnRlbnQKLSAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQgfHwgIW1fZmlyc3RO
b2RlSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoIWluc2VydGVkTm9kZXMuZmlyc3RO
b2RlSW5zZXJ0ZWQoKSB8fCAhaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpLT5pbkRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBlbmRPZkluc2VydGVkQ29udGVu
dCA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpOwotICAgIHN0YXJ0T2ZJbnNlcnRl
ZENvbnRlbnQgPSBwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpOwotICAgIAorCisg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUoaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpKTsKKwogICAg
IC8vIFdlIGluc2VydGVkIGJlZm9yZSB0aGUgc3RhcnRCbG9jayB0byBwcmV2ZW50IG5lc3Rpbmcs
IGFuZCB0aGUgY29udGVudCBiZWZvcmUgdGhlIHN0YXJ0QmxvY2sgd2Fzbid0IGluIGl0cyBvd24g
YmxvY2sgYW5kCiAgICAgLy8gZGlkbid0IGhhdmUgYSBiciBhZnRlciBpdCwgc28gdGhlIGluc2Vy
dGVkIGNvbnRlbnQgZW5kZWQgdXAgaW4gdGhlIHNhbWUgcGFyYWdyYXBoLgogICAgIGlmIChzdGFy
dEJsb2NrICYmIGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpID09IHN0YXJ0QmxvY2stPnBh
cmVudE5vZGUoKSAmJiAodW5zaWduZWQpaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgPCBzdGFydEJsb2NrLT5ub2RlSW5kZXgoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQpKQogICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtF
bGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBzdGFydE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVp
dmFsZW50KCkpOwogCi0gICAgYm9vbCBpbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCA9IGZyYWdtZW50
Lmhhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5kKCk7CisgICAgaWYgKGVuZEJSICYmIChwbGFpblRl
eHRGcmFnbWVudCB8fCBzaG91bGRSZW1vdmVFbmRCUihlbmRCUiwgb3JpZ2luYWxWaXNQb3NCZWZv
cmVFbmRCUikpKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBwYXJlbnQgPSBlbmRCUi0+cGFyZW50
Tm9kZSgpOworICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKGVuZEJSKTsKKyAg
ICAgICAgcmVtb3ZlTm9kZShlbmRCUik7CisgICAgICAgIGlmIChOb2RlKiBub2RlVG9SZW1vdmUg
PSBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKHBhcmVudC5nZXQoKSkpIHsKKyAgICAgICAg
ICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKKyAgICAgICAg
ICAgIHJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFNldHVwIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCBhbmQgbV9lbmRPZkluc2VydGVkQ29udGVu
dC4gVGhpcyBzaG91bGQgYmUgdGhlIGxhc3QgdHdvIGxpbmVzIG9mIGNvZGUgdGhhdCBhY2Nlc3Mg
aW5zZXJ0ZWROb2Rlcy4KKyAgICBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBmaXJzdFBvc2l0
aW9uSW5PckJlZm9yZU5vZGUoaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpKTsKKyAg
ICBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50ID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShpbnNl
cnRlZE5vZGVzLmxhc3RMZWFmSW5zZXJ0ZWQoKSk7CiAKLSAgICBpZiAoZW5kQlIgJiYgKHBsYWlu
VGV4dEZyYWdtZW50IHx8IHNob3VsZFJlbW92ZUVuZEJSKGVuZEJSLCBvcmlnaW5hbFZpc1Bvc0Jl
Zm9yZUVuZEJSKSkpCi0gICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhlbmRCUik7
Ci0gICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBtZXJnZSB0
aGUgZW5kIG9mIGluc2VydGVkIGNvbnRlbnQgd2l0aCB3aGF0J3MgYWZ0ZXIgaXQgYmVmb3JlIHdl
IGRvCiAgICAgLy8gdGhlIHN0YXJ0IG1lcmdlIHNvIHRoYXQgdGhlIHN0YXJ0IG1lcmdlIGRvZXNu
J3QgZWZmZWN0IG91ciBkZWNpc2lvbi4KICAgICBtX3Nob3VsZE1lcmdlRW5kID0gc2hvdWxkTWVy
Z2VFbmQoc2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGgpOwogICAgIAogICAgIGlmIChzaG91
bGRNZXJnZVN0YXJ0KHNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBhcmFncmFwaCwgZnJhZ21lbnQu
aGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCgpLCBzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVv
dGUpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBkZXN0aW5hdGlvbiA9IHN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQucHJldmlvdXMoKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUgPSBzdGFydE9mSW5zZXJ0ZWRDb250ZW50OworICAgICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaFRvTW92ZSA9IHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0
ZWRDb250ZW50KCk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBkZXN0aW5hdGlvbiA9IHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUucHJldmlvdXMoKTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBtZXJnZSB0aGUgZW5kCiAgICAgICAgIC8vIGJ1
dCBvdXIgZGVzdGluYXRpb24gbm9kZSBpcyBpbnNpZGUgYW4gaW5saW5lIHRoYXQgaXMgdGhlIGxh
c3QgaW4gdGhlIGJsb2NrLgogICAgICAgICAvLyBXZSBpbnNlcnQgYSBwbGFjZWhvbGRlciBiZWZv
cmUgdGhlIG5ld2x5IGluc2VydGVkIGNvbnRlbnQgdG8gYXZvaWQgYmVpbmcgbWVyZ2VkIGludG8g
dGhlIGlubGluZS4KQEAgLTEwNjQsMTYgKzEwMzQsMTQgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIEZJWE1FOiBNYWludGFpbiBwb3NpdGlvbnMg
Zm9yIHRoZSBzdGFydCBhbmQgZW5kIG9mIGluc2VydGVkIGNvbnRlbnQgaW5zdGVhZCBvZiBrZWVw
aW5nIG5vZGVzLiAgVGhlIG5vZGVzIGFyZQogICAgICAgICAvLyBvbmx5IGV2ZXIgdXNlZCB0byBj
cmVhdGUgcG9zaXRpb25zIHdoZXJlIGluc2VydGVkIGNvbnRlbnQgc3RhcnRzL2VuZHMuCiAgICAg
ICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGgo
c3RhcnRPZlBhcmFncmFwaFRvTW92ZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9maXJzdE5v
ZGVJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFs
ZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIGlmICghbV9sYXN0
TGVhZkluc2VydGVkLT5pbkRvY3VtZW50KCkpCi0gICAgICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0
ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0
cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgZW5kT2ZJ
bnNlcnRlZENvbnRlbnQgPSBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKTsKLSAgICBz
dGFydE9mSW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQo
KTsKKyAgICAgICAgbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50ID0gZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgICAgIGlm
IChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LmlzT3JwaGFuKCkpCisgICAgICAgICAgICBtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpLmRlZXBFcXVp
dmFsZW50KCkudXBzdHJlYW0oKTsKKyAgICB9CiAKICAgICBQb3NpdGlvbiBsYXN0UG9zaXRpb25U
b1NlbGVjdDsKLSAgICBpZiAoaW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQpIHsKKyAgICBpZiAoZnJh
Z21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKSkgeworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRl
bnQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSBlbmRPZkluc2VydGVkQ29udGVu
dC5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIAogICAgICAgICBpZiAoc2VsZWN0
aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggfHwgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRl
ZENvbnRlbnQpIHx8IG5leHQuaXNOdWxsKCkpIHsKQEAgLTExNjIsNyArMTEzMCwxMCBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGCiAgICAgICAgIGJvb2wgY29sbGFw
c2VXaGl0ZVNwYWNlID0gIWVuZE5vZGUtPnJlbmRlcmVyKCkgfHwgZW5kTm9kZS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChlbmROb2RlLT5p
c1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0
Kj4oZW5kTm9kZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IGFsd2F5cyBi
ZSBpbnNlcnRpbmcgdGhlIHNwYWNlIGF0IHRoZSBlbmQKICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKKyAgICAgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0
ZWRDb250ZW50LmNvbnRhaW5lck5vZGUoKSA9PSB0ZXh0KQorICAgICAgICAgICAgICAgIG1fZW5k
T2ZJbnNlcnRlZENvbnRlbnQubW92ZVRvT2Zmc2V0KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgKyAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKGNv
bGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CiAgICAg
ICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgZW5kTm9kZSk7CkBAIC0xMTgwLDE0ICsxMTUx
LDE2IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0YKICAgICAgICAg
Ym9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0
Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgICAg
IGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgVGV4dCogdGV4dCA9
IHN0YXRpY19jYXN0PFRleHQqPihzdGFydE5vZGUpOworICAgICAgICAgICAgLy8gRklYTUU6IHdl
IHNob3VsZG4ndCBhbHdheXMgYmUgaW5zZXJ0aW5nIHRoZSBzcGFjZSBhdCB0aGUgYmVnaW5uaW5n
CiAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgY29sbGFwc2VXaGl0ZVNw
YWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKKyAgICAgICAgICAgIGlmICht
X2VuZE9mSW5zZXJ0ZWRDb250ZW50LmNvbnRhaW5lck5vZGUoKSA9PSB0ZXh0ICYmIG1fZW5kT2ZJ
bnNlcnRlZENvbnRlbnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAg
bV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2VydGVkQ29udGVu
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5v
ZGUoY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsK
LSAgICAgICAgICAgIC8vIERvbid0IHVwZGF0ZU5vZGVzSW5zZXJ0ZWQuIERvaW5nIHNvIHdvdWxk
IHNldCBtX2xhc3RMZWFmSW5zZXJ0ZWQgdG8gYmUgdGhlIG5vZGUgY29udGFpbmluZyB0aGUgbGVh
ZGluZyBzcGFjZSwKLSAgICAgICAgICAgIC8vIGJ1dCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaXMgc3Vw
cG9zZWQgdG8gbWFyayB0aGUgZW5kIG9mIHBhc3RlZCBjb250ZW50LgorICAgICAgICAgICAgLy8g
RG9uJ3QgdXBkYXRlTm9kZXNJbnNlcnRlZC4gRG9pbmcgc28gd291bGQgc2V0IG1fZW5kT2ZJbnNl
cnRlZENvbnRlbnQgdG8gYmUgdGhlIG5vZGUgY29udGFpbmluZyB0aGUgbGVhZGluZyBzcGFjZSwK
KyAgICAgICAgICAgIC8vIGJ1dCBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50IGlzIHN1cHBvc2VkIHRv
IG1hcmsgdGhlIGVuZCBvZiBwYXN0ZWQgY29udGVudC4KICAgICAgICAgICAgIGluc2VydE5vZGVC
ZWZvcmUobm9kZSwgc3RhcnROb2RlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgcG9zaXRp
b25zIHRvIHRyYWNrIHRoZSBzdGFydC9lbmQgb2YgaW5zZXJ0ZWQgY29udGVudC4KLSAgICAgICAg
ICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlOworICAgICAgICAgICAgbV9zdGFydE9mSW5z
ZXJ0ZWRDb250ZW50ID0gZmlyc3RQb3NpdGlvbkluTm9kZShub2RlLmdldCgpKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTEyNzUsMTMgKzEyNDgsMTAgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6dXBkYXRlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkKQotICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVk
ID0gbm9kZTsKLSAgICAKLSAgICBpZiAobm9kZSA9PSBtX2xhc3RMZWFmSW5zZXJ0ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVz
Y2VuZGFudCgpOworICAgIGlmIChtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuaXNOdWxsKCkpCisg
ICAgICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShub2RlKTsKKworICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBsYXN0UG9zaXRpb25J
bk9yQWZ0ZXJOb2RlKG5vZGUtPmxhc3REZXNjZW5kYW50KCkpOwogfQogCiAvLyBEdXJpbmcgc2lt
cGxlIHBhc3Rlcywgd2hlcmUgd2UncmUganVzdCBwYXN0aW5nIGEgdGV4dCBub2RlIGludG8gYSBy
dW4gb2YgdGV4dCwgd2UgaW5zZXJ0IHRoZSB0ZXh0IG5vZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDk2NDIy
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OCwxMiArODgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3Zl
VW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcyhJbnNlcnRlZE5vZGVzJik7CiAgICAgCiAgICAgdm9p
ZCByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9k
ZXMmKTsKLSAgICB2b2lkIGhhbmRsZVN0eWxlU3BhbnMoTm9kZSogZmlyc3ROb2RlSW5zZXJ0ZWQp
OworICAgIHZvaWQgaGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJik7CiAgICAgdm9pZCBo
YW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Tm9kZUFuZFBydW5lQW5jZXN0b3JzKE5vZGUqKTsKLSAgICAKICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdDsKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCkgY29uc3Q7CiAKQEAgLTEwMyw4
ICsxMDAsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29u
c3QgUmVwbGFjZW1lbnRGcmFnbWVudCYpOwogCi0gICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fbGFzdExlYWZJbnNlcnRlZDsKKyAgICBQb3Np
dGlvbiBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQ7CisgICAgUG9zaXRpb24gbV9lbmRPZkluc2Vy
dGVkQ29udGVudDsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX2luc2VydGlvblN0eWxlOwog
ICAgIGJvb2wgbV9zZWxlY3RSZXBsYWNlbWVudDsKICAgICBib29sIG1fc21hcnRSZXBsYWNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDk2NDIy
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyMyw2ICs2MjMsMzQgQEAgTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUo
Y29uc3QgUAogICAgIHJldHVybiBoaWdoZXN0OwogfQogCitzdGF0aWMgYm9vbCBoYXNBUmVuZGVy
ZWREZXNjZW5kYW50KE5vZGUqIG5vZGUsIE5vZGUqIGV4Y2x1ZGVkTm9kZSkKK3sKKyAgICBmb3Ig
KE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7IG47KSB7CisgICAgICAgIGlmIChuID09IGV4
Y2x1ZGVkTm9kZSkgeworICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcobm9k
ZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobi0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZShub2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOb2RlKiBo
aWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKE5vZGUqIG5vZGUpCit7CisgICAgTm9kZSogcHJl
dmlvdXNOb2RlID0gMDsKKyAgICBOb2RlKiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZSA/IG5v
ZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7CisgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5jYW5IYXZl
Q2hpbGRyZW4oKSB8fCBoYXNBUmVuZGVyZWREZXNjZW5kYW50KG5vZGUsIHByZXZpb3VzTm9kZSkg
fHwgcm9vdEVkaXRhYmxlRWxlbWVudCA9PSBub2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBw
cmV2aW91c05vZGU7CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNOb2RlID0gbm9kZTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKIE5vZGUqIGVuY2xvc2luZ1RhYmxlQ2VsbChjb25zdCBQ
b3NpdGlvbiYgcCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2lu
Z05vZGVPZlR5cGUocCwgaXNUYWJsZUNlbGwpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmgJKHJldmlzaW9uIDk2NDIyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIE5vZGUqIGhpZ2hl
c3RBbmNlc3RvcihOb2RlKik7CiBOb2RlKiBoaWdoZXN0RWRpdGFibGVSb290KGNvbnN0IFBvc2l0
aW9uJik7CiBOb2RlKiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYs
IGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE5vZGUqKSwKICAgICBFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSwgTm9kZSogc3RheVdpdGhp
biA9IDApOwotTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKik7ICAgCitOb2RlKiBo
aWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKE5vZGUqKTsKK05vZGUqIGxvd2VzdEVkaXRhYmxl
QW5jZXN0b3IoTm9kZSopOwogCiBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKiwgRWRpdGluZ0Jv
dW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogTm9kZSog
ZW5jbG9zaW5nVGFibGVDZWxsKGNvbnN0IFBvc2l0aW9uJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109350</attachid>
            <date>2011-09-30 14:34:41 -0700</date>
            <delta_ts>2011-10-03 16:04:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68874-20110930143440.patch</filename>
            <type>text/plain</type>
            <size>21768</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NDI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDktMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBtX2ZpcnN0Tm9kZUlu
c2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaW4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQg
YnkgcG9zaXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlcGxhY2VkIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgYW5kIG1fbGFzdExlYWZJbnNlcnRlZCBi
eSBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgYW5kIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQKKyAg
ICAgICAgcmVzcGVjdGl2ZWx5LiBBbHNvIHJlbW92ZWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbiBhbmQgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzIGluIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kCisgICAgICAgIGJlY2F1c2UgdGhleSB3ZXJlIG5vdCB2aXJ0dWFsIGluIENvbXBvc2l0
ZUVkaXRDb21tYW5kIGFuZCBpbXBsaWNpdGx5IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9ucyB3YXMg
Y29uZnVzaW5nLgorICAgICAgICBTaW5jZSBlYWNoIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMg
dXNlZCBhdCBleGFjdGx5IG9uZSBwbGFjZSwganVzdCB1cGRhdGUgcG9zaXRpb25zIGFuZCBpbnNl
cnRlZE5vZGVzIGV4cGxpY2l0bHkuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJl
bmRlcmVkVGV4dE5vZGVzQXRFbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjptZXJnZUVuZElmTmVlZGVkKTogVXBkYXRlIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgYnkgZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpCisgICAgICAgIGluc3RlYWQgb2YgbV9sYXN0TGVh
Zkluc2VydGVkIHdpdGggZGVzdGluYXRpb24ucHJldmlvdXMoKSBiZWNhdXNlIG1vdmVQYXJhZ3Jh
cGggY291bGQgaGF2ZSByZW1vdmVkIGxlYWRpbmcgd2hpdGVzcGFjZSBpbgorICAgICAgICB0aGUg
dGV4dCBub2RlIHJlZmVyZW5jZWQgYnkgZGVzdGluYXRpb24uIFRoaXMgaXMgdGVzdGVkIGJ5IGFu
IGV4aXN0aW5nIGxheW91dCB0ZXN0LgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSk6IFVwZGF0ZSBwb3NpdGlvbnMgYXMgbmVl
ZGVkLiBBbGwgY2hhbmdlcyBhcmUgdGVzdGVkCisgICAgICAgIGJ5IHRoZSBleGlzdGluZyBsYXlv
dXQgdGVzdHMgaW4gZWRpdGluZy9wYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGVzSW5zZXJ0ZWQpOgorICAgICAgICAqIGVkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc0FSZW5kZXJlZERlc2NlbmRhbnQpOiBNb3Zl
ZCBmcm9tIENvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hl
c3ROb2RlVG9SZW1vdmVJblBydW5pbmcpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxl
ZGl0aW5nLmg6CisKIDIwMTEtMDktMzAgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgog
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE2NwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAJKHJldmlzaW9uIDk2NDIyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NywzNCArMjQ3LDYgQEAgSFRNTEVs
ZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYQogICAgIHJldHVybiBjb21tYW5kLT5z
cGFuRWxlbWVudCgpOwogfQogCi1zdGF0aWMgYm9vbCBoYXNBUmVuZGVyZWREZXNjZW5kYW50KE5v
ZGUqIG5vZGUsIE5vZGUqIGV4Y2x1ZGVkTm9kZSkKLXsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
LT5maXJzdENoaWxkKCk7IG47KSB7Ci0gICAgICAgIGlmIChuID09IGV4Y2x1ZGVkTm9kZSkgewot
ICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcobm9kZSk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShub2Rl
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgTm9kZSogaGlnaGVzdE5v
ZGVUb1JlbW92ZUluUHJ1bmluZyhOb2RlKiBub2RlKQotewotICAgIE5vZGUqIHByZXZpb3VzTm9k
ZSA9IDA7Ci0gICAgTm9kZSogcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUgPyBub2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCkgOiAwOwotICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+
cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVu
KCkgfHwgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChub2RlLCBwcmV2aW91c05vZGUpIHx8IHJvb3RF
ZGl0YWJsZUVsZW1lbnQgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNO
b2RlOwotICAgICAgICB9Ci0gICAgICAgIHByZXZpb3VzTm9kZSA9IG5vZGU7Ci0gICAgfQotICAg
IHJldHVybiAwOwotfQotCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZShQYXNzUmVm
UHRyPE5vZGU+IG5vZGUpCiB7CiAgICAgaWYgKFJlZlB0cjxOb2RlPiBoaWdoZXN0Tm9kZVRvUmVt
b3ZlID0gaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZyhub2RlLmdldCgpKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CShyZXZpc2lvbiA5NjQyMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsMzMgKzQ0Miw2IEBAIHN0YXRp
YyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGMKICAgICByZXR1cm4gbm9kZSAmJiBu
b2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpID09IEFwcGxlUGFzdGVBc1F1b3RhdGlvbjsKIH0KIAotLy8gV3JhcCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigpIHNvIHdlIGNhbiB1cGRhdGUg
dGhlIG5vZGVzIHdlIHRyYWNrCi12b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKLSAgICBpZiAobV9sYXN0TGVhZkluc2VydGVkID09IG5vZGUpCi0g
ICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IG5vZGUtPmxhc3RDaGlsZCgpID8gbm9kZS0+bGFz
dENoaWxkKCkgOiBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci0gICAgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7Ci19Ci0KLS8vIFdy
YXAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycygpIHNv
IHdlIGNhbiB1cGRhdGUgdGhlIG5vZGVzIHdlIHRyYWNrCi12b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSogbm9kZSkKLXsKLSAgICAv
LyBwcmVwYXJlIGluIGNhc2UgbV9maXJzdE5vZGVJbnNlcnRlZCBhbmQvb3IgbV9sYXN0TGVhZklu
c2VydGVkIGdldCByZW1vdmVkCi0gICAgLy8gRklYTUU6IHNob3VsZG4ndCBtX2xhc3RMZWFmSW5z
ZXJ0ZWQgYmUgYWRqdXN0ZWQgdXNpbmcgdHJhdmVyc2VQcmV2aW91c05vZGUoKT8KLSAgICBOb2Rl
KiBhZnRlckZpcnN0ID0gbV9maXJzdE5vZGVJbnNlcnRlZCA/IG1fZmlyc3ROb2RlSW5zZXJ0ZWQt
PnRyYXZlcnNlTmV4dFNpYmxpbmcoKSA6IDA7Ci0gICAgTm9kZSogYWZ0ZXJMYXN0ID0gbV9sYXN0
TGVhZkluc2VydGVkID8gbV9sYXN0TGVhZkluc2VydGVkLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkg
OiAwOwotICAgIAotICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVB
bmNlc3RvcnMobm9kZSk7Ci0gICAgCi0gICAgLy8gYWRqdXN0IG1fZmlyc3ROb2RlSW5zZXJ0ZWQg
YW5kIG1fbGFzdExlYWZJbnNlcnRlZCBzaW5jZSBlaXRoZXIgb3IgYm90aCBtYXkgaGF2ZSBiZWVu
IHJlbW92ZWQKLSAgICBpZiAobV9sYXN0TGVhZkluc2VydGVkICYmICFtX2xhc3RMZWFmSW5zZXJ0
ZWQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gYWZ0ZXJMYXN0
OwotICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkICYmICFtX2ZpcnN0Tm9kZUluc2VydGVkLT5p
bkRvY3VtZW50KCkpCi0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBtX2xhc3RMZWFmSW5z
ZXJ0ZWQgJiYgbV9sYXN0TGVhZkluc2VydGVkLT5pbkRvY3VtZW50KCkgPyBhZnRlckZpcnN0IDog
MDsKLX0KLQogc3RhdGljIGJvb2wgaXNIZWFkZXJFbGVtZW50KE5vZGUqIGEpCiB7CiAgICAgaWYg
KCFhKQpAQCAtNTgyLDcgKzU1NSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJl
bW92ZVVucmUKICAgICAgICAgcmVtb3ZlTm9kZShsYXN0TGVhZkluc2VydGVkKTsKICAgICB9CiAK
LSAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IG1fZmlyc3ROb2RlSW5zZXJ0
ZWQgaXNuJ3QgaW5zaWRlIGEgc2VsZWN0IG9yIHNjcmlwdCBlbGVtZW50LCBiZWNhdXNlCisgICAg
Ly8gV2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmaXJzdE5vZGVJbnNlcnRlZCBpc24n
dCBpbnNpZGUgYSBzZWxlY3Qgb3Igc2NyaXB0IGVsZW1lbnQsIGJlY2F1c2UKICAgICAvLyBpdCBp
cyBhIHRvcCBsZXZlbCBub2RlIGluIHRoZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5z
ZXJ0IGludG8gdGhvc2UgZWxlbWVudHMuCiAgICAgTm9kZSogZmlyc3ROb2RlSW5zZXJ0ZWQgPSBp
bnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7CiAgICAgbGFzdExlYWZJbnNlcnRlZCA9
IGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpOwpAQCAtNTk0LDE3ICs1NjcsMTQgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZQogCiBWaXNpYmxlUG9zaXRp
b24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVu
dCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbGFzdE5vZGUgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0
KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGhhY2sgaGVyZT8gIFdoYXQncyBzcGVjaWFs
IGFib3V0IDxzZWxlY3Q+IHRhZ3M/Ci0gICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9z
aW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3ROb2RlKSwgc2Vs
ZWN0VGFnKTsKLSAgICBpZiAoZW5jbG9zaW5nU2VsZWN0KQotICAgICAgICBsYXN0Tm9kZSA9IGVu
Y2xvc2luZ1NlbGVjdDsKLSAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShsYXN0
Tm9kZSk7CisgICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdpdGhUYWco
bV9lbmRPZkluc2VydGVkQ29udGVudCwgc2VsZWN0VGFnKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
U2VsZWN0ID8gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmNsb3NpbmdTZWxlY3QpIDogbV9l
bmRPZkluc2VydGVkQ29udGVudDsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2ZpcnN0Tm9kZUluc2VydGVk
LmdldCgpKTsKKyAgICByZXR1cm4gbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50OwogfQogCiBzdGF0
aWMgdm9pZCByZW1vdmVIZWFkQ29udGVudHMoUmVwbGFjZW1lbnRGcmFnbWVudCYgZnJhZ21lbnQp
CkBAIC02NjAsMTMgKzYzMCwxMyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVTdHlsZVNwYW5zQmVmb3Jl
SW5zZXJ0CiAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoZSBBcHBsZS1zdHlsZS1zcGFuIGNsYXNzIHdo
ZW4gd2UncmUgZG9uZSwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Njg1NjAwPi4KIC8vIFdlIHNob3Vs
ZCByZW1vdmUgc3R5bGVzIGZyb20gc3BhbnMgdGhhdCBhcmUgb3ZlcnJpZGRlbiBieSBhbGwgb2Yg
dGhlaXIgY2hpbGRyZW4sIGVpdGhlciBoZXJlCiAvLyBvciBhdCBjb3B5IHRpbWUuCi12b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKE5vZGUqIGZpcnN0Tm9kZUlu
c2VydGVkKQordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhJ
bnNlcnRlZE5vZGVzJiBpbnNlcnRlZE5vZGVzKQogewogICAgIEhUTUxFbGVtZW50KiB3cmFwcGlu
Z1N0eWxlU3BhbiA9IDA7CiAgICAgLy8gVGhlIHN0eWxlIHNwYW4gdGhhdCBjb250YWlucyB0aGUg
c291cmNlIGRvY3VtZW50J3MgZGVmYXVsdCBzdHlsZSBzaG91bGQgYmUgYXQKICAgICAvLyB0aGUg
dG9wIG9mIHRoZSBmcmFnbWVudCwgYnV0IE1haWwgc29tZXRpbWVzIGFkZHMgYSB3cmFwcGVyIChm
b3IgUGFzdGUgQXMgUXVvdGF0aW9uKSwKICAgICAvLyBzbyBzZWFyY2ggZm9yIHRoZSB0b3AgbGV2
ZWwgc3R5bGUgc3BhbiBpbnN0ZWFkIG9mIGFzc3VtaW5nIGl0J3MgYXQgdGhlIHRvcC4KLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGVJbnNlcnRlZDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMu
Zmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewogICAgICAgICBpZiAoaXNMZWdhY3lBcHBsZVN0eWxlU3Bhbihub2RlKSkgewogICAgICAg
ICAgICAgd3JhcHBpbmdTdHlsZVNwYW4gPSB0b0hUTUxFbGVtZW50KG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC02OTcsOSArNjY3LDEwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmhhbmRsZVN0eWwKICAgICAvLyB3aXRoIGJsb2NrIHN0eWxlcyBieSB0aGUgZWRpdGluZyBl
bmdpbmUgdXNlZCB0byBzdHlsZSB0aGVtLiAgV2ViS2l0IGRvZXNuJ3QgZG8gdGhpcywgYnV0IG90
aGVycyBtaWdodC4KICAgICBzdHlsZS0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAKLSAgICBp
ZiAoc3R5bGUtPmlzRW1wdHkoKSB8fCAhd3JhcHBpbmdTdHlsZVNwYW4tPmZpcnN0Q2hpbGQoKSkK
KyAgICBpZiAoc3R5bGUtPmlzRW1wdHkoKSB8fCAhd3JhcHBpbmdTdHlsZVNwYW4tPmZpcnN0Q2hp
bGQoKSkgeworICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKHdyYXBwaW5nU3R5bGVTcGFuKTsKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAg
ICBzZXROb2RlQXR0cmlidXRlKHdyYXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIsIHN0eWxlLT5z
dHlsZSgpLT5jc3NUZXh0KCkpOwogfQogCkBAIC03MzYsMTggKzcwNywxNCBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZUVuZElmCiAKICAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUp
LCBkZXN0aW5hdGlvbik7CiAgICAgCi0gICAgLy8gTWVyZ2luZyBmb3J3YXJkIHdpbGwgcmVtb3Zl
IG1fbGFzdExlYWZJbnNlcnRlZCBmcm9tIHRoZSBkb2N1bWVudC4KLSAgICAvLyBGSVhNRTogTWFp
bnRhaW4gcG9zaXRpb25zIGZvciB0aGUgc3RhcnQgYW5kIGVuZCBvZiBpbnNlcnRlZCBjb250ZW50
IGluc3RlYWQgb2Yga2VlcGluZyBub2Rlcy4gIFRoZSBub2RlcyBhcmUKLSAgICAvLyBvbmx5IGV2
ZXIgdXNlZCB0byBjcmVhdGUgcG9zaXRpb25zIHdoZXJlIGluc2VydGVkIGNvbnRlbnQgc3RhcnRz
L2VuZHMuICBBbHNvLCB3ZSBzb21ldGltZXMgaW5zZXJ0IGNvbnRlbnQKLSAgICAvLyBkaXJlY3Rs
eSBpbnRvIHRleHQgbm9kZXMgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQsIGluIHdoaWNoIGNhc2Ug
dHJhY2tpbmcgaW5zZXJ0ZWQgbm9kZXMgaXMgaW5hZGVxdWF0ZS4KKyAgICAvLyBNZXJnaW5nIGZv
cndhcmQgd2lsbCByZW1vdmUgbV9lbmRPZkluc2VydGVkQ29udGVudCBmcm9tIHRoZSBkb2N1bWVu
dC4KICAgICBpZiAobWVyZ2VGb3J3YXJkKSB7Ci0gICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9
IGRlc3RpbmF0aW9uLnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
OwotICAgICAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSkKLSAgICAg
ICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIC8vIElmIHdl
IG1lcmdlZCB0ZXh0IG5vZGVzLCBtX2xhc3RMZWFmSW5zZXJ0ZWQgY291bGQgYmUgbnVsbC4gSWYg
dGhpcyBpcyB0aGUgY2FzZSwKLSAgICAgICAgLy8gd2UgdXNlIG1fZmlyc3ROb2RlSW5zZXJ0ZWQu
Ci0gICAgICAgIGlmICghbV9sYXN0TGVhZkluc2VydGVkKQotICAgICAgICAgICAgbV9sYXN0TGVh
Zkluc2VydGVkID0gbV9maXJzdE5vZGVJbnNlcnRlZDsKKyAgICAgICAgaWYgKG1fc3RhcnRPZklu
c2VydGVkQ29udGVudC5pc09ycGhhbigpKQorICAgICAgICAgICAgbV9zdGFydE9mSW5zZXJ0ZWRD
b250ZW50ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KTsKKyAgICAgICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlRW5kKCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgLy8gSWYgd2UgbWVyZ2VkIHRl
eHQgbm9kZXMsIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgY291bGQgYmUgbnVsbC4gSWYgdGhpcyBp
cyB0aGUgY2FzZSwgd2UgdXNlIG1fc3RhcnRPZkluc2VydGVkQ29udGVudC4KKyAgICAgICAgaWYg
KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2VuZE9mSW5z
ZXJ0ZWRDb250ZW50ID0gbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50OwogICAgIH0KIH0KIApAQCAt
OTY1LDggKzkzMiw2IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgIC8vIGluY29taW5nIGZyYWdtZW50LgogICAgIC8vIDUpIEFkZCBzcGFjZXMgZm9yIHNtYXJ0
IHJlcGxhY2UuCiAgICAgLy8gNikgU2VsZWN0IHRoZSByZXBsYWNlbWVudCBpZiByZXF1ZXN0ZWQs
IGFuZCBtYXRjaCBzdHlsZSBpZiByZXF1ZXN0ZWQuCi0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQsIGVuZE9mSW5zZXJ0ZWRDb250ZW50OwogCiAgICAgSW5z
ZXJ0ZWROb2RlcyBpbnNlcnRlZE5vZGVzOwogICAgIFJlZlB0cjxOb2RlPiByZWZOb2RlID0gZnJh
Z21lbnQuZmlyc3RDaGlsZCgpOwpAQCAtMTAwOCwzNyArOTczLDQyIEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIHJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtl
ZXBTdHlsZVNwYW5JbmxpbmUoaW5zZXJ0ZWROb2Rlcyk7CiAKICAgICByZW1vdmVVbnJlbmRlcmVk
VGV4dE5vZGVzQXRFbmRzKGluc2VydGVkTm9kZXMpOwotICAgIAotICAgIG1fZmlyc3ROb2RlSW5z
ZXJ0ZWQgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7Ci0gICAgbV9sYXN0TGVh
Zkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7CiAKICAgICBpZiAo
IWhhbmRsZWRTdHlsZVNwYW5zKQotICAgICAgICBoYW5kbGVTdHlsZVNwYW5zKG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCkpOworICAgICAgICBoYW5kbGVTdHlsZVNwYW5zKGluc2VydGVkTm9kZXMp
OwogCiAgICAgLy8gTXV0YXRpb24gZXZlbnRzIChidWcgMjAxNjEpIG1heSBoYXZlIGFscmVhZHkg
cmVtb3ZlZCB0aGUgaW5zZXJ0ZWQgY29udGVudAotICAgIGlmICghbV9maXJzdE5vZGVJbnNlcnRl
ZCB8fCAhbV9maXJzdE5vZGVJbnNlcnRlZC0+aW5Eb2N1bWVudCgpKQorICAgIGlmICghaW5zZXJ0
ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpIHx8ICFpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUlu
c2VydGVkKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGVuZE9m
SW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCk7Ci0gICAg
c3RhcnRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50
KCk7Ci0gICAgCisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkluc2VydGVkQ29udGVudCA9
IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2Vy
dGVkKCkpOworCiAgICAgLy8gV2UgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBzdGFydEJsb2NrIHRvIHBy
ZXZlbnQgbmVzdGluZywgYW5kIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgc3RhcnRCbG9jayB3YXNu
J3QgaW4gaXRzIG93biBibG9jayBhbmQKICAgICAvLyBkaWRuJ3QgaGF2ZSBhIGJyIGFmdGVyIGl0
LCBzbyB0aGUgaW5zZXJ0ZWQgY29udGVudCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwYXJhZ3JhcGgu
CiAgICAgaWYgKHN0YXJ0QmxvY2sgJiYgaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkgPT0g
c3RhcnRCbG9jay0+cGFyZW50Tm9kZSgpICYmICh1bnNpZ25lZClpbnNlcnRpb25Qb3MuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA8IHN0YXJ0QmxvY2stPm5vZGVJbmRleCgpICYmICFpc1N0YXJ0
T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkpCiAgICAgICAgIGluc2VydE5vZGVB
dChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCksIHN0YXJ0T2ZJbnNlcnRlZENv
bnRlbnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAKLSAgICBib29sIGludGVyY2hhbmdlTmV3bGluZUF0
RW5kID0gZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKTsKKyAgICBpZiAoZW5k
QlIgJiYgKHBsYWluVGV4dEZyYWdtZW50IHx8IHNob3VsZFJlbW92ZUVuZEJSKGVuZEJSLCBvcmln
aW5hbFZpc1Bvc0JlZm9yZUVuZEJSKSkpIHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IHBhcmVudCA9
IGVuZEJSLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5v
ZGUoZW5kQlIpOworICAgICAgICByZW1vdmVOb2RlKGVuZEJSKTsKKyAgICAgICAgaWYgKE5vZGUq
IG5vZGVUb1JlbW92ZSA9IGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcocGFyZW50LmdldCgp
KSkgeworICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShub2RlVG9SZW1v
dmUpOworICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlVG9SZW1vdmUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gU2V0dXAgbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50IGFuZCBtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50LiBUaGlzIHNob3VsZCBiZSB0aGUgbGFzdCB0d28gbGluZXMgb2YgY29k
ZSB0aGF0IGFjY2VzcyBpbnNlcnRlZE5vZGVzLgorICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVu
dCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUlu
c2VydGVkKCkpOworICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBsYXN0UG9zaXRpb25Jbk9y
QWZ0ZXJOb2RlKGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpKTsKIAotICAgIGlmIChl
bmRCUiAmJiAocGxhaW5UZXh0RnJhZ21lbnQgfHwgc2hvdWxkUmVtb3ZlRW5kQlIoZW5kQlIsIG9y
aWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIpKSkKLSAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5j
ZXN0b3JzKGVuZEJSKTsKLSAgICAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ug
c2hvdWxkIG1lcmdlIHRoZSBlbmQgb2YgaW5zZXJ0ZWQgY29udGVudCB3aXRoIHdoYXQncyBhZnRl
ciBpdCBiZWZvcmUgd2UgZG8KICAgICAvLyB0aGUgc3RhcnQgbWVyZ2Ugc28gdGhhdCB0aGUgc3Rh
cnQgbWVyZ2UgZG9lc24ndCBlZmZlY3Qgb3VyIGRlY2lzaW9uLgogICAgIG1fc2hvdWxkTWVyZ2VF
bmQgPSBzaG91bGRNZXJnZUVuZChzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCk7CiAgICAg
CiAgICAgaWYgKHNob3VsZE1lcmdlU3RhcnQoc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdy
YXBoLCBmcmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0KCksIHN0YXJ0SXNJbnNp
ZGVNYWlsQmxvY2txdW90ZSkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9u
ID0gc3RhcnRPZkluc2VydGVkQ29udGVudC5wcmV2aW91cygpOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZlBhcmFncmFwaFRvTW92ZSA9IHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQ7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlID0gcG9zaXRpb25B
dFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGRlc3Rp
bmF0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5wcmV2aW91cygpOwogICAgICAgICAvLyBX
ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1lcmdlIHRoZSBlbmQK
ICAgICAgICAgLy8gYnV0IG91ciBkZXN0aW5hdGlvbiBub2RlIGlzIGluc2lkZSBhbiBpbmxpbmUg
dGhhdCBpcyB0aGUgbGFzdCBpbiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFdlIGluc2VydCBhIHBs
YWNlaG9sZGVyIGJlZm9yZSB0aGUgbmV3bHkgaW5zZXJ0ZWQgY29udGVudCB0byBhdm9pZCBiZWlu
ZyBtZXJnZWQgaW50byB0aGUgaW5saW5lLgpAQCAtMTA2NCwxNiArMTAzNCwxNCBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gRklYTUU6IE1haW50
YWluIHBvc2l0aW9ucyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgaW5zZXJ0ZWQgY29udGVudCBp
bnN0ZWFkIG9mIGtlZXBpbmcgbm9kZXMuICBUaGUgbm9kZXMgYXJlCiAgICAgICAgIC8vIG9ubHkg
ZXZlciB1c2VkIHRvIGNyZWF0ZSBwb3NpdGlvbnMgd2hlcmUgaW5zZXJ0ZWQgY29udGVudCBzdGFy
dHMvZW5kcy4KICAgICAgICAgbW92ZVBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBl
bmRPZlBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKSwgZGVzdGluYXRpb24pOwotICAg
ICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAg
ICAgaWYgKCFtX2xhc3RMZWFmSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1f
bGFzdExlYWZJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKS5kZWVwRXF1
aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICB9Ci0gICAgICAgICAg
ICAKLSAgICBlbmRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29u
dGVudCgpOwotICAgIHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBwb3NpdGlvbkF0U3RhcnRPZklu
c2VydGVkQ29udGVudCgpOworICAgICAgICBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBlbmRp
bmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0o
KTsKKyAgICAgICAgaWYgKG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuaXNPcnBoYW4oKSkKKyAgICAg
ICAgICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOworICAgIH0KIAogICAgIFBvc2l0aW9u
IGxhc3RQb3NpdGlvblRvU2VsZWN0OwotICAgIGlmIChpbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCkg
eworICAgIGlmIChmcmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCgpKSB7CisgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9uQXRFbmRP
Zkluc2VydGVkQ29udGVudCgpOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IGVuZE9m
SW5zZXJ0ZWRDb250ZW50Lm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogCiAgICAg
ICAgIGlmIChzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCB8fCAhaXNFbmRPZlBhcmFncmFw
aChlbmRPZkluc2VydGVkQ29udGVudCkgfHwgbmV4dC5pc051bGwoKSkgewpAQCAtMTE2Miw3ICsx
MTMwLDEwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0YKICAgICAg
ICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhZW5kTm9kZS0+cmVuZGVyZXIoKSB8fCBlbmRO
b2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICAgICAg
aWYgKGVuZE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFRleHQqPihlbmROb2RlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGRuJ3QgYWx3YXlzIGJlIGluc2VydGluZyB0aGUgc3BhY2UgYXQgdGhlIGVuZAogICAgICAgICAg
ICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIHRleHQtPmxlbmd0aCgpLCBjb2xsYXBzZVdoaXRl
U3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOworICAgICAgICAgICAgaWYg
KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IHRleHQpCisgICAgICAg
ICAgICAgICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2Vy
dGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0
aW5nVGV4dE5vZGUoY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
IDogIiAiKTsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlLCBlbmROb2RlKTsKQEAg
LTExODAsMTQgKzExNTEsMTYgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3Bh
Y2VzRgogICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFzdGFydE5vZGUtPnJlbmRl
cmVyKCkgfHwgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAg
ICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9kZSk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IGFsd2F5cyBiZSBpbnNlcnRpbmcgdGhlIHNwYWNlIGF0
IHRoZSBiZWdpbm5pbmcKICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCAwLCBj
b2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOworICAg
ICAgICAgICAgaWYgKG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IHRl
eHQgJiYgbV9lbmRPZkluc2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKKyAg
ICAgICAgICAgICAgICBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm1vdmVUb09mZnNldChtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgMSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGRvY3VtZW50KCktPmNyZWF0
ZUVkaXRpbmdUZXh0Tm9kZShjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkgOiAiICIpOwotICAgICAgICAgICAgLy8gRG9uJ3QgdXBkYXRlTm9kZXNJbnNlcnRlZC4g
RG9pbmcgc28gd291bGQgc2V0IG1fbGFzdExlYWZJbnNlcnRlZCB0byBiZSB0aGUgbm9kZSBjb250
YWluaW5nIHRoZSBsZWFkaW5nIHNwYWNlLAotICAgICAgICAgICAgLy8gYnV0IG1fbGFzdExlYWZJ
bnNlcnRlZCBpcyBzdXBwb3NlZCB0byBtYXJrIHRoZSBlbmQgb2YgcGFzdGVkIGNvbnRlbnQuCisg
ICAgICAgICAgICAvLyBEb24ndCB1cGRhdGVOb2Rlc0luc2VydGVkLiBEb2luZyBzbyB3b3VsZCBz
ZXQgbV9lbmRPZkluc2VydGVkQ29udGVudCB0byBiZSB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBs
ZWFkaW5nIHNwYWNlLAorICAgICAgICAgICAgLy8gYnV0IG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQg
aXMgc3VwcG9zZWQgdG8gbWFyayB0aGUgZW5kIG9mIHBhc3RlZCBjb250ZW50LgogICAgICAgICAg
ICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlLCBzdGFydE5vZGUpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFVzZSBwb3NpdGlvbnMgdG8gdHJhY2sgdGhlIHN0YXJ0L2VuZCBvZiBpbnNlcnRlZCBjb250
ZW50LgotICAgICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGU7CisgICAgICAgICAg
ICBtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUuZ2V0
KCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI3NSwxMyArMTI0OCwxMCBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjp1cGRhdGVOb2RlCiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQpCi0gICAgICAgIG1fZmly
c3ROb2RlSW5zZXJ0ZWQgPSBub2RlOwotICAgIAotICAgIGlmIChub2RlID09IG1fbGFzdExlYWZJ
bnNlcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9
IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CisgICAgaWYgKG1fc3RhcnRPZkluc2VydGVkQ29udGVu
dC5pc051bGwoKSkKKyAgICAgICAgbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50ID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworCisgICAgbV9lbmRPZkluc2VydGVkQ29udGVudCA9
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZS0+bGFzdERlc2NlbmRhbnQoKSk7CiB9CiAK
IC8vIER1cmluZyBzaW1wbGUgcGFzdGVzLCB3aGVyZSB3ZSdyZSBqdXN0IHBhc3RpbmcgYSB0ZXh0
IG5vZGUgaW50byBhIHJ1biBvZiB0ZXh0LCB3ZSBpbnNlcnQgdGhlIHRleHQgbm9kZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAko
cmV2aXNpb24gOTY0MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmKTsK
ICAgICAKICAgICB2b2lkIHJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5Jbmxp
bmUoSW5zZXJ0ZWROb2RlcyYpOwotICAgIHZvaWQgaGFuZGxlU3R5bGVTcGFucyhOb2RlKiBmaXJz
dE5vZGVJbnNlcnRlZCk7CisgICAgdm9pZCBoYW5kbGVTdHlsZVNwYW5zKEluc2VydGVkTm9kZXMm
KTsKICAgICB2b2lkIGhhbmRsZVBhc3RlQXNRdW90YXRpb25Ob2RlKCk7CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSopOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSopOwotICAgIAogICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpIGNvbnN0Owog
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSBjb25z
dDsKIApAQCAtMTAzLDggKzEwMCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBlcmZvcm1Ucml2
aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50Jik7CiAKLSAgICBSZWZQdHI8Tm9k
ZT4gbV9maXJzdE5vZGVJbnNlcnRlZDsKLSAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0TGVhZkluc2Vy
dGVkOworICAgIFBvc2l0aW9uIG1fc3RhcnRPZkluc2VydGVkQ29udGVudDsKKyAgICBQb3NpdGlv
biBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50OwogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1faW5z
ZXJ0aW9uU3R5bGU7CiAgICAgYm9vbCBtX3NlbGVjdFJlcGxhY2VtZW50OwogICAgIGJvb2wgbV9z
bWFydFJlcGxhY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAko
cmV2aXNpb24gOTY0MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIzLDYgKzYyMywzNCBAQCBOb2RlKiBoaWdoZXN0RW5jbG9z
aW5nTm9kZU9mVHlwZShjb25zdCBQCiAgICAgcmV0dXJuIGhpZ2hlc3Q7CiB9CiAKK3N0YXRpYyBi
b29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSogbm9kZSwgTm9kZSogZXhjbHVkZWROb2Rl
KQoreworICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjspIHsKKyAgICAg
ICAgaWYgKG4gPT0gZXhjbHVkZWROb2RlKSB7CisgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VO
ZXh0U2libGluZyhub2RlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChuLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK05vZGUqIGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcoTm9kZSogbm9kZSkKK3sK
KyAgICBOb2RlKiBwcmV2aW91c05vZGUgPSAwOworICAgIE5vZGUqIHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBub2RlID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogMDsKKyAgICBmb3IgKDsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcmVu
ZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpIHx8IGhhc0FSZW5kZXJlZERlc2NlbmRhbnQobm9kZSwg
cHJldmlvdXNOb2RlKSB8fCByb290RWRpdGFibGVFbGVtZW50ID09IG5vZGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHByZXZpb3VzTm9kZTsKKyAgICAgICAgfQorICAgICAgICBwcmV2aW91c05v
ZGUgPSBub2RlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogTm9kZSogZW5jbG9zaW5nVGFi
bGVDZWxsKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4oZW5jbG9zaW5nTm9kZU9mVHlwZShwLCBpc1RhYmxlQ2VsbCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gOTY0MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDgg
QEAgTm9kZSogaGlnaGVzdEFuY2VzdG9yKE5vZGUqKTsKIE5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJv
b3QoY29uc3QgUG9zaXRpb24mKTsKIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNv
bnN0IFBvc2l0aW9uJiwgYm9vbCAoKm5vZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLAogICAgIEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5LCBO
b2RlKiBzdGF5V2l0aGluID0gMCk7Ci1Ob2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUq
KTsgICAKK05vZGUqIGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBydW5pbmcoTm9kZSopOworTm9kZSog
bG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKik7CiAKIE5vZGUqIGVuY2xvc2luZ0Jsb2NrKE5v
ZGUqLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSk7CiBOb2RlKiBlbmNsb3NpbmdUYWJsZUNlbGwoY29uc3QgUG9zaXRpb24mKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>