<?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>42159</bug_id>
          
          <creation_ts>2010-07-13 05:50:15 -0700</creation_ts>
          <short_desc>Matching regular expressions which contain iterative parentheses with YARR JIT</short_desc>
          <delta_ts>2010-07-15 09:08:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>42264</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Varga">pvarga</reporter>
          <assigned_to name="Peter Varga">pvarga</assigned_to>
          <cc>abecsi</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250455</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-13 05:50:15 -0700</bug_when>
    <thetext>The current YARR JIT implementation doesn&apos;t support iterative parentheses matching so
it does fallback to pcre in these cases which prevents us from removing pcre from JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251198</commentid>
    <comment_count>1</comment_count>
      <attachid>61521</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-14 08:23:56 -0700</bug_when>
    <thetext>Created attachment 61521
work in progress patch

This patch adds support for matching regular expressions which contain iterative
parentheses to YARR JIT. For applying this patch you need a JSC patched by the
&quot;Prepare YARR JIT for matching regexps with iterative parentheses&quot; 
(https://bugs.webkit.org/show_bug.cgi?id=42264) bug&apos;s patch because this solution&apos;s logic
is based on that.

The JIT generated code does match by the following simple logic:
Every time when matching the iterative parentheses the previous iteration&apos;s
match is stored on the stack marked by the subpattern ID. Therefore in
case of backtrack the result of the last successful matching can be restored.

The implementation isn&apos;t complete, the following cases which are within
iterative parentheses aren&apos;t handled therefore these still do fallback to
pcre:

- disjunction of parentheses contain more than one alternative
- the number of iterations is fixed (generateParenthesesFixed)
- in case of non-greedy matching (generateParenthesesNonGreedy)

However this solution passes all the regression tests in case of greedy matching with an upper limit 
the result can be wrong and the algorithm doesn&apos;t fallback to pcre, so this is also needs further work. These critical 
points are marked in the code by TODOs.

All the fast/js layout tests pass as well, except one: regexp-overflow.html
This test doesn&apos;t throw an expected exception in case of large number of iteration, but
YARR Interpreter doesn&apos;t throw an exception neither. 
However two layouts are fixed in the fast/js:

- sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.2/15.10.2.5_Term/S15.10.2.5_A1_T4.html
- sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T6.html

NOTE: This patch is just a suggestion, not the final solution. I don&apos;t offer
this for a review now, I just would like to get some feedback before finishing
the whole work on iterative parentheses matching.

Please don&apos;t hesitate to comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251200</commentid>
    <comment_count>2</comment_count>
      <attachid>61522</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-14 08:26:04 -0700</bug_when>
    <thetext>Created attachment 61522
performance testcase

I wrote a performance test for benchmarking greedy matching of parentheses.
Results of measurements on Linux:
reference:		~3050ms
with this patch: 	~1150ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251204</commentid>
    <comment_count>3</comment_count>
      <attachid>61524</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-14 08:32:29 -0700</bug_when>
    <thetext>Created attachment 61524
measurement script

A simple script for measuring the performance of the testcase. Simply run it with the jsc binary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251254</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-07-14 10:09:33 -0700</bug_when>
    <thetext>Is there a way to avoid stack overflow in cases of substantial backtracking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251920</commentid>
    <comment_count>5</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-15 09:05:51 -0700</bug_when>
    <thetext>The dependency of this patch was changed and this caused performance improvements.

These are the performance results:

				  reference		modified
regexp-dna:			22.2ms +/- 1.4%    22.0ms +/- 1.5%
v8-regexp:	1.032x as fast	435.1ms +/- 1.2%    421.6ms +/- 1.2%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251923</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-07-15 09:08:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Is there a way to avoid stack overflow in cases of substantial backtracking?

Hi Geoffrey, there was some discussion about stack guards on the preparing patch.
You can see: https://bugs.webkit.org/show_bug.cgi?id=42264</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61521</attachid>
            <date>2010-07-14 08:23:56 -0700</date>
            <delta_ts>2010-07-14 08:23:56 -0700</delta_ts>
            <desc>work in progress patch</desc>
            <filename>0001-iterative-parentheses.patch</filename>
            <type>text/plain</type>
            <size>16647</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSA2YTA2MWU5YTg5MzlhOTJlN2FmZTFlMzZmMmFlZTRiMjAzZjFjZjRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogV2VkLCAxNCBKdWwgMjAxMCAxNzowMDo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGl0
ZXJhdGl2ZSBwYXJlbnRoZXNlcwoKLS0tCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNw
cCAgIHwgIDI4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIEphdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmggfCAgICA0ICstCiAyIGZpbGVzIGNoYW5nZWQsIDIz
OSBpbnNlcnRpb25zKCspLCA1MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3Bw
CmluZGV4IDQzZmUxYWYuLmMwYTkxMzAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3lhcnIv
UmVnZXhKSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCkBAIC00
MCw3ICs0MCw3IEBACiAvLyBFYWNoIG1hY3JvIGNhbiBzaWduIGRpZmZlcmVudCBxdWFudGl0eSBh
bmQgcHVycG9zZSBvZiBiYWNrdHJhY2sgaW5mb3JtYXRpb24uCiAjZGVmaW5lIEhFQUQgSW1tMzIo
MHgwKSAvLyBzdGFydCBvZiB0aGUgYSBib2R5IG9mIHBhdHRlcm4sIGV2ZXJ5IHBhdHRlcm5zJyBp
bmZvcm1hdGlvbiBzdGFydHMgd2l0aCB0aGlzIHN0YW1wIG9uIHRoZSBzdGFjay4KICNkZWZpbmUg
U0VQQSBJbW0zMigweDVFN0EwMDAwKSAvLyBzZXBhcmF0b3IsIHNpZ25zIG1vc3RseSBpdGVyYXRp
dmUgZXhwcmVzc2lvbnMuCi0jZGVmaW5lIFNQSUQgSW1tMzIodGVybS5wYXJlbnRoZXNlcy5zdWJw
YXR0ZXJuSWQpIC8vIHN1YnBhdHRlcm4gSUQsIHNpZ25zIGVhY2ggb2YgcGFyZW50aGVzZXMuCisj
ZGVmaW5lIFNQSUQgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSA/IEltbTMyKHRlcm0ucGFyZW50aGVz
ZXMuc3VicGF0dGVybklkKSA6IEltbTMyKHRlcm0ucGFyZW50aGVzZXMubm9uQ2FwdHVyaW5nSWQp
IC8vIHN1YnBhdHRlcm4gSUQsIHNpZ25zIGVhY2ggb2YgcGFyZW50aGVzZXMuCiAjZGVmaW5lIFNF
SUQgSW1tMzIoMHg1RTdBMDAwMCArIHNlcGFJZCkgLy8gc2VwYXJhdG9yIElELCBzaWducyBlYWNo
IG9mIGFsdGVybmF0aXZlcyBhbmQgcGFyZW50aGV0aWNhbCBhc3NlcnRpb25zLgogCiB1c2luZyBu
YW1lc3BhY2UgV1RGOwpAQCAtMzc3LDE1ICszNzcsNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZl
VmFsaWQoKSk7CiAgICAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRpdmUoKS0+bV90ZXJtc1t0XTsK
ICAgICAgICAgfQotICAgICAgICBib29sIGlzTGFzdFRlcm0oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxpZCgpKTsKLSAgICAgICAgICAgIHJldHVybiAodCAr
IDEpID09IGFsdGVybmF0aXZlKCktPm1fdGVybXMuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAg
IGJvb2wgaXNNYWluRGlzanVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
IWRpc2p1bmN0aW9uLT5tX3BhcmVudDsKLSAgICAgICAgfQogCiAgICAgICAgIFBhdHRlcm5UZXJt
JiBsb29rYWhlYWRUZXJtKCkKICAgICAgICAgewpAQCAtMTA5Miw2MyArMTA4MywyNDIgQEAgY2xh
c3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc0dyZWVkeU5vQmFja3RyYWNrKFRl
cm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIC8vIFRPRE86IEZpbmlzaCB0aGUgaW1wbGVt
ZW50YXRpb24KKyAgICB2b2lkIGdlbmVyYXRlUGFyZW50aGVzZXNGaXhlZChUZXJtR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKICAgICB7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiBwYXJlbnRoZXNlc1Rl
cm0gPSBzdGF0ZS50ZXJtKCk7Ci0gICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rp
b24gPSBwYXJlbnRoZXNlc1Rlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb247Ci0gICAgICAgIEFT
U0VSVChwYXJlbnRoZXNlc1Rlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2Vz
U3VicGF0dGVybik7Ci0gICAgICAgIEFTU0VSVChwYXJlbnRoZXNlc1Rlcm0ucXVhbnRpdHlDb3Vu
dCAhPSAxKTsgLy8gSGFuZGxlZCBieSBnZW5lcmF0ZVBhcmVudGhlc2VzU2luZ2xlLgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAKLSAgICAgICAgLy8gQ2FwdHVyaW5nIG5v
dCB5ZXQgaW1wbGVtZW50ZWQhCi0gICAgICAgIGlmIChwYXJlbnRoZXNlc1Rlcm0uaW52ZXJ0T3JD
YXB0dXJlKSB7Ci0gICAgICAgICAgICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIHZvaWQgcHVzaFBhcmVuc0ZyYW1lKFBhdHRlcm5U
ZXJtJiB0ZXJtKQorICAgIHsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFy
eSA9IHJlZ1QwOwogCi0gICAgICAgIC8vIFF1YW50aWZpY2F0aW9uIGxpbWl0IG5vdCB5ZXQgaW1w
bGVtZW50ZWQhCi0gICAgICAgIGlmIChwYXJlbnRoZXNlc1Rlcm0ucXVhbnRpdHlDb3VudCAhPSAw
eGZmZmZmZmZmKSB7Ci0gICAgICAgICAgICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQs
ICh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSwgaW5k
ZXhUZW1wb3JhcnkpOworICAgICAgICBwdXNoKGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEp
ICsgMSkgKiBzaXplb2YoaW50KSksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgcHVzaChpbmRl
eFRlbXBvcmFyeSk7CisgICAgICAgIHB1c2goSW1tMzIodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0
ZXJuSWQpKTsKKyAgICB9CiAKLSAgICAgICAgLy8gTmVlZCB0byByZXNldCBuZXN0ZWQgc3VicGF0
dGVybnMgYmV0d2VlbiBpdGVyYXRpb25zLi4uCi0gICAgICAgIC8vIGZvciB0aGUgbWludXRlIHRo
aXMgY3J1ZGUgY2hlY2sgcmVqZWN0cyBhbGwgcGF0dGVybnMgd2l0aCBhbnkgc3VicGF0dGVybnMh
Ci0gICAgICAgIGlmIChtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucykgewotICAgICAgICAgICAg
bV9zaG91bGRGYWxsQmFjayA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
KyAgICB2b2lkIHBvcFBhcmVuc0ZyYW1lKFBhdHRlcm5UZXJtJiB0ZXJtKQorICAgIHsKKyAgICAg
ICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOwogCi0gICAgICAgIFRl
cm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUuY2hl
Y2tlZFRvdGFsKTsKKyAgICAgICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHBvcChpbmRleFRlbXBvcmFyeSk7CisgICAgICAgIHN0
b3JlMzIoaW5kZXhUZW1wb3JhcnksIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMu
c3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOworICAgICAgICBwb3AoaW5k
ZXhUZW1wb3JhcnkpOworICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNzKG91
dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkp
KTsKKyAgICB9CisKKyAgICB2b2lkIGdlbmVyYXRlU3RvcmVNYXRjaEJlZ2luKFRlcm1HZW5lcmF0
aW9uU3RhdGUmIHN0YXRlLCBQYXR0ZXJuVGVybSYgdGVybSkKKyAgICB7CisgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKworICAgICAgICBpbnQgaW5wdXRP
ZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpOworICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsK
KyAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgIGFk
ZDMyKEltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgc3Rv
cmUzMihpbmRleFRlbXBvcmFyeSwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1
YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1
YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgfQogCi0gICAgICAgIExhYmVs
IG1hdGNoQWdhaW4odGhpcyk7Ci0gICAgICAgIGZvciAocGFyZW50aGVzZXNTdGF0ZS5yZXNldEFs
dGVybmF0aXZlKCk7IHBhcmVudGhlc2VzU3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpOyBwYXJlbnRo
ZXNlc1N0YXRlLm5leHRBbHRlcm5hdGl2ZSgpKSB7CisgICAgdm9pZCBnZW5lcmF0ZVN0b3JlTWF0
Y2hFbmQoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIFBhdHRlcm5UZXJtJiB0ZXJtKQorICAg
IHsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworCisg
ICAgICAgIGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0KCk7CisgICAgICAgIGlm
IChpbnB1dE9mZnNldCkgeworICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3Jhcnkp
OworICAgICAgICAgICAgYWRkMzIoSW1tMzIoc3RhdGUuaW5wdXRPZmZzZXQoKSksIGluZGV4VGVt
cG9yYXJ5KTsKKyAgICAgICAgICAgIHN0b3JlMzIoaW5kZXhUZW1wb3JhcnksIEFkZHJlc3Mob3V0
cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2Yo
aW50KSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJl
c3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBz
aXplb2YoaW50KSkpOworICAgIH0KKworICAgIHZvaWQgZ2VuZXJhdGVGcmVlU3VicGF0dGVybihQ
YXR0ZXJuVGVybSYgdGVybSkKKyAgICB7CisgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAg
ICAgIGxvYWRGcm9tRnJhbWUoMCwgcmVnVDApOworICAgICAgICBKdW1wIGZvdW5kID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBTUElEKTsKKworICAgICAgICBKdW1wIHBhciA9IGJyYW5jaDMyKExl
c3NUaGFuLCByZWdUMCwgU0VQQSk7CisgICAgICAgIGFkZFB0cihJbW0zMigyKihzaXplb2Yodm9p
ZCopKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAganVtcChsb29wKTsKKworICAg
ICAgICBwYXIubGluayh0aGlzKTsKKyAgICAgICAgYWRkUHRyKEltbTMyKDMqKHNpemVvZih2b2lk
KikpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqdW1wKGxvb3ApOworCisgICAg
ICAgIGZvdW5kLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBnZW5lcmF0ZVBhcmVudGhl
c2VzR3JlZWR5KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHsKKyAgICAgICAgY29u
c3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKIAorICAgICAgICBQYXR0ZXJuVGVybSYgdGVy
bSA9IHN0YXRlLnRlcm0oKTsKKyAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlv
biA9IHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb247CisKKyAgICAgICAgVGVybUdlbmVyYXRp
b25TdGF0ZSBwYXJlbnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwp
OworCisgICAgICAgIGlmIChkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpID09IDEp
IHsKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUucmVzZXRBbHRlcm5hdGl2ZSgpOworICAg
ICAgICAgICAgQVNTRVJUKHBhcmVudGhlc2VzU3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKTsKICAg
ICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBwYXJlbnRoZXNlc1N0
YXRlLmFsdGVybmF0aXZlKCk7CiAgICAgICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFsdGVy
bmF0aXZlKTsKIAogICAgICAgICAgICAgaW50IGNvdW50VG9DaGVjayA9IGFsdGVybmF0aXZlLT5t
X21pbmltdW1TaXplOworICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gc3RhdGUuaW5wdXRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIEp1bXBMaXN0IHN1Y2Nlc3M7CisKKyAgICAgICAgICAgIG1v
dmUoSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOworCisgICAgICAgICAgICBMYWJlbCBsb29wKHRo
aXMpOworCisgICAgICAgICAgICAvLyBXZSBnZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGFzdCBp
dGVyYXRpb24gdG8gY2hlY2sgdGhlIHplcm8td2lkdGggbWF0Y2guCisgICAgICAgICAgICBpZiAo
dGVybS5pbnZlcnRPckNhcHR1cmUpCisgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0
cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkp
KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gVE9ETzogTmVlZCB0byBzdG9yZSB0aGUgY291bnRlclJlZ2lzdGVyIGJlY2F1c2Ugd2UgdXNl
IGl0IGZvciBzZWFyY2hpbmcgb24gdGhlIHN0YWNrLgorCisgICAgICAgICAgICAgICAgLy8gVXNl
IHJlZ1QxIChha2EgY291bnRSZWdpc3RlcikgZm9yIHN0b3JpbmcgdGhlIHBvc2l0aW9uIG9uIHN0
YWNrLgorICAgICAgICAgICAgICAgIG1vdmUoSW1tMzIoMCksIHJlZ1QxKTsKKworICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCBmb3IgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgcGFyZW50
aGVzZXMgKFNQSUQpIG9uIHRoZSBzdGFjay4gSWYgZm91bmQgbGVhdmUgdGhlIGxvb3AuCisgICAg
ICAgICAgICAgICAgTGFiZWwgbG9vcDRsb29rdXAodGhpcyk7CisgICAgICAgICAgICAgICAgbG9h
ZDMyKEJhc2VJbmRleChzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEsIFRpbWVzRm91ciwgMCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBKdW1wIGZvdW5kID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBTUElEKTsKKworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBvdGhlciBjYXNlcyAob3Ro
ZXIgaWRlbnRpZmllciBvciBzZXBhcmF0b3IpIGluY3JlbWVudCB0aGUgcG9pbnRlciAocmVnVDEp
LgorICAgICAgICAgICAgICAgIEp1bXAgcGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBT
RVBBKTsKKyAgICAgICAgICAgICAgICBhZGQzMihJbW0zMigyKSwgcmVnVDEpOworICAgICAgICAg
ICAgICAgIGp1bXAobG9vcDRsb29rdXApOworCisgICAgICAgICAgICAgICAgcGFyLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgSnVtcCBoZWFkID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBI
RUFEKTsKKyAgICAgICAgICAgICAgICBhZGQzMihJbW0zMigzKSwgcmVnVDEpOworICAgICAgICAg
ICAgICAgIGp1bXAobG9vcDRsb29rdXApOworCisgICAgICAgICAgICAgICAgaGVhZC5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIG1vdmUoSW1tMzIoLTEpLCBpbmRleFRlbXBvcmFyeSk7Cisg
ICAgICAgICAgICAgICAgSnVtcCBza2lwID0ganVtcCgpOworCisgICAgICAgICAgICAgICAgLy8g
VGhlIFNQSUQgaGFzIGJlZW4gZm91bmQuIExvYWQgdGhlIHN0YXJ0IG9mIHRoZSBwcmV2aW91cyBt
YXRjaCB0byB0aGUgaW5kZXhUZW1wb3JhcnkgcmVnaXN0ZXIuCisgICAgICAgICAgICAgICAgZm91
bmQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCByZWdUMSwgVGltZXNGb3VyLCAwKSwgaW5kZXhUZW1wb3JhcnkpOworICAg
ICAgICAgICAgICAgIHNraXAubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlucHV0T2Zmc2V0KQorICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGlucHV0T2Zm
c2V0KSwgaW5kZXhUZW1wb3JhcnkpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBsYXN0IGl0ZXJhdGlvbiBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgZXF1YWws
IHRoZW4gdGhlIHByZXZpb3VzIG1hdGNoIHdhcyB6ZXJvLXdpZHRoLgorICAgICAgICAgICAgLy8g
SW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gYmFja3RyYWNrLgorICAgICAgICAgICAgSnVtcCBza2lw
QmFja3RyYWNrID0gKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgaW5kZXgpKTsK
KworICAgICAgICAgICAgLy8gTmVlZCB0byBmcmVlIHRoZSBiYWNrdHJhY2sgaW5mb3JtYXRpb24g
b2YgdGhlIHplcm8td2lkdGggbWF0Y2ggZnJvbSB0aGUgc3RhY2suCisgICAgICAgICAgICBpZiAo
dGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUZyZWVTdWJw
YXR0ZXJuKHRlcm0pOworICAgICAgICAgICAgICAgIHBvcFBhcmVuc0ZyYW1lKHRlcm0pOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24gaXMgc3Rp
bGwgaW4gdGhlIHJlZ1QxIHJlZ2lzdGVyLCBhZGQgdGhpcyB2YWx1ZSB0byB0aGUgc3RhY2tQb2lu
dGVyIGFuZCBhdm9pZCBhbm90aGVyIHNlYXJjaC4KKyAgICAgICAgICAgICAgICBhZGQzMihJbW0z
MigzKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIG11bDMyKEltbTMyKHNpemVvZih2b2lkKikp
LCByZWdUMSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFB0cihyZWdUMSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBUaGUg
Y291bnRlciBuZWVkcyB0byBiZSByZXN0b3JlZC4KKworICAgICAgICAgICAgc3VjY2Vzcy5hcHBl
bmQoanVtcCgpKTsKKworICAgICAgICAgICAgc2tpcEJhY2t0cmFjay5saW5rKHRoaXMpOworCisg
ICAgICAgICAgICAvLyBUT0RPOiBUaGUgY291bnRlciBuZWVkcyB0byBiZSByZXN0b3JlZC4KKwor
ICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7CisgICAgICAgICAgICAgICAg
cHVzaFBhcmVuc0ZyYW1lKHRlcm0pOworICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RvcmVNYXRj
aEJlZ2luKHN0YXRlLCB0ZXJtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcHVzaChpbmRleCk7CisgICAgICAgICAgICAgICAgcHVzaChJbW0zMigtMSkpOyAvLyBGSVhN
RTogdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXIKKyAgICAgICAgICAgICAgICBwdXNoKFNQSUQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBOZWVkIHRvIHN0b3JlIHRo
ZSBjb3VudFJlZ2lzdGVyIGJlY2F1c2UgcGFyZW5zIGNhbiBjb250YWluIG90aGVyIGl0ZXJhdGl2
ZSB0ZXJtcyB3aGljaCB1c2UgdGhlIGNvdW50UmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGFuZCB0
aGVzZSBjb3JydXB0IHRoZSBjb3VudGVyLgorCiAgICAgICAgICAgICBpZiAoY291bnRUb0NoZWNr
KSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5hZGRCYWNrdHJhY2tKdW1wKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrKSk7CisgICAgICAgICAgICAgICAgcGFy
ZW50aGVzZXNTdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcElmTm9BdmFpbGFibGVJbnB1dChjb3Vu
dFRvQ2hlY2spLCB0aGlzKTsKICAgICAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmNoZWNr
ZWRUb3RhbCArPSBjb3VudFRvQ2hlY2s7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZv
ciAocGFyZW50aGVzZXNTdGF0ZS5yZXNldFRlcm0oKTsgcGFyZW50aGVzZXNTdGF0ZS50ZXJtVmFs
aWQoKTsgcGFyZW50aGVzZXNTdGF0ZS5uZXh0VGVybSgpKQogICAgICAgICAgICAgICAgIGdlbmVy
YXRlVGVybShwYXJlbnRoZXNlc1N0YXRlKTsKIAotICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhl
cmUsIHdlIG1hdGNoZWQhIExpbWl0IG5vdCB5ZXQgc3VwcG9ydGVkLCBzbyBqdXN0IHRyeSB0byBt
YXRjaCBtb3JlIQotICAgICAgICAgICAganVtcChtYXRjaEFnYWluKTsKLSAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gVE9ETzogUmVzdG9yZSB0aGUgY291bnRSZWdpc3RlciBpbiBjYXNlIG9m
IGEgc3VjY2Vzc2Z1bCBtYXRjaC4KKworICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0
dXJlKQorICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RvcmVNYXRjaEVuZChzdGF0ZSwgdGVybSk7
CisKKyAgICAgICAgICAgIGFkZDMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgIT0gMHhmZmZmZmZmZikKKyAgICAgICAgICAgICAg
ICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS5xdWFudGl0eUNv
dW50KSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGp1bXAobG9vcCk7CisKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuY2hlY2tlZFRv
dGFsIC09IGNvdW50VG9DaGVjazsKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBBRlRFUiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUK
KyAgICAgICAgICAgIExhYmVsIGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyh0aGlzKTsKKworICAg
ICAgICAgICAgLy8gSWYgU1BJRCBpcyBub3QgZm91bmQgb24gdGhlIHN0YWNrIGRvIGJhY2t0cmFj
ayBCRUZPUkUgdGhlIHBhcmVucworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGdl
bmVyYXRlQnJhbmNoSWZQYXJlbnNOb3RGb3VuZCh0ZXJtKSwgdGhpcyk7CisKKyAgICAgICAgICAg
IC8vIElmIHRoZSBtYXJrIG9uIHRvcCBvZiB0aGUgc3RhY2sgaXMgbm90IHRoZSBjdXJyZW50IHN1
YnBhdHRlcm4gaWQgKFNQSUQpIHRoZW4gd2UgbmVlZCB0byBiYWNrdHJhY2sgd2l0aGluIHBhcmVu
dGhlc2VzLgorICAgICAgICAgICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzIHdlIG5lZWQgdG8gZnJl
ZSB0aGUgbGFzdCBmcmFtZS4KKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUoMCwgaW5kZXhUZW1w
b3JhcnkpOworICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJh
bmNoMzIoTm90RXF1YWwsIGluZGV4VGVtcG9yYXJ5LCBTUElEKSwgdGhpcyk7CisKKyAgICAgICAg
ICAgIGlmICh0ZXJtLmludmVydE9yQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICBwb3BQYXJlbnNG
cmFtZSh0ZXJtKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRQdHIoSW1t
MzIoMyooc2l6ZW9mKHZvaWQqKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAg
ICAgIHN1Y2Nlc3MuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBX
SVRISU4gdGhlIHBhcmVucyBqdW1wcyBoZXJlCiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRl
LmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7Ci0gICAgICAgICAgICAvLyBXZSBnZXQg
aGVyZSBpZiB0aGUgYWx0ZXJuYXRpdmUgZmFpbHMgdG8gbWF0Y2ggLSBmYWxsIHRocm91Z2ggdG8g
dGhlIG5leHQgaXRlcmF0aW9uLCBvciBvdXQgb2YgdGhlIGxvb3AuCiAKLSAgICAgICAgICAgIGlm
IChjb3VudFRvQ2hlY2spIHsKLSAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudFRvQ2hl
Y2spLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5jaGVja2VkVG90
YWwgLT0gY291bnRUb0NoZWNrOworICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJl
KQorICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1dCwgKCh0ZXJtLnBhcmVudGhl
c2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSksIGluZGV4KTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRvcCBvZiB0aGUgc3RhY2sgaXMgdGhlIGN1
cnJlbnQgc3VicGF0dGVybiBpZCAoU1BJRCkuCisgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFt
ZSgyLCBpbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICAvLyBJZiB0
aGUgbGFzdCBhbHRlcm5hdGl2ZSBmYWxscyB0aHJvdWdoIHRvIGhlcmUsIHdlIGhhdmUgYSBmYWls
ZWQgbWF0Y2guLi4KLSAgICAgICAgLy8gV2hpY2ggbWVhbnMgdGhhdCB3ZSBtYXRjaCB3aGF0ZXZl
ciB3ZSBoYXZlIG1hdGNoZWQgdXAgdG8gdGhpcyBwb2ludCAoZXZlbiBpZiBub3RoaW5nKS4KKyAg
ICAgICAgICAgIGlmIChpbnB1dE9mZnNldCAmJiBjb3VudFRvQ2hlY2spCisgICAgICAgICAgICAg
ICAgc3ViMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleCk7CisKKyAgICAgICAgICAgIGlmICh0
ZXJtLmludmVydE9yQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICBwb3BQYXJlbnNGcmFtZSh0ZXJt
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhZGRQdHIoSW1tMzIoMyooc2l6
ZW9mKHZvaWQqKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAgICAgIHN0YXRl
LnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOworICAgICAg
ICAgICAgc3VjY2Vzcy5saW5rKHRoaXMpOworICAgICAgICAgICAgLy8gVE9ETzogVGhlIGNvdW50
ZXIgbmVlZHMgdG8gYmUgc3RvcmVkLgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc2hv
dWxkRmFsbEJhY2sgPSB0cnVlOworICAgIH0KKworICAgIC8vIFRPRE86IEZpbmlzaCB0aGUgaW1w
bGVtZW50YXRpb24KKyAgICB2b2lkIGdlbmVyYXRlUGFyZW50aGVzZXNOb25HcmVlZHkoVGVybUdl
bmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAKICAgICAvLyBUaGUgYmFja3RyYWNrIGluZm9ybWF0aW9uIHdoaWNoIHdhcyBn
ZW5lcmF0ZWQgYnkgdGhlIGV4cHJlc3Npb25zIHdpdGhpbiB0aGUgcGFyZW50aGV0aWNhbCBhc3Nl
cnRpb24KQEAgLTEyOTcsMTcgKzE0NjcsMjkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm46Ci0gICAgICAgICAgICBpZiAo
dGVybS5xdWFudGl0eUNvdW50ID09IDEpIHsKKyAgICAgICAgICAgIC8vIEFzc2lnbiB1bmlxdWUg
aWRlbnRpZmllciB0byBub24tY2FwdHVyaW5nIHBhcmVudGhlc2VzIGR1cmluZyB0aGUgSklUIGNv
ZGUgZ2VuZXJhdGlvbiBwaGFzZS4KKyAgICAgICAgICAgIGlmICghdGVybS5pbnZlcnRPckNhcHR1
cmUpIHsKKyAgICAgICAgICAgICAgICBtX251bVBhcmVucysrOworICAgICAgICAgICAgICAgIHRl
cm0ucGFyZW50aGVzZXMubm9uQ2FwdHVyaW5nSWQgPSBtX251bVBhcmVuczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCh0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSkgJiYgIXRlcm0u
cGFyZW50aGVzZXMuaXNDb3B5KQogICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNT
aW5nbGUoc3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChzdGF0ZS5pc0xhc3RUZXJtKCkgJiYgc3RhdGUuaXNNYWluRGlzanVuY3Rpb24oKSkgeyAv
LyBJcyB0aGlzIGlzIHRoZSBsYXN0IHRlcm0gb2YgdGhlIG1haW4gZGlzanVuY3Rpb24/Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgdGhpcyBoYXMgYSBncmVlZHkgcXVhbnRpZmllciwgdGhlbiBpdCB3
aWxsIG5ldmVyIG5lZWQgdG8gYmFja3RyYWNrIQotICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFjayhzdGF0ZSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlcm0ucXVhbnRpdHlUeXBlKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoKKyAgICAgICAgICAgICAgICAg
ICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vIGdlbmVy
YXRlUGFyZW50aGVzZXNGaXhlZChzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllckdyZWVkeToKKyAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0dyZWVkeShzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllck5vbkdyZWVkeToKKyAgICAg
ICAgICAgICAgICAgICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIC8vIGdlbmVyYXRlUGFyZW50aGVzZXNOb25HcmVlZHkoc3RhdGUpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgpAQCAtMTU4
MCw2ICsxNzYyLDcgQEAgcHVibGljOgogICAgIFJlZ2V4R2VuZXJhdG9yKFJlZ2V4UGF0dGVybiYg
cGF0dGVybikKICAgICAgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX3Nob3Vs
ZEZhbGxCYWNrKGZhbHNlKQorICAgICAgICAsIG1fbnVtUGFyZW5zKHBhdHRlcm4ubV9udW1TdWJw
YXR0ZXJucykKICAgICAgICAgLCBtX251bVNlcGEoMCkKICAgICB7CiAgICAgfQpAQCAtMTYxNSw2
ICsxNzk4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZWdleFBhdHRlcm4mIG1fcGF0dGVy
bjsKICAgICBib29sIG1fc2hvdWxkRmFsbEJhY2s7CisgICAgdW5zaWduZWQgbV9udW1QYXJlbnM7
IC8vIG51bWJlciBvZiBwYXJlbnRoZXNlcyBpbiB0aGUgcGF0dGVybgogICAgIHVuc2lnbmVkIG1f
bnVtU2VwYTsgLy8gbnVtYmVyIG9mIHNlcGFyZXRvcnMgdG8gaWRlbnRpZnkgc2VwYXJhdG9ycyBv
biB0aGUgc3RhY2sKICAgICBWZWN0b3I8QWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQ+IG1fYmFj
a3RyYWNrUmVjb3JkczsKIH07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4
UGF0dGVybi5oIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAppbmRleCA2MWQ2
YWQ2Li4wYzcyMTU2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVy
bi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKQEAgLTExNCw2ICsx
MTQsNyBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogICAgICAgICAgICAgUGF0dGVybkRpc2p1bmN0
aW9uKiBkaXNqdW5jdGlvbjsKICAgICAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZDsKICAg
ICAgICAgICAgIHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuSWQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBub25DYXB0dXJpbmdJZDsKICAgICAgICAgICAgIGJvb2wgaXNDb3B5OwogICAgICAgICB9IHBh
cmVudGhlc2VzOwogICAgIH07CkBAIC0xMzksMTIgKzE0MCwxMyBAQCBzdHJ1Y3QgUGF0dGVyblRl
cm0gewogICAgICAgICBxdWFudGl0eUNvdW50ID0gMTsKICAgICB9CiAKLSAgICBQYXR0ZXJuVGVy
bShUeXBlIHR5cGUsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgUGF0dGVybkRpc2p1bmN0aW9uKiBk
aXNqdW5jdGlvbiwgYm9vbCBpbnZlcnRPckNhcHR1cmUpCisgICAgUGF0dGVyblRlcm0oVHlwZSB0
eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rp
b24sIGJvb2wgaW52ZXJ0T3JDYXB0dXJlLCB1bnNpZ25lZCBub25DYXB0dXJpbmdJZCA9IDApCiAg
ICAgICAgIDogdHlwZSh0eXBlKQogICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnRPckNh
cHR1cmUpCiAgICAgewogICAgICAgICBwYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiA9IGRpc2p1bmN0
aW9uOwogICAgICAgICBwYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPSBzdWJwYXR0ZXJuSWQ7Cisg
ICAgICAgIHBhcmVudGhlc2VzLm5vbkNhcHR1cmluZ0lkID0gbm9uQ2FwdHVyaW5nSWQ7CiAgICAg
ICAgIHBhcmVudGhlc2VzLmlzQ29weSA9IGZhbHNlOwogICAgICAgICBxdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKICAgICAgICAgcXVhbnRpdHlDb3VudCA9IDE7Ci0tIAoxLjcu
MQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61522</attachid>
            <date>2010-07-14 08:26:04 -0700</date>
            <delta_ts>2010-07-14 08:26:04 -0700</delta_ts>
            <desc>performance testcase</desc>
            <filename>regex-greedy-parens.js</filename>
            <type>application/javascript</type>
            <size>666</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">dmFyIHNlZWQ7CgpmdW5jdGlvbiByYW5kKCkKewogIHZhciBhID0gKHNlZWQgKiA1KSAmIDB4RkZG
RjsKICBhID0gKChhICYgMHhGRikgPDwgOCkgKyAoYSA+PiA4KTsKICBzZWVkID0gKCgoc2VlZCAr
IGEpICYgMHhmZik8PDgpICsgKGEgJiAweGZmKTsKICByZXR1cm4gYSAlIDM7Cn0KCmZ1bmN0aW9u
IGdlbmVyYXRlU3RyaW5nKGkpCnsKICAgIHZhciBzdHIgPSAiIjsKICAgIHNlZWQgPSAweGJiZDEg
KiBpOwoKICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTAyNDsgaisrKQogICAgICAgIHN0ciArPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKHJhbmQoKSArIDk3KQoKICAgIHJldHVybiBzdHI7Cn0KCmZvciAo
dmFyIGkgPSAxOyBpIDw9IDEwMjQ7IGkrKykKICAgIGdlbmVyYXRlU3RyaW5nKGkpLm1hdGNoKC8o
KGEqKSooYikqYyopKi8pOyAgIApmb3IgKHZhciBpID0gMTsgaSA8PSAxMDI0OyBpKyspCiAgICBn
ZW5lcmF0ZVN0cmluZyhpKS5tYXRjaCgvKChhKSooYikqKGMpKikqLyk7CmZvciAodmFyIGkgPSAx
OyBpIDw9IDEwMjQ7IGkrKykKICAgIGdlbmVyYXRlU3RyaW5nKGkpLm1hdGNoKC8oKGEqKSooYiop
KihjKikqKSovKTsKZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAyNDsgaSsrKQogICAgZ2VuZXJhdGVT
dHJpbmcoaSkubWF0Y2goLygoYSooYiooYyopKikqKSopKi8pOwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61524</attachid>
            <date>2010-07-14 08:32:29 -0700</date>
            <delta_ts>2010-07-14 08:32:29 -0700</delta_ts>
            <desc>measurement script</desc>
            <filename>tipli-test.js</filename>
            <type>application/javascript</type>
            <size>125</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">bG9hZCgncmVnZXgtZ3JlZWR5LXBhcmVucy5qcycpOwoKdmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRl
KCk7CmxvYWQoJ3JlZ2V4LWdyZWVkeS1wYXJlbnMuanMnKTsKcHJpbnQobmV3IERhdGUoKSAtIHN0
YXJ0VGltZSk7Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>