<?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>113364</bug_id>
          
          <creation_ts>2013-03-26 21:01:11 -0700</creation_ts>
          <short_desc>Selection code spends a lot of time in InlineTextBox::localSelectionRect</short_desc>
          <delta_ts>2013-03-27 22:37:22 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>113358</dependson>
          <blocked>113478</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>esprehn+autocc</cc>
    
    <cc>esprehn</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864204</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-26 21:01:11 -0700</bug_when>
    <thetext>As far as I&apos;ve sampled in the bug 113358, we&apos;re spending 5+% of time in InlineTextBox::localSelectionRect computing font width.
But there is no need to do this when we&apos;re selecting the entire line box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864205</commentid>
    <comment_count>1</comment_count>
      <attachid>195214</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-26 21:01:51 -0700</bug_when>
    <thetext>Created attachment 195214
Work in progress 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864206</commentid>
    <comment_count>2</comment_count>
      <attachid>195215</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-26 21:02:56 -0700</bug_when>
    <thetext>Created attachment 195215
A/B test result with WIP1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864209</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-03-26 21:03:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/13513153&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864211</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 21:11:31 -0700</bug_when>
    <thetext>Attachment 195214 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/rendering/InlineTextBox.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/InlineTextBox.cpp:211:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 1 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>864664</commentid>
    <comment_count>5</comment_count>
      <attachid>195214</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-03-27 10:36:54 -0700</bug_when>
    <thetext>Comment on attachment 195214
Work in progress 1

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

Missing ChangeLog file

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:211
&gt;&gt; +    if (sPos != 0 || ePos != static_cast&lt;int&gt;(m_len))
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

Please fix the style issue and add a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864667</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-27 10:40:16 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 195214 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195214&amp;action=review
&gt; 
&gt; Missing ChangeLog file
&gt; 
&gt; &gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:211
&gt; &gt;&gt; +    if (sPos != 0 || ePos != static_cast&lt;int&gt;(m_len))
&gt; &gt; 
&gt; &gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; 
&gt; Please fix the style issue and add a comment.

Oh, oops. This wasn&apos;t up for review.  The one on https://bugs.webkit.org/show_bug.cgi?id=113358 is. I&apos;m trying to add the performance test first so that people can verify my assertion that my patch improves the performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864701</commentid>
    <comment_count>7</comment_count>
      <attachid>195358</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-27 11:00:47 -0700</bug_when>
    <thetext>Created attachment 195358
Ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864706</commentid>
    <comment_count>8</comment_count>
      <attachid>195358</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-03-27 11:05:45 -0700</bug_when>
    <thetext>Comment on attachment 195358
Ready for review

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:209
&gt; +    FloatPoint startingPoint = FloatPoint(logicalLeft(), selTop);

I would add a comment here about the optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864835</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-27 13:49:17 -0700</bug_when>
    <thetext>Committed r147008: &lt;http://trac.webkit.org/changeset/147008&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195214</attachid>
            <date>2013-03-26 21:01:51 -0700</date>
            <delta_ts>2013-03-27 11:00:40 -0700</delta_ts>
            <desc>Work in progress 1</desc>
            <filename>wip113364</filename>
            <type>text/plain</type>
            <size>888</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlz
aW9uIDE0NjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiwxMiBAQAogICAgIGlmIChyZXNwZWN0SHlw
aGVuKQogICAgICAgICBlbmRQb3MgPSB0ZXh0UnVuLmxlbmd0aCgpOwogCi0gICAgTGF5b3V0UmVj
dCByID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IEZsb2F0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9z
KSk7CisgICAgRmxvYXRQb2ludCBzdGFydGluZ1BvaW50ID0gRmxvYXRQb2ludChsb2dpY2FsTGVm
dCgpLCBzZWxUb3ApOworICAgIExheW91dFJlY3QgcjsKKyAgICBpZiAoc1BvcyAhPSAwIHx8IGVQ
b3MgIT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgICAgIHIgPSBlbmNsb3NpbmdJbnRS
ZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc3RhcnRpbmdQb2ludCwgc2Vs
SGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgZWxzZQorICAgICAgICByID0gZW5jbG9zaW5nSW50
UmVjdChGbG9hdFJlY3Qoc3RhcnRpbmdQb2ludCwgRmxvYXRTaXplKG1fbG9naWNhbFdpZHRoLCBz
ZWxIZWlnaHQpKSk7CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsK
ICAgICBpZiAoci54KCkgPiBsb2dpY2FsUmlnaHQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>195215</attachid>
            <date>2013-03-26 21:02:56 -0700</date>
            <delta_ts>2013-03-26 21:02:56 -0700</delta_ts>
            <desc>A/B test result with WIP1</desc>
            <filename>PerformanceTestsResults.html</filename>
            <type>text/html</type>
            <size>25365</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUt
cGxvdHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7
CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEg
ewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24g
LnRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBh
ZGRpbmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAw
cHg7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3Vu
ZDogd2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJh
Y2tncm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50
ZXI7CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwog
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBc
MjVCOCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsK
fQoKdGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRk
LmNvbXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0
dGVyIHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoK
dGQubWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3Vu
ZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShy
Z2IoMjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjog
aW5zZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7
CiAgICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBo
YW5kOwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xk
Owp9CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5l
LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAx
cHggdHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAj
ZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUs
IDIzNSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czog
NXB4Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEw
cHg7Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3Bh
biBjbGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpS
ZWZlcmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48L3NwYW4+Cjwv
ZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAo
KSB7CiAgICB2YXIgalF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyc7CiAgICB2YXIgcGx1Z2lucyA9IFsnUGVy
Zm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1hbmNl
VGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnLAogICAgICAgICdQZXJm
b3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzJ107CiAgICB2YXIgbG9jYWxQYXRo
ID0gJy9Wb2x1bWVzL0RhdGEvd2Via2l0JzsKICAgIHZhciByZW1vdGVQYXRoID0gJ2h0dHBzOi8v
c3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsnOwogICAgdmFyIG51bWJlck9m
RmFpbHVyZXMgPSAwOwogICAgdmFyIHN0YXJ0ZWRMb2FkaW5nUGx1Z2lucyA9IGZhbHNlOwogICAg
dmFyIG51bWJlck9mTG9hZGVkUGx1Z2lucyA9IDA7CgogICAgZnVuY3Rpb24gbG9hZFNjcmlwdChz
cmMsIGxvYWRlZCwgZmFpbGVkKSB7CiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7CiAgICAgICAg
c2NyaXB0LnNyYyA9IHNyYzsKICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZGVkOwogICAgICAg
IGlmIChmYWlsZWQpCiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZmFpbGVkOwogICAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBs
b2FkUGx1Z2lucyh0cnVua1BhdGgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdp
bnMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIGxvYWRTY3JpcHQodHJ1bmtQYXRoICsgJy8nICsg
cGx1Z2luc1tpXSwgbG9hZGVkUGx1Z2luLCBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2lu
c1tpXSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvYWRlZFBsdWdpbigpIHsKICAgICAgICBudW1i
ZXJPZkxvYWRlZFBsdWdpbnMrKzsKICAgICAgICBpZiAobnVtYmVyT2ZMb2FkZWRQbHVnaW5zID09
IHBsdWdpbnMubGVuZ3RoKQogICAgICAgICAgICBzZXRUaW1lb3V0KGluaXQsIDApOyAgICAgICAg
ICAgIAogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhaWxlZFRvTG9hZFBsdWdpbihwbHVnaW4p
IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBhbGVydCgiRmFpbGVkIHRvIGxvYWQgIiAr
IHBsdWdpbik7IH0KICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVMb2FkZWRKUXVlcnkodHJ1bmtQ
YXRoKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgbG9hZFBsdWdpbnModHJ1bmtQYXRo
KTsgfQogICAgfQoKICAgIGxvYWRTY3JpcHQobG9jYWxQYXRoICsgJy8nICsgalF1ZXJ5LAogICAg
ICAgIGNyZWF0ZUxvYWRlZEpRdWVyeShsb2NhbFBhdGgpLAogICAgICAgIGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgbG9hZFNjcmlwdChyZW1vdGVQYXRoICsgJy8nICsgalF1ZXJ5LAogICAgICAg
ICAgICAgICAgY3JlYXRlTG9hZGVkSlF1ZXJ5KHJlbW90ZVBhdGgpLAogICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKCkgeyBhbGVydCgiRmFpbGVkIHRvIGxvYWQgalF1ZXJ5LiIpOyB9KTsKICAgICAg
ICB9KTsKfSkoKTsKCmZ1bmN0aW9uIFRlc3RSZXN1bHQobWV0cmljLCB2YWx1ZXMsIGFzc29jaWF0
ZWRSdW4pIHsKICAgIGlmICh2YWx1ZXNbMF0gaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgIHZh
ciBmbGF0dGVuZWRWYWx1ZXMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVl
cy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgZmxhdHRlbmVkVmFsdWVzID0gZmxhdHRlbmVkVmFs
dWVzLmNvbmNhdCh2YWx1ZXNbaV0pOwogICAgICAgIHZhbHVlcyA9IGZsYXR0ZW5lZFZhbHVlczsK
ICAgIH0KCiAgICB0aGlzLnRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KICAg
IHRoaXMudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbiAo
dmFsdWUpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiB2YWx1ZTsgfSk7IH0KICAg
IHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gU3RhdGlzdGljcy5zdW0o
dmFsdWVzKSAvIHZhbHVlcy5sZW5ndGg7IH0KICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiB0aGlzLnVuc2NhbGVkTWVhbigpOyB9CiAg
ICB0aGlzLm1pbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkg
KiBTdGF0aXN0aWNzLm1pbih2YWx1ZXMpOyB9CiAgICB0aGlzLm1heCA9IGZ1bmN0aW9uICgpIHsg
cmV0dXJuIG1ldHJpYy5zY2FsaW5nRmFjdG9yKCkgKiBTdGF0aXN0aWNzLm1heCh2YWx1ZXMpOyB9
CiAgICB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhID0gZnVuY3Rpb24gKCkgewogICAgICAg
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlzdGljcy5jb25maWRlbmNlSW50
ZXJ2YWxEZWx0YSgwLjk1LCB2YWx1ZXMubGVuZ3RoLAogICAgICAgICAgICBTdGF0aXN0aWNzLnN1
bSh2YWx1ZXMpLCBTdGF0aXN0aWNzLnNxdWFyZVN1bSh2YWx1ZXMpKTsKICAgIH0KICAgIHRoaXMu
Y29uZmlkZW5jZUludGVydmFsRGVsdGFSYXRpbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMu
Y29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAvIHRoaXMubWVhbigpOyB9CiAgICB0aGlzLnBlcmNl
bnREaWZmZXJlbmNlID0gZnVuY3Rpb24ob3RoZXIpIHsgcmV0dXJuIChvdGhlci51bnNjYWxlZE1l
YW4oKSAtIHRoaXMudW5zY2FsZWRNZWFuKCkpIC8gdGhpcy51bnNjYWxlZE1lYW4oKTsgfQogICAg
dGhpcy5pc1N0YXRpc3RpY2FsbHlTaWduaWZpY2FudCA9IGZ1bmN0aW9uIChvdGhlcikgewogICAg
ICAgIHZhciBkaWZmID0gTWF0aC5hYnMob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwogICAg
ICAgIHJldHVybiBkaWZmID4gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYg
PiBvdGhlci5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpOwogICAgfQogICAgdGhpcy5ydW4gPSBm
dW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lhdGVkUnVuOyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4o
ZW50cnkpIHsKICAgIHRoaXMuZGVzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnRy
eVsnZGVzY3JpcHRpb24nXTsgfQogICAgdGhpcy53ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIGVudHJ5WydyZXZpc2lvbnMnXVsnV2ViS2l0J11bJ3JldmlzaW9uJ107IH0KICAg
IHRoaXMubGFiZWwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGxhYmVsID0gJ3InICsgdGhp
cy53ZWJraXRSZXZpc2lvbigpOwogICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKCkpCiAgICAg
ICAgICAgIGxhYmVsICs9ICcgJmRhc2g7ICcgKyB0aGlzLmRlc2NyaXB0aW9uKCk7CiAgICAgICAg
cmV0dXJuIGxhYmVsOwogICAgfQp9CgpmdW5jdGlvbiBQZXJmVGVzdE1ldHJpYyhuYW1lLCBtZXRy
aWMpIHsKICAgIHZhciB0ZXN0UmVzdWx0cyA9IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxs
OwogICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOwogICAgdmFyIHVuaXQgPSB7J0Zy
YW1lUmF0ZSc6ICdmcHMnLCAnUnVucyc6ICdydW5zL3MnLCAnVGltZSc6ICdtcycsICdNYWxsb2Mn
OiAnYnl0ZXMnLCAnSlNIZWFwJzogJ2J5dGVzJ31bbWV0cmljXTsKCiAgICAvLyBXZSBjYW4ndCBk
byB0aGlzIGluIFRlc3RSZXN1bHQgYmVjYXVzZSBhbGwgcmVzdWx0cyBmb3IgZWFjaCB0ZXN0IG5l
ZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3IuCiAg
ICBmdW5jdGlvbiBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCkgewogICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgYmUgYWRqdXN0aW5nIHVuaXRzIG9uIGV2ZXJ5IHRlc3QgcmVzdWx0
LgogICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb24gdGhlIGZpcnN0IHRlc3QuCiAgICAg
ICAgaWYgKCF0ZXN0UmVzdWx0cy5sZW5ndGggfHwgY2FjaGVkVW5pdCkKICAgICAgICAgICAgcmV0
dXJuOwoKICAgICAgICB2YXIgbWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAv
LyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9
IHVuaXQgPT0gJ2J5dGVzJyA/IDEwMjQgOiAxMDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBr
aWxvICoga2lsbyAmJiB1bml0ICE9ICdtcycpIHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0Zh
Y3RvciA9IDEgLyBraWxvIC8ga2lsbzsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1
bml0OwogICAgICAgIH0gZWxzZSBpZiAobWVhbiA+IDEwICoga2lsbykgewogICAgICAgICAgICBj
YWNoZWRTY2FsaW5nRmFjdG9yID0gMSAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1
bml0ID09ICdtcycgPyAncycgOiAoJ0sgJyArIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0g
dW5pdDsKICAgICAgICB9CiAgICB9CgogICAgdGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gbmFtZSArICc6JyArIG1ldHJpYzsgfQogICAgdGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlv
biAoKSB7IHJldHVybiBtZXRyaWMgPT0gJ0pTSGVhcCcgfHwgbWV0cmljID09ICdNYWxsb2MnOyB9
CiAgICB0aGlzLmFkZFJlc3VsdCA9IGZ1bmN0aW9uIChuZXdSZXN1bHQpIHsKICAgICAgICB0ZXN0
UmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7CiAgICAgICAgY2FjaGVkVW5pdCA9IG51bGw7CiAgICAg
ICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IG51bGw7CiAgICB9CiAgICB0aGlzLnJlc3VsdHMgPSBm
dW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0UmVzdWx0czsgfQogICAgdGhpcy5zY2FsaW5nRmFjdG9y
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOwog
ICAgICAgIHJldHVybiBjYWNoZWRTY2FsaW5nRmFjdG9yOwogICAgfQogICAgdGhpcy51bml0ID0g
ZnVuY3Rpb24gKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKICAg
ICAgICByZXR1cm4gY2FjaGVkVW5pdDsKICAgIH0KICAgIHRoaXMuc21hbGxlcklzQmV0dGVyID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5pdCA9PSAnbXMnIHx8IHVuaXQgPT0gJ2J5dGVzJzsgfQp9
Cgp2YXIgcGxvdENvbG9yID0gJ3JnYigyMzAsNTAsNTApJzsKdmFyIHN1YnBvaW50c1Bsb3RPcHRp
b25zID0gewogICAgbGluZXM6IHtzaG93OnRydWUsIGxpbmVXaWR0aDogMH0sCiAgICBjb2xvcjog
cGxvdENvbG9yLAogICAgcG9pbnRzOiB7c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfSwKICAgIGJhcnM6
IHtzaG93OiBmYWxzZX19OwoKdmFyIG1haW5QbG90T3B0aW9ucyA9IHsKICAgIHhheGlzOiB7CiAg
ICAgICAgbWluOiAtMC41LAogICAgICAgIHRpY2tTaXplOiAxLAogICAgfSwKICAgIGNyb3NzaGFp
cjogeyBtb2RlOiAneScgfSwKICAgIHNlcmllczogeyBzaGFkb3dTaXplOiAwIH0sCiAgICBiYXJz
OiB7c2hvdzogdHJ1ZSwgYWxpZ246ICdjZW50ZXInLCBiYXJXaWR0aDogMC41fSwKICAgIGxpbmVz
OiB7IHNob3c6IGZhbHNlIH0sCiAgICBwb2ludHM6IHsgc2hvdzogdHJ1ZSB9LAogICAgZ3JpZDog
ewogICAgICAgIGJvcmRlcldpZHRoOiAxLAogICAgICAgIGJvcmRlckNvbG9yOiAnI2NjYycsCiAg
ICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsCiAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAog
ICAgICAgIGF1dG9IaWdobGlnaHQ6IGZhbHNlLAogICAgfQp9OwoKdmFyIHRpbWVQbG90T3B0aW9u
cyA9IHsKICAgIHlheGlzOiB7IHNob3c6IGZhbHNlIH0sCiAgICB4YXhpczogeyBzaG93OiBmYWxz
ZSB9LAogICAgbGluZXM6IHsgc2hvdzogdHJ1ZSB9LAogICAgZ3JpZDogeyBib3JkZXJXaWR0aDog
MSwgYm9yZGVyQ29sb3I6ICcjY2NjJyB9LAogICAgY29sb3JzOiBbIHBsb3RDb2xvciBdCn07Cgpm
dW5jdGlvbiBjcmVhdGVQbG90KGNvbnRhaW5lciwgdGVzdCkgewogICAgdmFyIHNlY3Rpb24gPSAk
KCc8c2VjdGlvbj48ZGl2IGNsYXNzPSJwbG90Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0aW1lLXBsb3Rz
Ij48L2Rpdj4nCiAgICAgICAgKyAnPHNwYW4gY2xhc3M9InRvb2x0aXAiPjwvc3Bhbj48L3NlY3Rp
b24+Jyk7CiAgICBzZWN0aW9uLmNoaWxkcmVuKCcucGxvdCcpLmNzcyh7J3dpZHRoJzogKDEwMCAq
IHRlc3QucmVzdWx0cygpLmxlbmd0aCArIDI1KSArICdweCcsICdoZWlnaHQnOiAnMzAwcHgnfSk7
CiAgICAkKGNvbnRhaW5lcikuYXBwZW5kKHNlY3Rpb24pOwoKICAgIHZhciBwbG90Q29udGFpbmVy
ID0gc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKTsKICAgIHZhciBtaW5Jc1plcm8gPSB0cnVlOwog
ICAgYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFpbmVyLCBtaW5Jc1plcm8pOwoKICAgIGF0dGFj
aFRpbWVQbG90cyh0ZXN0LCBzZWN0aW9uLmNoaWxkcmVuKCcudGltZS1wbG90cycpKTsKCiAgICB2
YXIgdG9vbHRpcCA9IHNlY3Rpb24uY2hpbGRyZW4oJy50b29sdGlwJyk7CiAgICBwbG90Q29udGFp
bmVyLmJpbmQoJ3Bsb3Rob3ZlcicsIGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIGl0ZW0pIHsK
ICAgICAgICBpZiAoaXRlbSkgewogICAgICAgICAgICB2YXIgcG9zdGZpeCA9IGl0ZW0uc2VyaWVz
LmlkID8gJyAoJyArIGl0ZW0uc2VyaWVzLmlkICsgJyknIDogJyc7CiAgICAgICAgICAgIHRvb2x0
aXAuaHRtbChpdGVtLmRhdGFwb2ludFsxXS50b1ByZWNpc2lvbig0KSArIHBvc3RmaXgpOwogICAg
ICAgICAgICB2YXIgc2VjdGlvbk9mZnNldCA9ICQoc2VjdGlvbikub2Zmc2V0KCk7CiAgICAgICAg
ICAgIHRvb2x0aXAuY3NzKHtsZWZ0OiBpdGVtLnBhZ2VYIC0gc2VjdGlvbk9mZnNldC5sZWZ0IC0g
dG9vbHRpcC5vdXRlcldpZHRoKCkgLyAyLCB0b3A6IGl0ZW0ucGFnZVkgLSBzZWN0aW9uT2Zmc2V0
LnRvcCArIDEwfSk7CiAgICAgICAgICAgIHRvb2x0aXAuZmFkZUluKDIwMCk7CiAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpOwogICAgfSk7CiAgICBwbG90Q29udGFpbmVy
Lm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwog
ICAgcGxvdENvbnRhaW5lci5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwogICAgICAgIG1pbklzWmVybyA9ICFtaW5Jc1plcm87CiAgICAgICAg
YXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFpbmVyLCBtaW5Jc1plcm8pOwogICAgfSk7CgogICAg
cmV0dXJuIHNlY3Rpb247Cn0KCmZ1bmN0aW9uIGF0dGFjaFRpbWVQbG90cyh0ZXN0LCBjb250YWlu
ZXIpIHsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1bHRzKCk7CiAgICB2YXIgYXR0YWNoZWRQ
bG90ID0gZmFsc2U7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysp
IHsKICAgICAgICBjb250YWluZXIuYXBwZW5kKCc8ZGl2PjwvZGl2PicpOwogICAgICAgIHZhciB2
YWx1ZXMgPSByZXN1bHRzW2ldLnZhbHVlcygpOwogICAgICAgIGlmICghdmFsdWVzKQogICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICBhdHRhY2hlZFBsb3QgPSB0cnVlOwoKICAgICAgICAkLnBs
b3QoY29udGFpbmVyLmNoaWxkcmVuKCkubGFzdCgpLCBbdmFsdWVzLm1hcChmdW5jdGlvbiAodmFs
dWUsIGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHZhbHVlXTsgfSldLAogICAgICAgICAgICAkLmV4
dGVuZCh0cnVlLCB7fSwgdGltZVBsb3RPcHRpb25zLCB7eWF4aXM6IHttaW46IE1hdGgubWluLmFw
cGx5KE1hdGgsIHZhbHVlcykgKiAwLjksIG1heDogTWF0aC5tYXguYXBwbHkoTWF0aCwgdmFsdWVz
KSAqIDEuMX0sCiAgICAgICAgICAgICAgICB4YXhpczoge21pbjogLTAuNSwgbWF4OiB2YWx1ZXMu
bGVuZ3RoIC0gMC41fX0pKTsKICAgIH0KICAgIGlmICghYXR0YWNoZWRQbG90KQogICAgICAgIGNv
bnRhaW5lci5jaGlsZHJlbigpLnJlbW92ZSgpOwp9CgpmdW5jdGlvbiBhdHRhY2hQbG90KHRlc3Qs
IHBsb3RDb250YWluZXIsIG1pbklzWmVybykgewogICAgdmFyIHJlc3VsdHMgPSB0ZXN0LnJlc3Vs
dHMoKTsKCiAgICB2YXIgdmFsdWVzID0gcmVzdWx0cy5yZWR1Y2UoZnVuY3Rpb24gKHZhbHVlcywg
cmVzdWx0LCBpbmRleCkgewogICAgICAgIHZhciBuZXdWYWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7
CiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlcyA/IHZhbHVlcy5jb25jYXQobmV3VmFsdWVzLm1hcChm
dW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIFtpbmRleCwgdmFsdWVdOyB9KSkgOiB2YWx1ZXM7CiAg
ICB9LCBbXSk7CgogICAgdmFyIHBsb3REYXRhID0gWyQuZXh0ZW5kKHRydWUsIHt9LCBzdWJwb2lu
dHNQbG90T3B0aW9ucywge2RhdGE6IHZhbHVlc30pXTsKICAgIHBsb3REYXRhLnB1c2goe2lkOiAn
Jm11OycsIGRhdGE6IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVy
biBbaW5kZXgsIHJlc3VsdC5tZWFuKCldOyB9KSwgY29sb3I6IHBsb3RDb2xvcn0pOwoKICAgIHZh
ciBvdmVyYWxsTWF4ID0gU3RhdGlzdGljcy5tYXgocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3Vs
dCwgaW5kZXgpIHsgcmV0dXJuIHJlc3VsdC5tYXgoKTsgfSkpOwogICAgdmFyIG92ZXJhbGxNaW4g
PSBTdGF0aXN0aWNzLm1pbihyZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyBy
ZXR1cm4gcmVzdWx0Lm1pbigpOyB9KSk7CiAgICB2YXIgbWFyZ2luID0gKG92ZXJhbGxNYXggLSBv
dmVyYWxsTWluKSAqIDAuMTsKICAgIHZhciBjdXJyZW50UGxvdE9wdGlvbnMgPSAkLmV4dGVuZCh0
cnVlLCB7fSwgbWFpblBsb3RPcHRpb25zLCB7eWF4aXM6IHsKICAgICAgICBtaW46IG1pbklzWmVy
byA/IDAgOiBvdmVyYWxsTWluIC0gbWFyZ2luLAogICAgICAgIG1heDogbWluSXNaZXJvID8gb3Zl
cmFsbE1heCAqIDEuMSA6IG92ZXJhbGxNYXggKyBtYXJnaW59fSk7CgogICAgY3VycmVudFBsb3RP
cHRpb25zLnhheGlzLm1heCA9IHJlc3VsdHMubGVuZ3RoIC0gMC41OwogICAgY3VycmVudFBsb3RP
cHRpb25zLnhheGlzLnRpY2tzID0gcmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgp
IHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0LnJ1bigpLmxhYmVsKCldOyB9KTsKCiAgICAkLnBsb3Qo
cGxvdENvbnRhaW5lciwgcGxvdERhdGEsIGN1cnJlbnRQbG90T3B0aW9ucyk7Cn0KCmZ1bmN0aW9u
IHRvRml4ZWRXaWR0aFByZWNpc2lvbih2YWx1ZSkgewogICAgdmFyIGRlY2ltYWwgPSB2YWx1ZS50
b0ZpeGVkKDIpOwogICAgcmV0dXJuIGRlY2ltYWw7Cn0KCmZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRh
Z2UoZnJhY3Rpb24pIHsKICAgIHZhciBwZXJjZW50YWdlID0gZnJhY3Rpb24gKiAxMDA7CiAgICBy
ZXR1cm4gKGZyYWN0aW9uICogMTAwKS50b0ZpeGVkKDIpICsgJyUnOwp9CgpmdW5jdGlvbiBjcmVh
dGVUYWJsZSh0ZXN0cywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCkg
ewogICAgJCgnI2NvbnRhaW5lcicpLmh0bWwoJzx0aGVhZD48dHI+PHRoPlRlc3Q8L3RoPjx0aD5V
bml0PC90aD4nICsgcnVucy5tYXAoZnVuY3Rpb24gKHJ1biwgaW5kZXgpIHsKICAgICAgICByZXR1
cm4gJzx0aCBjb2xzcGFuPSInICsgKGluZGV4ID09IHJlZmVyZW5jZUluZGV4ID8gMiA6IDMpICsg
JyIgY2xhc3M9Intzb3J0ZXI6IFwnY29tcGFyaXNvblwnfSI+JyArIHJ1bi5sYWJlbCgpICsgJzwv
dGg+JzsKICAgIH0pLnJlZHVjZShmdW5jdGlvbiAobWFya3VwLCBjZWxsKSB7IHJldHVybiBtYXJr
dXAgKyBjZWxsOyB9LCAnJykgKyAnPC90cj48L2hlYWQ+PHRib2R5PjwvdGJvZHk+Jyk7CgogICAg
dmFyIHRlc3ROYW1lcyA9IFtdOwogICAgZm9yICh0ZXN0TmFtZSBpbiB0ZXN0cykKICAgICAgICB0
ZXN0TmFtZXMucHVzaCh0ZXN0TmFtZSk7CgogICAgdGVzdE5hbWVzLnNvcnQoKS5tYXAoZnVuY3Rp
b24gKHRlc3ROYW1lKSB7CiAgICAgICAgdmFyIHRlc3QgPSB0ZXN0c1t0ZXN0TmFtZV07CiAgICAg
ICAgaWYgKHRlc3QuaXNNZW1vcnlUZXN0KCkgIT0gc2hvdWxkSWdub3JlTWVtb3J5KQogICAgICAg
ICAgICBjcmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZlcmVuY2VJbmRleCk7CiAgICB9KTsK
CiAgICAkKCcjY29udGFpbmVyJykudGFibGVzb3J0ZXIoe3dpZGdldHM6IFsnemVicmEnXX0pOwp9
CgpmdW5jdGlvbiBsaW5lYXJSZWdyZXNzaW9uKHBvaW50cykgewogICAgLy8gSW1wbGVtZW50IGh0
dHA6Ly93d3cuZWFzeWNhbGN1bGF0aW9uLmNvbS9zdGF0aXN0aWNzL2xlYXJuLWNvcnJlbGF0aW9u
LnBocC4KICAgIC8vIHggPSBtYWduaXR1ZGUKICAgIC8vIHkgPSBpdGVyYXRpb25zCiAgICB2YXIg
c3VtWCA9IDA7CiAgICB2YXIgc3VtWSA9IDA7CiAgICB2YXIgc3VtWFNxdWFyZWQgPSAwOwogICAg
dmFyIHN1bVlTcXVhcmVkID0gMDsKICAgIHZhciBzdW1YVGltZXNZID0gMDsKCiAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB4ID0gaTsKICAg
ICAgICB2YXIgeSA9IHBvaW50c1tpXTsKICAgICAgICBzdW1YICs9IHg7CiAgICAgICAgc3VtWSAr
PSB5OwogICAgICAgIHN1bVhTcXVhcmVkICs9IHggKiB4OwogICAgICAgIHN1bVlTcXVhcmVkICs9
IHkgKiB5OwogICAgICAgIHN1bVhUaW1lc1kgKz0geCAqIHk7CiAgICB9CgogICAgdmFyIHIgPSAo
cG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3VtWSkgLwogICAgICAgIE1hdGgu
c3FydCgocG9pbnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpICoKICAgICAg
ICAgICAgICAgICAgKHBvaW50cy5sZW5ndGggKiBzdW1ZU3F1YXJlZCAtIHN1bVkgKiBzdW1ZKSk7
CgogICAgaWYgKGlzTmFOKHIpIHx8IHIgPT0gTWF0aC5JbmZpbml0eSkKICAgICAgICByID0gMDsK
CiAgICB2YXIgc2xvcGUgPSAocG9pbnRzLmxlbmd0aCAqIHN1bVhUaW1lc1kgLSBzdW1YICogc3Vt
WSkgLyAocG9pbnRzLmxlbmd0aCAqIHN1bVhTcXVhcmVkIC0gc3VtWCAqIHN1bVgpOwogICAgdmFy
IGludGVyY2VwdCA9IHN1bVkgLyBwb2ludHMubGVuZ3RoIC0gc2xvcGUgKiBzdW1YIC8gcG9pbnRz
Lmxlbmd0aDsKICAgIHJldHVybiB7c2xvcGU6IHNsb3BlLCBpbnRlcmNlcHQ6IGludGVyY2VwdCwg
clNxdWFyZWQ6IHIgKiByfTsKfQoKdmFyIHdhcm5pbmdTaWduID0gJzxzdmcgdmlld0JveD0iMCAw
IDEwMCAxMDAiIHN0eWxlPSJ3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGln
bjogYm90dG9tOyIgdmVyc2lvbj0iMS4xIj4nCiAgICArICc8cG9seWdvbiBmaWxsPSJyZWQiIHBv
aW50cz0iNTAsMTAgOTAsODAgMTAsODAgNTAsMTAiIHN0cm9rZT0icmVkIiBzdHJva2Utd2lkdGg9
IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPicKICAgICsgJzxwb2x5Z29uIGZpbGw9Indo
aXRlIiBwb2ludHM9IjQ3LDMwIDQ4LDI5LCA1MCwgMjguNywgNTIsMjkgNTMsMzAgNTAsNjAiIHN0
cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+
JwogICAgKyAnPGNpcmNsZSBjeD0iNTAiIGN5PSI3MyIgcj0iNiIgZmlsbD0id2hpdGUiIC8+Jwog
ICAgKyAnPC9zdmc+JzsKCmZ1bmN0aW9uIGNyZWF0ZVRhYmxlUm93KHJ1bnMsIHRlc3QsIHJlZmVy
ZW5jZUluZGV4KSB7CiAgICB2YXIgdGFibGVSb3cgPSAkKCc8dHI+PHRkIGNsYXNzPSJ0ZXN0Ij4n
ICsgdGVzdC5uYW1lKCkgKyAnPC90ZD48dGQgY2xhc3M9InVuaXQiPicgKyB0ZXN0LnVuaXQoKSAr
ICc8L3RkPjwvdHI+Jyk7CgogICAgZnVuY3Rpb24gbWFya3VwRm9yUnVuKHJlc3VsdCwgcmVmZXJl
bmNlUmVzdWx0KSB7CiAgICAgICAgdmFyIGNvbXBhcmlzb25DZWxsID0gJyc7CiAgICAgICAgdmFy
IGhpZGRlblZhbHVlID0gJyc7CiAgICAgICAgdmFyIHNob3VsZENvbXBhcmUgPSByZXN1bHQgIT09
IHJlZmVyZW5jZVJlc3VsdDsKICAgICAgICBpZiAoc2hvdWxkQ29tcGFyZSAmJiByZWZlcmVuY2VS
ZXN1bHQpIHsKICAgICAgICAgICAgdmFyIHBlcmNlbnREaWZmZXJlbmNlID0gcmVmZXJlbmNlUmVz
dWx0LnBlcmNlbnREaWZmZXJlbmNlKHJlc3VsdCk7CiAgICAgICAgICAgIHZhciBiZXR0ZXIgPSB0
ZXN0LnNtYWxsZXJJc0JldHRlcigpID8gcGVyY2VudERpZmZlcmVuY2UgPCAwIDogcGVyY2VudERp
ZmZlcmVuY2UgPiAwOwogICAgICAgICAgICB2YXIgY29tcGFyaXNvbiA9ICcnOwogICAgICAgICAg
ICB2YXIgY2xhc3NOYW1lID0gJ2NvbXBhcmlzb24nOwogICAgICAgICAgICBpZiAocmVmZXJlbmNl
UmVzdWx0LmlzU3RhdGlzdGljYWxseVNpZ25pZmljYW50KHJlc3VsdCkpIHsKICAgICAgICAgICAg
ICAgIGNvbXBhcmlzb24gPSBmb3JtYXRQZXJjZW50YWdlKE1hdGguYWJzKHBlcmNlbnREaWZmZXJl
bmNlKSkgKyAoYmV0dGVyID8gJyBCZXR0ZXInIDogJyBXb3JzZSZuYnNwOycpOwogICAgICAgICAg
ICAgICAgY2xhc3NOYW1lICs9IGJldHRlciA/ICcgYmV0dGVyJyA6ICcgd29yc2UnOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGhpZGRlblZhbHVlID0gJzxzcGFuIHN0eWxlPSJkaXNwbGF5OiBu
b25lIj58JyArIGNvbXBhcmlzb24gKyAnPC9zcGFuPic7CiAgICAgICAgICAgIGNvbXBhcmlzb25D
ZWxsID0gJzx0ZCBjbGFzcz0iJyArIGNsYXNzTmFtZSArICciPicgKyBjb21wYXJpc29uICsgJzwv
dGQ+JzsKICAgICAgICB9IGVsc2UgaWYgKHNob3VsZENvbXBhcmUpCiAgICAgICAgICAgIGNvbXBh
cmlzb25DZWxsID0gJzx0ZCBjbGFzcz0iY29tcGFyaXNvbiI+PC90ZD4nOwoKICAgICAgICB2YXIg
dmFsdWVzID0gcmVzdWx0LnZhbHVlcygpOwogICAgICAgIHZhciB3YXJuaW5nID0gJyc7CiAgICAg
ICAgdmFyIHJlZ3Jlc3Npb25BbmFseXNpcyA9ICcnOwogICAgICAgIGlmICh2YWx1ZXMgJiYgdmFs
dWVzLmxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgcmVncmVzc2lvblJlc3VsdCA9IGxpbmVhclJl
Z3Jlc3Npb24odmFsdWVzKTsKICAgICAgICAgICAgcmVncmVzc2lvbkFuYWx5c2lzID0gJ3Nsb3Bl
PScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVncmVzc2lvblJlc3VsdC5zbG9wZSkKICAgICAg
ICAgICAgICAgICsgJywgUl4yPScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVncmVzc2lvblJl
c3VsdC5yU3F1YXJlZCk7CiAgICAgICAgICAgIGlmIChyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVk
ID4gMC42ICYmIE1hdGguYWJzKHJlZ3Jlc3Npb25SZXN1bHQuc2xvcGUpID4gMC4wMSkgewogICAg
ICAgICAgICAgICAgd2FybmluZyA9ICcgPHNwYW4gY2xhc3M9InJlZ3Jlc3Npb24td2FybmluZyIg
dGl0bGU9IkRldGVjdGVkIGEgdGltZSBkZXBlbmRlbmN5IHdpdGggJyArIHJlZ3Jlc3Npb25BbmFs
eXNpcyArICciPicgKyB3YXJuaW5nU2lnbiArICcgPC9zcGFuPic7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIHZhciBzdGF0aXN0aWNzID0gJyZzaWdtYTs9JyArIHRvRml4ZWRXaWR0
aFByZWNpc2lvbihyZXN1bHQuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSkgKyAnLCBtaW49JyAr
IHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWluKCkpCiAgICAgICAgICAgICsgJywgbWF4
PScgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1heCgpKSArICdcbicgKyByZWdyZXNz
aW9uQW5hbHlzaXM7CgogICAgICAgIC8vIFRhYmxlc29ydGVyIGRvZXNuJ3Qga25vdyBhYm91dCB0
aGUgc2Vjb25kIGNlbGwgc28gcHV0IHRoZSBjb21wYXJpc29uIGluIHRoZSBpbnZpc2libGUgZWxl
bWVudC4KICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz0icmVzdWx0IiB0aXRsZT0iJyArIHN0YXRp
c3RpY3MgKyAnIj4nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tZWFuKCkpICsgaGlk
ZGVuVmFsdWUKICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9ImNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhIiB0aXRsZT0iJyArIHN0YXRpc3RpY3MgKyAnIj4mcGx1c21uOyAnCiAgICAgICAgICAg
ICsgZm9ybWF0UGVyY2VudGFnZShyZXN1bHQuY29uZmlkZW5jZUludGVydmFsRGVsdGFSYXRpbygp
KSArIHdhcm5pbmcgKyAnPC90ZD4nICsgY29tcGFyaXNvbkNlbGw7CiAgICB9CgogICAgZnVuY3Rp
b24gbWFya3VwRm9yTWlzc2luZ1J1bihpc1JlZmVyZW5jZSkgewogICAgICAgIHJldHVybiAnPHRk
IGNvbHNwYW49IicgKyAoaXNSZWZlcmVuY2UgPyAyIDogMykgKyAnIiBjbGFzcz0ibWlzc2luZyI+
TWlzc2luZzwvdGQ+JzsKICAgIH0KCiAgICB2YXIgcnVuSW5kZXggPSAwOwogICAgdmFyIHJlc3Vs
dHMgPSB0ZXN0LnJlc3VsdHMoKTsKICAgIHZhciByZWZlcmVuY2VSZXN1bHQgPSB1bmRlZmluZWQ7
CiAgICB2YXIgcmVzdWx0SW5kZXhNYXAgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVz
dWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHdoaWxlIChydW5zW3J1bkluZGV4XSAhPT0gcmVz
dWx0c1tpXS5ydW4oKSkKICAgICAgICAgICAgcnVuSW5kZXgrKzsKICAgICAgICBpZiAocnVuSW5k
ZXggPT0gcmVmZXJlbmNlSW5kZXgpCiAgICAgICAgICAgIHJlZmVyZW5jZVJlc3VsdCA9IHJlc3Vs
dHNbaV07CiAgICAgICAgcmVzdWx0SW5kZXhNYXBbcnVuSW5kZXhdID0gaTsKICAgIH0KICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHRJ
bmRleCA9IHJlc3VsdEluZGV4TWFwW2ldOwogICAgICAgIGlmIChyZXN1bHRJbmRleCA9PSB1bmRl
ZmluZWQpCiAgICAgICAgICAgIHRhYmxlUm93LmFwcGVuZChtYXJrdXBGb3JNaXNzaW5nUnVuKGkg
PT0gcmVmZXJlbmNlSW5kZXgpKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRhYmxlUm93LmFw
cGVuZChtYXJrdXBGb3JSdW4ocmVzdWx0c1tyZXN1bHRJbmRleF0sIHJlZmVyZW5jZVJlc3VsdCkp
OwogICAgfQoKICAgICQoJyNjb250YWluZXInKS5jaGlsZHJlbigndGJvZHknKS5sYXN0KCkuYXBw
ZW5kKHRhYmxlUm93KTsKCiAgICB0YWJsZVJvdy5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsKICAg
ICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IHRhYmxlUm93WzBdICYmIGV2ZW50LnRhcmdldC5wYXJl
bnROb2RlICE9IHRhYmxlUm93WzBdKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgIHZhciBmaXJzdENlbGwgPSB0YWJsZVJvdy5jaGls
ZHJlbigndGQnKS5maXJzdCgpOwogICAgICAgIGlmIChmaXJzdENlbGwuY2hpbGRyZW4oJ3NlY3Rp
b24nKS5sZW5ndGgpIHsKICAgICAgICAgICAgZmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0aW9uJyku
cmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcpLmNzcyh7J3BhZGRp
bmctYm90dG9tJzogJyd9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgcGxvdCA9
IGNyZWF0ZVBsb3QoZmlyc3RDZWxsLCB0ZXN0KTsKICAgICAgICAgICAgcGxvdC5jc3Moeydwb3Np
dGlvbic6ICdhYnNvbHV0ZScsICd6LWluZGV4JzogMn0pOwogICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gdGFibGVSb3cub2Zmc2V0KCk7CiAgICAgICAgICAgIG9mZnNldC5sZWZ0ICs9IDE7CiAgICAg
ICAgICAgIG9mZnNldC50b3AgKz0gdGFibGVSb3cub3V0ZXJIZWlnaHQoKTsKICAgICAgICAgICAg
cGxvdC5vZmZzZXQob2Zmc2V0KTsKICAgICAgICAgICAgdGFibGVSb3cuY2hpbGRyZW4oJ3RkJyku
Y3NzKHsncGFkZGluZy1ib3R0b20nOiBwbG90Lm91dGVySGVpZ2h0KCkgKyA1fSk7CiAgICAgICAg
fQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKfQoKZnVuY3Rpb24gaW5pdCgpIHsKICAg
ICQudGFibGVzb3J0ZXIuYWRkUGFyc2VyKHsKICAgICAgICBpZDogJ2NvbXBhcmlzb24nLAogICAg
ICAgIGlzOiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgIHJldHVybiBzLmluZGV4T2YoJ3wnKSA+
PSAwOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbihzKSB7CiAgICAgICAgICAg
IHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHMuc3Vic3RyaW5nKHMuaW5kZXhPZignfCcpICsgMSkp
OwogICAgICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IDAgOiBwYXJzZWQ7CiAgICAgICAg
fSwKICAgICAgICB0eXBlOiAnbnVtZXJpYycsCiAgICB9KTsKCiAgICB2YXIgcnVucyA9IFtdOwog
ICAgdmFyIG1ldHJpY3MgPSB7fTsKICAgICQuZWFjaChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdqc29uJykudGV4dENvbnRlbnQpLCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7
CiAgICAgICAgdmFyIHJ1biA9IG5ldyBUZXN0UnVuKGVudHJ5KTsKICAgICAgICBydW5zLnB1c2go
cnVuKTsKCiAgICAgICAgZnVuY3Rpb24gYWRkVGVzdHModGVzdHMsIHBhcmVudEZ1bGxOYW1lKSB7
CiAgICAgICAgICAgIGZvciAodmFyIHRlc3ROYW1lIGluIHRlc3RzKSB7CiAgICAgICAgICAgICAg
ICB2YXIgZnVsbFRlc3ROYW1lID0gcGFyZW50RnVsbE5hbWUgKyAnLycgKyB0ZXN0TmFtZTsKICAg
ICAgICAgICAgICAgIHZhciByYXdNZXRyaWNzID0gdGVzdHNbdGVzdE5hbWVdLm1ldHJpY3M7Cgog
ICAgICAgICAgICAgICAgZm9yICh2YXIgbWV0cmljTmFtZSBpbiByYXdNZXRyaWNzKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIGZ1bGxNZXRyaWNOYW1lID0gZnVsbFRlc3ROYW1lICsgJzonICsg
bWV0cmljTmFtZTsKICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljID0gbWV0cmljc1tmdWxs
TWV0cmljTmFtZV07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXRyaWMpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0cmljID0gbmV3IFBlcmZUZXN0TWV0cmljKGZ1bGxUZXN0TmFtZSwg
bWV0cmljTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3NbZnVsbE1ldHJpY05h
bWVdID0gbWV0cmljOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBt
ZXRyaWMuYWRkUmVzdWx0KG5ldyBUZXN0UmVzdWx0KG1ldHJpYywgcmF3TWV0cmljc1ttZXRyaWNO
YW1lXS5jdXJyZW50LCBydW4pKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp
ZiAodGVzdHNbdGVzdE5hbWVdLnRlc3RzKQogICAgICAgICAgICAgICAgICAgIGFkZFRlc3RzKHRl
c3RzW3Rlc3ROYW1lXS50ZXN0cywgZnVsbFRlc3ROYW1lKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KCiAgICAgICAgYWRkVGVzdHMoZW50cnkudGVzdHMsICcnKTsKICAgIH0pOwoKICAgIHZhciBz
aG91bGRJZ25vcmVNZW1vcnk9IHRydWU7CiAgICB2YXIgcmVmZXJlbmNlSW5kZXggPSAwOwoKICAg
IGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNl
SW5kZXgpOwoKICAgICQoJyN0aW1lLW1lbW9yeScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChl
dmVudCwgY2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICBzaG91bGRJZ25vcmVNZW1vcnkgPSBjaGVj
a2VkRWxlbWVudC50ZXh0Q29udGVudCA9PSAnVGltZSc7CiAgICAgICAgY3JlYXRlVGFibGUobWV0
cmljcywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCk7CiAgICB9KTsK
CiAgICBydW5zLm1hcChmdW5jdGlvbiAocnVuLCBpbmRleCkgewogICAgICAgICQoJyNyZWZlcmVu
Y2UnKS5hcHBlbmQoJzxzcGFuIHZhbHVlPSInICsgaW5kZXggKyAnIicgKyAoaW5kZXggPT0gcmVm
ZXJlbmNlSW5kZXggPyAnIGNsYXNzPSJjaGVja2VkIicgOiAnJykgKyAnPicgKyBydW4ubGFiZWwo
KSArICc8L3NwYW4+Jyk7CiAgICB9KQoKICAgICQoJyNyZWZlcmVuY2UnKS5iaW5kKCdjaGFuZ2Un
LCBmdW5jdGlvbiAoZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgcmVmZXJlbmNlSW5k
ZXggPSBwYXJzZUludChjaGVja2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpOwogICAg
ICAgIGNyZWF0ZVRhYmxlKG1ldHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJl
bmNlSW5kZXgpOwogICAgfSk7CgogICAgJCgnLmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoaW5k
ZXgsIGNoZWNrYm94KSB7CiAgICAgICAgJChjaGVja2JveCkuY2hpbGRyZW4oJ3NwYW4nKS5jbGlj
ayhmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2No
ZWNrZWQnKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgJChjaGVja2JveCku
Y2hpbGRyZW4oJ3NwYW4nKS5yZW1vdmVDbGFzcygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKHRo
aXMpLmFkZENsYXNzKCdjaGVja2VkJyk7CiAgICAgICAgICAgICQoY2hlY2tib3gpLnRyaWdnZXIo
J2NoYW5nZScsICQodGhpcykpOwogICAgICAgIH0pOwogICAgfSk7Cn0KCjwvc2NyaXB0Pgo8c2Ny
aXB0IGlkPSJqc29uIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIj5beyJ0ZXN0cyI6IHsiSW50ZXJh
Y3RpdmUiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVy
Zm9ybWFuY2VUZXN0cy9JbnRlcmFjdGl2ZSIsICJ0ZXN0cyI6IHsiU2VsZWN0QWxsIjogeyJ1cmwi
OiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMv
SW50ZXJhY3RpdmUvU2VsZWN0QWxsLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJy
ZW50IjogW1sxNTg0NzYyNjQuMCwgMTU4NTMzODk2LjAsIDE1ODQ3MDc4NC4wLCAxNTg1MzE5Njgu
MCwgMTU4NDk5MzUyLjBdLCBbMTU4MzY0NTc2LjAsIDE1ODM1NDc0NC4wLCAxNTgzMTYwMTYuMCwg
MTU4MjgxNDY0LjAsIDE1ODMwNTk5Mi4wXSwgWzE1ODI3MTI2NC4wLCAxNTgyNTk1MjguMCwgMTU4
MjQ5NDQ4LjAsIDE1ODIyOTEzNi4wLCAxNTgyNDU0MDguMF0sIFsxNTg3NjI0MzIuMCwgMTU4Nzg1
Mzc2LjAsIDE1ODcyNjI0OC4wLCAxNTg3MjQ0NDAuMCwgMTU4NzI4NTIwLjBdXX0sICJKU0hlYXAi
OiB7ImN1cnJlbnQiOiBbWzk5MjU2LjAsIDEwMTUxMi4wLCAxMDE4ODAuMCwgMTAyMDQwLjAsIDEw
MjExMi4wXSwgWzk5MjU2LjAsIDEwMTUxMi4wLCAxMDE1ODQuMCwgMTAyMDQwLjAsIDEwMjExMi4w
XSwgWzk5MjU2LjAsIDEwMTUxMi4wLCAxMDE4ODAuMCwgMTAyMDQwLjAsIDEwMjExMi4wXSwgWzk5
MjU2LjAsIDEwMTUxMi4wLCAxMDE1ODQuMCwgMTAyMDQwLjAsIDEwMjExMi4wXV19LCAiVGltZSI6
IHsiY3VycmVudCI6IFtbNTAyLjAsIDUwMy4wLCA1MDIuMCwgNTAzLjAsIDUwNC4wXSwgWzUwMy4w
LCA1MDMuMCwgNDk1LjAsIDQ5NS4wLCA1MDMuMF0sIFs0OTkuMCwgNDk5LjAsIDUwMS4wLCA1MDIu
MCwgNTEzLjBdLCBbNDg2LjAsIDQ4Ny4wLCA0OTAuMCwgNDkyLjAsIDQ4Ny4wXV19fX19fX0sICJi
dWlsZFRpbWUiOiAiMjAxMy0wMy0yN1QwMzo0NjozOS45MTE0NDgiLCAiZGVzY3JpcHRpb24iOiAi
d2l0aCBwYXRjaCIsICJyZXZpc2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMt
MDMtMjZUMTk6MTI6MzcuODg4Nzc4WiIsICJyZXZpc2lvbiI6ICIxNDY5MTcifX19LCB7InRlc3Rz
IjogeyJJbnRlcmFjdGl2ZSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0ludGVyYWN0aXZlIiwgInRlc3RzIjogeyJTZWxlY3RB
bGwiOiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9y
bWFuY2VUZXN0cy9JbnRlcmFjdGl2ZS9TZWxlY3RBbGwuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxs
b2MiOiB7ImN1cnJlbnQiOiBbWzE1ODYwMzA4MC4wLCAxNTgzNjYzNjAuMCwgMTU4MjMyODk2LjAs
IDE1ODM1MDk2OC4wLCAxNTgyNjM3NDQuMF0sIFsxNTkxNjMyMDguMCwgMTU4OTg3NzQ0LjAsIDE1
ODkyNzc1Mi4wLCAxNTg5OTI4MDguMCwgMTU4ODg1MjAwLjBdLCBbMTU4NjAzMTg0LjAsIDE1ODQw
MjgwMC4wLCAxNTgzNDcwMDAuMCwgMTU4NDE2MTEyLjAsIDE0MzY0OTE0NC4wXSwgWzE1ODUxNzY1
Ni4wLCAxNTg0Mzk5MjguMCwgMTQzOTA5MTM2LjAsIDE1ODQwMDE1Mi4wLCAxNTgzMjE2OTYuMF1d
fSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbOTkyNTYuMCwgMTAxNTEyLjAsIDEwMTg4MC4wLCAx
MDIwNDAuMCwgMTAyMTEyLjBdLCBbOTkyNTYuMCwgMTAxNTEyLjAsIDEwMTg4MC4wLCAxMDIwNDAu
MCwgMTAyMTEyLjBdLCBbOTkyNTYuMCwgMTAxNTEyLjAsIDEwMTg4MC4wLCAxMDIwNDAuMCwgMTAy
MTEyLjBdLCBbOTkyNTYuMCwgMTAxNTEyLjAsIDEwMTg4MC4wLCAxMDIwNDAuMCwgMTAyMTEyLjBd
XX0sICJUaW1lIjogeyJjdXJyZW50IjogW1s2MDUuMCwgNzMyLjAsIDYwMC4wLCA2MDUuMCwgNjA2
LjBdLCBbNjE0LjAsIDczNC4wLCA2MTguMCwgNjEwLjAsIDYxMC4wXSwgWzU5Ny4wLCA3MzQuMCwg
NjAxLjAsIDU5Ny4wLCA2MzEuMF0sIFs1OTAuMCwgNzE5LjAsIDYwNC4wLCA1OTAuMCwgNTk5LjBd
XX19fX19fSwgImRlc2NyaXB0aW9uIjogIndpdGhvdXQgcGF0Y2giLCAiYnVpbGRUaW1lIjogIjIw
MTMtMDMtMjdUMDM6NDg6MzcuMzgzMzU5IiwgInJldmlzaW9ucyI6IHsiV2ViS2l0IjogeyJ0aW1l
c3RhbXAiOiAiMjAxMy0wMy0yNlQxOToxMjozNy44ODg3NzhaIiwgInJldmlzaW9uIjogIjE0Njkx
NyJ9fX0sIHsidGVzdHMiOiB7IkludGVyYWN0aXZlIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvSW50ZXJhY3RpdmUiLCAidGVz
dHMiOiB7IlNlbGVjdEFsbCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0ludGVyYWN0aXZlL1NlbGVjdEFsbC5odG1sIiwgIm1l
dHJpY3MiOiB7Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtbMTU4NDc4OTc2LjAsIDE1ODQ3NzM5Mi4w
LCAxNTg0NDY4NDAuMCwgMTU4NDQ0OTY4LjAsIDE1ODQ0NTAwOC4wXSwgWzE1ODUwNzIwOC4wLCAx
NTg0MjM4ODguMCwgMTU4NDIyMDI0LjAsIDE1ODQxMTk0NC4wLCAxNTgzNzEzMTIuMF0sIFsxNTgy
OTIwODguMCwgMTU4MjY5ODcyLjAsIDE1ODMwNDYxNi4wLCAxNTgyOTA0NTYuMCwgMTU4Mjg2NDg4
LjBdLCBbMTU4NDQ3NDk2LjAsIDE1ODQzMzg0MC4wLCAxNTg0NTIxNjguMCwgMTU4NDAxNDE2LjAs
IDE1ODQwNTQ3Mi4wXV19LCAiSlNIZWFwIjogeyJjdXJyZW50IjogW1s5OTI1Ni4wLCAxMDE1MTIu
MCwgMTAxNTg0LjAsIDEwMjA0MC4wLCAxMDIxMTIuMF0sIFs5OTI1Ni4wLCAxMDE1MTIuMCwgMTAx
NTg0LjAsIDEwMjA0MC4wLCAxMDIxMTIuMF0sIFs5OTI1Ni4wLCAxMDE1MTIuMCwgMTAxNTg0LjAs
IDEwMjA0MC4wLCAxMDIxMTIuMF0sIFs5OTI1Ni4wLCAxMDE1MTIuMCwgMTAxNTg0LjAsIDEwMjA0
MC4wLCAxMDIxMTIuMF1dfSwgIlRpbWUiOiB7ImN1cnJlbnQiOiBbWzQ5NC4wLCA0OTUuMCwgNDk3
LjAsIDQ5My4wLCA1MDIuMF0sIFs0ODcuMCwgNDg3LjAsIDQ5MC4wLCA0ODUuMCwgNDkzLjBdLCBb
NDg1LjAsIDQ4NS4wLCA0ODQuMCwgNDg3LjAsIDQ4NS4wXSwgWzQ4Ni4wLCA0OTEuMCwgNDgyLjAs
IDQ4NC4wLCA0ODcuMF1dfX19fX19LCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFt
cCI6ICIyMDEzLTAzLTI2VDE5OjEyOjM3Ljg4ODc3OFoiLCAicmV2aXNpb24iOiAiMTQ2OTE3In19
LCAiYnVpbGRUaW1lIjogIjIwMTMtMDMtMjdUMDM6NTE6MTMuMTMzNDMxIiwgImRlc2NyaXB0aW9u
IjogIndpdGggcGF0Y2gifSwgeyJ0ZXN0cyI6IHsiSW50ZXJhY3RpdmUiOiB7InVybCI6ICJodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9JbnRlcmFj
dGl2ZSIsICJ0ZXN0cyI6IHsiU2VsZWN0QWxsIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9icm93c2VyL3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvSW50ZXJhY3RpdmUvU2VsZWN0QWxs
Lmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJyZW50IjogW1sxNTg3OTA1ODQuMCwg
MTU4NjE0NzA0LjAsIDE1ODQ4MTM2OC4wLCAxNTg1ODMxMjAuMCwgMTU4NDM1MjQwLjBdLCBbMTU4
Njk1NDAwLjAsIDE1ODU2MDY5Ni4wLCAxNTg0Mzk0NzIuMCwgMTU4NTA0NjA4LjAsIDE0MzcwNTE5
Mi4wXSwgWzE1ODY0ODAwOC4wLCAxNTg0MjM0NDguMCwgMTQzNjM4NTEyLjAsIDE1ODM4MzU1Mi4w
LCAxNTQwNjU5MjAuMF0sIFsxNTg1OTA2MDAuMCwgMTU4NDE5MzIwLjAsIDE0MzU2NTA0MC4wLCAx
NTgzNDY4NTYuMCwgMTU4MTk0ODQ4LjBdXX0sICJKU0hlYXAiOiB7ImN1cnJlbnQiOiBbWzk5MjU2
LjAsIDEwMTUxMi4wLCAxMDE4ODAuMCwgMTAyMDQwLjAsIDEwMjExMi4wXSwgWzk5MjU2LjAsIDEw
MTUxMi4wLCAxMDE4ODAuMCwgMTAyMDQwLjAsIDEwMjExMi4wXSwgWzk5MjU2LjAsIDEwMTUxMi4w
LCAxMDE4ODAuMCwgMTAyMDQwLjAsIDEwMjExMi4wXSwgWzk5MjU2LjAsIDEwMTUxMi4wLCAxMDE4
ODAuMCwgMTAyMDQwLjAsIDEwMjExMi4wXV19LCAiVGltZSI6IHsiY3VycmVudCI6IFtbNjAxLjAs
IDczOS4wLCA2MDQuMCwgNjA0LjAsIDYwNC4wXSwgWzYwMS4wLCA3MjkuMCwgNTk2LjAsIDYwMC4w
LCA1OTUuMF0sIFs2MDAuMCwgNzQxLjAsIDU5Ni4wLCA1OTkuMCwgNjAwLjBdLCBbNTk0LjAsIDcy
NS4wLCA1OTYuMCwgNTk0LjAsIDU4OS4wXV19fX19fX0sICJidWlsZFRpbWUiOiAiMjAxMy0wMy0y
N1QwMzo1Mjo1OS4xODUyMjIiLCAiZGVzY3JpcHRpb24iOiAid2l0aG91dCBwYXRjaCIsICJyZXZp
c2lvbnMiOiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTMtMDMtMjZUMTk6MTI6MzcuODg4
Nzc4WiIsICJyZXZpc2lvbiI6ICIxNDY5MTcifX19XTwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195358</attachid>
            <date>2013-03-27 11:00:47 -0700</date>
            <delta_ts>2013-03-27 11:05:44 -0700</delta_ts>
            <desc>Ready for review</desc>
            <filename>bug-113364-20130327110046.patch</filename>
            <type>text/plain</type>
            <size>1736</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Njk5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAzLTI3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNlbGVjdGlvbiBjb2RlIHNwZW5k
cyBhIGxvdCBvZiB0aW1lIGluIElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzMzY0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgY29tcHV0
aW5nIHRoZSBmb250IHdpZHRoIHdoZW4gd2UncmUgc2VsZWN0aW5nIHRoZSBlbnRpcmUgbGluZSBi
b3guCisKKyAgICAgICAgVGhpcyBhcHBlYXJzIHRvIGJlIDI1LTI2JSBpbXByb3ZlbWVudCBvbiBJ
bnRlcmFjdGl2ZS9TZWxlY3RBbGw6VGltZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0
aW9uUmVjdCk6CisKIDIwMTMtMDMtMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgog
CiAgICAgICAgIFtNYWNdIFVzZSBmb250TmFtZSByYXRoZXIgdGhhbiBmYW1pbHlOYW1lIGZvciBp
bnRlcm5hbCBmb250cwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTQ2OTE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDEyIEBAIExheW91
dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24KICAgICBpZiAocmVzcGVjdEh5cGhl
bikKICAgICAgICAgZW5kUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIExheW91dFJlY3Qg
ciA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBG
bG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykp
OworICAgIEZsb2F0UG9pbnQgc3RhcnRpbmdQb2ludCA9IEZsb2F0UG9pbnQobG9naWNhbExlZnQo
KSwgc2VsVG9wKTsKKyAgICBMYXlvdXRSZWN0IHI7CisgICAgaWYgKHNQb3MgfHwgZVBvcyAhPSBz
dGF0aWNfY2FzdDxpbnQ+KG1fbGVuKSkKKyAgICAgICAgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzdGFydGluZ1BvaW50LCBzZWxIZWlnaHQs
IHNQb3MsIGVQb3MpKTsKKyAgICBlbHNlCisgICAgICAgIHIgPSBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdChzdGFydGluZ1BvaW50LCBGbG9hdFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdo
dCkpKTsKIAogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gci53aWR0aCgpOwogICAgIGlm
IChyLngoKSA+IGxvZ2ljYWxSaWdodCgpKQo=
</data>
<flag name="review"
          id="217232"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>