<?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>33587</bug_id>
          
          <creation_ts>2010-01-13 04:31:51 -0800</creation_ts>
          <short_desc>Web Inspector: Scrolling editor to the 20Kth line is not smooth.</short_desc>
          <delta_ts>2010-01-13 07:24:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180151</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-13 04:31:51 -0800</bug_when>
    <thetext>The reason is that highlighter is synchronous. It is fast, but when it is about 20K lines, it still takes seconds. Hence scrolling is not smooth. This change:

1) Simplifies TextModel so that it stores only per-line attributes, no per-char ones
2) Splits highlight() call into updateHighlight (called upon edits) and highlight (called form paint).
3) Invalidates highlight tail using flag instead of clearing it (so that highlight could recover and quit fast).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180154</commentid>
    <comment_count>1</comment_count>
      <attachid>46443</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-13 04:34:45 -0800</bug_when>
    <thetext>Created attachment 46443
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180158</commentid>
    <comment_count>2</comment_count>
      <attachid>46443</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-01-13 04:46:31 -0800</bug_when>
    <thetext>Comment on attachment 46443
[PATCH] Proposed change.

&gt; +            // User keeps updating the job in between of our timer ticks. Just reschedule self, don&apos;t eat CPU (he must be scrolling).

s/he must/they must/

&gt; +        // Highlight 1K lines chunk.
&gt; +        var toLine = Math.min(startLine + 500, this._requestedEndLine);

s/1K lines/500 lines/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180205</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-13 07:24:27 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/TextEditor.js
	M	WebCore/inspector/front-end/TextEditorHighlighter.js
	M	WebCore/inspector/front-end/TextEditorModel.js
Committed r53184</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46443</attachid>
            <date>2010-01-13 04:34:45 -0800</date>
            <delta_ts>2010-01-13 04:46:27 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>highlight_timer</filename>
            <type>text/plain</type>
            <size>15060</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWM5YWU3Yi4uZTM3ZGU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wMS0xMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTY3JvbGxpbmcgZWRpdG9yIHRvIHRo
ZSAyMEt0aCBsaW5lIGlzIG5vdCBzbW9vdGguCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNTg3CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1RleHRFZGl0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5faGlnaGxpZ2h0Q2hh
bmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3BhaW50
TGluZXNDb250aW51YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVk
aXRvckhpZ2hsaWdodGVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdo
bGlnaHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnBy
b3RvdHlwZS5oaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdo
bGlnaHRlci5wcm90b3R5cGUuX2hpZ2hsaWdodEluQ2h1bmtzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIucHJvdG90eXBlLnVwZGF0ZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZS5faGln
aGxpZ2h0TGluZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRl
ci5wcm90b3R5cGUuX2xleCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRp
dG9yTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLnByb3Rv
dHlwZS5fc2V0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLnBy
b3RvdHlwZS5zZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
b2RlbC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTW9kZWwucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSk6CisKIDIwMTAtMDEtMTAgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1RleHRFZGl0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRv
ci5qcwppbmRleCBhZGFjYzhkLi4zOGRjM2QwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dEVkaXRvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dEVkaXRvci5qcwpAQCAtMzEsNyArMzEsNyBAQAogV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IgPSBmdW5jdGlvbihwbGF0Zm9ybSkKIHsKICAgICB0aGlzLl90ZXh0TW9kZWwgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbCh0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpKTsK
LSAgICB0aGlzLl9oaWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hs
aWdodGVyKHRoaXMuX3RleHRNb2RlbCk7CisgICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0TW9kZWwsIHRoaXMuX2hp
Z2hsaWdodENoYW5nZWQuYmluZCh0aGlzKSk7CiAKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRl
eHQtZWRpdG9yIjsKQEAgLTE4Myw3ICsxODMsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgLy8gTGluZXMgc2hpZnRlZCwgaW52YWxpZGF0ZSBh
bGwgdW5kZXIgc3RhcnQgbGluZS4gQWxzbyBjbGVhciBsaW5lcyB0aGF0IG5vdyBhcmUgb3V0c2lk
ZSBtb2RlbCByYW5nZS4KICAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVMaW5lcyhuZXdSYW5n
ZS5zdGFydExpbmUsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50ICsgTWF0aC5tYXgoMCwgb2xk
UmFuZ2UuZW5kTGluZSAtIG5ld1JhbmdlLmVuZExpbmUpKTsKIAotICAgICAgICB0aGlzLl9pbnZh
bGlkYXRlSGlnaGxpZ2h0KG5ld1JhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgIGlmICh0aGlzLl9o
aWdobGlnaHRpbmdFbmFibGVkKSB7CisgICAgICAgICAgICB2YXIgbGFzdFZpc2libGVMaW5lID0g
TWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIHRoaXMuX29mZnNldFRvTGluZU51
bWJlcih0aGlzLl9zY3JvbGxUb3AgKyB0aGlzLl9jYW52YXMuaGVpZ2h0KSArIDEpOworICAgICAg
ICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KG5ld1JhbmdlLnN0YXJ0TGlu
ZSwgbGFzdFZpc2libGVMaW5lKTsKKyAgICAgICAgfQorCiAgICAgICAgIHRoaXMuX3VwZGF0ZVNp
emUobmV3UmFuZ2Uuc3RhcnRMaW5lLCBNYXRoLm1heChuZXdSYW5nZS5lbmRMaW5lLCBvbGRSYW5n
ZS5lbmRMaW5lKSk7CiAgICAgICAgIGlmIChvbGRSYW5nZS5saW5lc0NvdW50ICE9PSBuZXdSYW5n
ZS5saW5lc0NvdW50KSB7CiAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIG9mZnNldCBjYWNoZS4K
QEAgLTIwOCw2ICsyMTIsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICB0aGlzLl9wYWludCgpOwogICAgIH0sCiAKKyAgICBfaGlnaGxpZ2h0Q2hhbmdl
ZDogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludmFs
aWRhdGVMaW5lcyhmcm9tTGluZSwgdG9MaW5lICsgMSk7CisgICAgICAgIHRoaXMuX3BhaW50KCk7
CisgICAgfSwKKwogICAgIF91cGRhdGVTaXplOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUp
CiAgICAgewogICAgICAgICB2YXIgbmV3TGluZU51bWJlckRpZ2l0cyA9IHRoaXMuX2RlY2ltYWxE
aWdpdHModGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpOwpAQCAtMzIwLDEyICszMzAsMTIgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgICAg
IGxhc3RMaW5lID0gTWF0aC5taW4obGFzdExpbmUsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
KTsKIAorICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0aW5nRW5hYmxlZCkKKyAgICAgICAgICAg
IHRoaXMuX2hpZ2hsaWdodGVyLmhpZ2hsaWdodChsYXN0TGluZSk7CisKICAgICAgICAgaWYgKHRo
aXMuX3NlbGVjdGlvbi5zdGFydExpbmUgPT09IHRoaXMuX3NlbGVjdGlvbi5lbmRMaW5lICYmIGZp
cnN0TGluZSA8PSB0aGlzLl9zZWxlY3Rpb24uc3RhcnRMaW5lICYmIHRoaXMuX3NlbGVjdGlvbi5z
dGFydExpbmUgPCBsYXN0TGluZSkKICAgICAgICAgICAgIHRoaXMuX3BhaW50Q3VycmVudExpbmUo
dGhpcy5fc2VsZWN0aW9uLnN0YXJ0TGluZSk7CiAKLSAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdo
dGluZ0VuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5oaWdobGlnaHQoZmly
c3RMaW5lLCBsYXN0TGluZSk7Ci0KICAgICAgICAgdGhpcy5fcGFpbnRTZWxlY3Rpb24oZmlyc3RM
aW5lLCBsYXN0TGluZSk7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0TGluZTsgaSA8IGxh
c3RMaW5lOyArK2kpIHsKQEAgLTMzOCwxMCArMzQ4LDEwIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlcyhpLCAiaGlnaGxpZ2h0Iik7CisgICAgICAgICAgICB2YXIgaGlnaGxpZ2h0ZXJTdGF0
ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImhpZ2hsaWdodGVyLXN0YXRlIik7
CiAgICAgICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAtMTsKICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlc1tqXTsKKyAgICAgICAgICAgICAgICB2YXIg
YXR0cmlidXRlID0gaGlnaGxpZ2h0ZXJTdGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJpYnV0
ZXNbal07CiAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIWF0dHJpYnV0ZS5zdHls
ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOwpAQCAtNjMwLDE4ICs2NDAs
NiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uIH07CiAgICAgfSwKIAotICAgIF9pbnZhbGlk
YXRlSGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydExpbmUpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX2hpZ2hsaWdodGluZ0VuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZh
ciBmaXJzdFZpc2libGVMaW5lID0gTWF0aC5tYXgoMCwgdGhpcy5fb2Zmc2V0VG9MaW5lTnVtYmVy
KHRoaXMuX3Njcm9sbFRvcCkgLSAxKTsKLSAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IE1h
dGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCB0aGlzLl9vZmZzZXRUb0xpbmVOdW1i
ZXIodGhpcy5fc2Nyb2xsVG9wICsgdGhpcy5fY2FudmFzLmhlaWdodCkgKyAxKTsKLQotICAgICAg
ICB2YXIgZGFtYWdlID0gdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KHN0YXJ0TGluZSwgbGFz
dFZpc2libGVMaW5lKTsKLSAgICAgICAgZm9yICh2YXIgbGluZSBpbiBkYW1hZ2UpCi0gICAgICAg
ICAgICB0aGlzLl9pbnZhbGlkYXRlTGluZXMobGluZSwgcGFyc2VJbnQobGluZSkgKyAxKTsKLSAg
ICB9LAotCiAgICAgX3BhaW50U2VsZWN0aW9uOiBmdW5jdGlvbihmaXJzdExpbmUsIGxhc3RMaW5l
KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5pc0VtcHR5KCkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRlci5qcwpp
bmRleCA0OGRjZmM5Li5mMzdlODBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMKQEAgLTI5LDcgKzI5LDcgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlciA9IGZ1
bmN0aW9uKHRleHRNb2RlbCkKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIgPSBm
dW5jdGlvbih0ZXh0TW9kZWwsIGRhbWFnZUNhbGxiYWNrKQogewogICAgIHRoaXMuX3RleHRNb2Rl
bCA9IHRleHRNb2RlbDsKICAgICB0aGlzLl90b2tlbml6ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkph
dmFTY3JpcHRUb2tlbml6ZXIoKTsKQEAgLTQwLDYyICs0MCwxMzIgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JIaWdobGlnaHRlciA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKICAgICB0aGlzLl9zdHls
ZXNbInJlZ2V4Il0gPSAicmdiKDE5NiwgMjYsIDIyKSI7CiAgICAgdGhpcy5fc3R5bGVzWyJrZXl3
b3JkIl0gPSAicmdiKDE3MCwgMTMsIDE0NSkiOwogICAgIHRoaXMuX3N0eWxlc1sibnVtYmVyIl0g
PSAicmdiKDI4LCAwLCAyMDcpIjsKKworICAgIHRoaXMuX2RhbWFnZUNhbGxiYWNrID0gZGFtYWdl
Q2FsbGJhY2s7ICAgIAogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnBy
b3RvdHlwZSA9IHsKLSAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkK
KyAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uKGVuZExpbmUpCiAgICAgewotICAgICAgICAvLyBSZXdp
bmQgdG8gdGhlIGxhc3QgaGlnaGxpZ2h0ZWQgbGluZSB0byBnYWluIHByb3BlciBoaWdobGlnaHRl
ciBjb250ZXh0LgotICAgICAgICB3aGlsZSAoc3RhcnRMaW5lID4gMCAmJiAhdGhpcy5fdGV4dE1v
ZGVsLmdldEF0dHJpYnV0ZShzdGFydExpbmUgLSAxLCAwLCAiaGlnaGxpZ2h0ZXItc3RhdGUiKSkK
KyAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSB3b3JrIHRvIGRvLgorICAgICAgICB2
YXIgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGVuZExpbmUgLSAxLCAiaGln
aGxpZ2h0ZXItc3RhdGUiKQorICAgICAgICBpZiAoc3RhdGUgJiYgIXN0YXRlLm91dE9mRGF0ZSkg
eworICAgICAgICAgICAgLy8gTGFzdCBsaW5lIGlzIGhpZ2hsaWdodGVkLCBqdXN0IGV4aXQuCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRF
bmRMaW5lID0gZW5kTGluZTsKKworICAgICAgICBpZiAodGhpcy5faGlnaGxpZ2h0VGltZXIpIHsK
KyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgdGltZXIgc2NoZWR1bGVkLCBpdCB3aWxsIGNhdGNo
IHRoZSBuZXcgam9iIGJhc2VkIG9uIHRoZSBuZXcgZW5kTGluZSBzZXQuCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB3aWxsIGJlIGhpZ2hsaWdodGluZy4g
Rmlyc3QgcmV3aW5kIHRvIHRoZSBsYXN0IGhpZ2hsaWdodGVkIGxpbmUgdG8gZ2FpbiBwcm9wZXIg
aGlnaGxpZ2h0ZXIgY29udGV4dC4KKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGVuZExpbmU7Cisg
ICAgICAgIHdoaWxlIChzdGFydExpbmUgPiAwKSB7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB0
aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKHN0YXJ0TGluZSAtIDEsICJoaWdobGlnaHRlci1z
dGF0ZSIpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmICFzdGF0ZS5vdXRPZkRhdGUpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzdGFydExpbmUtLTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIERvIHNtYWxsIGhpZ2hsaWdodCBzeW5jaHJvbm91c2x5LiBUaGlzIHdpbGwg
cHJvdmlkZSBpbnN0YW50IGhpZ2hsaWdodCBvbiBQYWdlVXAgLyBQYWdlRG93biwgZ2VudGxlIHNj
cm9sbGluZy4KKyAgICAgICAgdmFyIHRvTGluZSA9IE1hdGgubWluKHN0YXJ0TGluZSArIDIwMCwg
ZW5kTGluZSk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpbmVzKHN0YXJ0TGluZSwgdG9MaW5l
KTsKKworICAgICAgICAvLyBTY2hlZHVsZSB0YWlsIGhpZ2hsaWdodCBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIGlmIChlbmRMaW5lID4gdG9MaW5lKQorICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0
VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX2hpZ2hsaWdodEluQ2h1bmtzLmJpbmQodGhpcywgdG9M
aW5lLCBlbmRMaW5lKSwgMTAwKTsKKyAgICB9LAorCisgICAgX2hpZ2hsaWdodEluQ2h1bmtzOiBm
dW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5f
aGlnaGxpZ2h0VGltZXI7CisKKyAgICAgICAgLy8gRmlyc3Qgd2UgYWx3YXlzIGNoZWNrIGlmIHdl
IGhhdmUgd29yayB0byBkby4gQ291bGQgYmUgdGhhdCB1c2VyIHNjcm9sbGVkIGJhY2sgYW5kIHdl
IGNhbiBxdWl0LgorICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmli
dXRlKHRoaXMuX3JlcXVlc3RlZEVuZExpbmUgLSAxLCAiaGlnaGxpZ2h0ZXItc3RhdGUiKTsKKyAg
ICAgICAgaWYgKHN0YXRlICYmICFzdGF0ZS5vdXRPZkRhdGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RlZEVuZExpbmUgIT09IGVuZExpbmUpIHsKKyAg
ICAgICAgICAgIC8vIFVzZXIga2VlcHMgdXBkYXRpbmcgdGhlIGpvYiBpbiBiZXR3ZWVuIG9mIG91
ciB0aW1lciB0aWNrcy4gSnVzdCByZXNjaGVkdWxlIHNlbGYsIGRvbid0IGVhdCBDUFUgKGhlIG11
c3QgYmUgc2Nyb2xsaW5nKS4KKyAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRpbWVyID0gc2V0
VGltZW91dCh0aGlzLl9oaWdobGlnaHRJbkNodW5rcy5iaW5kKHRoaXMsIHN0YXJ0TGluZSwgdGhp
cy5fcmVxdWVzdGVkRW5kTGluZSksIDIwMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBIaWdobGlnaHQgMUsgbGluZXMgY2h1bmsuCisgICAgICAgIHZhciB0
b0xpbmUgPSBNYXRoLm1pbihzdGFydExpbmUgKyA1MDAsIHRoaXMuX3JlcXVlc3RlZEVuZExpbmUp
OworICAgICAgICB0aGlzLl9oaWdobGlnaHRMaW5lcyhzdGFydExpbmUsIHRvTGluZSk7CisKKyAg
ICAgICAgLy8gU2NoZWR1bGUgdGFpbCBoaWdobGlnaHQgaWYgbmVjZXNzYXJ5LgorICAgICAgICBp
ZiAodG9MaW5lIDwgdGhpcy5fcmVxdWVzdGVkRW5kTGluZSkKKyAgICAgICAgICAgIHRoaXMuX2hp
Z2hsaWdodFRpbWVyID0gc2V0VGltZW91dCh0aGlzLl9oaWdobGlnaHRJbkNodW5rcy5iaW5kKHRo
aXMsIHRvTGluZSwgdGhpcy5fcmVxdWVzdGVkRW5kTGluZSksIDEwKTsKKyAgICB9LAorCisgICAg
dXBkYXRlSGlnaGxpZ2h0OiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAgeworICAg
ICAgICAvLyBTdGFydCBsaW5lIHdhcyBlZGl0ZWQsIHdlIHNob3VsZCBoaWdobGlnaHQgZXZlcnl0
aGluZyB1bnRpbCBlbmRMaW5lIHN5bmNocm9ub3VzbHkuCisgICAgICAgIHZhciBzdGF0ZSA9IHRo
aXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoc3RhcnRMaW5lLCAiaGlnaGxpZ2h0ZXItc3RhdGUi
KTsKKyAgICAgICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5vdXRPZkRhdGUpIHsKKyAgICAgICAgICAg
IC8vIEhpZ2hsaWdodGVyIGRpZCBub3QgcmVhY2ggdGhpcyBwb2ludCB5ZXQsIG5vdGhpbmcgdG8g
dXBkYXRlLiBJdCB3aWxsIHJlYWNoIGl0IG9uIHN1YnNlcXVlbnQgdGltZXIgdGljayBhbmQgZG8g
dGhlIGpvYi4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBy
ZXN0b3JlZCA9IHRoaXMuX2hpZ2hsaWdodExpbmVzKHN0YXJ0TGluZSwgZW5kTGluZSk7CiAKKyAg
ICAgICAgLy8gU2V0IGludmFsaWRhdGVkIGZsYWcgdG8gdGhlIHN1YnNlcXVlbnQgbGluZXMuCisg
ICAgICAgIGZvciAodmFyIGkgPSBlbmRMaW5lOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgdmFyIGhpZ2hsaWdodGVyU3RhdGUgPSB0aGlzLl90ZXh0
TW9kZWwuZ2V0QXR0cmlidXRlKGksICJoaWdobGlnaHRlci1zdGF0ZSIpOworICAgICAgICAgICAg
aWYgKGhpZ2hsaWdodGVyU3RhdGUpCisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZXJTdGF0ZS5v
dXRPZkRhdGUgPSAhcmVzdG9yZWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfSwKKworICAgIF9oaWdobGlnaHRMaW5lczogZnVuY3Rp
b24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAgIHsKICAgICAgICAgLy8gUmVzdG9yZSBoaWdobGln
aHRlciBjb250ZXh0IHRha2VuIGZyb20gcHJldmlvdXMgbGluZS4KLSAgICAgICAgdmFyIHN0YXRl
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShzdGFydExpbmUgLSAxLCAwLCAiaGlnaGxp
Z2h0ZXItc3RhdGUiKTsKLSAgICAgICAgIGlmIChzdGF0ZSkKLSAgICAgICAgICAgICB0aGlzLl90
b2tlbml6ZXIuY29uZGl0aW9uID0gc3RhdGUucG9zdENvbmRpdGlvbjsKLSAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXIuY29uZGl0aW9uID0gdGhpcy5fdG9rZW5pemVy
LmluaXRpYWxDb25kaXRpb247Ci0gICAgICAgIC8vIEVhY2ggbGluZSBoYXMgYXNzb2NpYXRlZCBz
dGF0ZSBhdHRyaWJ1dGUgd2l0aCBwcmUtIGFuZCBwb3N0LWhpZ2hsaWdodGVyIGNvbmRpdGlvbnMu
Ci0gICAgICAgIC8vIEhpZ2hsaWdodCBsaW5lcyBmcm9tIHJhbmdlIHVudGlsIHdlIGZpbmQgbGlu
ZSBwcmVjb25kaXRpb24gbWF0Y2hpbmcgaGlnaGxpZ2h0ZXIgc3RhdGUuCi0gICAgICAgIHZhciBk
YW1hZ2UgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVuZExpbmU7
ICsraSkgewotICAgICAgICAgICAgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRl
KGksIDAsICJoaWdobGlnaHRlci1zdGF0ZSIpOwotICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0
YXRlLnByZUNvbmRpdGlvbiA9PT0gdGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbikgewotICAgICAg
ICAgICAgICAgIC8vIEZvbGxvd2luZyBsaW5lcyBhcmUgdXAgdG8gZGF0ZSwgbm8gbmVlZCByZS1o
aWdobGlnaHQuCi0gICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbiA9IHN0
YXRlLnBvc3RDb25kaXRpb247Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoc3Rh
cnRMaW5lIC0gMSwgImhpZ2hsaWdodGVyLXN0YXRlIik7CisgICAgICAgIGlmIChzdGF0ZSkKKyAg
ICAgICAgICAgIHRoaXMuX3Rva2VuaXplci5jb25kaXRpb24gPSBzdGF0ZS5wb3N0Q29uZGl0aW9u
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXIuY29uZGl0aW9uID0g
dGhpcy5fdG9rZW5pemVyLmluaXRpYWxDb25kaXRpb247CiAKLSAgICAgICAgICAgIGRhbWFnZVtp
XSA9IHRydWU7CisgICAgICAgIHZhciBkYW1hZ2VkRnJvbSA9IHN0YXJ0TGluZTsKKyAgICAgICAg
dmFyIGRhbWFnZWRUbyA9IHN0YXJ0TGluZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGlu
ZTsgaSA8IGVuZExpbmU7ICsraSkgeworICAgICAgICAgICAgZGFtYWdlZFRvID0gaTsKIAogICAg
ICAgICAgICAgc3RhdGUgPSB7fTsKICAgICAgICAgICAgIHN0YXRlLnByZUNvbmRpdGlvbiA9IHRo
aXMuX3Rva2VuaXplci5jb25kaXRpb247CisgICAgICAgICAgICBzdGF0ZS5hdHRyaWJ1dGVzID0g
e307CiAKLSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGVzKGksICJo
aWdobGlnaHQiKTsKLSAgICAgICAgICAgIHRoaXMuX2xleCh0aGlzLl90ZXh0TW9kZWwubGluZShp
KSwgaSk7CisgICAgICAgICAgICB0aGlzLl9sZXgodGhpcy5fdGV4dE1vZGVsLmxpbmUoaSksIGks
IHN0YXRlLmF0dHJpYnV0ZXMpOwogCiAgICAgICAgICAgICBzdGF0ZS5wb3N0Q29uZGl0aW9uID0g
dGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbjsKLSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5h
ZGRBdHRyaWJ1dGUoaSwgMCwgImhpZ2hsaWdodGVyLXN0YXRlIiwgc3RhdGUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGVuZExpbmUs
IDAsICJoaWdobGlnaHRlci1zdGF0ZSIpOworICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNl
dEF0dHJpYnV0ZShpLCAiaGlnaGxpZ2h0ZXItc3RhdGUiLCBzdGF0ZSk7CiAKLSAgICAgICAgaWYg
KHN0YXRlICYmIHN0YXRlLnByZUNvbmRpdGlvbiAhPT0gdGhpcy5fdG9rZW5pemVyLmNvbmRpdGlv
bikgewotICAgICAgICAgICAgLy8gUmVxdWVzdGVkIGhpZ2hsaWdodCByYW5nZSBpcyBvdmVyLCBi
dXQgd2UgZGlkIG5vdCByZWNvdmVyLiBJbnZhbGlkYXRlIHRhaWwgaGlnaGxpZ2h0aW5nLgotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IGVuZExpbmU7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1
dGVzKGksICJoaWdobGlnaHRlci1zdGF0ZSIpOworICAgICAgICAgICAgdmFyIG5leHRMaW5lU3Rh
dGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGkgKyAxLCAiaGlnaGxpZ2h0ZXItc3Rh
dGUiKTsKKyAgICAgICAgICAgIGlmIChuZXh0TGluZVN0YXRlICYmIG5leHRMaW5lU3RhdGUucHJl
Q29uZGl0aW9uID09PSBzdGF0ZS5wb3N0Q29uZGl0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8g
Rm9sbG93aW5nIGxpbmVzIGFyZSB1cCB0byBkYXRlLCBubyBuZWVkIHJlLWhpZ2hsaWdodC4KKyAg
ICAgICAgICAgICAgICB0aGlzLl9kYW1hZ2VDYWxsYmFjayhkYW1hZ2VkRnJvbSwgZGFtYWdlZFRv
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICByZXR1cm4gZGFtYWdlOworICAgICAgICB0aGlzLl9kYW1hZ2VDYWxsYmFjayhk
YW1hZ2VkRnJvbSwgZGFtYWdlZFRvKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCiAK
LSAgICBfbGV4OiBmdW5jdGlvbihsaW5lLCBsaW5lTnVtYmVyKSB7CisgICAgX2xleDogZnVuY3Rp
b24obGluZSwgbGluZU51bWJlciwgYXR0cmlidXRlcykgewogICAgICAgICAgdGhpcy5fdG9rZW5p
emVyLmxpbmUgPSBsaW5lOwogICAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgICBkbyB7
CiAgICAgICAgICAgICAgdmFyIG5ld0NvbHVtbiA9IHRoaXMuX3Rva2VuaXplci5uZXh0VG9rZW4o
Y29sdW1uKTsKICAgICAgICAgICAgICB2YXIgdG9rZW5UeXBlID0gdGhpcy5fdG9rZW5pemVyLnRv
a2VuVHlwZTsKICAgICAgICAgICAgICBpZiAodG9rZW5UeXBlKQotICAgICAgICAgICAgICAgICB0
aGlzLl90ZXh0TW9kZWwuYWRkQXR0cmlidXRlKGxpbmVOdW1iZXIsIGNvbHVtbiwgImhpZ2hsaWdo
dCIsIHsgbGVuZ3RoOiBuZXdDb2x1bW4gLSBjb2x1bW4sIHN0eWxlOiB0aGlzLl9zdHlsZXNbdG9r
ZW5UeXBlXSB9KTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tjb2x1bW5dID0geyBsZW5n
dGg6IG5ld0NvbHVtbiAtIGNvbHVtbiwgc3R5bGU6IHRoaXMuX3N0eWxlc1t0b2tlblR5cGVdIH07
CiAgICAgICAgICAgICAgY29sdW1uID0gbmV3Q29sdW1uOwogICAgICAgICAgfSB3aGlsZSAoY29s
dW1uIDwgbGluZS5sZW5ndGgpCiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0RWRpdG9yTW9kZWwuanMKaW5kZXggNWM1YTc0ZS4uNjc1YjBjZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvck1vZGVsLmpzCkBAIC0xMzYsNyArMTM2
LDYgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgX3Nl
dExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHRleHQpCiAgICAgewogICAgICAgICB0aGlzLl9s
aW5lc1tsaW5lTnVtYmVyXSA9IHRleHQ7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9hdHRyaWJ1dGVz
W2xpbmVOdW1iZXJdOwogICAgIH0sCiAKICAgICBfcmVtb3ZlTGluZXM6IGZ1bmN0aW9uKGZyb21M
aW5lLCBjb3VudCkKQEAgLTE4NiwzNCArMTg1LDIzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gY2xpcC5qb2luKCJcbiIpOwogICAg
IH0sCiAKLSAgICBhZGRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgbmFtZSwgdmFs
dWUpCisgICAgc2V0QXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lLCB2YWx1ZSkKICAgICB7
CiAgICAgICAgIHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0ZXNbbGluZV07CiAgICAgICAgIGlm
ICghYXR0cnMpIHsKICAgICAgICAgICAgIGF0dHJzID0gW107CiAgICAgICAgICAgICB0aGlzLl9h
dHRyaWJ1dGVzW2xpbmVdID0gYXR0cnM7CiAgICAgICAgIH0KLSAgICAgICAgdmFyIGZhbWlseSA9
IGF0dHJzW25hbWVdOwotICAgICAgICBpZiAoIWZhbWlseSkgewotICAgICAgICAgICAgZmFtaWx5
ID0gW107Ci0gICAgICAgICAgICBhdHRyc1tuYW1lXSA9IGZhbWlseTsKLSAgICAgICAgfQotICAg
ICAgICBmYW1pbHlbY29sdW1uXSA9IHZhbHVlOwotICAgIH0sCi0KLSAgICBnZXRBdHRyaWJ1dGU6
IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgbmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBmYW1pbHkg
PSB0aGlzLmdldEF0dHJpYnV0ZXMobGluZSwgbmFtZSk7Ci0gICAgICAgIHJldHVybiBmYW1pbHkg
PyBmYW1pbHlbY29sdW1uXSA6IG51bGw7CisgICAgICAgIGF0dHJzW25hbWVdID0gdmFsdWU7CiAg
ICAgfSwKIAotICAgIGdldEF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGxpbmUsIG5hbWUpCisgICAgZ2V0
QXR0cmlidXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lKQogICAgIHsKICAgICAgICAgdmFyIGF0dHJz
ID0gdGhpcy5fYXR0cmlidXRlc1tsaW5lXTsKICAgICAgICAgcmV0dXJuIGF0dHJzID8gYXR0cnNb
bmFtZV0gOiBudWxsOwogICAgIH0sCiAKLSAgICByZW1vdmVBdHRyaWJ1dGVzOiBmdW5jdGlvbihs
aW5lLCBuYW1lKQorICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSkKICAg
ICB7CiAgICAgICAgIHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0ZXNbbGluZV07CiAgICAgICAg
IGlmIChhdHRycykK
</data>
<flag name="review"
          id="28701"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>