<?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>4920</bug_id>
          
          <creation_ts>2005-09-10 13:06:20 -0700</creation_ts>
          <short_desc>Non-BMP characters in JavaScript identifiers</short_desc>
          <delta_ts>2011-06-14 12:15:52 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          
          <blocked>4885</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19296</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-10 13:06:20 -0700</bug_when>
    <thetext>WebKit doesn&apos;t permit non-BMP characters (ones with codes above 0xFFFF) in JavaScript identifiers. 
There&apos;s no indication that they shouldn&apos;t work just like BMP ones.

Firefox also doesn&apos;t pass this test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19297</commentid>
    <comment_count>1</comment_count>
      <attachid>3848</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-09-10 13:06:42 -0700</bug_when>
    <thetext>Created attachment 3848
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61654</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-19 03:30:15 -0800</bug_when>
    <thetext>The function in question:

UChar Lexer::convertUnicode(int c1, int c2, int c3, int c4)
{
  // FIXME: This conversion is lossy. See http://bugs.webkit.org/show_bug.cgi?id=4920.
  return UChar((convertHex(c1) &lt;&lt; 4) + convertHex(c2), (convertHex(c3) &lt;&lt; 4) + convertHex(c4));
}

Calls UChar(unsigned short, unsigned short) which seems to be totally bogus.  You can&apos;t make a UTF16 &quot;char&quot; out of a UTF16 surrogate pair (as far as I can tell).

I don&apos;t see why the lexer would be combining UTF16 surrogate pairs down into a single 16 bit value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61655</commentid>
    <comment_count>3</comment_count>
      <attachid>17395</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-19 03:41:31 -0800</bug_when>
    <thetext>Created attachment 17395
A patch to remove KJS::UChar (nearly compiles)

Here is a patch to remove KJS::UChar (which I think is part of the root of this problem).  There are still two compile errors in this patch, one of which touches on this bug (since the method which uses UChar(unsigned short, unsigned short) is totally bogus.  So I&apos;m attaching this patch for Alexey or someone else with massive unicode skillz to complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61742</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-19 22:16:27 -0800</bug_when>
    <thetext>Well, let me clarify.  KJS::UChar isn&apos;t the &quot;root of this problem&quot;.  KJS::UChar(unsigned short, unsigned short) is the root of this problem.  It&apos;s a busted function which tries to do the impossible: &quot;turn this surrogate pair into a single utf16 codepoint&quot;.  The problem is caused by the Lexer not inserting the real surrogate pair into the parsed stream, and instead is combing the surrogates into a single broken 16-bit value.  Removing UChar (and thus the broken constructor) is one way of fixing the problem. Another would be to just simply remove the constructor from UChar. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61752</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-19 23:08:05 -0800</bug_when>
    <thetext>Um.  I was wrong.  This has nothing to do with Lexer::convertUnicode() That function, although strange, is right for its purpose. Likewise UChar(unsigned short, unsigned short) really should be UChar(unsigned char, unsigned char) but seems to be used correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61764</commentid>
    <comment_count>6</comment_count>
      <attachid>17414</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-20 02:12:00 -0800</bug_when>
    <thetext>Created attachment 17414
Sorry ggaren, I am in your lexer fixing your bugz

That was actually quite simple.  About to SunSpider this puppy to make sure we haven&apos;t regressed to badly as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61765</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-20 02:44:52 -0800</bug_when>
    <thetext>Tested with SunSpider.  It gave me totally wacky results.  Some slower, some faster.  Net change: 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61773</commentid>
    <comment_count>8</comment_count>
      <attachid>17414</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-20 03:20:21 -0800</bug_when>
    <thetext>Comment on attachment 17414
Sorry ggaren, I am in your lexer fixing your bugz

+      } else if (U16_IS_SURROGATE_LEAD(current) &amp;&amp; isIdentStart(U16_GET_SUPPLEMENTARY(current, next1))) {

This looks great to me, but I&apos;d like someone with more JS knowlege to review.

One thing I&apos;m not sure about is what will happen if next1 is not available (but JS doesn&apos;t use incremental parsing, does it?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61841</commentid>
    <comment_count>9</comment_count>
      <attachid>17414</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-11-20 13:59:18 -0800</bug_when>
    <thetext>Comment on attachment 17414
Sorry ggaren, I am in your lexer fixing your bugz

This needs a changelog and a testcase.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62383</commentid>
    <comment_count>10</comment_count>
      <attachid>17414</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-26 11:39:35 -0800</bug_when>
    <thetext>Comment on attachment 17414
Sorry ggaren, I am in your lexer fixing your bugz

If you reach the end of the input stream before reading next1, next1 is set to -1. Calling U16_GET_SUPPLEMENTARY on -1 is not valid because &quot;The result is undefined if the input values are not lead and trail surrogates.&quot;

Calling U16_IS_SURROGATE_LEAD on current is also not valid because U16_IS_SURROGATE_LEAD assumes that &quot;c is a surrogate code point.&quot;

You need to check U16_IS_LEAD(current) and U16_IS_TRAIL(next1) before calling isIdentStart() or isIdentPart().

You should also add 2 test cases: one for when next1 is -1 and bad things happen, and one for when current seems like a lead surrogate even though it is not a surrogate code point and bad things happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405151</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-17 10:45:28 -0700</bug_when>
    <thetext>V8 doesn&apos;t pass the test case either.  Are we sure this is still a valid bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420217</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-13 22:22:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; V8 doesn&apos;t pass the test case either.  Are we sure this is still a valid bug?

I don&apos;t believe this bug is valid.

Section 6 of ES5 defines the meaning of &apos;character&apos; and &apos;Unicode character&apos; within the spec.  &apos;Character&apos; refers to precisely one 16-bit UTF-16 Code Unit.  Only the exact phrase &apos;Unicode character&apos; should refer to a unicode encoded character, possibly represented by a surrogate pair in UTF-16.

Section 7.6 defines the set of characters permissible in Identifiers in terms of the categories of &apos;characters&apos;, i.e. 16-bit Code Units.  Considered individually (as the designation &apos;character&apos; requires) the two halves of an abstract character formed by a surrogate pair are of code point category Cs, while is not a permissible code point category for inclusion within an identifier.

As such, 𐐀 is not a valid identifier per the ES5 spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420233</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-13 23:08:45 -0700</bug_when>
    <thetext>I think that the spec is just being sloppy here, as it is with everything else Unicode related, but compatibility beats common sense.

&gt; Considered individually (as the designation &apos;character&apos; requires) the two halves of an abstract character formed by a surrogate pair are of code point category Cs

I do not think that this is how it works. Only a Unicode character can have a category, so the halves in UTF-16 encoding don&apos;t have categories at all. In other words, U+D801 has category Cs, but bytes 0xD801 don&apos;t have a category.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420297</commentid>
    <comment_count>14</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-14 02:38:22 -0700</bug_when>
    <thetext>&gt; I do not think that this is how it works. Only a Unicode character can have a category, so the halves in UTF-16 encoding don&apos;t have categories at all. In other words, U+D801 has category Cs, but bytes 0xD801 don&apos;t have a category.

I&apos;m afraid I don&apos;t have quite the same reading of the Unicode spec as you.  The Unicode spec defines types for Unicode Code Points, which are specified as simply being any integer in the range 0..0x10FFFF.  Is it valid to request a Code Point type for the value 0xD801? - yes - it has a type, which is Cs.

And I think that a clearer point here is it that this seems unequivocally to be the intention of the ES5 spec.  ES5 clearly specifies that the source text should be being lexed one Unicode code unit at a time.  The specification defines both the term &apos;SourceCharacter&apos; and &apos;character&apos; correspond to a single UTF-16 Code Unit (deliberately drawing a distinction with &quot;Unicode characters&quot;, below).  Arising from this definition, the specification of elements within an IdentifierName are only considering the Unicode Code Point type from a single Code Unit at a time.

Unless and until the EMCA spec changes to instead define &apos;SourceCharacter&apos; and &apos;character&apos; to be a &quot;Unicode character&quot; (which may be represented by more than one code unit), we shouldn&apos;t change our behaviour here - I think it&apos;s pretty clear that we are in compliance with the ES5 spec as it current stands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420462</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-14 09:05:05 -0700</bug_when>
    <thetext>I didn&apos;t reopen this bug, because I don&apos;t think that there is enough practical difference for us to care. But tracking a obvious JS spec mistake with a WebKit bug is not unthinkable, even when we&apos;re in compliance.

&gt; The Unicode spec defines types for Unicode Code Points

As you said, they are defined for code points, and not for code units. These two-bytes sequences of UTF-16 are code units.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420647</commentid>
    <comment_count>16</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-14 12:15:52 -0700</bug_when>
    <thetext>&gt; &gt; The Unicode spec defines types for Unicode Code Points
&gt; 
&gt; As you said, they are defined for code points, and not for code units. These two-bytes sequences of UTF-16 are code units.

Sure, and the code unit to code point mapping is outside the definition of the Unicode spec.  ECMAScript used to specifically defined that the source text encoding was UCS-2, which is a direct mapping from code units to code points.  They no longer call out the name of this encoding, but the spec defined lexing behaviour still matches UCS-2 decoding.

&gt; I didn&apos;t reopen this bug, because I don&apos;t think that there is enough practical difference for us to care. But tracking a obvious JS spec mistake with a WebKit bug is not unthinkable, even when we&apos;re in compliance.

That&apos;s an understandable and reasonable goal.  I&apos;m just worried that this bug report as it stands is likely to be misconstrued as a bug in our code that should be fixed, and that a contributor might work towards making changes that we would not accept.  Maybe we could try to get a bug filed against the ECMA spec (I believe their bug track is only open to ES members :-( ), and then you could reopen and bug &amp; mark this bug as blocked on the ES one?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3848</attachid>
            <date>2005-09-10 13:06:42 -0700</date>
            <delta_ts>2005-09-10 13:06:42 -0700</delta_ts>
            <desc>test case</desc>
            <filename>js-non-BMP.html</filename>
            <type>text/html</type>
            <size>668</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cjx0aXRsZT5Ob24tQk1QIGNoYXJhY3RlcnMgaW4gaWRl
bnRpZmllcnM8L3RpdGxlPgoKPHNjcmlwdD4KZnVuY3Rpb24gbG9hZENvbXBsZXRlKCkKewoJdmFy
IPCQkIAgPSAxOwoJCgkvLyBPSywgcGFyc2VkIHRvIGhlcmUgc3VjY2Vzc2Z1bGx5Li4uCglkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RDaGlsZC5ub2RlVmFsdWUg
PSAiIjsKCglpZiAodHlwZW9mIPCQkIAgPT0gJ251bWJlcicpCgkJZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gIlN1Y2Nlc3MiOwoJ
ZWxzZQoJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdENoaWxk
Lm5vZGVWYWx1ZSA9ICJGYWlsdXJlIjsKfQo8L3NjcmlwdD4KCjwvaGVhZD4KPGJvZHkgb25sb2Fk
PSJsb2FkQ29tcGxldGUoKSI+CjxkaXY+UGFyc2UgRmFpbHVyZTwvZGl2Pgo8c2NyaXB0PgoJaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewoJCWxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKCX0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17395</attachid>
            <date>2007-11-19 03:41:31 -0800</date>
            <delta_ts>2010-06-10 15:13:30 -0700</delta_ts>
            <desc>A patch to remove KJS::UChar (nearly compiles)</desc>
            <filename>remove_uchar.patch</filename>
            <type>text/plain</type>
            <size>21570</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwCmluZGV4IDlhMzA3ZDAuLmUzYTFkODIgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU3RyaW5nUmVmLmNwcApAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOjpVbmljb2RlOwogSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhjb25zdCBKU0NoYXIqIGNoYXJzLCBzaXplX3QgbnVtQ2hhcnMpCiB7CiAgICAgSlNMb2NrIGxv
Y2s7Ci0gICAgcmV0dXJuIHRvUmVmKFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBLSlM6
OlVDaGFyKj4oY2hhcnMpLCBzdGF0aWNfY2FzdDxpbnQ+KG51bUNoYXJzKSkucmVwKCktPnJlZigp
KTsKKyAgICByZXR1cm4gdG9SZWYoVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IDo6VUNo
YXIqPihjaGFycyksIHN0YXRpY19jYXN0PGludD4obnVtQ2hhcnMpKS5yZXAoKS0+cmVmKCkpOwog
fQogCiBKU1N0cmluZ1JlZiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb25zdCBjaGFy
KiBzdHJpbmcpCkBAIC01MiwxMiArNTIsMTIgQEAgSlNTdHJpbmdSZWYgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQogICAgIEpTTG9jayBsb2NrOwogCiAg
ICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwotICAgIFZlY3RvcjwgOjpVQ2hhciwg
MTAyND4gYnVmZmVyKGxlbmd0aCk7Ci0gICAgOjpVQ2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Cisg
ICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBidWZmZXIobGVuZ3RoKTsKKyAgICBVQ2hhciogcCA9IGJ1
ZmZlci5kYXRhKCk7CiAgICAgaWYgKGNvbnZlcnNpb25PSyAhPSBjb252ZXJ0VVRGOFRvVVRGMTYo
JnN0cmluZywgc3RyaW5nICsgbGVuZ3RoLCAmcCwgcCArIGxlbmd0aCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIHRvUmVmKFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxLSlM6OlVD
aGFyKj4oYnVmZmVyLmRhdGEoKSksIHAgLSBidWZmZXIuZGF0YSgpKS5yZXAoKS0+cmVmKCkpOwor
ICAgIHJldHVybiB0b1JlZihVU3RyaW5nKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgp
KS5yZXAoKS0+cmVmKCkpOwogfQogCiBKU1N0cmluZ1JlZiBKU1N0cmluZ1JldGFpbihKU1N0cmlu
Z1JlZiBzdHJpbmcpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRp
bGl0eS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5jcHAKaW5kZXgg
MzgzMWJlZC4uYTdhZmU1OSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9j
X3V0aWxpdHkuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmNw
cApAQCAtMTgzLDcgKzE4Myw3IEBAIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21OUElkZW50aWZp
ZXIoY29uc3QgTlBVVEY4KiBuYW1lKQogICAgIE5QVVRGMTYgKm1ldGhvZE5hbWU7CiAgICAgdW5z
aWduZWQgVVRGMTZMZW5ndGg7CiAgICAgY29udmVydFVURjhUb1VURjE2V2l0aExhdGluMUZhbGxi
YWNrKG5hbWUsIC0xLCAmbWV0aG9kTmFtZSwgJlVURjE2TGVuZ3RoKTsgLy8gcmVxdWlyZXMgZnJl
ZSgpIG9mIHJldHVybmVkIG1lbW9yeS4KLSAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoKGNvbnN0
IEtKUzo6VUNoYXIqKW1ldGhvZE5hbWUsIFVURjE2TGVuZ3RoKTsKKyAgICBJZGVudGlmaWVyIGlk
ZW50aWZpZXIoKGNvbnN0IDo6VUNoYXIqKW1ldGhvZE5hbWUsIFVURjE2TGVuZ3RoKTsKICAgICBm
cmVlKG1ldGhvZE5hbWUpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5oIGIvSmF2YVNjcmlwdENvcmUva2pzL1BhcnNlci5o
CmluZGV4IGRiNjBiMzYuLjY1MWI3NDMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9Q
YXJzZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvUGFyc2VyLmgKQEAgLTM1LDggKzM1LDYg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgUHJvZ3JhbU5vZGU7CiAgICAgY2xhc3MgVVN0
cmluZzsKIAotICAgIHN0cnVjdCBVQ2hhcjsKLQogICAgIGNsYXNzIFBhcnNlciA6IE5vbmNvcHlh
YmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IHBhcnNl
UHJvZ3JhbShjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIs
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwIGIvSmF2YVNjcmlw
dENvcmUva2pzL2Z1bmN0aW9uLmNwcAppbmRleCBmNDQ1Y2QzLi5mNDQ4NTBiIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5jcHAKQEAgLTU0Miw4ICs1NDIsOCBAQCBzdGF0aWMgSlNWYWx1ZSogZGVjb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncywgY29uc3QgY2hhciogZG9fbm90X3Vu
ZQogICAgIFVDaGFyIGMgPSAqcDsKICAgICBpZiAoYyA9PSAnJScpIHsKICAgICAgIGludCBjaGFy
TGVuID0gMDsKLSAgICAgIGlmIChrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0KHBbMV0u
dWMpICYmIGlzQVNDSUlIZXhEaWdpdChwWzJdLnVjKSkgewotICAgICAgICBjb25zdCBjaGFyIGIw
ID0gTGV4ZXI6OmNvbnZlcnRIZXgocFsxXS51YywgcFsyXS51Yyk7CisgICAgICBpZiAoayA8PSBs
ZW4gLSAzICYmIGlzQVNDSUlIZXhEaWdpdChwWzFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQocFsyXSkp
IHsKKyAgICAgICAgY29uc3QgY2hhciBiMCA9IExleGVyOjpjb252ZXJ0SGV4KHBbMV0sIHBbMl0p
OwogICAgICAgICBjb25zdCBpbnQgc2VxdWVuY2VMZW4gPSBVVEY4U2VxdWVuY2VMZW5ndGgoYjAp
OwogICAgICAgICBpZiAoc2VxdWVuY2VMZW4gIT0gMCAmJiBrIDw9IGxlbiAtIHNlcXVlbmNlTGVu
ICogMykgewogICAgICAgICAgIGNoYXJMZW4gPSBzZXF1ZW5jZUxlbiAqIDM7CkBAIC01NTEsOCAr
NTUxLDggQEAgc3RhdGljIEpTVmFsdWUqIGRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExp
c3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGRvX25vdF91bmUKICAgICAgICAgICBzZXF1ZW5jZVswXSA9
IGIwOwogICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2VxdWVuY2VMZW47ICsraSkgewog
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHEgPSBwICsgaSAqIDM7Ci0gICAgICAgICAgICBpZiAo
cVswXSA9PSAnJScgJiYgaXNBU0NJSUhleERpZ2l0KHFbMV0udWMpICYmIGlzQVNDSUlIZXhEaWdp
dChxWzJdLnVjKSkKLSAgICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBMZXhlcjo6Y29udmVydEhl
eChxWzFdLnVjLCBxWzJdLnVjKTsKKyAgICAgICAgICAgIGlmIChxWzBdID09ICclJyAmJiBpc0FT
Q0lJSGV4RGlnaXQocVsxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHFbMl0pKQorICAgICAgICAgICAg
ICBzZXF1ZW5jZVtpXSA9IExleGVyOjpjb252ZXJ0SGV4KHFbMV0sIHFbMl0pOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgIGNoYXJMZW4gPSAwOwogICAgICAgICAgICAgICBicmVh
azsKQEAgLTU3OSwxMyArNTc5LDEzIEBAIHN0YXRpYyBKU1ZhbHVlKiBkZWNvZGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb19ub3RfdW5lCiAgICAgICAg
IC8vIFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2UgZG9uJ3QgdXNlICJzdHJpY3QiIG1vZGUgaXMgdGhl
ICJ1bmVzY2FwZSIgZnVuY3Rpb24uCiAgICAgICAgIC8vIEZvciB0aGF0LCBpdCdzIGdvb2QgdG8g
c3VwcG9ydCB0aGUgd29ua3kgIiV1IiBzeW50YXggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBXaW5J
RS4KICAgICAgICAgaWYgKGsgPD0gbGVuIC0gNiAmJiBwWzFdID09ICd1JwotICAgICAgICAgICAg
JiYgaXNBU0NJSUhleERpZ2l0KHBbMl0udWMpICYmIGlzQVNDSUlIZXhEaWdpdChwWzNdLnVjKQot
ICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHBbNF0udWMpICYmIGlzQVNDSUlIZXhEaWdp
dChwWzVdLnVjKSkgeworICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHBbMl0pICYmIGlz
QVNDSUlIZXhEaWdpdChwWzNdKQorICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHBbNF0p
ICYmIGlzQVNDSUlIZXhEaWdpdChwWzVdKSkgewogICAgICAgICAgIGNoYXJMZW4gPSA2OwotICAg
ICAgICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUocFsyXS51YywgcFszXS51YywgcFs0XS51
YywgcFs1XS51Yyk7CisgICAgICAgICAgdSA9IExleGVyOjpjb252ZXJ0VW5pY29kZShwWzJdLCBw
WzNdLCBwWzRdLCBwWzVdKTsKICAgICAgICAgfQogICAgICAgfQotICAgICAgaWYgKGNoYXJMZW4g
JiYgKHUudWMgPT0gMCB8fCB1LnVjID49IDEyOCB8fCAhc3RyY2hyKGRvX25vdF91bmVzY2FwZSwg
dS5sb3coKSkpKSB7CisgICAgICBpZiAoY2hhckxlbiAmJiAodSA9PSAwIHx8IHUgPj0gMTI4IHx8
ICFzdHJjaHIoZG9fbm90X3VuZXNjYXBlLCB1LmxvdygpKSkpIHsKICAgICAgICAgYyA9IHU7CiAg
ICAgICAgIGsgKz0gY2hhckxlbiAtIDE7CiAgICAgICB9CkBAIC02NTgsNyArNjU4LDcgQEAgc3Rh
dGljIGRvdWJsZSBwYXJzZUludChjb25zdCBVU3RyaW5nJiBzLCBpbnQgcmFkaXgpCiAgICAgaW50
IGxlbmd0aCA9IHMuc2l6ZSgpOwogICAgIGludCBwID0gMDsKIAotICAgIHdoaWxlIChwIDwgbGVu
Z3RoICYmIGlzU3RyV2hpdGVTcGFjZShzW3BdLnVjKSkgeworICAgIHdoaWxlIChwIDwgbGVuZ3Ro
ICYmIGlzU3RyV2hpdGVTcGFjZShzW3BdKSkgewogICAgICAgICArK3A7CiAgICAgfQogCkBAIC02
ODksNyArNjg5LDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUludChjb25zdCBVU3RyaW5nJiBzLCBp
bnQgcmFkaXgpCiAgICAgYm9vbCBzYXdEaWdpdCA9IGZhbHNlOwogICAgIGRvdWJsZSBudW1iZXIg
PSAwOwogICAgIHdoaWxlIChwIDwgbGVuZ3RoKSB7Ci0gICAgICAgIGludCBkaWdpdCA9IHBhcnNl
RGlnaXQoc1twXS51YywgcmFkaXgpOworICAgICAgICBpbnQgZGlnaXQgPSBwYXJzZURpZ2l0KHNb
cF0sIHJhZGl4KTsKICAgICAgICAgaWYgKGRpZ2l0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHNhd0RpZ2l0ID0gdHJ1ZTsKQEAgLTcxNyw3ICs3MTcsNyBAQCBzdGF0aWMgZG91
YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgcykKICAgICAvLyBOZWVkIHRvIHNraXAgYW55
IHdoaXRlc3BhY2UgYW5kIHRoZW4gb25lICsgb3IgLSBzaWduLgogICAgIGludCBsZW5ndGggPSBz
LnNpemUoKTsKICAgICBpbnQgcCA9IDA7Ci0gICAgd2hpbGUgKHAgPCBsZW5ndGggJiYgaXNTdHJX
aGl0ZVNwYWNlKHNbcF0udWMpKSB7CisgICAgd2hpbGUgKHAgPCBsZW5ndGggJiYgaXNTdHJXaGl0
ZVNwYWNlKHNbcF0pKSB7CiAgICAgICAgICsrcDsKICAgICB9CiAgICAgaWYgKHAgPCBsZW5ndGgg
JiYgKHNbcF0gPT0gJysnIHx8IHNbcF0gPT0gJy0nKSkgewpAQCAtODM5LDcgKzgzOSw3IEBAIEpT
VmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0CiAgICAgICBVU3RyaW5nIHIgPSAiIiwgcywgc3RyID0gYXJn
c1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICBjb25zdCBVQ2hhciogYyA9IHN0ci5kYXRhKCk7
CiAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHN0ci5zaXplKCk7IGsrKywgYysrKSB7Ci0gICAg
ICAgIGludCB1ID0gYy0+dWM7CisgICAgICAgIFVDaGFyIHUgPSAqYzsKICAgICAgICAgaWYgKHUg
PiAyNTUpIHsKICAgICAgICAgICBjaGFyIHRtcFs3XTsKICAgICAgICAgICBzcHJpbnRmKHRtcCwg
IiUldSUwNFgiLCB1KTsKQEAgLTg2NCwxNiArODY0LDE1IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJ
bXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmRhdGEoKSArIGs7CiAgICAgICAgIFVD
aGFyIHU7CiAgICAgICAgIGlmICgqYyA9PSBVQ2hhcignJScpICYmIGsgPD0gbGVuIC0gNiAmJiAq
KGMrMSkgPT0gVUNoYXIoJ3UnKSkgewotICAgICAgICAgIGlmIChMZXhlcjo6aXNIZXhEaWdpdCgo
YysyKS0+dWMpICYmIExleGVyOjppc0hleERpZ2l0KChjKzMpLT51YykgJiYKLSAgICAgICAgICAg
ICAgTGV4ZXI6OmlzSGV4RGlnaXQoKGMrNCktPnVjKSAmJiBMZXhlcjo6aXNIZXhEaWdpdCgoYys1
KS0+dWMpKSB7Ci0gICAgICAgICAgdSA9IExleGVyOjpjb252ZXJ0VW5pY29kZSgoYysyKS0+dWMs
IChjKzMpLT51YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKzQpLT51
YywgKGMrNSktPnVjKTsKKyAgICAgICAgICBpZiAoTGV4ZXI6OmlzSGV4RGlnaXQoY1syXSkgJiYg
TGV4ZXI6OmlzSGV4RGlnaXQoY1szXSkgJiYKKyAgICAgICAgICAgICAgTGV4ZXI6OmlzSGV4RGln
aXQoY1s0XSkgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoY1s1XSkpIHsKKyAgICAgICAgICB1ID0gTGV4
ZXI6OmNvbnZlcnRVbmljb2RlKGNbMl0sIGNbM10sIGNbNF0sIGNbNV0pOwogICAgICAgICAgIGMg
PSAmdTsKICAgICAgICAgICBrICs9IDU7CiAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KCpjID09IFVDaGFyKCclJykgJiYgayA8PSBsZW4gLSAzICYmCi0gICAgICAgICAgICAgICAgICAg
TGV4ZXI6OmlzSGV4RGlnaXQoKGMrMSktPnVjKSAmJiBMZXhlcjo6aXNIZXhEaWdpdCgoYysyKS0+
dWMpKSB7Ci0gICAgICAgICAgdSA9IFVDaGFyKExleGVyOjpjb252ZXJ0SGV4KChjKzEpLT51Yywg
KGMrMiktPnVjKSk7CisgICAgICAgICAgICAgICAgICAgTGV4ZXI6OmlzSGV4RGlnaXQoY1sxXSkg
JiYgTGV4ZXI6OmlzSGV4RGlnaXQoY1syXSkpIHsKKyAgICAgICAgICB1ID0gVUNoYXIoTGV4ZXI6
OmNvbnZlcnRIZXgoY1sxXSwgY1syXSkpOwogICAgICAgICAgIGMgPSAmdTsKICAgICAgICAgICBr
ICs9IDI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlv
bl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKaW5k
ZXggMzNkM2Y3MC4uYmEyNTUxZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0
aW9uX29iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5j
cHAKQEAgLTIyMCwxMCArMjIwLDEwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbk9iamVjdEltcDo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncywgY29uc3QKICAgd2hpbGUg
KGkgPCBsZW4pIHsKICAgICAgIHdoaWxlICgqYyA9PSAnICcgJiYgaSA8IGxlbikKICAgICAgICAg
ICBjKyssIGkrKzsKLSAgICAgIGlmIChMZXhlcjo6aXNJZGVudFN0YXJ0KGMtPnVjKSkgeyAgLy8g
ZWxzZSBlcnJvcgorICAgICAgaWYgKExleGVyOjppc0lkZW50U3RhcnQoKmMpKSB7ICAvLyBlbHNl
IGVycm9yCiAgICAgICAgICAgcGFyYW0gPSBVU3RyaW5nKGMsIDEpOwogICAgICAgICAgIGMrKywg
aSsrOwotICAgICAgICAgIHdoaWxlIChpIDwgbGVuICYmIChMZXhlcjo6aXNJZGVudFBhcnQoYy0+
dWMpKSkgeworICAgICAgICAgIHdoaWxlIChpIDwgbGVuICYmIChMZXhlcjo6aXNJZGVudFBhcnQo
KmMpKSkgewogICAgICAgICAgICAgICBwYXJhbSArPSBVU3RyaW5nKGMsIDEpOwogICAgICAgICAg
ICAgICBjKyssIGkrKzsKICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9r
anMvaWRlbnRpZmllci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmllci5jcHAKaW5k
ZXggM2ZhMDFhZC4uMmU4MmRlOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL2lkZW50
aWZpZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9pZGVudGlmaWVyLmNwcApAQCAtNjcs
NyArNjcsNyBAQCBib29sIElkZW50aWZpZXI6OmVxdWFsKGNvbnN0IFVTdHJpbmc6OlJlcCAqciwg
Y29uc3QgY2hhciAqcykKICAgICBpbnQgbGVuZ3RoID0gci0+bGVuOwogICAgIGNvbnN0IFVDaGFy
ICpkID0gci0+ZGF0YSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQot
ICAgICAgICBpZiAoZFtpXS51YyAhPSAodW5zaWduZWQgY2hhcilzW2ldKQorICAgICAgICBpZiAo
ZFtpXSAhPSAodW5zaWduZWQgY2hhcilzW2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBzW2xlbmd0aF0gPT0gMDsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBJZGVu
dGlmaWVyOjplcXVhbChjb25zdCBVU3RyaW5nOjpSZXAgKnIsIGNvbnN0IFVDaGFyICpzLCBpbnQg
bGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29uc3QgVUNoYXIgKmQgPSByLT5k
YXRhKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCi0gICAgICAgIGlm
IChkW2ldLnVjICE9IHNbaV0udWMpCisgICAgICAgIGlmIChkW2ldICE9IHNbaV0pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05MSw3ICs5MSw3IEBA
IGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3QgVVN0cmluZzo6UmVwICpyLCBjb25zdCBVU3Ry
aW5nOjpSZXAgKmIpCiAgICAgY29uc3QgVUNoYXIgKmQgPSByLT5kYXRhKCk7CiAgICAgY29uc3Qg
VUNoYXIgKnMgPSBiLT5kYXRhKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGlmIChkW2ldLnVjICE9IHNbaV0udWMpCisgICAgICAgIGlmIChkW2ldICE9
IHNbaV0pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUv
a2pzL2xleGVyLmNwcAppbmRleCA1MzUwZGFhLi5iOGYzNzQzIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ranMvbGV4ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5jcHAK
QEAgLTk1LDcgKzk1LDcgQEAgTGV4ZXI6OkxleGVyKCkKICAgICBtX2lkZW50aWZpZXJzLnJlc2Vy
dmVDYXBhY2l0eShpbml0aWFsU3RyaW5nVGFibGVDYXBhY2l0eSk7CiB9CiAKLXZvaWQgTGV4ZXI6
OnNldENvZGUoY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVy
LCBjb25zdCBLSlM6OlVDaGFyICpjLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBMZXhlcjo6c2V0
Q29kZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNv
bnN0IDo6VUNoYXIgKmMsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAgIHl5bGluZW5vID0gMSArIHN0
YXJ0aW5nTGluZU51bWJlcjsKICAgbV9zb3VyY2VVUkwgPSBzb3VyY2VVUkw7CkBAIC0xMTUsMTAg
KzExNSwxMCBAQCB2b2lkIExleGVyOjpzZXRDb2RlKGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwg
aW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgS0pTOgogI2VuZGlmCiAKICAgLy8gcmVhZCBm
aXJzdCBjaGFyYWN0ZXJzCi0gIGN1cnJlbnQgPSAobGVuZ3RoID4gMCkgPyBjb2RlWzBdLnVjIDog
LTE7Ci0gIG5leHQxID0gKGxlbmd0aCA+IDEpID8gY29kZVsxXS51YyA6IC0xOwotICBuZXh0MiA9
IChsZW5ndGggPiAyKSA/IGNvZGVbMl0udWMgOiAtMTsKLSAgbmV4dDMgPSAobGVuZ3RoID4gMykg
PyBjb2RlWzNdLnVjIDogLTE7CisgIGN1cnJlbnQgPSAobGVuZ3RoID4gMCkgPyBjb2RlWzBdIDog
LTE7CisgIG5leHQxID0gKGxlbmd0aCA+IDEpID8gY29kZVsxXSA6IC0xOworICBuZXh0MiA9IChs
ZW5ndGggPiAyKSA/IGNvZGVbMl0gOiAtMTsKKyAgbmV4dDMgPSAobGVuZ3RoID4gMykgPyBjb2Rl
WzNdIDogLTE7CiB9CiAKIHZvaWQgTGV4ZXI6OnNoaWZ0KHVuc2lnbmVkIGludCBwKQpAQCAtMTMw
LDcgKzEzMCw3IEBAIHZvaWQgTGV4ZXI6OnNoaWZ0KHVuc2lnbmVkIGludCBwKQogICAgIGN1cnJl
bnQgPSBuZXh0MTsKICAgICBuZXh0MSA9IG5leHQyOwogICAgIG5leHQyID0gbmV4dDM7Ci0gICAg
bmV4dDMgPSAocG9zICsgMyA8IGxlbmd0aCkgPyBjb2RlW3BvcyArIDNdLnVjIDogLTE7CisgICAg
bmV4dDMgPSAocG9zICsgMyA8IGxlbmd0aCkgPyBjb2RlW3BvcyArIDNdIDogLTE7CiAgIH0KIH0K
IApAQCAtNzc3LDExICs3NzcsMTAgQEAgdW5zaWduZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChp
bnQgYzEsIGludCBjMikKICAgcmV0dXJuICgoY29udmVydEhleChjMSkgPDwgNCkgKyBjb252ZXJ0
SGV4KGMyKSk7CiB9CiAKLUtKUzo6VUNoYXIgTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGludCBjMSwg
aW50IGMyLCBpbnQgYzMsIGludCBjNCkKK1VDaGFyIExleGVyOjpjb252ZXJ0VW5pY29kZShpbnQg
YzEsIGludCBjMiwgaW50IGMzLCBpbnQgYzQpCiB7CiAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNp
b24gaXMgbG9zc3kuIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
OTIwLgotICByZXR1cm4gS0pTOjpVQ2hhcigoY29udmVydEhleChjMSkgPDwgNCkgKyBjb252ZXJ0
SGV4KGMyKSwKLSAgICAgICAgICAgICAgIChjb252ZXJ0SGV4KGMzKSA8PCA0KSArIGNvbnZlcnRI
ZXgoYzQpKTsKKyAgcmV0dXJuIFVDaGFyKChjb252ZXJ0SGV4KGMxKSA8PCA0KSArIGNvbnZlcnRI
ZXgoYzIpLCAoY29udmVydEhleChjMykgPDwgNCkgKyBjb252ZXJ0SGV4KGM0KSk7CiB9CiAKIHZv
aWQgTGV4ZXI6OnJlY29yZDgoaW50IGMpCkBAIC03OTgsNyArNzk3LDcgQEAgdm9pZCBMZXhlcjo6
cmVjb3JkMTYoaW50IGMpCiAgICAgcmVjb3JkMTYoVUNoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KGMpKSk7CiB9CiAKLXZvaWQgTGV4ZXI6OnJlY29yZDE2KEtKUzo6VUNoYXIgYykKK3Zv
aWQgTGV4ZXI6OnJlY29yZDE2KDo6VUNoYXIgYykKIHsKICAgICBtX2J1ZmZlcjE2LmFwcGVuZChj
KTsKIH0KQEAgLTg2NywxNCArODY2LDE0IEBAIHZvaWQgTGV4ZXI6OmNsZWFyKCkKICAgICBtX3Nv
dXJjZVVSTCA9IDA7CiB9CiAKLUlkZW50aWZpZXIqIExleGVyOjptYWtlSWRlbnRpZmllcihjb25z
dCBWZWN0b3I8S0pTOjpVQ2hhcj4mIGJ1ZmZlcikKK0lkZW50aWZpZXIqIExleGVyOjptYWtlSWRl
bnRpZmllcihjb25zdCBWZWN0b3I8VUNoYXI+JiBidWZmZXIpCiB7CiAgICAgS0pTOjpJZGVudGlm
aWVyKiBpZGVudGlmaWVyID0gbmV3IEtKUzo6SWRlbnRpZmllcihidWZmZXIuZGF0YSgpLCBidWZm
ZXIuc2l6ZSgpKTsKICAgICBtX2lkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICBy
ZXR1cm4gaWRlbnRpZmllcjsKIH0KICAKLVVTdHJpbmcqIExleGVyOjptYWtlVVN0cmluZyhjb25z
dCBWZWN0b3I8S0pTOjpVQ2hhcj4mIGJ1ZmZlcikKK1VTdHJpbmcqIExleGVyOjptYWtlVVN0cmlu
Zyhjb25zdCBWZWN0b3I8VUNoYXI+JiBidWZmZXIpCiB7CiAgICAgVVN0cmluZyogc3RyaW5nID0g
bmV3IFVTdHJpbmcoYnVmZmVyKTsKICAgICBtX3N0cmluZ3MuYXBwZW5kKHN0cmluZyk7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tq
cy9sb29rdXAuY3BwCmluZGV4IDk1ZGM1Y2IuLjA1OGY1OGYgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2tqcy9sb29rdXAuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuY3Bw
CkBAIC0zMSw3ICszMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrZXlzTWF0Y2goY29uc3QgVUNo
YXIqIGMsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciogcykKICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHJ1biBvZmYgdGhlIGVuZCBvZiB8c3wgaWYgfGN8IGhhcyBhIFUrMDAwMCBjaGFyYWN0ZXIgaW4g
aXQuCiAgIGNvbnN0IGNoYXIqIGVuZCA9IHMgKyBsZW47CiAgIGZvciAoOyBzICE9IGVuZDsgYysr
LCBzKyspCi0gICAgaWYgKGMtPnVjICE9ICpzKQorICAgIGlmICgqYyAhPSAqcykKICAgICAgIHJl
dHVybiBmYWxzZTsKICAgcmV0dXJuICpzID09IDA7CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJp
bmcuY3BwCmluZGV4IDYzZjNmNDguLjU4ZDVhYzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9ub2RlczJzdHJpbmcuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJp
bmcuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBVU3RyaW5nIGVzY2FwZVN0cmluZ0ZvclBy
ZXR0eVByaW50aW5nKGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgVVN0cmluZyBlc2NhcGVkU3RyaW5n
OwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHNob3J0IGMgPSBzLmRhdGEoKVtpXS51bmljb2RlKCk7CisgICAgICAgIHVuc2lnbmVk
IHNob3J0IGMgPSBzLmRhdGEoKVtpXTsKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAg
ICBjYXNlICdcIic6CiAgICAgICAgICAgICAgICAgZXNjYXBlZFN0cmluZyArPSAiXFxcIiI7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKaW5kZXggYzc0ZjU0OS4uOGRiMzkxMCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcApAQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRp
YyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgVVN0cmluZyAm
cmVwbGFjZW1lbnQsIGNvbnN0CiAgICAgaWYgKGkrMSA9PSBzdWJzdGl0dXRlZFJlcGxhY2VtZW50
LnNpemUoKSkKICAgICAgICAgYnJlYWs7CiAKLSAgICB1bnNpZ25lZCBzaG9ydCByZWYgPSBzdWJz
dGl0dXRlZFJlcGxhY2VtZW50W2krMV0udW5pY29kZSgpOworICAgIHVuc2lnbmVkIHNob3J0IHJl
ZiA9IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnRbaSsxXTsKICAgICBpbnQgYmFja3JlZlN0YXJ0ID0g
MDsKICAgICBpbnQgYmFja3JlZkxlbmd0aCA9IDA7CiAgICAgaW50IGFkdmFuY2UgPSAwOwpAQCAt
Mjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVy
ZW5jZXMoY29uc3QgVVN0cmluZyAmcmVwbGFjZW1lbnQsIGNvbnN0CiAgICAgICAgIGlmIChiYWNr
cmVmSW5kZXggPiByZWctPm51bVN1YnBhdHRlcm5zKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgaWYgKHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQuc2l6ZSgpID4gaSArIDIpIHsKLSAg
ICAgICAgICAgIHJlZiA9IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnRbaSsyXS51bmljb2RlKCk7Cisg
ICAgICAgICAgICByZWYgPSBzdWJzdGl0dXRlZFJlcGxhY2VtZW50W2krMl07CiAgICAgICAgICAg
ICBpZiAocmVmID49ICcwJyAmJiByZWYgPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgYmFja3Jl
ZkluZGV4ID0gMTAgKiBiYWNrcmVmSW5kZXggKyByZWYgLSAnMCc7CiAgICAgICAgICAgICAgICAg
aWYgKGJhY2tyZWZJbmRleCA+IHJlZy0+bnVtU3VicGF0dGVybnMoKSkKQEAgLTQ3NCw3ICs0NzQs
NyBAQCBKU1ZhbHVlKiBTdHJpbmdQcm90b0Z1bmNDaGFyQ29kZUF0OjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aAogICAgIEpTVmFsdWUqIGEwID0gYXJnc1swXTsK
ICAgICBkb3VibGUgZHBvcyA9IGEwLT50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKGRwb3MgPj0g
MCAmJiBkcG9zIDwgbGVuKQotICAgICAgcmVzdWx0ID0ganNOdW1iZXIoc1tzdGF0aWNfY2FzdDxp
bnQ+KGRwb3MpXS51bmljb2RlKCkpOworICAgICAgcmVzdWx0ID0ganNOdW1iZXIoc1tzdGF0aWNf
Y2FzdDxpbnQ+KGRwb3MpXSk7CiAgICAgZWxzZQogICAgICAgcmVzdWx0ID0ganNOYU4oKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcu
Y3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCmluZGV4IDA0MDk5YjMuLjNhMDdk
YWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy91c3RyaW5nLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ranMvdXN0cmluZy5jcHAKQEAgLTI3MSw4ICsyNzEsOCBAQCB1bnNpZ25lZCBV
U3RyaW5nOjpSZXA6OmNvbXB1dGVIYXNoKGNvbnN0IFVDaGFyICpzLCBpbnQgbGVuKQogCiAgIC8v
IE1haW4gbG9vcAogICBmb3IgKDsgbCA+IDA7IGwtLSkgewotICAgIGhhc2ggKz0gc1swXS51YzsK
LSAgICB0bXAgPSAoc1sxXS51YyA8PCAxMSkgXiBoYXNoOworICAgIGhhc2ggKz0gc1swXTsKKyAg
ICB0bXAgPSAoc1sxXSA8PCAxMSkgXiBoYXNoOwogICAgIGhhc2ggPSAoaGFzaCA8PCAxNikgXiB0
bXA7CiAgICAgcyArPSAyOwogICAgIGhhc2ggKz0gaGFzaCA+PiAxMTsKQEAgLTI4MCw3ICsyODAs
NyBAQCB1bnNpZ25lZCBVU3RyaW5nOjpSZXA6OmNvbXB1dGVIYXNoKGNvbnN0IFVDaGFyICpzLCBp
bnQgbGVuKQogCiAgIC8vIEhhbmRsZSBlbmQgY2FzZQogICBpZiAocmVtKSB7Ci0gICAgaGFzaCAr
PSBzWzBdLnVjOworICAgIGhhc2ggKz0gc1swXTsKICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CiAg
ICAgaGFzaCArPSBoYXNoID4+IDE3OwogICB9CkBAIC00MzYsNyArNDM2LDcgQEAgVVN0cmluZzo6
VVN0cmluZyhjb25zdCBjaGFyICpjKQogICAgICAgbV9yZXAgPSAmUmVwOjpudWxsOwogICBlbHNl
IHsKICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ZFtpXS51YyA9IGNbaV07CisgICAgICAgICAgZFtpXSA9IGNbaV07CiAgICAgICBtX3JlcCA9IFJl
cDo6Y3JlYXRlKGQsIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSk7CiAgIH0KIH0KQEAgLTg4Miwx
MSArODgyLDExIEBAIGNoYXIgKlVTdHJpbmc6OmFzY2lpKCkgY29uc3QKICAgICBzdGF0QnVmZmVy
U2l6ZSA9IG5lZWRlZFNpemU7CiAgIH0KICAgCi0gIGNvbnN0IFVDaGFyICpwID0gZGF0YSgpOwot
ICBjaGFyICpxID0gc3RhdEJ1ZmZlcjsKKyAgY29uc3QgVUNoYXIqIHAgPSBkYXRhKCk7CisgIGNo
YXIqIHEgPSBzdGF0QnVmZmVyOwogICBjb25zdCBVQ2hhciAqbGltaXQgPSBwICsgbGVuZ3RoOwog
ICB3aGlsZSAocCAhPSBsaW1pdCkgewotICAgICpxID0gc3RhdGljX2Nhc3Q8Y2hhcj4ocC0+dWMp
OworICAgICpxID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKnApOwogICAgICsrcDsKICAgICArK3E7CiAg
IH0KQEAgLTkyMiwxNyArOTIyLDE3IEBAIFVTdHJpbmcgJlVTdHJpbmc6Om9wZXJhdG9yPShjb25z
dCBjaGFyICpjKQogICAgIG1fcmVwID0gUmVwOjpjcmVhdGUoZCwgbCk7CiAgIH0KICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgZFtpXS51YyA9IGNbaV07CisgICAgZFtpXSA9IGNb
aV07CiAKICAgcmV0dXJuICp0aGlzOwogfQogCiBib29sIFVTdHJpbmc6OmlzOEJpdCgpIGNvbnN0
CiB7Ci0gIGNvbnN0IFVDaGFyICp1ID0gZGF0YSgpOwotICBjb25zdCBVQ2hhciAqbGltaXQgPSB1
ICsgc2l6ZSgpOworICBjb25zdCBVQ2hhciogdSA9IGRhdGEoKTsKKyAgY29uc3QgVUNoYXIqIGxp
bWl0ID0gdSArIHNpemUoKTsKICAgd2hpbGUgKHUgPCBsaW1pdCkgewotICAgIGlmICh1LT51YyA+
IDB4RkYpCisgICAgaWYgKCp1ID4gMHhGRikKICAgICAgIHJldHVybiBmYWxzZTsKICAgICArK3U7
CiAgIH0KQEAgLTEwNzQsOCArMTA3NCw4IEBAIHVpbnQzMl90IFVTdHJpbmc6OnRvU3RyaWN0VUlu
dDMyKGJvb2wgKm9rKSBjb25zdAogICBpbnQgbGVuID0gbV9yZXAtPmxlbjsKICAgaWYgKGxlbiA9
PSAwKQogICAgIHJldHVybiAwOwotICBjb25zdCBVQ2hhciAqcCA9IG1fcmVwLT5kYXRhKCk7Ci0g
IHVuc2lnbmVkIHNob3J0IGMgPSBwLT51bmljb2RlKCk7CisgIGNvbnN0IFVDaGFyKiBwID0gbV9y
ZXAtPmRhdGEoKTsKKyAgdW5zaWduZWQgc2hvcnQgYyA9ICpwOwogCiAgIC8vIElmIHRoZSBmaXJz
dCBkaWdpdCBpcyAwLCBvbmx5IDAgaXRzZWxmIGlzIE9LLgogICBpZiAoYyA9PSAnMCcpIHsKQEAg
LTExMTEsNyArMTExMSw3IEBAIHVpbnQzMl90IFVTdHJpbmc6OnRvU3RyaWN0VUludDMyKGJvb2wg
Km9rKSBjb25zdAogICAgIH0KICAgICAKICAgICAvLyBHZXQgbmV4dCBjaGFyYWN0ZXIuCi0gICAg
YyA9ICgrK3ApLT51bmljb2RlKCk7CisgICAgYyA9ICooKytwKTsKICAgfQogfQogCkBAIC0xMTI3
LDExICsxMTI3LDExIEBAIGludCBVU3RyaW5nOjpmaW5kKGNvbnN0IFVTdHJpbmcgJmYsIGludCBw
b3MpIGNvbnN0CiAgICAgcmV0dXJuIHBvczsKICAgY29uc3QgVUNoYXIgKmVuZCA9IGRhdGEoKSAr
IHN6IC0gZnN6OwogICBpbnQgZnNpemVtaW51c29uZSA9IChmc3ogLSAxKSAqIHNpemVvZihVQ2hh
cik7Ci0gIGNvbnN0IFVDaGFyICpmZGF0YSA9IGYuZGF0YSgpOwotICB1bnNpZ25lZCBzaG9ydCBm
Y2hhciA9IGZkYXRhLT51YzsKKyAgY29uc3QgVUNoYXIqIGZkYXRhID0gZi5kYXRhKCk7CisgIHVu
c2lnbmVkIHNob3J0IGZjaGFyID0gKmZkYXRhOwogICArK2ZkYXRhOwogICBmb3IgKGNvbnN0IFVD
aGFyICpjID0gZGF0YSgpICsgcG9zOyBjIDw9IGVuZDsgYysrKQotICAgIGlmIChjLT51YyA9PSBm
Y2hhciAmJiAhbWVtY21wKGMgKyAxLCBmZGF0YSwgZnNpemVtaW51c29uZSkpCisgICAgaWYgKCpj
ID09IGZjaGFyICYmICFtZW1jbXAoYyArIDEsIGZkYXRhLCBmc2l6ZW1pbnVzb25lKSkKICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLSBkYXRhKCkpOwogCiAgIHJldHVybiAtMTsKQEAg
LTEyMTUsMTQgKzEyMTUsMTMgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVTdHJpbmcmIHMxLCBj
b25zdCBVU3RyaW5nJiBzMikKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVTdHJpbmcmIHMxLCBj
b25zdCBjaGFyICpzMikKIHsKLSAgaWYgKHMyID09IDApIHsKKyAgaWYgKHMyID09IDApCiAgICAg
cmV0dXJuIHMxLmlzRW1wdHkoKTsKLSAgfQogCiAgIGNvbnN0IFVDaGFyICp1ID0gczEuZGF0YSgp
OwogICBjb25zdCBVQ2hhciAqdWVuZCA9IHUgKyBzMS5zaXplKCk7CiAgIHdoaWxlICh1ICE9IHVl
bmQgJiYgKnMyKSB7Ci0gICAgaWYgKHUtPnVjICE9ICh1bnNpZ25lZCBjaGFyKSpzMikKKyAgICBp
ZiAoKnUgIT0gKHVuc2lnbmVkIGNoYXIpKnMyKQogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHMy
Kys7CiAgICAgdSsrOwpAQCAtMTI0NSw3ICsxMjQ0LDcgQEAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
VVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogICAgIGwrKzsKICAgfQogICBpZiAobCA8
IGxtaW4pCi0gICAgcmV0dXJuIChjMS0+dWMgPCBjMi0+dWMpOworICAgIHJldHVybiAoKmMxIDwg
KmMyKTsKIAogICByZXR1cm4gKGwxIDwgbDIpOwogfQpAQCAtMTI1NSw4ICsxMjU0LDggQEAgaW50
IGNvbXBhcmUoY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogICBjb25zdCBp
bnQgbDEgPSBzMS5zaXplKCk7CiAgIGNvbnN0IGludCBsMiA9IHMyLnNpemUoKTsKICAgY29uc3Qg
aW50IGxtaW4gPSBsMSA8IGwyID8gbDEgOiBsMjsKLSAgY29uc3QgVUNoYXIgKmMxID0gczEuZGF0
YSgpOwotICBjb25zdCBVQ2hhciAqYzIgPSBzMi5kYXRhKCk7CisgIGNvbnN0IFVDaGFyKiBjMSA9
IHMxLmRhdGEoKTsKKyAgY29uc3QgVUNoYXIqIGMyID0gczIuZGF0YSgpOwogICBpbnQgbCA9IDA7
CiAgIHdoaWxlIChsIDwgbG1pbiAmJiAqYzEgPT0gKmMyKSB7CiAgICAgYzErKzsKQEAgLTEyNjUs
NyArMTI2NCw3IEBAIGludCBjb21wYXJlKGNvbnN0IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5n
JiBzMikKICAgfQogCiAgIGlmIChsIDwgbG1pbikKLSAgICByZXR1cm4gKGMxLT51YyA+IGMyLT51
YykgPyAxIDogLTE7CisgICAgcmV0dXJuICgqYzEgPiAqYzIpID8gMSA6IC0xOwogCiAgIGlmIChs
MSA9PSBsMikKICAgICByZXR1cm4gMDsKQEAgLTEyODEsNyArMTI4MCw3IEBAIENTdHJpbmcgVVN0
cmluZzo6VVRGOFN0cmluZyhib29sIHN0cmljdCkgY29uc3QKIAogICAvLyBDb252ZXJ0IHRvIHJ1
bnMgb2YgOC1iaXQgY2hhcmFjdGVycy4KICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gIGNv
bnN0IDo6VUNoYXIqIGQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IDo6VUNoYXIqPigmZGF0YSgp
LT51Yyk7CisgIGNvbnN0IFVDaGFyKiBkID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KCZkYXRhKCkpOwogICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRG
OCgmZCwgZCArIGxlbmd0aCwgJnAsIHAgKyBidWZmZXIuc2l6ZSgpLCBzdHJpY3QpOwogICBpZiAo
cmVzdWx0ICE9IGNvbnZlcnNpb25PSykKICAgICByZXR1cm4gQ1N0cmluZygpOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy91c3Ry
aW5nLmgKaW5kZXggOWNlOTQwYy4uZTFhMDQxZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
a2pzL3VzdHJpbmcuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiY29sbGVjdG9yLmgiCiAj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bWFjaGluZS5oPiAvLyBGb3Ig
VUNoYXIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTU3LDUzICs1OCw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICBjbGFzcyBVU3RyaW5nOwogCiAgIC8qKgotICAgKiBAc2hvcnQgVW5p
Y29kZSBjaGFyYWN0ZXIuCi0gICAqCi0gICAqIFVDaGFyIHJlcHJlc2VudHMgYSAxNiBiaXQgVW5p
Y29kZSBjaGFyYWN0ZXIuIEl0J3MgaW50ZXJuYWwgZGF0YQotICAgKiByZXByZXNlbnRhdGlvbiBp
cyBjb21wYXRpYmxlIHRvIFhDaGFyMmIgYW5kIFFDaGFyLiBJdCdzIHRoZXJlZm9yZQotICAgKiBw
b3NzaWJsZSB0byBleGNoYW5nZSBkYXRhIHdpdGggWCBhbmQgUXQgd2l0aCBzaGFsbG93IGNvcGll
cy4KLSAgICovCi0gIHN0cnVjdCBVQ2hhciB7Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEg
Y2hhcmFjdGVyIHdpdGggdW5pbml0aWFsaXplZCB2YWx1ZS4gICAgCi0gICAgICovCi0gICAgVUNo
YXIoKTsKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBjaGFyYWN0ZXIgd2l0aCB0aGUgdmFs
dWUgZGVub3RlZCBieSB0aGUgYXJndW1lbnRzLgotICAgICAqIEBwYXJhbSBoIGhpZ2hlciBieXRl
Ci0gICAgICogQHBhcmFtIGwgbG93ZXIgYnl0ZQotICAgICAqLwotICAgIFVDaGFyKHVuc2lnbmVk
IGNoYXIgaCAsIHVuc2lnbmVkIGNoYXIgbCk7Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEg
Y2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLgotICAgICAqIEBwYXJhbSB1IDE2IGJpdCBV
bmljb2RlIHZhbHVlCi0gICAgICovCi0gICAgVUNoYXIoY2hhciB1KTsKLSAgICBVQ2hhcih1bnNp
Z25lZCBjaGFyIHUpOwotICAgIFVDaGFyKHVuc2lnbmVkIHNob3J0IHUpOwotICAgIC8qKgotICAg
ICAqIEByZXR1cm4gVGhlIGhpZ2hlciBieXRlIG9mIHRoZSBjaGFyYWN0ZXIuCi0gICAgICovCi0g
ICAgdW5zaWduZWQgY2hhciBoaWdoKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4odWMgPj4gOCk7IH0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIFRoZSBsb3dlciBi
eXRlIG9mIHRoZSBjaGFyYWN0ZXIuCi0gICAgICovCi0gICAgdW5zaWduZWQgY2hhciBsb3coKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1Yyk7IH0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHRoZSAxNiBiaXQgVW5pY29kZSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVy
Ci0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIHVj
OyB9Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCB1YzsKLSAgfSBQQUNLX1NUUlVDVDsKLQotICBpbmxp
bmUgVUNoYXI6OlVDaGFyKCkgeyB9Ci0gIGlubGluZSBVQ2hhcjo6VUNoYXIodW5zaWduZWQgY2hh
ciBoICwgdW5zaWduZWQgY2hhciBsKSA6IHVjKGggPDwgOCB8IGwpIHsgfQotICBpbmxpbmUgVUNo
YXI6OlVDaGFyKGNoYXIgdSkgOiB1YygodW5zaWduZWQgY2hhcil1KSB7IH0KLSAgaW5saW5lIFVD
aGFyOjpVQ2hhcih1bnNpZ25lZCBjaGFyIHUpIDogdWModSkgeyB9Ci0gIGlubGluZSBVQ2hhcjo6
VUNoYXIodW5zaWduZWQgc2hvcnQgdSkgOiB1Yyh1KSB7IH0KLQotICAvKioKICAgICogQHNob3J0
IDggYml0IGNoYXIgYmFzZWQgc3RyaW5nIGNsYXNzCiAgICAqLwogICBjbGFzcyBDU3RyaW5nIHsK
QEAgLTI2MSwxMSArMjE1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIC8qKgogICAgICAqIEFw
cGVuZCBhbm90aGVyIHN0cmluZy4KICAgICAgKi8KLSAgICBVU3RyaW5nICZhcHBlbmQoY29uc3Qg
VVN0cmluZyAmKTsKLSAgICBVU3RyaW5nICZhcHBlbmQoY29uc3QgY2hhciAqKTsKLSAgICBVU3Ry
aW5nICZhcHBlbmQodW5zaWduZWQgc2hvcnQpOwotICAgIFVTdHJpbmcgJmFwcGVuZChjaGFyIGMp
IHsgcmV0dXJuIGFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oYykpKTsgfQotICAgIFVTdHJpbmcgJmFwcGVuZChVQ2hhciBjKSB7IHJl
dHVybiBhcHBlbmQoYy51Yyk7IH0KKyAgICBVU3RyaW5nJiBhcHBlbmQoY29uc3QgVVN0cmluZyYp
OworICAgIFVTdHJpbmcmIGFwcGVuZChjb25zdCBjaGFyKik7CisgICAgVVN0cmluZyYgYXBwZW5k
KHVuc2lnbmVkIHNob3J0KTsKKyAgICBVU3RyaW5nJiBhcHBlbmQoY2hhciBjKSB7IHJldHVybiBh
cHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGMpKSk7IH0KIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIHN0cmluZyBjb252ZXJ0
ZWQgdG8gdGhlIDgtYml0IHN0cmluZyB0eXBlIENTdHJpbmcoKS4KQEAgLTQwMiw5ICszNTUsNiBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQdHI8UmVwPiBtX3JlcDsKICAgfTsKIAotICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVDaGFyICZjMSwgY29uc3QgVUNoYXIgJmMyKSB7Ci0g
ICAgcmV0dXJuIChjMS51YyA9PSBjMi51Yyk7Ci0gIH0KICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFVTdHJpbmcmIHMxLCBjb25zdCBVU3RyaW5nJiBzMik7CiAgIGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKSB7CiAgICAgcmV0dXJuICFL
SlM6Om9wZXJhdG9yPT0oczEsIHMyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17414</attachid>
            <date>2007-11-20 02:12:00 -0800</date>
            <delta_ts>2007-11-26 11:39:35 -0800</delta_ts>
            <desc>Sorry ggaren, I am in your lexer fixing your bugz</desc>
            <filename>lexer.patch</filename>
            <type>text/plain</type>
            <size>4724</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvbGV4ZXIuY3BwCmluZGV4IDUzNTBkYWEuLmRiN2MzYTMgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9sZXhlci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL2xleGVyLmNw
cApAQCAtMjExLDYgKzIxMSwxMSBAQCBpbnQgTGV4ZXI6OmxleCgpCiAgICAgICB9IGVsc2UgaWYg
KGlzSWRlbnRTdGFydChjdXJyZW50KSkgewogICAgICAgICByZWNvcmQxNihjdXJyZW50KTsKICAg
ICAgICAgc3RhdGUgPSBJbklkZW50aWZpZXJPcktleXdvcmQ7CisgICAgICB9IGVsc2UgaWYgKFUx
Nl9JU19TVVJST0dBVEVfTEVBRChjdXJyZW50KSAmJiBpc0lkZW50U3RhcnQoVTE2X0dFVF9TVVBQ
TEVNRU5UQVJZKGN1cnJlbnQsIG5leHQxKSkpIHsKKyAgICAgICAgcmVjb3JkMTYoY3VycmVudCk7
CisgICAgICAgIHJlY29yZDE2KG5leHQxKTsKKyAgICAgICAgc2hpZnQoMSk7IC8vIFRoZSBvbmUg
c2hpZnQgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wCisg
ICAgICAgIHN0YXRlID0gSW5JZGVudGlmaWVyT3JLZXl3b3JkOwogICAgICAgfSBlbHNlIGlmIChj
dXJyZW50ID09ICdcXCcpIHsKICAgICAgICAgc3RhdGUgPSBJbklkZW50aWZpZXJVbmljb2RlRXNj
YXBlU3RhcnQ7CiAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gJzAnKSB7CkBAIC0yMzUsMjUg
KzI0MCwyMyBAQCBpbnQgTGV4ZXI6OmxleCgpCiAjZW5kaWYKICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgIHRva2VuID0gbWF0Y2hQdW5jdHVhdG9yKGN1cnJlbnQsIG5leHQxLCBuZXh0MiwgbmV4dDMp
OwotICAgICAgICBpZiAodG9rZW4gIT0gLTEpIHsKLSAgICAgICAgICBzZXREb25lKE90aGVyKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyAgICAgIGNlcnIgPDwgImVuY291bnRlcmVk
IHVua25vd24gY2hhcmFjdGVyIiA8PCBlbmRsOwotICAgICAgICAgIHNldERvbmUoQmFkKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAodG9rZW4gIT0gLTEpCisgICAgICAgICAgICBzZXREb25lKE90
aGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIGNoYXJhY3Rl
cgorICAgICAgICAgICAgc2V0RG9uZShCYWQpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJblN0cmluZzoKICAgICAgIGlmIChjdXJyZW50ID09IHN0cmluZ1R5cGUpIHsKICAgICAg
ICAgc2hpZnQoMSk7CiAgICAgICAgIHNldERvbmUoU3RyaW5nKTsKLSAgICAgIH0gZWxzZSBpZiAo
aXNMaW5lVGVybWluYXRvcigpIHx8IGN1cnJlbnQgPT0gLTEpIHsKKyAgICAgIH0gZWxzZSBpZiAo
aXNMaW5lVGVybWluYXRvcigpIHx8IGN1cnJlbnQgPT0gLTEpCiAgICAgICAgIHNldERvbmUoQmFk
KTsKLSAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnXFwnKSB7CisgICAgICBlbHNlIGlmIChj
dXJyZW50ID09ICdcXCcpCiAgICAgICAgIHN0YXRlID0gSW5Fc2NhcGVTZXF1ZW5jZTsKLSAgICAg
IH0gZWxzZSB7CisgICAgICBlbHNlCiAgICAgICAgIHJlY29yZDE2KGN1cnJlbnQpOwotICAgICAg
fQogICAgICAgYnJlYWs7CiAgICAgLy8gRXNjYXBlIFNlcXVlbmNlcyBpbnNpZGUgb2Ygc3RyaW5n
cwogICAgIGNhc2UgSW5Fc2NhcGVTZXF1ZW5jZToKQEAgLTI3MCw5ICsyNzMsOCBAQCBpbnQgTGV4
ZXI6OmxleCgpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGN1cnJlbnQpKSB7CiAg
ICAgICAgICAgcmVjb3JkMTYoY29udmVydE9jdGFsKCcwJywgJzAnLCBjdXJyZW50KSk7CiAgICAg
ICAgICAgc3RhdGUgPSBJblN0cmluZzsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgc2V0RG9uZShCYWQpOwotICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKGN1
cnJlbnQgPT0gJ3gnKQogICAgICAgICBzdGF0ZSA9IEluSGV4RXNjYXBlOwogICAgICAgZWxzZSBp
ZiAoY3VycmVudCA9PSAndScpCkBAIC0zMDksOSArMzExLDggQEAgaW50IExleGVyOjpsZXgoKQog
ICAgICAgICByZWNvcmQxNigndScpOwogICAgICAgICBzaGlmdCgxKTsKICAgICAgICAgc2V0RG9u
ZShTdHJpbmcpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0gZWxzZQogICAgICAgICBzZXREb25l
KEJhZCk7Ci0gICAgICB9CiAgICAgICBicmVhazsKICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1l
bnQ6CiAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcigpKSB7CkBAIC0zMjIsOSArMzIzLDggQEAg
aW50IExleGVyOjpsZXgoKQogICAgICAgICAgIHNldERvbmUoT3RoZXIpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICBzdGF0ZSA9IFN0YXJ0OwotICAgICAgfSBlbHNlIGlmIChjdXJyZW50ID09
IC0xKSB7CisgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gLTEpCiAgICAgICAgIHNldERvbmUo
RW9mKTsKLSAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5NdWx0aUxpbmVDb21tZW50
OgogICAgICAgaWYgKGN1cnJlbnQgPT0gLTEpIHsKQEAgLTM0MCw3ICszNDAsMTEgQEAgaW50IExl
eGVyOjpsZXgoKQogICAgIGNhc2UgSW5JZGVudGlmaWVyOgogICAgICAgaWYgKGlzSWRlbnRQYXJ0
KGN1cnJlbnQpKQogICAgICAgICByZWNvcmQxNihjdXJyZW50KTsKLSAgICAgIGVsc2UgaWYgKGN1
cnJlbnQgPT0gJ1xcJykKKyAgICAgIGVsc2UgaWYgKFUxNl9JU19TVVJST0dBVEVfTEVBRChjdXJy
ZW50KSAmJiBpc0lkZW50UGFydChVMTZfR0VUX1NVUFBMRU1FTlRBUlkoY3VycmVudCwgbmV4dDEp
KSkgeworICAgICAgICAgIHJlY29yZDE2KGN1cnJlbnQpOworICAgICAgICAgIHJlY29yZDE2KG5l
eHQxKTsKKyAgICAgICAgICBzaGlmdCgxKTsgLy8gVGhlIG9uZSBzaGlmdCBoYXBwZW5zIGF1dG9t
YXRpY2FsbHkgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AKKyAgICAgIH0gZWxzZSBpZiAoY3Vy
cmVudCA9PSAnXFwnKQogICAgICAgICBzdGF0ZSA9IEluSWRlbnRpZmllclVuaWNvZGVFc2NhcGVT
dGFydDsKICAgICAgIGVsc2UKICAgICAgICAgc2V0RG9uZShzdGF0ZSA9PSBJbklkZW50aWZpZXJP
cktleXdvcmQgPyBJZGVudGlmaWVyT3JLZXl3b3JkIDogSWRlbnRpZmllcik7CkBAIC0zNjEsMjEg
KzM2NSwxOCBAQCBpbnQgTGV4ZXI6OmxleCgpCiAgICAgICB9IGVsc2UgaWYgKGlzRGVjaW1hbERp
Z2l0KGN1cnJlbnQpKSB7CiAgICAgICAgIHJlY29yZDgoY3VycmVudCk7CiAgICAgICAgIHN0YXRl
ID0gSW5EZWNpbWFsOwotICAgICAgfSBlbHNlIHsKKyAgICAgIH0gZWxzZQogICAgICAgICBzZXRE
b25lKE51bWJlcik7Ci0gICAgICB9CiAgICAgICBicmVhazsKICAgICBjYXNlIEluSGV4OgotICAg
ICAgaWYgKGlzSGV4RGlnaXQoY3VycmVudCkpIHsKKyAgICAgIGlmIChpc0hleERpZ2l0KGN1cnJl
bnQpKQogICAgICAgICByZWNvcmQ4KGN1cnJlbnQpOwotICAgICAgfSBlbHNlIHsKKyAgICAgIGVs
c2UKICAgICAgICAgc2V0RG9uZShIZXgpOwotICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJbk9jdGFsOgotICAgICAgaWYgKGlzT2N0YWxEaWdpdChjdXJyZW50KSkgeworICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjdXJyZW50KSkKICAgICAgICAgcmVjb3JkOChjdXJyZW50KTsKLSAgICAg
IH0KICAgICAgIGVsc2UgaWYgKGlzRGVjaW1hbERpZ2l0KGN1cnJlbnQpKSB7CiAgICAgICAgIHJl
Y29yZDgoY3VycmVudCk7CiAgICAgICAgIHN0YXRlID0gSW5EZWNpbWFsOwpAQCAtMzgzLDkgKzM4
NCw5IEBAIGludCBMZXhlcjo6bGV4KCkKICAgICAgICAgc2V0RG9uZShPY3RhbCk7CiAgICAgICBi
cmVhazsKICAgICBjYXNlIEluTnVtOgotICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGN1cnJlbnQp
KSB7CisgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY3VycmVudCkpCiAgICAgICAgIHJlY29yZDgo
Y3VycmVudCk7Ci0gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT0gJy4nKSB7CisgICAgICBlbHNl
IGlmIChjdXJyZW50ID09ICcuJykgewogICAgICAgICByZWNvcmQ4KGN1cnJlbnQpOwogICAgICAg
ICBzdGF0ZSA9IEluRGVjaW1hbDsKICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCA9PSAnZScgfHwg
Y3VycmVudCA9PSAnRScpIHsKQEAgLTQxMyw5ICs0MTQsOSBAQCBpbnQgTGV4ZXI6OmxleCgpCiAg
ICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5FeHBvbmVudDoK
LSAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjdXJyZW50KSkgeworICAgICAgaWYgKGlzRGVjaW1h
bERpZ2l0KGN1cnJlbnQpKQogICAgICAgICByZWNvcmQ4KGN1cnJlbnQpOwotICAgICAgfSBlbHNl
CisgICAgICBlbHNlCiAgICAgICAgIHNldERvbmUoTnVtYmVyKTsKICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSW5JZGVudGlmaWVyVW5pY29kZUVzY2FwZVN0YXJ0OgpAQCAtNDI5LDkgKzQzMCw4IEBA
IGludCBMZXhlcjo6bGV4KCkKICAgICAgICAgcmVjb3JkMTYoY29udmVydFVuaWNvZGUoY3VycmVu
dCwgbmV4dDEsIG5leHQyLCBuZXh0MykpOwogICAgICAgICBzaGlmdCgzKTsKICAgICAgICAgc3Rh
dGUgPSBJbklkZW50aWZpZXI7Ci0gICAgICB9IGVsc2UgeworICAgICAgfSBlbHNlCiAgICAgICAg
IHNldERvbmUoQmFkKTsKLSAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICBBU1NFUlQoISJVbmhhbmRsZWQgc3RhdGUgaW4gc3dpdGNoIHN0YXRlbWVudCIpOwo=
</data>
<flag name="review"
          id="7465"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>