<?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>5280</bug_id>
          
          <creation_ts>2005-10-05 21:29:42 -0700</creation_ts>
          <short_desc>Date.setMonth fails with negative values</short_desc>
          <delta_ts>2005-10-16 02:00:34 -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>FIXED</resolution>
          
          
          <bug_file_loc>http://www.rte.ie/news/nuacht.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>21510</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-05 21:29:42 -0700</bug_when>
    <thetext>Steps to reproduce:

1) Go to http://www.rte.ie/news/nuacht.html

Results:

hang</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21523</commentid>
    <comment_count>1</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-06 02:03:09 -0700</bug_when>
    <thetext>Also filed as &lt;rdar://problem/4092064&gt; hanging loading page; rte.ie (works in IE and Firefox)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21575</commentid>
    <comment_count>2</comment_count>
      <attachid>4252</attachid>
    <who name="">mitz</who>
    <bug_when>2005-10-08 02:01:27 -0700</bug_when>
    <thetext>Created attachment 4252
testcase

It&apos;s got something to do with dates, but is it a bug in JSC&apos;s date
implementation? Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21578</commentid>
    <comment_count>3</comment_count>
      <attachid>4254</attachid>
    <who name="">mitz</who>
    <bug_when>2005-10-08 02:51:06 -0700</bug_when>
    <thetext>Created attachment 4254
handle negative month values in kjs::maketime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21579</commentid>
    <comment_count>4</comment_count>
      <attachid>4255</attachid>
    <who name="">mitz</who>
    <bug_when>2005-10-08 03:02:26 -0700</bug_when>
    <thetext>Created attachment 4255
regression test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21584</commentid>
    <comment_count>5</comment_count>
      <attachid>4254</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 11:11:13 -0700</bug_when>
    <thetext>Comment on attachment 4254
handle negative month values in kjs::maketime

There really doesn&apos;t need to be a second branch. One case for negative numbers
and another for &gt;= 0 would have been fine.

That having been said, this does look fine as-is. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21596</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 23:01:40 -0700</bug_when>
    <thetext>I think a better fix is to not use CoreFoundation-based date routines. I have a patch in the works to do 
that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21597</commentid>
    <comment_count>7</comment_count>
      <attachid>4262</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 23:11:35 -0700</bug_when>
    <thetext>Created attachment 4262
remove code to use CFDate, use NaN instead of LONG_MIN for bad dates

This patch has a few changes, but I think it&apos;s still fine to land it all at
once:

    1) use the real gmtime, localtime, mktime, and time
    2) some tweaks to styleFromArgString and formatLocaleDate (mainly to use
arg values intead of arg counts)
    3) added a FIXME to some code that looks broken for the non-__APPLE__ case
    4) took out unnecessary defined use (#if !X does work fine if X is not
defined at all!)
    5) changed invalidDate to NaN now that it&apos;s used in a context where we have
a double rather than a time_t
    6) removed some code that&apos;s now unnecessary if invalidDate is NaN
    7) put the code to use CoreFoundation to do locale-specific dates inside
__APPLE__ rather than APPLE_CHANGES</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21598</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 23:13:23 -0700</bug_when>
    <thetext>Forgot to mention: I ran all the tests and everything passes, including the new regression test that Mitz 
attached to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21602</commentid>
    <comment_count>9</comment_count>
      <attachid>4263</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 23:37:25 -0700</bug_when>
    <thetext>Created attachment 4263
alternate version of patch that uses _r versions of functions too (either one seems fine to me)

I think it&apos;s fine to use the _r versions of the functions even if they aren&apos;t
universally available. It&apos;s easy to provide &quot;adapter&quot; implementations for
platforms that lack them even if they aren&apos;t threadsafe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21603</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-08 23:38:49 -0700</bug_when>
    <thetext>These patches also address bug 5154.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21619</commentid>
    <comment_count>11</comment_count>
      <attachid>4263</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-09 13:33:06 -0700</bug_when>
    <thetext>Comment on attachment 4263
alternate version of patch that uses _r versions of functions too (either one seems fine to me)

Using the _r versions is better. For platforms that don&apos;t have them, we can
solve it on a case-by-case basis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21620</commentid>
    <comment_count>12</comment_count>
      <attachid>4262</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-09 13:34:50 -0700</bug_when>
    <thetext>Comment on attachment 4262
remove code to use CFDate, use NaN instead of LONG_MIN for bad dates

Marking this alternate patch r- so it goes away from the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21627</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-10-09 14:08:54 -0700</bug_when>
    <thetext>*** Bug 5154 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4252</attachid>
            <date>2005-10-08 02:01:27 -0700</date>
            <delta_ts>2005-10-08 02:01:27 -0700</delta_ts>
            <desc>testcase</desc>
            <filename>hang.html</filename>
            <type>text/html</type>
            <size>296</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PGh0bWw+PGhlYWQ+PHRpdGxlPkphdmFTY3JpcHQgaGFuZzwvdGl0bGU+PC9oZWFkPjxib2R5Pgo8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICB2YXIgZGF0ZTE9IG5ldyBEYXRlKDIw
MDUsIDEwLCAwOCk7CiAgICBkYXRlMS5zZXRNb250aChkYXRlMS5nZXRNb250aCgpIC0gMik7CiAg
ICB2YXIgZGF0ZTIgPSBuZXcgRGF0ZSgyMDAyLDAsMSk7CgogICAgd2hpbGUgKGRhdGUxID4gZGF0
ZTIpCiAgICAgICAgZGF0ZTEuc2V0TW9udGgoZGF0ZTEuZ2V0TW9udGgoKSAtIDEpOwogPC9zY3Jp
cHQ+CjwvYm9keT4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4254</attachid>
            <date>2005-10-08 02:51:06 -0700</date>
            <delta_ts>2005-10-08 23:12:00 -0700</delta_ts>
            <desc>handle negative month values in kjs::maketime</desc>
            <filename>5280_r1.patch</filename>
            <type>text/plain</type>
            <size>899</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGRhdGVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
OQpkaWZmIC1wIC11IC1yMS41OSBkYXRlX29iamVjdC5jcHAKLS0tIGRhdGVfb2JqZWN0LmNwcAk0
IE9jdCAyMDA1IDAxOjQzOjU4IC0wMDAwCTEuNTkKKysrIGRhdGVfb2JqZWN0LmNwcAk4IE9jdCAy
MDA1IDA5OjUzOjA4IC0wMDAwCkBAIC0xMDEwLDggKzEwMTAsMTQgQEAgZG91YmxlIG1ha2VUaW1l
KHN0cnVjdCB0bSAqdCwgZG91YmxlIG1zLAogI2lmZGVmIF9fQVBQTEVfXwogICAgIC8vIHQtPnRt
X3llYXIgbXVzdCBob2xkIHRoZSBidWxrIG9mIHRoZSBkYXRhIHRvIGF2b2lkIG92ZXJmbG93IHdo
ZW4gY29udmVydGluZwogICAgIC8vIHRvIGEgQ0ZHcmVnb3JpYW5EYXRlLiAoQ0ZHcmVnb3JpYW5E
YXRlLm1vbnRoIGlzIGFuIFNJbnQ4OyBDRkdyZWdvcmlhbkRhdGUueWVhciBpcyBhbiBTSW50MzIu
KQotICAgIHQtPnRtX3llYXIgKz0gdC0+dG1fbW9uIC8gMTI7Ci0gICAgdC0+dG1fbW9uICU9IDEy
OworICAgIGlmICh0LT50bV9tb24gPiAwKSB7CisgICAgICAgIHQtPnRtX3llYXIgKz0gdC0+dG1f
bW9uIC8gMTI7CisgICAgICAgIHQtPnRtX21vbiAlPSAxMjsKKyAgICB9IGVsc2UgaWYgKHQtPnRt
X21vbiA8IDApIHsKKyAgICAgICAgdC0+dG1feWVhciArPSB0LT50bV9tb24gLyAxMiAtIDE7Cisg
ICAgICAgIHQtPnRtX21vbiAlPSAxMjsKKyAgICAgICAgdC0+dG1fbW9uICs9IDEyOworICAgIH0K
ICNlbmRpZiAgICAKIAogICAgIGRvdWJsZSB5ZWFyT2Zmc2V0ID0gMC4wOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4255</attachid>
            <date>2005-10-08 03:02:26 -0700</date>
            <delta_ts>2005-10-08 03:02:26 -0700</delta_ts>
            <desc>regression test</desc>
            <filename>5280_test.patch</filename>
            <type>text/plain</type>
            <size>1705</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGRhdGUtbmVnYXRpdmUtc2V0bW9udGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm
ZiAtTnB1IGRhdGUtbmVnYXRpdmUtc2V0bW9udGgtZXhwZWN0ZWQudHh0Ci0tLSBkYXRlLW5lZ2F0
aXZlLXNldG1vbnRoLWV4cGVjdGVkLnR4dAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBk
YXRlLW5lZ2F0aXZlLXNldG1vbnRoLWV4cGVjdGVkLnR4dAk4IE9jdCAyMDA1IDA5OjU4OjU0IC0w
MDAwCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0IGNoZWNrcyBmb3IgYSByZWdyZXNzaW9uIGFn
YWluc3QgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjgw
IERhdGUuc2V0TW9udGggZmFpbHMgd2l0aCBuZWdhdGl2ZSB2YWx1ZXMuCisKK0lmIHRoZSB0ZXN0
IHBhc3NlcywgeW91IHdpbGwgc2VlIGEgIlBBU1NFRCIgbWVzc2FnZSBiZWxvdy4KKworUEFTU0VE
OiBkYXRlIGlzIEZyaSBPY3QgMTUgMjAwNApJbmRleDogZGF0ZS1uZWdhdGl2ZS1zZXRtb250aC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGRhdGUtbmVnYXRpdmUtc2V0bW9udGguaHRtbAotLS0g
ZGF0ZS1uZWdhdGl2ZS1zZXRtb250aC5odG1sCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysr
IGRhdGUtbmVnYXRpdmUtc2V0bW9udGguaHRtbAk4IE9jdCAyMDA1IDA5OjU4OjE1IC0wMDAwCkBA
IC0wLDAgKzEsMzEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gcHJpbnQo
bWVzc2FnZSkgeworICAgIHZhciBwYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJw
Iik7CisgICAgcGFyYWdyYXBoLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1l
c3NhZ2UpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENo
aWxkKHBhcmFncmFwaCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgfQorCisgICAgdmFyIGQgPSBuZXcgRGF0ZSgyMDA1LCA2LCAxNSk7Cisg
ICAgdmFyIHN0YXR1cyA9ICJGQUlMRUQ6ICI7CisgICAgZC5zZXRNb250aCgtMyk7CisgICAgaWYg
KGQudmFsdWVPZigpID09IG5ldyBEYXRlKDIwMDQsIDksIDE1KS52YWx1ZU9mKCkpIHsKKyAgICAg
ICAgc3RhdHVzID0gIlBBU1NFRDogIjsKKyAgICB9CisgICAgcHJpbnQoc3RhdHVzICsgImRhdGUg
aXMgIiArIGQudG9EYXRlU3RyaW5nKCkpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InRlc3QoKTsiPgorPHA+VGhpcyB0ZXN0IGNoZWNrcyBmb3IgYSByZWdyZXNzaW9uIGFn
YWluc3QgPGk+aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjgwIERhdGUuc2V0TW9udGggZmFpbHMgd2l0aCBuZWdhdGl2ZSB2YWx1ZXM8L2k+LjwvcD4KKzxw
PklmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHdpbGwgc2VlIGEgIlBBU1NFRCIgbWVzc2FnZSBiZWxv
dy48L3A+Cis8aHI+Cis8ZGl2IGlkPSdjb25zb2xlJy8+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4262</attachid>
            <date>2005-10-08 23:11:35 -0700</date>
            <delta_ts>2005-10-09 13:34:50 -0700</delta_ts>
            <desc>remove code to use CFDate, use NaN instead of LONG_MIN for bad dates</desc>
            <filename>DatePatch.txt</filename>
            <type>text/plain</type>
            <size>18231</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNjAKZGlmZiAtcCAtdSAtcjEuNjAga2pzL2RhdGVfb2JqZWN0LmNwcAotLS0ga2pzL2RhdGVf
b2JqZWN0LmNwcAk5IE9jdCAyMDA1IDA0OjQ1OjI4IC0wMDAwCTEuNjAKKysrIGtqcy9kYXRlX29i
amVjdC5jcHAJOSBPY3QgMjAwNSAwNjowNTo0NCAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0q
LSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQpAQCAtMjEsOSArMjAsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpZm5kZWYgSEFWRV9TWVNfVElNRUJfSAotI2RlZmluZSBIQVZFX1NZU19USU1FQl9I
IDAKLSNlbmRpZgorI2luY2x1ZGUgImRhdGVfb2JqZWN0LmgiCiAKICNpZiBUSU1FX1dJVEhfU1lT
X1RJTUUKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTU1LDcgKzUyLDYgQEAKICNpbmNsdWRl
IDxjdHlwZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCi0jaW5jbHVkZSAiZGF0ZV9vYmplY3Qu
aCIKICNpbmNsdWRlICJlcnJvcl9vYmplY3QuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAK
QEAgLTY5LDcgKzY1LDYgQEAKICNpbmNsdWRlICJkYXRlX29iamVjdC5sdXQuaCIKIAogLy8gc29t
ZSBjb25zdGFudHMKLWNvbnN0IHRpbWVfdCBpbnZhbGlkRGF0ZSA9IExPTkdfTUlOOwogY29uc3Qg
ZG91YmxlIGhvdXJzUGVyRGF5ID0gMjQ7CiBjb25zdCBkb3VibGUgbWludXRlc1BlckhvdXIgPSA2
MDsKIGNvbnN0IGRvdWJsZSBzZWNvbmRzUGVyTWludXRlID0gNjA7CkBAIC04MCwxOTcgKzc1LDY2
IEBAIGNvbnN0IGRvdWJsZSBtc1BlckRheSA9IG1zUGVySG91ciAqIGhvdXIKIHN0YXRpYyBjb25z
dCBjaGFyICogY29uc3Qgd2Vla2RheU5hbWVbN10gPSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJU
aHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07CiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1v
bnRoTmFtZVsxMl0gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIs
ICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKICAgICAKLSNpZmRl
ZiBBUFBMRV9DSEFOR0VTCisjaWYgX19BUFBMRV9fCiAKLS8vIE9yaWdpbmFsbHksIHdlIHdyb3Rl
IG91ciBvd24gaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIENvcmUgRm91bmRhdGlvbiBiZWNhdXNl
IG9mIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBpbiBNYWMgT1MgWCAxMC4yLgotLy8gQnV0IHdlIG5l
ZWQgdG8ga2VlcCB1c2luZyB0aGlzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1
bmN0aW9ucyBiZWNhdXNlIHRoaXMgaGFuZGxlcyBhIGxhcmdlciByYW5nZSBvZiBkYXRlcy4KLQot
I2luY2x1ZGUgPG5vdGlmeS5oPgogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0
aW9uLmg+Ci0jaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogCit1c2luZyBL
SlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6TGlzdDsKIHVzaW5nIEtKUzo6VUNoYXI7CiB1c2lu
ZyBLSlM6OlVTdHJpbmc7CiAKLSNkZWZpbmUgZ210aW1lKHgpIGdtdGltZVVzaW5nQ0YoeCkKLSNk
ZWZpbmUgbG9jYWx0aW1lKHgpIGxvY2FsdGltZVVzaW5nQ0YoeCkKLSNkZWZpbmUgbWt0aW1lKHgp
IG1rdGltZVVzaW5nQ0YoeCkKLSNkZWZpbmUgdGltZSh4KSB0aW1lVXNpbmdDRih4KQotCiAjZGVm
aW5lIGN0aW1lKHgpIE5vdEFsbG93ZWRUb0NhbGxUaGlzKCkKICNkZWZpbmUgc3RyZnRpbWUoYSwg
YiwgYywgZCkgTm90QWxsb3dlZFRvQ2FsbFRoaXMoKQogCi1zdGF0aWMgc3RydWN0IHRtICp0bVVz
aW5nQ0YodGltZV90IGNsb2NrLCBDRlRpbWVab25lUmVmIHRpbWVab25lKQorc3RhdGljIENGRGF0
ZUZvcm1hdHRlclN0eWxlIHN0eWxlRnJvbUFyZ1N0cmluZyhjb25zdCBVU3RyaW5nJiBzdHJpbmcs
IENGRGF0ZUZvcm1hdHRlclN0eWxlIGRlZmF1bHRTdHlsZSkKIHsKLSAgICBzdGF0aWMgc3RydWN0
IHRtIHJlc3VsdDsKLSAgICBzdGF0aWMgY2hhciB0aW1lWm9uZUNTdHJpbmdbMTI4XTsKLSAgICAK
LSAgICBDRkFic29sdXRlVGltZSBhYnNvbHV0ZVRpbWUgPSBjbG9jayAtIGtDRkFic29sdXRlVGlt
ZUludGVydmFsU2luY2UxOTcwOwotICAgIENGR3JlZ29yaWFuRGF0ZSBkYXRlID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKGFic29sdXRlVGltZSwgdGltZVpvbmUpOwotCi0gICAgQ0ZT
dHJpbmdSZWYgYWJicmV2aWF0aW9uID0gQ0ZUaW1lWm9uZUNvcHlBYmJyZXZpYXRpb24odGltZVpv
bmUsIGFic29sdXRlVGltZSk7Ci0gICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKGFiYnJldmlhdGlvbiwg
dGltZVpvbmVDU3RyaW5nLCBzaXplb2YodGltZVpvbmVDU3RyaW5nKSwga0NGU3RyaW5nRW5jb2Rp
bmdBU0NJSSk7Ci0gICAgQ0ZSZWxlYXNlKGFiYnJldmlhdGlvbik7Ci0KLSAgICByZXN1bHQudG1f
c2VjID0gKGludClkYXRlLnNlY29uZDsKLSAgICByZXN1bHQudG1fbWluID0gZGF0ZS5taW51dGU7
Ci0gICAgcmVzdWx0LnRtX2hvdXIgPSBkYXRlLmhvdXI7Ci0gICAgcmVzdWx0LnRtX21kYXkgPSBk
YXRlLmRheTsKLSAgICByZXN1bHQudG1fbW9uID0gZGF0ZS5tb250aCAtIDE7Ci0gICAgcmVzdWx0
LnRtX3llYXIgPSBkYXRlLnllYXIgLSAxOTAwOwotICAgIHJlc3VsdC50bV93ZGF5ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXREYXlPZldlZWsoYWJzb2x1dGVUaW1lLCB0aW1lWm9uZSkgJSA3OwotICAgIHJl
c3VsdC50bV95ZGF5ID0gQ0ZBYnNvbHV0ZVRpbWVHZXREYXlPZlllYXIoYWJzb2x1dGVUaW1lLCB0
aW1lWm9uZSkgLSAxOwotICAgIHJlc3VsdC50bV9pc2RzdCA9IENGVGltZVpvbmVJc0RheWxpZ2h0
U2F2aW5nVGltZSh0aW1lWm9uZSwgYWJzb2x1dGVUaW1lKTsKLSAgICByZXN1bHQudG1fZ210b2Zm
ID0gKGludClDRlRpbWVab25lR2V0U2Vjb25kc0Zyb21HTVQodGltZVpvbmUsIGFic29sdXRlVGlt
ZSk7Ci0gICAgcmVzdWx0LnRtX3pvbmUgPSB0aW1lWm9uZUNTdHJpbmc7Ci0gICAgCi0gICAgcmV0
dXJuICZyZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDRlRpbWVab25lUmVmIFVUQ1RpbWVab25lKCkKLXsK
LSAgICBzdGF0aWMgQ0ZUaW1lWm9uZVJlZiB6b25lID0gQ0ZUaW1lWm9uZUNyZWF0ZVdpdGhUaW1l
SW50ZXJ2YWxGcm9tR01UKE5VTEwsIDAuMCk7Ci0gICAgcmV0dXJuIHpvbmU7Ci19Ci0KLXN0YXRp
YyBDRlRpbWVab25lUmVmIENvcHlMb2NhbFRpbWVab25lKCkKLXsKLSAgICAvLyBDaGVjayBmb3Ig
YSB0aW1lIHpvbmUgbm90aWZpY2F0aW9uLCBhbmQgdGVsbCBDb3JlRm91bmRhdGlvbiB0byByZS1n
ZXQgdGhlIHRpbWUgem9uZSBpZiBpdCBoYXBwZW5lZC4KLSAgICAvLyBTb21lIGRheSwgQ29yZUZv
dW5kYXRpb24gbWF5IGRvIHRoaXMgaXRzZWxmLCBidXQgZm9yIG5vdyBpdCBuZWVkcyBvdXIgaGVs
cC4KLSAgICBzdGF0aWMgYm9vbCByZWdpc3RlcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGludCBu
b3RpZmljYXRpb25Ub2tlbjsKLSAgICBpZiAoIXJlZ2lzdGVyZWQpIHsKLSAgICAgICAgdWludDMy
X3Qgc3RhdHVzID0gbm90aWZ5X3JlZ2lzdGVyX2NoZWNrKCJjb20uYXBwbGUuc3lzdGVtLnRpbWV6
b25lIiwgJm5vdGlmaWNhdGlvblRva2VuKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllf
U1RBVFVTX09LKSB7Ci0gICAgICAgICAgICByZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAocmVnaXN0ZXJlZCkgewotICAgICAgICBpbnQgbm90aWZpZWQ7Ci0gICAg
ICAgIHVpbnQzMl90IHN0YXR1cyA9IG5vdGlmeV9jaGVjayhub3RpZmljYXRpb25Ub2tlbiwgJm5v
dGlmaWVkKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllfU1RBVFVTX09LICYmIG5vdGlm
aWVkKSB7Ci0gICAgICAgICAgICBDRlRpbWVab25lUmVzZXRTeXN0ZW0oKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIENGVGltZVpvbmVSZWYgem9uZSA9IENGVGltZVpvbmVDb3B5RGVmYXVsdCgp
OwotICAgIGlmICh6b25lKSB7Ci0gICAgICAgIHJldHVybiB6b25lOwotICAgIH0KLSAgICB6b25l
ID0gVVRDVGltZVpvbmUoKTsKLSAgICBDRlJldGFpbih6b25lKTsKLSAgICByZXR1cm4gem9uZTsK
LX0KLQotc3RhdGljIHN0cnVjdCB0bSAqZ210aW1lVXNpbmdDRihjb25zdCB0aW1lX3QgKmNsb2Nr
KQotewotICAgIHJldHVybiB0bVVzaW5nQ0YoKmNsb2NrLCBVVENUaW1lWm9uZSgpKTsKLX0KLQot
c3RhdGljIHN0cnVjdCB0bSAqbG9jYWx0aW1lVXNpbmdDRihjb25zdCB0aW1lX3QgKmNsb2NrKQot
ewotICAgIENGVGltZVpvbmVSZWYgdGltZVpvbmUgPSBDb3B5TG9jYWxUaW1lWm9uZSgpOwotICAg
IHN0cnVjdCB0bSAqcmVzdWx0ID0gdG1Vc2luZ0NGKCpjbG9jaywgdGltZVpvbmUpOwotICAgIENG
UmVsZWFzZSh0aW1lWm9uZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHRpbWVf
dCB0aW1ldFVzaW5nQ0Yoc3RydWN0IHRtICp0bSwgQ0ZUaW1lWm9uZVJlZiB0aW1lWm9uZSkKLXsK
LSAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZTsKLSAgICBkYXRlLnNlY29uZCA9IHRtLT50bV9zZWM7
Ci0gICAgZGF0ZS5taW51dGUgPSB0bS0+dG1fbWluOwotICAgIGRhdGUuaG91ciA9IHRtLT50bV9o
b3VyOwotICAgIGRhdGUuZGF5ID0gdG0tPnRtX21kYXk7Ci0gICAgZGF0ZS5tb250aCA9IHRtLT50
bV9tb24gKyAxOwotICAgIGRhdGUueWVhciA9IHRtLT50bV95ZWFyICsgMTkwMDsKLQotICAgIC8v
IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZSB3aWxsIGdvIG51dHMgaWYgdGhlIHllYXIg
aXMgdG9vIGxhcmdlIG9yIHNtYWxsLAotICAgIC8vIHNvIHdlIHBpY2sgYW4gYXJiaXRyYXJ5IGN1
dG9mZi4KLSAgICBpZiAoZGF0ZS55ZWFyIDwgLTI1MDAgfHwgZGF0ZS55ZWFyID4gMjUwMCkgewot
ICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7Ci0gICAgfQotCi0gICAgQ0ZBYnNvbHV0ZVRpbWUg
YWJzb2x1dGVUaW1lID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRpbWVa
b25lKTsKLQotICAgIGlmICh0bS0+dG1faXNkc3QgPj0gMCkgewotICAgICAgaWYgKENGVGltZVpv
bmVJc0RheWxpZ2h0U2F2aW5nVGltZSh0aW1lWm9uZSwgYWJzb2x1dGVUaW1lKSAmJiAhdG0tPnRt
X2lzZHN0KQotICAgICAgICBhYnNvbHV0ZVRpbWUgKz0gMzYwMDsKLSAgICAgIGVsc2UgaWYgKCFD
RlRpbWVab25lSXNEYXlsaWdodFNhdmluZ1RpbWUodGltZVpvbmUsIGFic29sdXRlVGltZSkgJiYg
dG0tPnRtX2lzZHN0KQotICAgICAgICBhYnNvbHV0ZVRpbWUgLT0gMzYwMDsKLSAgICB9Ci0KLSAg
ICBDRlRpbWVJbnRlcnZhbCBpbnRlcnZhbCA9IGFic29sdXRlVGltZSArIGtDRkFic29sdXRlVGlt
ZUludGVydmFsU2luY2UxOTcwOwotICAgIGlmIChpbnRlcnZhbCA+IExPTkdfTUFYKSB7Ci0gICAg
ICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHRpbWVfdCkgaW50
ZXJ2YWw7Ci19Ci0KLXN0YXRpYyB0aW1lX3QgbWt0aW1lVXNpbmdDRihzdHJ1Y3QgdG0gKnRtKQot
ewotICAgIENGVGltZVpvbmVSZWYgdGltZVpvbmUgPSBDb3B5TG9jYWxUaW1lWm9uZSgpOwotICAg
IHRpbWVfdCByZXN1bHQgPSB0aW1ldFVzaW5nQ0YodG0sIHRpbWVab25lKTsKLSAgICBDRlJlbGVh
c2UodGltZVpvbmUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB0aW1lX3QgdGlt
ZVVzaW5nQ0YodGltZV90ICpjbG9jaykKLXsKLSAgICB0aW1lX3QgcmVzdWx0ID0gKHRpbWVfdCko
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNl
MTk3MCk7Ci0gICAgaWYgKGNsb2NrKSB7Ci0gICAgICAgICpjbG9jayA9IHJlc3VsdDsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIENGRGF0ZUZvcm1hdHRlclN0eWxlIHN0
eWxlRnJvbUFyZ1N0cmluZyhjb25zdCBVU3RyaW5nJiBzdHJpbmcsQ0ZEYXRlRm9ybWF0dGVyU3R5
bGUgZGVmYXVsdFN0eWxlKQotewotICAgIENGRGF0ZUZvcm1hdHRlclN0eWxlIHJldFZhbCA9IGRl
ZmF1bHRTdHlsZTsKICAgICBpZiAoc3RyaW5nID09ICJzaG9ydCIpCi0JcmV0VmFsID0ga0NGRGF0
ZUZvcm1hdHRlclNob3J0U3R5bGU7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJtZWRpdW0iKQot
CXJldFZhbCA9IGtDRkRhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZTsKLSAgICBlbHNlIGlmIChzdHJp
bmcgPT0gImxvbmciKQotCXJldFZhbCA9IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGU7Ci0gICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJmdWxsIikKLQlyZXRWYWwgPSBrQ0ZEYXRlRm9ybWF0dGVyRnVs
bFN0eWxlOwotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KLXN0YXRpYyBVU3RyaW5nIGZvcm1hdExv
Y2FsZURhdGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGRvdWJsZSB0aW1lLCBib29sIGluY2x1ZGVE
YXRlLCBib29sIGluY2x1ZGVUaW1lLCBjb25zdCBLSlM6Okxpc3QgJmFyZ3MpCisJcmV0dXJuIGtD
RkRhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlOworICAgIGlmIChzdHJpbmcgPT0gIm1lZGl1bSIpCisJ
cmV0dXJuIGtDRkRhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZTsKKyAgICBpZiAoc3RyaW5nID09ICJs
b25nIikKKwlyZXR1cm4ga0NGRGF0ZUZvcm1hdHRlckxvbmdTdHlsZTsKKyAgICBpZiAoc3RyaW5n
ID09ICJmdWxsIikKKwlyZXR1cm4ga0NGRGF0ZUZvcm1hdHRlckZ1bGxTdHlsZTsKKyAgICByZXR1
cm4gZGVmYXVsdFN0eWxlOworfQorCitzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEV4
ZWNTdGF0ZSAqZXhlYywgZG91YmxlIHRpbWUsIGJvb2wgaW5jbHVkZURhdGUsIGJvb2wgaW5jbHVk
ZVRpbWUsIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZM
b2NhbGVDb3B5Q3VycmVudCgpOwotICAgIGludCBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwotICAg
IAotICAgIENGRGF0ZUZvcm1hdHRlclN0eWxlICAgIGRhdGVTdHlsZSA9IChpbmNsdWRlRGF0ZSA/
IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7Ci0g
ICAgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUgICAgdGltZVN0eWxlID0gKGluY2x1ZGVUaW1lID8ga0NG
RGF0ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKKyAgICBD
RkRhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUgPSAoaW5jbHVkZURhdGUgPyBrQ0ZEYXRlRm9y
bWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOworICAgIENGRGF0ZUZv
cm1hdHRlclN0eWxlIHRpbWVTdHlsZSA9IChpbmNsdWRlVGltZSA/IGtDRkRhdGVGb3JtYXR0ZXJM
b25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAKLSAgICBVU3RyaW5nCWFyZzBT
dHJpbmc7Ci0gICAgVVN0cmluZwlhcmcxU3RyaW5nOwotICAgIGJvb2wJdXNlQ3VzdG9tRm9ybWF0
ID0gZmFsc2U7Ci0gICAgVVN0cmluZwljdXN0b21Gb3JtYXRTdHJpbmc7Ci0gICAgYXJnMFN0cmlu
ZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmICgoYXJnMFN0cmluZyA9PSAiY3Vz
dG9tIikgJiYgKGFyZ0NvdW50ID49IDIpKSB7CisgICAgYm9vbCB1c2VDdXN0b21Gb3JtYXQgPSBm
YWxzZTsKKyAgICBVU3RyaW5nIGN1c3RvbUZvcm1hdFN0cmluZzsKKworICAgIFVTdHJpbmcgYXJn
MFN0cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChhcmcwU3RyaW5nID09
ICJjdXN0b20iICYmICFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKSB7CiAJdXNlQ3VzdG9tRm9ybWF0
ID0gdHJ1ZTsKIAljdXN0b21Gb3JtYXRTdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsK
LSAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRlICYmIGluY2x1ZGVUaW1lICYmIChhcmdDb3VudCA+
PSAyKSkgewotCWFyZzFTdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsKLQlkYXRlU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZyxkYXRlU3R5bGUpOwotCXRpbWVTdHls
ZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcxU3RyaW5nLHRpbWVTdHlsZSk7Ci0gICAgfSBlbHNl
IGlmIChpbmNsdWRlRGF0ZSAmJiAoYXJnQ291bnQgPj0gMSkpIHsKLQlkYXRlU3R5bGUgPSBzdHls
ZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZyxkYXRlU3R5bGUpOwotICAgIH0gZWxzZSBpZiAoaW5j
bHVkZVRpbWUgJiYgKGFyZ0NvdW50ID49IDEpKSB7Ci0JdGltZVN0eWxlID0gc3R5bGVGcm9tQXJn
U3RyaW5nKGFyZzBTdHJpbmcsdGltZVN0eWxlKTsKKyAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRl
ICYmIGluY2x1ZGVUaW1lICYmICFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKSB7CisJZGF0ZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7CisJdGltZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUp
OworICAgIH0gZWxzZSBpZiAoaW5jbHVkZURhdGUgJiYgIWFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkp
IHsKKwlkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0eWxl
KTsKKyAgICB9IGVsc2UgaWYgKGluY2x1ZGVUaW1lICYmICFhcmdzWzBdLT5pc1VuZGVmaW5lZCgp
KSB7CisJdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIHRpbWVTdHls
ZSk7CiAgICAgfQorCisgICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVu
dCgpOwogICAgIENGRGF0ZUZvcm1hdHRlclJlZiBmb3JtYXR0ZXIgPSBDRkRhdGVGb3JtYXR0ZXJD
cmVhdGUoTlVMTCwgbG9jYWxlLCBkYXRlU3R5bGUsIHRpbWVTdHlsZSk7CisgICAgQ0ZSZWxlYXNl
KGxvY2FsZSk7CisKICAgICBpZiAodXNlQ3VzdG9tRm9ybWF0KSB7Ci0JQ0ZTdHJpbmdSZWYJY3Vz
dG9tRm9ybWF0Q0ZTdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsKFVu
aUNoYXIqKWN1c3RvbUZvcm1hdFN0cmluZy5kYXRhKCksY3VzdG9tRm9ybWF0U3RyaW5nLnNpemUo
KSk7Ci0JQ0ZEYXRlRm9ybWF0dGVyU2V0Rm9ybWF0KGZvcm1hdHRlcixjdXN0b21Gb3JtYXRDRlN0
cmluZyk7CisJQ0ZTdHJpbmdSZWYgY3VzdG9tRm9ybWF0Q0ZTdHJpbmcgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChVbmlDaGFyICopY3VzdG9tRm9ybWF0U3RyaW5nLmRhdGEo
KSwgY3VzdG9tRm9ybWF0U3RyaW5nLnNpemUoKSk7CisJQ0ZEYXRlRm9ybWF0dGVyU2V0Rm9ybWF0
KGZvcm1hdHRlciwgY3VzdG9tRm9ybWF0Q0ZTdHJpbmcpOwogCUNGUmVsZWFzZShjdXN0b21Gb3Jt
YXRDRlN0cmluZyk7CiAgICAgfQorCiAgICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZEYXRlRm9y
bWF0dGVyQ3JlYXRlU3RyaW5nV2l0aEFic29sdXRlVGltZShOVUxMLCBmb3JtYXR0ZXIsIHRpbWUg
LSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCk7CisKKyAgICBDRlJlbGVhc2UoZm9y
bWF0dGVyKTsKKwogICAgIC8vIFdlIHRydW5jYXRlIHRoZSBzdHJpbmcgcmV0dXJuZWQgZnJvbSBD
RkRhdGVGb3JtYXR0ZXIgaWYgaXQncyBhYnN1cmRseSBsb25nICg+IDIwMCBjaGFyYWN0ZXJzKS4K
ICAgICAvLyBUaGF0J3Mgbm90IGdyZWF0IGVycm9yIGhhbmRsaW5nLCBidXQgaXQganVzdCB3b24n
dCBoYXBwZW4gc28gaXQgZG9lc24ndCBtYXR0ZXIuCiAgICAgVUNoYXIgYnVmZmVyWzIwMF07CkBA
IC0yODIsMTMgKzE0NiwxMSBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEtKUzo6
RXhlCiAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywgQ0ZSYW5nZU1ha2UoMCwgbGVu
Z3RoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyICo+KGJ1ZmZlcikpOwogCiAgICAgQ0ZSZWxl
YXNlKHN0cmluZyk7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdHRlcik7Ci0gICAgQ0ZSZWxlYXNlKGxv
Y2FsZSk7Ci0gICAgCisKICAgICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCk7CiB9CiAK
LSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCisjZW5kaWYgLy8gX19BUFBMRV9fCiAKIG5hbWVzcGFj
ZSBLSlMgewogCkBAIC01ODMsMTIgKzQ0NSwxMyBAQCBWYWx1ZUltcCAqRGF0ZVByb3RvRnVuY0lt
cDo6Y2FsbEFzRnVuY3RpCiAKICAgVmFsdWVJbXAgKnJlc3VsdCA9IE5VTEw7CiAgIFVTdHJpbmcg
czsKLSNpZiAhZGVmaW5lZChBUFBMRV9DSEFOR0VTKSB8fCAhQVBQTEVfQ0hBTkdFUworI2lmICFf
X0FQUExFX18KICAgY29uc3QgaW50IGJ1ZnNpemU9MTAwOwogICBjaGFyIHRpbWVidWZmZXJbYnVm
c2l6ZV07CiAgIENTdHJpbmcgb2xkbG9jYWxlID0gc2V0bG9jYWxlKExDX1RJTUUsTlVMTCk7CiAg
IGlmICghb2xkbG9jYWxlLmNfc3RyKCkpCiAgICAgb2xkbG9jYWxlID0gc2V0bG9jYWxlKExDX0FM
TCwgTlVMTCk7CisgIC8vIEZJWE1FOiBXaGVyZSdzIHRoZSBjb2RlIHRvIHNldCB0aGUgbG9jYWxl
IGJhY2sgdG8gb2xkbG9jYWxlPwogI2VuZGlmCiAgIFZhbHVlSW1wICp2ID0gdGhpc09iai0+aW50
ZXJuYWxWYWx1ZSgpOwogICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKQEAgLTY2
NSw3ICs1MjgsNyBAQCBWYWx1ZUltcCAqRGF0ZVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3RpCiAg
IGNhc2UgVG9VVENTdHJpbmc6CiAgICAgcmVzdWx0ID0gU3RyaW5nKGZvcm1hdERhdGVVVENWYXJp
YW50KCp0KSArICIgIiArIGZvcm1hdFRpbWUoKnQpKTsKICAgICBicmVhazsKLSNpZiBBUFBMRV9D
SEFOR0VTCisjaWYgX19BUFBMRV9fCiAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6CiAgICAgcmVzdWx0
ID0gU3RyaW5nKGZvcm1hdExvY2FsZURhdGUoZXhlYywgc2VjcywgdHJ1ZSwgdHJ1ZSwgYXJncykp
OwogICAgIGJyZWFrOwpAQCAtOTM5LDcgKzgwMiw3IEBAIGRvdWJsZSBwYXJzZURhdGUoY29uc3Qg
VVN0cmluZyAmdSkKICNlbmRpZgogICBkb3VibGUgLyp0aW1lX3QqLyBzZWNvbmRzID0gS1JGQ0Rh
dGVfcGFyc2VEYXRlKCB1ICk7CiAKLSAgcmV0dXJuIHNlY29uZHMgPT0gaW52YWxpZERhdGUgPyBO
YU4gOiBzZWNvbmRzICogMTAwMC4wOworICByZXR1cm4gc2Vjb25kcyAqIDEwMDAuMDsKIH0KIAog
Ly8vLy8gQXdmdWwgZHVwbGljYXRpb24gZnJvbSBrcmZjZGF0ZS5jcHAgLSB3ZSBkb24ndCBsaW5r
IHRvIGtkZWNvcmUKQEAgLTEwMDcsMTMgKzg3MCw2IEBAIGRvdWJsZSBtYWtlVGltZShzdHJ1Y3Qg
dG0gKnQsIGRvdWJsZSBtcywKICAgICAgICAgdC0+dG1faXNkc3QgPSAtMTsKICAgICB9CiAKLSNp
ZmRlZiBfX0FQUExFX18KLSAgICAvLyB0LT50bV95ZWFyIG11c3QgaG9sZCB0aGUgYnVsayBvZiB0
aGUgZGF0YSB0byBhdm9pZCBvdmVyZmxvdyB3aGVuIGNvbnZlcnRpbmcKLSAgICAvLyB0byBhIENG
R3JlZ29yaWFuRGF0ZS4gKENGR3JlZ29yaWFuRGF0ZS5tb250aCBpcyBhbiBTSW50ODsgQ0ZHcmVn
b3JpYW5EYXRlLnllYXIgaXMgYW4gU0ludDMyLikKLSAgICB0LT50bV95ZWFyICs9IHQtPnRtX21v
biAvIDEyOwotICAgIHQtPnRtX21vbiAlPSAxMjsKLSNlbmRpZiAgICAKLQogICAgIGRvdWJsZSB5
ZWFyT2Zmc2V0ID0gMC4wOwogICAgIGlmICh0LT50bV95ZWFyIDwgKDE5NzAgLSAxOTAwKSB8fCB0
LT50bV95ZWFyID4gKDIwMzggLSAxOTAwKSkgewogICAgICAgLy8gd2UnbGwgZm9vbCBta3RpbWUo
KSBpbnRvIGJlbGlldmluZyB0aGF0IHRoaXMgeWVhciBpcyB3aXRoaW4KQEAgLTExMjMsMzkgKzk3
OSwzOSBAQCBkb3VibGUgS1JGQ0RhdGVfcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgCiAgICAgIHNr
aXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKIAogICAgICBpZiAoISpkYXRlU3RyaW5n
KQotICAgICAJcmV0dXJuIGludmFsaWREYXRlOworICAgICAJcmV0dXJuIE5hTjsKIAogICAgICAv
LyAnIDA5LU5vdi05OSAyMzoxMjo0MCBHTVQnCiAgICAgIGVycm5vID0gMDsKICAgICAgZGF5ID0g
c3RydG9sKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwKTsKICAgICAgaWYgKGVycm5vKQotICAg
ICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICByZXR1cm4gTmFOOwogICAgICBkYXRlU3Ry
aW5nID0gbmV3UG9zU3RyOwogCiAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgIAlyZXR1cm4g
aW52YWxpZERhdGU7CisgICAgIAlyZXR1cm4gTmFOOwogCiAgICAgIGlmIChkYXkgPCAxKQotICAg
ICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICByZXR1cm4gTmFOOwogICAgICBpZiAoZGF5
ID4gMzEpIHsKICAgICAgICAvLyAjIyMgd2hlcmUgaXMgdGhlIGJvdW5kYXJ5IGFuZCB3aGF0IGhh
cHBlbnMgYmVsb3c/CiAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICcvJyAmJiBkYXkgPj0gMTAw
MCkgewogICAgICAgICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0ZQogICAgICAgICAg
aWYgKCEqKytkYXRlU3RyaW5nKQotICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAg
ICAgICAgIHJldHVybiBOYU47CiAgICAgICAgICB5ZWFyID0gZGF5OwogICAgICAgICAgbW9udGgg
PSBzdHJ0b2woZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTApIC0gMTsKICAgICAgICAgIGlmIChl
cnJubykKLSAgICAgICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgICByZXR1cm4g
TmFOOwogICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKICAgICAgICAgIGlmICgqZGF0
ZVN0cmluZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCi0gICAgICAgICAgIHJldHVybiBpbnZh
bGlkRGF0ZTsKKyAgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgICAgIGRheSA9IHN0cnRvbChk
YXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgICAgICBpZiAoZXJybm8pCi0gICAgICAg
ICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgICAg
IGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgIHJldHVy
biBpbnZhbGlkRGF0ZTsKKyAgICAgICAgIHJldHVybiBOYU47CiAgICAgICAgfQogICAgICB9IGVs
c2UgaWYgKCpkYXRlU3RyaW5nID09ICcvJyAmJiBkYXkgPD0gMTIgJiYgbW9udGggPT0gLTEpIHsK
ICAgICAgCWRhdGVTdHJpbmcrKzsKQEAgLTExNjMsMTIgKzEwMTksMTIgQEAgZG91YmxlIEtSRkNE
YXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5nIAogICAgICAgICBtb250aCA9IGRheSAtIDE7IC8v
IDAtYmFzZWQKICAgICAgICAgZGF5ID0gc3RydG9sKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEw
KTsKICAgICAgICAgaWYgKGVycm5vKQotICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAg
ICAgICAgICByZXR1cm4gTmFOOwogICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwogICAg
ICAgICBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nKQogICAgICAgICAgIGRhdGVTdHJpbmcrKzsKICAg
ICAgICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7Cisg
ICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKQEAgLTExODQs
MjkgKzEwNDAsMjkgQEAgZG91YmxlIEtSRkNEYXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5nIAog
ICAgICAgIHsKICAgICAgICAgIG1vbnRoID0gZmluZE1vbnRoKGRhdGVTdHJpbmcpOwogICAgICAg
ICAgaWYgKG1vbnRoID09IC0xKQotICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAg
ICAgICAgIHJldHVybiBOYU47CiAKICAgICAgICAgIHdoaWxlICgqZGF0ZVN0cmluZyAmJiAoKmRh
dGVTdHJpbmcgIT0gJy0nKSAmJiAhaXNzcGFjZSgqZGF0ZVN0cmluZykpCiAgICAgICAgICAgIGRh
dGVTdHJpbmcrKzsKIAogICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAgICAgICAgcmV0
dXJuIGludmFsaWREYXRlOworICAgICAgICAgICByZXR1cm4gTmFOOwogCiAgICAgICAgICAvLyAn
LTk5IDIzOjEyOjQwIEdNVCcKICAgICAgICAgIGlmICgoKmRhdGVTdHJpbmcgIT0gJy0nKSAmJiAo
KmRhdGVTdHJpbmcgIT0gJy8nKSAmJiAhaXNzcGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAg
IHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgICAgIGRh
dGVTdHJpbmcrKzsKICAgICAgICB9CiAKICAgICAgICBpZiAoKG1vbnRoIDwgMCkgfHwgKG1vbnRo
ID4gMTEpKQotICAgICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgcmV0dXJuIE5h
TjsKICAgICAgfQogCiAgICAgIC8vICc5OSAyMzoxMjo0MCBHTVQnCiAgICAgIGlmICh5ZWFyIDw9
IDAgJiYgKmRhdGVTdHJpbmcpIHsKICAgICAgICB5ZWFyID0gc3RydG9sKGRhdGVTdHJpbmcsICZu
ZXdQb3NTdHIsIDEwKTsKICAgICAgICBpZiAoZXJybm8pCi0gICAgICAgICByZXR1cm4gaW52YWxp
ZERhdGU7CisgICAgICAgICByZXR1cm4gTmFOOwogICAgIH0KICAgICAKICAgICAgLy8gRG9uJ3Qg
ZmFpbCBpZiB0aGUgdGltZSBpcyBtaXNzaW5nLgpAQCAtMTIxNyw3ICsxMDczLDcgQEAgZG91Ymxl
IEtSRkNEYXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5nIAogICAgICAgICAgICBpZiAoICpuZXdQ
b3NTdHIgPT0gJzonICkgLy8gQWgsIHNvIHRoZXJlIHdhcyBubyB5ZWFyLCBidXQgdGhlIG51bWJl
ciB3YXMgdGhlIGhvdXIKICAgICAgICAgICAgICAgIHllYXIgPSAtMTsKICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgICAgICAgcmV0
dXJuIE5hTjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwg
Y2FzZSAod2UgcGFyc2VkIHRoZSB5ZWFyKSwgYWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKICAg
ICAgICAgICAgIGRhdGVTdHJpbmcgPSArK25ld1Bvc1N0cjsKQEAgLTEyMzUsMjYgKzEwOTEsMjYg
QEAgZG91YmxlIEtSRkNEYXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5nIAogICAgICAgICAgIGRh
dGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAKICAgICAgICAgICBpZiAoKGhvdXIgPCAwKSB8fCAoaG91
ciA+IDIzKSkKLSAgICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgIHJl
dHVybiBOYU47CiAKICAgICAgICAgICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICAgICAgcmV0
dXJuIGludmFsaWREYXRlOworICAgICAgICAgICAgcmV0dXJuIE5hTjsKIAogICAgICAgICAgIC8v
ICc6MTI6NDAgR01UJwogICAgICAgICAgIGlmICgqZGF0ZVN0cmluZysrICE9ICc6JykKLSAgICAg
ICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAg
ICAgICAgICBtaW51dGUgPSBzdHJ0b2woZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTApOwogICAg
ICAgICAgIGlmIChlcnJubykKLSAgICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAg
ICAgICAgIHJldHVybiBOYU47CiAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKIAog
ICAgICAgICAgIGlmICgobWludXRlIDwgMCkgfHwgKG1pbnV0ZSA+IDU5KSkKLSAgICAgICAgICAg
IHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAgICAgICAg
ICAvLyAnOjQwIEdNVCcKICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcg
IT0gJzonICYmICFpc3NwYWNlKCpkYXRlU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBpbnZh
bGlkRGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAgICAgICAgICAvLyBzZWNvbmRz
IGFyZSBvcHRpb25hbCBpbiByZmM4MjIgKyByZmMyODIyCiAgICAgICAgICAgaWYgKCpkYXRlU3Ry
aW5nID09JzonKSB7CkBAIC0xMjYyLDI1ICsxMTE4LDI1IEBAIGRvdWJsZSBLUkZDRGF0ZV9wYXJz
ZURhdGUoY29uc3QgVVN0cmluZyAKIAogICAgICAgICAgICAgc2Vjb25kID0gc3RydG9sKGRhdGVT
dHJpbmcsICZuZXdQb3NTdHIsIDEwKTsKICAgICAgICAgICAgIGlmIChlcnJubykKLSAgICAgICAg
ICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgICAgICByZXR1cm4gTmFOOwogICAg
ICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKChzZWNvbmQgPCAwKSB8fCAoc2Vjb25kID4gNTkpKQotICAgICAgICAgICAgICByZXR1
cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgICAgIHJldHVybiBOYU47CiAgICAgICAgICAgfQog
CiAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwogCiAJICBpZiAo
c3RybmNhc2VjbXAoZGF0ZVN0cmluZywgIkFNIiwgMikgPT0gMCkgewogCSAgICBpZiAoaG91ciA+
IDEyKQotCSAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKwkgICAgICByZXR1cm4gTmFOOwogCSAg
ICBpZiAoaG91ciA9PSAxMikKIAkgICAgICBob3VyID0gMDsKIAkgICAgZGF0ZVN0cmluZyArPSAy
OwogICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwogCSAgfSBl
bHNlIGlmIChzdHJuY2FzZWNtcChkYXRlU3RyaW5nLCAiUE0iLCAyKSA9PSAwKSB7CiAJICAgIGlm
IChob3VyID4gMTIpCi0JICAgICAgcmV0dXJuIGludmFsaWREYXRlOworCSAgICAgIHJldHVybiBO
YU47CiAJICAgIGlmIChob3VyICE9IDEyKQogCSAgICAgIGhvdXIgKz0gMTI7CiAJICAgIGRhdGVT
dHJpbmcgKz0gMjsKQEAgLTEzMDgsMTggKzExNjQsMTggQEAgZG91YmxlIEtSRkNEYXRlX3BhcnNl
RGF0ZShjb25zdCBVU3RyaW5nIAogICAgICAgIGlmICgoKmRhdGVTdHJpbmcgPT0gJysnKSB8fCAo
KmRhdGVTdHJpbmcgPT0gJy0nKSkgewogICAgICAgICAgb2Zmc2V0ID0gc3RydG9sKGRhdGVTdHJp
bmcsICZuZXdQb3NTdHIsIDEwKTsKICAgICAgICAgIGlmIChlcnJubykKLSAgICAgICAgICAgcmV0
dXJuIGludmFsaWREYXRlOworICAgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgICAgZGF0ZVN0
cmluZyA9IG5ld1Bvc1N0cjsKIAogICAgICAgICAgaWYgKChvZmZzZXQgPCAtOTk1OSkgfHwgKG9m
ZnNldCA+IDk5NTkpKQotICAgICAgICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAg
ICAgcmV0dXJuIE5hTjsKIAogICAgICAgICAgaW50IHNnbiA9IChvZmZzZXQgPCAwKT8gLTE6MTsK
ICAgICAgICAgIG9mZnNldCA9IGFicyhvZmZzZXQpOwogICAgICAgICAgaWYgKCAqZGF0ZVN0cmlu
ZyA9PSAnOicgKSB7IC8vIEdNVCswNTowMAogICAgICAgICAgICBpbnQgb2Zmc2V0MiA9IHN0cnRv
bChkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgICAgICAgIGlmIChlcnJubykKLSAg
ICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgICAgcmV0dXJuIE5hTjsK
ICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKICAgICAgICAgICAgb2Zmc2V0ID0g
KG9mZnNldCo2MCArIG9mZnNldDIpKnNnbjsKICAgICAgICAgIH0KQEAgLTEzNDMsNyArMTE5OSw3
IEBAIGRvdWJsZSBLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAgICAgaWYgKCAq
ZGF0ZVN0cmluZyAmJiB5ZWFyID09IC0xICkgewogICAgICAgIHllYXIgPSBzdHJ0b2woZGF0ZVN0
cmluZywgJm5ld1Bvc1N0ciwgMTApOwogICAgICAgIGlmIChlcnJubykKLSAgICAgICAgIHJldHVy
biBpbnZhbGlkRGF0ZTsKKyAgICAgICAgIHJldHVybiBOYU47CiAgICAgICAgZGF0ZVN0cmluZyA9
IG5ld1Bvc1N0cjsKICAgICAgfQogICAgICAKQEAgLTEzNTEsNyArMTIwNyw3IEBAIGRvdWJsZSBL
UkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAgICAgCiAgICAgIC8vIFRyYWlsaW5n
IGdhcmJhZ2UKICAgICAgaWYgKCpkYXRlU3RyaW5nICE9ICdcMCcpCi0gICAgICAgcmV0dXJuIGlu
dmFsaWREYXRlOworICAgICAgIHJldHVybiBOYU47CiAKICAgICAgLy8gWTJLOiBTb2x2ZSAyIGRp
Z2l0IHllYXJzCiAgICAgIGlmICgoeWVhciA+PSAwKSAmJiAoeWVhciA8IDUwKSkK
</data>
<flag name="review"
          id="702"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4263</attachid>
            <date>2005-10-08 23:37:25 -0700</date>
            <delta_ts>2005-10-09 13:33:06 -0700</delta_ts>
            <desc>alternate version of patch that uses _r versions of functions too (either one seems fine to me)</desc>
            <filename>DatePatch2.txt</filename>
            <type>text/plain</type>
            <size>21889</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNjAKZGlmZiAtcCAtdSAtcjEuNjAga2pzL2RhdGVfb2JqZWN0LmNwcAotLS0ga2pzL2RhdGVf
b2JqZWN0LmNwcAk5IE9jdCAyMDA1IDA0OjQ1OjI4IC0wMDAwCTEuNjAKKysrIGtqcy9kYXRlX29i
amVjdC5jcHAJOSBPY3QgMjAwNSAwNjozOTozNCAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0q
LSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQpAQCAtMjEsOSArMjAsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpZm5kZWYgSEFWRV9TWVNfVElNRUJfSAotI2RlZmluZSBIQVZFX1NZU19USU1FQl9I
IDAKLSNlbmRpZgorI2luY2x1ZGUgImRhdGVfb2JqZWN0LmgiCiAKICNpZiBUSU1FX1dJVEhfU1lT
X1RJTUUKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KQEAgLTU1LDcgKzUyLDYgQEAKICNpbmNsdWRl
IDxjdHlwZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCi0jaW5jbHVkZSAiZGF0ZV9vYmplY3Qu
aCIKICNpbmNsdWRlICJlcnJvcl9vYmplY3QuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAK
QEAgLTY5LDcgKzY1LDYgQEAKICNpbmNsdWRlICJkYXRlX29iamVjdC5sdXQuaCIKIAogLy8gc29t
ZSBjb25zdGFudHMKLWNvbnN0IHRpbWVfdCBpbnZhbGlkRGF0ZSA9IExPTkdfTUlOOwogY29uc3Qg
ZG91YmxlIGhvdXJzUGVyRGF5ID0gMjQ7CiBjb25zdCBkb3VibGUgbWludXRlc1BlckhvdXIgPSA2
MDsKIGNvbnN0IGRvdWJsZSBzZWNvbmRzUGVyTWludXRlID0gNjA7CkBAIC04MCwxOTcgKzc1LDY2
IEBAIGNvbnN0IGRvdWJsZSBtc1BlckRheSA9IG1zUGVySG91ciAqIGhvdXIKIHN0YXRpYyBjb25z
dCBjaGFyICogY29uc3Qgd2Vla2RheU5hbWVbN10gPSB7ICJNb24iLCAiVHVlIiwgIldlZCIsICJU
aHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iIH07CiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1v
bnRoTmFtZVsxMl0gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIs
ICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKICAgICAKLSNpZmRl
ZiBBUFBMRV9DSEFOR0VTCisjaWYgX19BUFBMRV9fCiAKLS8vIE9yaWdpbmFsbHksIHdlIHdyb3Rl
IG91ciBvd24gaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIENvcmUgRm91bmRhdGlvbiBiZWNhdXNl
IG9mIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBpbiBNYWMgT1MgWCAxMC4yLgotLy8gQnV0IHdlIG5l
ZWQgdG8ga2VlcCB1c2luZyB0aGlzIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1
bmN0aW9ucyBiZWNhdXNlIHRoaXMgaGFuZGxlcyBhIGxhcmdlciByYW5nZSBvZiBkYXRlcy4KLQot
I2luY2x1ZGUgPG5vdGlmeS5oPgogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0
aW9uLmg+Ci0jaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogCit1c2luZyBL
SlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6TGlzdDsKIHVzaW5nIEtKUzo6VUNoYXI7CiB1c2lu
ZyBLSlM6OlVTdHJpbmc7CiAKLSNkZWZpbmUgZ210aW1lKHgpIGdtdGltZVVzaW5nQ0YoeCkKLSNk
ZWZpbmUgbG9jYWx0aW1lKHgpIGxvY2FsdGltZVVzaW5nQ0YoeCkKLSNkZWZpbmUgbWt0aW1lKHgp
IG1rdGltZVVzaW5nQ0YoeCkKLSNkZWZpbmUgdGltZSh4KSB0aW1lVXNpbmdDRih4KQotCiAjZGVm
aW5lIGN0aW1lKHgpIE5vdEFsbG93ZWRUb0NhbGxUaGlzKCkKICNkZWZpbmUgc3RyZnRpbWUoYSwg
YiwgYywgZCkgTm90QWxsb3dlZFRvQ2FsbFRoaXMoKQogCi1zdGF0aWMgc3RydWN0IHRtICp0bVVz
aW5nQ0YodGltZV90IGNsb2NrLCBDRlRpbWVab25lUmVmIHRpbWVab25lKQorc3RhdGljIENGRGF0
ZUZvcm1hdHRlclN0eWxlIHN0eWxlRnJvbUFyZ1N0cmluZyhjb25zdCBVU3RyaW5nJiBzdHJpbmcs
IENGRGF0ZUZvcm1hdHRlclN0eWxlIGRlZmF1bHRTdHlsZSkKIHsKLSAgICBzdGF0aWMgc3RydWN0
IHRtIHJlc3VsdDsKLSAgICBzdGF0aWMgY2hhciB0aW1lWm9uZUNTdHJpbmdbMTI4XTsKLSAgICAK
LSAgICBDRkFic29sdXRlVGltZSBhYnNvbHV0ZVRpbWUgPSBjbG9jayAtIGtDRkFic29sdXRlVGlt
ZUludGVydmFsU2luY2UxOTcwOwotICAgIENGR3JlZ29yaWFuRGF0ZSBkYXRlID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKGFic29sdXRlVGltZSwgdGltZVpvbmUpOwotCi0gICAgQ0ZT
dHJpbmdSZWYgYWJicmV2aWF0aW9uID0gQ0ZUaW1lWm9uZUNvcHlBYmJyZXZpYXRpb24odGltZVpv
bmUsIGFic29sdXRlVGltZSk7Ci0gICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKGFiYnJldmlhdGlvbiwg
dGltZVpvbmVDU3RyaW5nLCBzaXplb2YodGltZVpvbmVDU3RyaW5nKSwga0NGU3RyaW5nRW5jb2Rp
bmdBU0NJSSk7Ci0gICAgQ0ZSZWxlYXNlKGFiYnJldmlhdGlvbik7Ci0KLSAgICByZXN1bHQudG1f
c2VjID0gKGludClkYXRlLnNlY29uZDsKLSAgICByZXN1bHQudG1fbWluID0gZGF0ZS5taW51dGU7
Ci0gICAgcmVzdWx0LnRtX2hvdXIgPSBkYXRlLmhvdXI7Ci0gICAgcmVzdWx0LnRtX21kYXkgPSBk
YXRlLmRheTsKLSAgICByZXN1bHQudG1fbW9uID0gZGF0ZS5tb250aCAtIDE7Ci0gICAgcmVzdWx0
LnRtX3llYXIgPSBkYXRlLnllYXIgLSAxOTAwOwotICAgIHJlc3VsdC50bV93ZGF5ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXREYXlPZldlZWsoYWJzb2x1dGVUaW1lLCB0aW1lWm9uZSkgJSA3OwotICAgIHJl
c3VsdC50bV95ZGF5ID0gQ0ZBYnNvbHV0ZVRpbWVHZXREYXlPZlllYXIoYWJzb2x1dGVUaW1lLCB0
aW1lWm9uZSkgLSAxOwotICAgIHJlc3VsdC50bV9pc2RzdCA9IENGVGltZVpvbmVJc0RheWxpZ2h0
U2F2aW5nVGltZSh0aW1lWm9uZSwgYWJzb2x1dGVUaW1lKTsKLSAgICByZXN1bHQudG1fZ210b2Zm
ID0gKGludClDRlRpbWVab25lR2V0U2Vjb25kc0Zyb21HTVQodGltZVpvbmUsIGFic29sdXRlVGlt
ZSk7Ci0gICAgcmVzdWx0LnRtX3pvbmUgPSB0aW1lWm9uZUNTdHJpbmc7Ci0gICAgCi0gICAgcmV0
dXJuICZyZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDRlRpbWVab25lUmVmIFVUQ1RpbWVab25lKCkKLXsK
LSAgICBzdGF0aWMgQ0ZUaW1lWm9uZVJlZiB6b25lID0gQ0ZUaW1lWm9uZUNyZWF0ZVdpdGhUaW1l
SW50ZXJ2YWxGcm9tR01UKE5VTEwsIDAuMCk7Ci0gICAgcmV0dXJuIHpvbmU7Ci19Ci0KLXN0YXRp
YyBDRlRpbWVab25lUmVmIENvcHlMb2NhbFRpbWVab25lKCkKLXsKLSAgICAvLyBDaGVjayBmb3Ig
YSB0aW1lIHpvbmUgbm90aWZpY2F0aW9uLCBhbmQgdGVsbCBDb3JlRm91bmRhdGlvbiB0byByZS1n
ZXQgdGhlIHRpbWUgem9uZSBpZiBpdCBoYXBwZW5lZC4KLSAgICAvLyBTb21lIGRheSwgQ29yZUZv
dW5kYXRpb24gbWF5IGRvIHRoaXMgaXRzZWxmLCBidXQgZm9yIG5vdyBpdCBuZWVkcyBvdXIgaGVs
cC4KLSAgICBzdGF0aWMgYm9vbCByZWdpc3RlcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGludCBu
b3RpZmljYXRpb25Ub2tlbjsKLSAgICBpZiAoIXJlZ2lzdGVyZWQpIHsKLSAgICAgICAgdWludDMy
X3Qgc3RhdHVzID0gbm90aWZ5X3JlZ2lzdGVyX2NoZWNrKCJjb20uYXBwbGUuc3lzdGVtLnRpbWV6
b25lIiwgJm5vdGlmaWNhdGlvblRva2VuKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllf
U1RBVFVTX09LKSB7Ci0gICAgICAgICAgICByZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAocmVnaXN0ZXJlZCkgewotICAgICAgICBpbnQgbm90aWZpZWQ7Ci0gICAg
ICAgIHVpbnQzMl90IHN0YXR1cyA9IG5vdGlmeV9jaGVjayhub3RpZmljYXRpb25Ub2tlbiwgJm5v
dGlmaWVkKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBOT1RJRllfU1RBVFVTX09LICYmIG5vdGlm
aWVkKSB7Ci0gICAgICAgICAgICBDRlRpbWVab25lUmVzZXRTeXN0ZW0oKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIENGVGltZVpvbmVSZWYgem9uZSA9IENGVGltZVpvbmVDb3B5RGVmYXVsdCgp
OwotICAgIGlmICh6b25lKSB7Ci0gICAgICAgIHJldHVybiB6b25lOwotICAgIH0KLSAgICB6b25l
ID0gVVRDVGltZVpvbmUoKTsKLSAgICBDRlJldGFpbih6b25lKTsKLSAgICByZXR1cm4gem9uZTsK
LX0KLQotc3RhdGljIHN0cnVjdCB0bSAqZ210aW1lVXNpbmdDRihjb25zdCB0aW1lX3QgKmNsb2Nr
KQotewotICAgIHJldHVybiB0bVVzaW5nQ0YoKmNsb2NrLCBVVENUaW1lWm9uZSgpKTsKLX0KLQot
c3RhdGljIHN0cnVjdCB0bSAqbG9jYWx0aW1lVXNpbmdDRihjb25zdCB0aW1lX3QgKmNsb2NrKQot
ewotICAgIENGVGltZVpvbmVSZWYgdGltZVpvbmUgPSBDb3B5TG9jYWxUaW1lWm9uZSgpOwotICAg
IHN0cnVjdCB0bSAqcmVzdWx0ID0gdG1Vc2luZ0NGKCpjbG9jaywgdGltZVpvbmUpOwotICAgIENG
UmVsZWFzZSh0aW1lWm9uZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHRpbWVf
dCB0aW1ldFVzaW5nQ0Yoc3RydWN0IHRtICp0bSwgQ0ZUaW1lWm9uZVJlZiB0aW1lWm9uZSkKLXsK
LSAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZTsKLSAgICBkYXRlLnNlY29uZCA9IHRtLT50bV9zZWM7
Ci0gICAgZGF0ZS5taW51dGUgPSB0bS0+dG1fbWluOwotICAgIGRhdGUuaG91ciA9IHRtLT50bV9o
b3VyOwotICAgIGRhdGUuZGF5ID0gdG0tPnRtX21kYXk7Ci0gICAgZGF0ZS5tb250aCA9IHRtLT50
bV9tb24gKyAxOwotICAgIGRhdGUueWVhciA9IHRtLT50bV95ZWFyICsgMTkwMDsKLQotICAgIC8v
IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZSB3aWxsIGdvIG51dHMgaWYgdGhlIHllYXIg
aXMgdG9vIGxhcmdlIG9yIHNtYWxsLAotICAgIC8vIHNvIHdlIHBpY2sgYW4gYXJiaXRyYXJ5IGN1
dG9mZi4KLSAgICBpZiAoZGF0ZS55ZWFyIDwgLTI1MDAgfHwgZGF0ZS55ZWFyID4gMjUwMCkgewot
ICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7Ci0gICAgfQotCi0gICAgQ0ZBYnNvbHV0ZVRpbWUg
YWJzb2x1dGVUaW1lID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRpbWVa
b25lKTsKLQotICAgIGlmICh0bS0+dG1faXNkc3QgPj0gMCkgewotICAgICAgaWYgKENGVGltZVpv
bmVJc0RheWxpZ2h0U2F2aW5nVGltZSh0aW1lWm9uZSwgYWJzb2x1dGVUaW1lKSAmJiAhdG0tPnRt
X2lzZHN0KQotICAgICAgICBhYnNvbHV0ZVRpbWUgKz0gMzYwMDsKLSAgICAgIGVsc2UgaWYgKCFD
RlRpbWVab25lSXNEYXlsaWdodFNhdmluZ1RpbWUodGltZVpvbmUsIGFic29sdXRlVGltZSkgJiYg
dG0tPnRtX2lzZHN0KQotICAgICAgICBhYnNvbHV0ZVRpbWUgLT0gMzYwMDsKLSAgICB9Ci0KLSAg
ICBDRlRpbWVJbnRlcnZhbCBpbnRlcnZhbCA9IGFic29sdXRlVGltZSArIGtDRkFic29sdXRlVGlt
ZUludGVydmFsU2luY2UxOTcwOwotICAgIGlmIChpbnRlcnZhbCA+IExPTkdfTUFYKSB7Ci0gICAg
ICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHRpbWVfdCkgaW50
ZXJ2YWw7Ci19Ci0KLXN0YXRpYyB0aW1lX3QgbWt0aW1lVXNpbmdDRihzdHJ1Y3QgdG0gKnRtKQot
ewotICAgIENGVGltZVpvbmVSZWYgdGltZVpvbmUgPSBDb3B5TG9jYWxUaW1lWm9uZSgpOwotICAg
IHRpbWVfdCByZXN1bHQgPSB0aW1ldFVzaW5nQ0YodG0sIHRpbWVab25lKTsKLSAgICBDRlJlbGVh
c2UodGltZVpvbmUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB0aW1lX3QgdGlt
ZVVzaW5nQ0YodGltZV90ICpjbG9jaykKLXsKLSAgICB0aW1lX3QgcmVzdWx0ID0gKHRpbWVfdCko
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNl
MTk3MCk7Ci0gICAgaWYgKGNsb2NrKSB7Ci0gICAgICAgICpjbG9jayA9IHJlc3VsdDsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIENGRGF0ZUZvcm1hdHRlclN0eWxlIHN0
eWxlRnJvbUFyZ1N0cmluZyhjb25zdCBVU3RyaW5nJiBzdHJpbmcsQ0ZEYXRlRm9ybWF0dGVyU3R5
bGUgZGVmYXVsdFN0eWxlKQotewotICAgIENGRGF0ZUZvcm1hdHRlclN0eWxlIHJldFZhbCA9IGRl
ZmF1bHRTdHlsZTsKICAgICBpZiAoc3RyaW5nID09ICJzaG9ydCIpCi0JcmV0VmFsID0ga0NGRGF0
ZUZvcm1hdHRlclNob3J0U3R5bGU7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJtZWRpdW0iKQot
CXJldFZhbCA9IGtDRkRhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZTsKLSAgICBlbHNlIGlmIChzdHJp
bmcgPT0gImxvbmciKQotCXJldFZhbCA9IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGU7Ci0gICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJmdWxsIikKLQlyZXRWYWwgPSBrQ0ZEYXRlRm9ybWF0dGVyRnVs
bFN0eWxlOwotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KLXN0YXRpYyBVU3RyaW5nIGZvcm1hdExv
Y2FsZURhdGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGRvdWJsZSB0aW1lLCBib29sIGluY2x1ZGVE
YXRlLCBib29sIGluY2x1ZGVUaW1lLCBjb25zdCBLSlM6Okxpc3QgJmFyZ3MpCisJcmV0dXJuIGtD
RkRhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlOworICAgIGlmIChzdHJpbmcgPT0gIm1lZGl1bSIpCisJ
cmV0dXJuIGtDRkRhdGVGb3JtYXR0ZXJNZWRpdW1TdHlsZTsKKyAgICBpZiAoc3RyaW5nID09ICJs
b25nIikKKwlyZXR1cm4ga0NGRGF0ZUZvcm1hdHRlckxvbmdTdHlsZTsKKyAgICBpZiAoc3RyaW5n
ID09ICJmdWxsIikKKwlyZXR1cm4ga0NGRGF0ZUZvcm1hdHRlckZ1bGxTdHlsZTsKKyAgICByZXR1
cm4gZGVmYXVsdFN0eWxlOworfQorCitzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEV4
ZWNTdGF0ZSAqZXhlYywgZG91YmxlIHRpbWUsIGJvb2wgaW5jbHVkZURhdGUsIGJvb2wgaW5jbHVk
ZVRpbWUsIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZM
b2NhbGVDb3B5Q3VycmVudCgpOwotICAgIGludCBhcmdDb3VudCA9IGFyZ3Muc2l6ZSgpOwotICAg
IAotICAgIENGRGF0ZUZvcm1hdHRlclN0eWxlICAgIGRhdGVTdHlsZSA9IChpbmNsdWRlRGF0ZSA/
IGtDRkRhdGVGb3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7Ci0g
ICAgQ0ZEYXRlRm9ybWF0dGVyU3R5bGUgICAgdGltZVN0eWxlID0gKGluY2x1ZGVUaW1lID8ga0NG
RGF0ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKKyAgICBD
RkRhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUgPSAoaW5jbHVkZURhdGUgPyBrQ0ZEYXRlRm9y
bWF0dGVyTG9uZ1N0eWxlIDoga0NGRGF0ZUZvcm1hdHRlck5vU3R5bGUpOworICAgIENGRGF0ZUZv
cm1hdHRlclN0eWxlIHRpbWVTdHlsZSA9IChpbmNsdWRlVGltZSA/IGtDRkRhdGVGb3JtYXR0ZXJM
b25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAKLSAgICBVU3RyaW5nCWFyZzBT
dHJpbmc7Ci0gICAgVVN0cmluZwlhcmcxU3RyaW5nOwotICAgIGJvb2wJdXNlQ3VzdG9tRm9ybWF0
ID0gZmFsc2U7Ci0gICAgVVN0cmluZwljdXN0b21Gb3JtYXRTdHJpbmc7Ci0gICAgYXJnMFN0cmlu
ZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmICgoYXJnMFN0cmluZyA9PSAiY3Vz
dG9tIikgJiYgKGFyZ0NvdW50ID49IDIpKSB7CisgICAgYm9vbCB1c2VDdXN0b21Gb3JtYXQgPSBm
YWxzZTsKKyAgICBVU3RyaW5nIGN1c3RvbUZvcm1hdFN0cmluZzsKKworICAgIFVTdHJpbmcgYXJn
MFN0cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChhcmcwU3RyaW5nID09
ICJjdXN0b20iICYmICFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKSB7CiAJdXNlQ3VzdG9tRm9ybWF0
ID0gdHJ1ZTsKIAljdXN0b21Gb3JtYXRTdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsK
LSAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRlICYmIGluY2x1ZGVUaW1lICYmIChhcmdDb3VudCA+
PSAyKSkgewotCWFyZzFTdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsKLQlkYXRlU3R5
bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZyxkYXRlU3R5bGUpOwotCXRpbWVTdHls
ZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcxU3RyaW5nLHRpbWVTdHlsZSk7Ci0gICAgfSBlbHNl
IGlmIChpbmNsdWRlRGF0ZSAmJiAoYXJnQ291bnQgPj0gMSkpIHsKLQlkYXRlU3R5bGUgPSBzdHls
ZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZyxkYXRlU3R5bGUpOwotICAgIH0gZWxzZSBpZiAoaW5j
bHVkZVRpbWUgJiYgKGFyZ0NvdW50ID49IDEpKSB7Ci0JdGltZVN0eWxlID0gc3R5bGVGcm9tQXJn
U3RyaW5nKGFyZzBTdHJpbmcsdGltZVN0eWxlKTsKKyAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRl
ICYmIGluY2x1ZGVUaW1lICYmICFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKSB7CisJZGF0ZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIGRhdGVTdHlsZSk7CisJdGltZVN0eWxl
ID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLCB0aW1lU3R5bGUp
OworICAgIH0gZWxzZSBpZiAoaW5jbHVkZURhdGUgJiYgIWFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkp
IHsKKwlkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZywgZGF0ZVN0eWxl
KTsKKyAgICB9IGVsc2UgaWYgKGluY2x1ZGVUaW1lICYmICFhcmdzWzBdLT5pc1VuZGVmaW5lZCgp
KSB7CisJdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5nKGFyZzBTdHJpbmcsIHRpbWVTdHls
ZSk7CiAgICAgfQorCisgICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVu
dCgpOwogICAgIENGRGF0ZUZvcm1hdHRlclJlZiBmb3JtYXR0ZXIgPSBDRkRhdGVGb3JtYXR0ZXJD
cmVhdGUoTlVMTCwgbG9jYWxlLCBkYXRlU3R5bGUsIHRpbWVTdHlsZSk7CisgICAgQ0ZSZWxlYXNl
KGxvY2FsZSk7CisKICAgICBpZiAodXNlQ3VzdG9tRm9ybWF0KSB7Ci0JQ0ZTdHJpbmdSZWYJY3Vz
dG9tRm9ybWF0Q0ZTdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsKFVu
aUNoYXIqKWN1c3RvbUZvcm1hdFN0cmluZy5kYXRhKCksY3VzdG9tRm9ybWF0U3RyaW5nLnNpemUo
KSk7Ci0JQ0ZEYXRlRm9ybWF0dGVyU2V0Rm9ybWF0KGZvcm1hdHRlcixjdXN0b21Gb3JtYXRDRlN0
cmluZyk7CisJQ0ZTdHJpbmdSZWYgY3VzdG9tRm9ybWF0Q0ZTdHJpbmcgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChVbmlDaGFyICopY3VzdG9tRm9ybWF0U3RyaW5nLmRhdGEo
KSwgY3VzdG9tRm9ybWF0U3RyaW5nLnNpemUoKSk7CisJQ0ZEYXRlRm9ybWF0dGVyU2V0Rm9ybWF0
KGZvcm1hdHRlciwgY3VzdG9tRm9ybWF0Q0ZTdHJpbmcpOwogCUNGUmVsZWFzZShjdXN0b21Gb3Jt
YXRDRlN0cmluZyk7CiAgICAgfQorCiAgICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZEYXRlRm9y
bWF0dGVyQ3JlYXRlU3RyaW5nV2l0aEFic29sdXRlVGltZShOVUxMLCBmb3JtYXR0ZXIsIHRpbWUg
LSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCk7CisKKyAgICBDRlJlbGVhc2UoZm9y
bWF0dGVyKTsKKwogICAgIC8vIFdlIHRydW5jYXRlIHRoZSBzdHJpbmcgcmV0dXJuZWQgZnJvbSBD
RkRhdGVGb3JtYXR0ZXIgaWYgaXQncyBhYnN1cmRseSBsb25nICg+IDIwMCBjaGFyYWN0ZXJzKS4K
ICAgICAvLyBUaGF0J3Mgbm90IGdyZWF0IGVycm9yIGhhbmRsaW5nLCBidXQgaXQganVzdCB3b24n
dCBoYXBwZW4gc28gaXQgZG9lc24ndCBtYXR0ZXIuCiAgICAgVUNoYXIgYnVmZmVyWzIwMF07CkBA
IC0yODIsMTcgKzE0NiwxNSBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEtKUzo6
RXhlCiAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywgQ0ZSYW5nZU1ha2UoMCwgbGVu
Z3RoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyICo+KGJ1ZmZlcikpOwogCiAgICAgQ0ZSZWxl
YXNlKHN0cmluZyk7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdHRlcik7Ci0gICAgQ0ZSZWxlYXNlKGxv
Y2FsZSk7Ci0gICAgCisKICAgICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCk7CiB9CiAK
LSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCisjZW5kaWYgLy8gX19BUFBMRV9fCiAKIG5hbWVzcGFj
ZSBLSlMgewogCi1zdGF0aWMgVVN0cmluZyBmb3JtYXREYXRlKHN0cnVjdCB0bSAmdG0pCitzdGF0
aWMgVVN0cmluZyBmb3JtYXREYXRlKGNvbnN0IHN0cnVjdCB0bSAmdG0pCiB7CiAgICAgY2hhciBi
dWZmZXJbMTAwXTsKICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMgJXMg
JTAyZCAlMDRkIiwKQEAgLTMwMSw3ICsxNjMsNyBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXREYXRl
KHN0cnVjdCB0bSAmdG0pCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RhdGljIFVTdHJpbmcg
Zm9ybWF0RGF0ZVVUQ1ZhcmlhbnQoc3RydWN0IHRtICZ0bSkKK3N0YXRpYyBVU3RyaW5nIGZvcm1h
dERhdGVVVENWYXJpYW50KGNvbnN0IHN0cnVjdCB0bSAmdG0pCiB7CiAgICAgY2hhciBidWZmZXJb
MTAwXTsKICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMsICUwMmQgJXMg
JTA0ZCIsCkBAIC0zMTAsNyArMTcyLDcgQEAgc3RhdGljIFVTdHJpbmcgZm9ybWF0RGF0ZVVUQ1Zh
cmlhbnQoc3RydQogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXN0YXRpYyBVU3RyaW5nIGZvcm1h
dFRpbWUoc3RydWN0IHRtICZ0bSkKK3N0YXRpYyBVU3RyaW5nIGZvcm1hdFRpbWUoY29uc3Qgc3Ry
dWN0IHRtICZ0bSkKIHsKICAgICBjaGFyIGJ1ZmZlclsxMDBdOwogICAgIGlmICh0bS50bV9nbXRv
ZmYgPT0gMCkgewpAQCAtNTgzLDEyICs0NDUsMTMgQEAgVmFsdWVJbXAgKkRhdGVQcm90b0Z1bmNJ
bXA6OmNhbGxBc0Z1bmN0aQogCiAgIFZhbHVlSW1wICpyZXN1bHQgPSBOVUxMOwogICBVU3RyaW5n
IHM7Ci0jaWYgIWRlZmluZWQoQVBQTEVfQ0hBTkdFUykgfHwgIUFQUExFX0NIQU5HRVMKKyNpZiAh
X19BUFBMRV9fCiAgIGNvbnN0IGludCBidWZzaXplPTEwMDsKICAgY2hhciB0aW1lYnVmZmVyW2J1
ZnNpemVdOwogICBDU3RyaW5nIG9sZGxvY2FsZSA9IHNldGxvY2FsZShMQ19USU1FLE5VTEwpOwog
ICBpZiAoIW9sZGxvY2FsZS5jX3N0cigpKQogICAgIG9sZGxvY2FsZSA9IHNldGxvY2FsZShMQ19B
TEwsIE5VTEwpOworICAvLyBGSVhNRTogV2hlcmUncyB0aGUgY29kZSB0byBzZXQgdGhlIGxvY2Fs
ZSBiYWNrIHRvIG9sZGxvY2FsZT8KICNlbmRpZgogICBWYWx1ZUltcCAqdiA9IHRoaXNPYmotPmlu
dGVybmFsVmFsdWUoKTsKICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC02
MzcsMTggKzUwMCwxOCBAQCBWYWx1ZUltcCAqRGF0ZVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3Rp
CiAgIHRpbWVfdCB0diA9ICh0aW1lX3QpIGZsb29yKG1pbGxpIC8gMTAwMC4wKTsKICAgZG91Ymxl
IG1zID0gbWlsbGkgLSB0diAqIDEwMDAuMDsKIAotICAvLyBGSVhNRTogbm90IHRocmVhZHNhZmUg
KGVpdGhlciBvZiB0aGVzZSBvcHRpb25zKQotICBzdHJ1Y3QgdG0gKnQgPSB1dGMgPyBnbXRpbWUo
JnR2KSA6IGxvY2FsdGltZSgmdHYpOworICBzdHJ1Y3QgdG0gdDsKKyAgdXRjID8gZ210aW1lX3Io
JnR2LCAmdHMpIDogbG9jYWx0aW1lX3IoJnR2LCAmdHMpOwogICAvLyB3ZSBoYWQgYW4gb3V0IG9m
IHJhbmdlIHllYXIuIHVzZSB0aGF0IG9uZSAocGx1cy9taW51cyBvZmZzZXQKICAgLy8gZm91bmQg
YnkgY2FsY3VsYXRpbmcgdG1feWVhcikgYW5kIGZpeCB0aGUgd2VlayBkYXkgY2FsY3VsYXRpb24K
ICAgaWYgKHJlYWxZZWFyT2Zmc2V0ICE9IDApIHsKLSAgICB0LT50bV95ZWFyICs9IHJlYWxZZWFy
T2Zmc2V0OworICAgIHQudG1feWVhciArPSByZWFsWWVhck9mZnNldDsKICAgICBtaWxsaSAtPSBt
aWxsaU9mZnNldDsKICAgICAvLyBvdXIgb3duIHdlZWtkYXkgY2FsY3VsYXRpb24uIGJld2FyZSBv
ZiBuZWVkIGZvciBsb2NhbCB0aW1lLgogICAgIGRvdWJsZSBtID0gbWlsbGk7CiAgICAgaWYgKCF1
dGMpCiAgICAgICBtIC09IHRpbWVab25lT2Zmc2V0KHQpICogbXNQZXJNaW51dGU7Ci0gICAgdC0+
dG1fd2RheSA9IHdlZWtEYXkobSk7CisgICAgdC50bV93ZGF5ID0gd2Vla0RheShtKTsKICAgfQog
IAogICBzd2l0Y2ggKGlkKSB7CkBAIC02NjUsNyArNTI4LDcgQEAgVmFsdWVJbXAgKkRhdGVQcm90
b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aQogICBjYXNlIFRvVVRDU3RyaW5nOgogICAgIHJlc3VsdCA9
IFN0cmluZyhmb3JtYXREYXRlVVRDVmFyaWFudCgqdCkgKyAiICIgKyBmb3JtYXRUaW1lKCp0KSk7
CiAgICAgYnJlYWs7Ci0jaWYgQVBQTEVfQ0hBTkdFUworI2lmIF9fQVBQTEVfXwogICBjYXNlIFRv
TG9jYWxlU3RyaW5nOgogICAgIHJlc3VsdCA9IFN0cmluZyhmb3JtYXRMb2NhbGVEYXRlKGV4ZWMs
IHNlY3MsIHRydWUsIHRydWUsIGFyZ3MpKTsKICAgICBicmVhazsKQEAgLTY5OCwzMCArNTYxLDMw
IEBAIFZhbHVlSW1wICpEYXRlUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdGkKICAgY2FzZSBHZXRZ
ZWFyOgogICAgIC8vIElFIHJldHVybnMgdGhlIGZ1bGwgeWVhciBldmVuIGluIGdldFllYXIuCiAg
ICAgaWYgKCBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Y29tcGF0TW9kZSgpID09IEludGVy
cHJldGVyOjpJRUNvbXBhdCApCi0gICAgICByZXN1bHQgPSBOdW1iZXIoMTkwMCArIHQtPnRtX3ll
YXIpOworICAgICAgcmVzdWx0ID0gTnVtYmVyKDE5MDAgKyB0LnRtX3llYXIpOwogICAgIGVsc2UK
LSAgICAgIHJlc3VsdCA9IE51bWJlcih0LT50bV95ZWFyKTsKKyAgICAgIHJlc3VsdCA9IE51bWJl
cih0LnRtX3llYXIpOwogICAgIGJyZWFrOwogICBjYXNlIEdldEZ1bGxZZWFyOgotICAgIHJlc3Vs
dCA9IE51bWJlcigxOTAwICsgdC0+dG1feWVhcik7CisgICAgcmVzdWx0ID0gTnVtYmVyKDE5MDAg
KyB0LnRtX3llYXIpOwogICAgIGJyZWFrOwogICBjYXNlIEdldE1vbnRoOgotICAgIHJlc3VsdCA9
IE51bWJlcih0LT50bV9tb24pOworICAgIHJlc3VsdCA9IE51bWJlcih0LnRtX21vbik7CiAgICAg
YnJlYWs7CiAgIGNhc2UgR2V0RGF0ZToKLSAgICByZXN1bHQgPSBOdW1iZXIodC0+dG1fbWRheSk7
CisgICAgcmVzdWx0ID0gTnVtYmVyKHQudG1fbWRheSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgR2V0
RGF5OgotICAgIHJlc3VsdCA9IE51bWJlcih0LT50bV93ZGF5KTsKKyAgICByZXN1bHQgPSBOdW1i
ZXIodC50bV93ZGF5KTsKICAgICBicmVhazsKICAgY2FzZSBHZXRIb3VyczoKLSAgICByZXN1bHQg
PSBOdW1iZXIodC0+dG1faG91cik7CisgICAgcmVzdWx0ID0gTnVtYmVyKHQudG1faG91cik7CiAg
ICAgYnJlYWs7CiAgIGNhc2UgR2V0TWludXRlczoKLSAgICByZXN1bHQgPSBOdW1iZXIodC0+dG1f
bWluKTsKKyAgICByZXN1bHQgPSBOdW1iZXIodC50bV9taW4pOwogICAgIGJyZWFrOwogICBjYXNl
IEdldFNlY29uZHM6Ci0gICAgcmVzdWx0ID0gTnVtYmVyKHQtPnRtX3NlYyk7CisgICAgcmVzdWx0
ID0gTnVtYmVyKHQudG1fc2VjKTsKICAgICBicmVhazsKICAgY2FzZSBHZXRNaWxsaVNlY29uZHM6
CiAgICAgcmVzdWx0ID0gTnVtYmVyKG1zKTsKQEAgLTczNyw3ICs2MDAsNyBAQCBWYWx1ZUltcCAq
RGF0ZVByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3RpCiAgICAgcmVzdWx0ID0gTnVtYmVyKCggdGlt
ZXpvbmUgLyA2MCAtICggZGF5bGlnaHQgPyA2MCA6IDAgKSkpOwogIyAgZW5kaWYKICNlbHNlCi0g
ICAgcmVzdWx0ID0gTnVtYmVyKC10LT50bV9nbXRvZmYgLyA2MCk7CisgICAgcmVzdWx0ID0gTnVt
YmVyKC10LnRtX2dtdG9mZiAvIDYwKTsKICNlbmRpZgogICAgIGJyZWFrOwogICBjYXNlIFNldFRp
bWU6CkBAIC03NjcsNyArNjMwLDcgQEAgVmFsdWVJbXAgKkRhdGVQcm90b0Z1bmNJbXA6OmNhbGxB
c0Z1bmN0aQogICAgIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBhcmdzLCAzLCAm
bXMsIHQpOwogICAgIGJyZWFrOwogICBjYXNlIFNldFllYXI6Ci0gICAgdC0+dG1feWVhciA9IGFy
Z3NbMF0tPnRvSW50MzIoZXhlYykgPj0gMTkwMCA/IGFyZ3NbMF0tPnRvSW50MzIoZXhlYykgLSAx
OTAwIDogYXJnc1swXS0+dG9JbnQzMihleGVjKTsKKyAgICB0LnRtX3llYXIgPSBhcmdzWzBdLT50
b0ludDMyKGV4ZWMpID49IDE5MDAgPyBhcmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMCA6IGFy
Z3NbMF0tPnRvSW50MzIoZXhlYyk7CiAgICAgYnJlYWs7CiAgIH0KIApAQCAtODc4LDggKzc0MSw4
IEBAIGJvb2wgRGF0ZU9iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBjb24KIFZhbHVlSW1wICpE
YXRlT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKiAvKmV4ZWMqLywgT2JqZWN0
SW1wICogLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJi8qYXJncyovKQogewogICB0aW1lX3QgdCA9
IHRpbWUoMEwpOwotICAvLyBGSVhNRTogbm90IHRocmVhZHNhZmUKLSAgc3RydWN0IHRtICp0bSA9
IGxvY2FsdGltZSgmdCk7CisgIHN0cnVjdCB0bSB0czsKKyAgc3RydWN0IHRtICp0bSA9IGxvY2Fs
dGltZV9yKCZ0LCAmdHMpOwogICByZXR1cm4gU3RyaW5nKGZvcm1hdERhdGUoKnRtKSArICIgIiAr
IGZvcm1hdFRpbWUoKnRtKSk7CiB9CiAKQEAgLTkzOSw3ICs4MDIsNyBAQCBkb3VibGUgcGFyc2VE
YXRlKGNvbnN0IFVTdHJpbmcgJnUpCiAjZW5kaWYKICAgZG91YmxlIC8qdGltZV90Ki8gc2Vjb25k
cyA9IEtSRkNEYXRlX3BhcnNlRGF0ZSggdSApOwogCi0gIHJldHVybiBzZWNvbmRzID09IGludmFs
aWREYXRlID8gTmFOIDogc2Vjb25kcyAqIDEwMDAuMDsKKyAgcmV0dXJuIHNlY29uZHMgKiAxMDAw
LjA7CiB9CiAKIC8vLy8vIEF3ZnVsIGR1cGxpY2F0aW9uIGZyb20ga3JmY2RhdGUuY3BwIC0gd2Ug
ZG9uJ3QgbGluayB0byBrZGVjb3JlCkBAIC0xMDA3LDEzICs4NzAsNiBAQCBkb3VibGUgbWFrZVRp
bWUoc3RydWN0IHRtICp0LCBkb3VibGUgbXMsCiAgICAgICAgIHQtPnRtX2lzZHN0ID0gLTE7CiAg
ICAgfQogCi0jaWZkZWYgX19BUFBMRV9fCi0gICAgLy8gdC0+dG1feWVhciBtdXN0IGhvbGQgdGhl
IGJ1bGsgb2YgdGhlIGRhdGEgdG8gYXZvaWQgb3ZlcmZsb3cgd2hlbiBjb252ZXJ0aW5nCi0gICAg
Ly8gdG8gYSBDRkdyZWdvcmlhbkRhdGUuIChDRkdyZWdvcmlhbkRhdGUubW9udGggaXMgYW4gU0lu
dDg7IENGR3JlZ29yaWFuRGF0ZS55ZWFyIGlzIGFuIFNJbnQzMi4pCi0gICAgdC0+dG1feWVhciAr
PSB0LT50bV9tb24gLyAxMjsKLSAgICB0LT50bV9tb24gJT0gMTI7Ci0jZW5kaWYgICAgCi0KICAg
ICBkb3VibGUgeWVhck9mZnNldCA9IDAuMDsKICAgICBpZiAodC0+dG1feWVhciA8ICgxOTcwIC0g
MTkwMCkgfHwgdC0+dG1feWVhciA+ICgyMDM4IC0gMTkwMCkpIHsKICAgICAgIC8vIHdlJ2xsIGZv
b2wgbWt0aW1lKCkgaW50byBiZWxpZXZpbmcgdGhhdCB0aGlzIHllYXIgaXMgd2l0aGluCkBAIC0x
MTIzLDM5ICs5NzksMzkgQEAgZG91YmxlIEtSRkNEYXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5n
IAogICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7CiAKICAgICAgaWYgKCEq
ZGF0ZVN0cmluZykKLSAgICAgCXJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgCXJldHVybiBOYU47
CiAKICAgICAgLy8gJyAwOS1Ob3YtOTkgMjM6MTI6NDAgR01UJwogICAgICBlcnJubyA9IDA7CiAg
ICAgIGRheSA9IHN0cnRvbChkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgIGlmIChl
cnJubykKLSAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgcmV0dXJuIE5hTjsKICAg
ICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKIAogICAgICBpZiAoISpkYXRlU3RyaW5nKQotICAg
ICAJcmV0dXJuIGludmFsaWREYXRlOworICAgICAJcmV0dXJuIE5hTjsKIAogICAgICBpZiAoZGF5
IDwgMSkKLSAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgcmV0dXJuIE5hTjsKICAg
ICAgaWYgKGRheSA+IDMxKSB7CiAgICAgICAgLy8gIyMjIHdoZXJlIGlzIHRoZSBib3VuZGFyeSBh
bmQgd2hhdCBoYXBwZW5zIGJlbG93PwogICAgICAgIGlmICgqZGF0ZVN0cmluZyA9PSAnLycgJiYg
ZGF5ID49IDEwMDApIHsKICAgICAgICAgIC8vIGxvb2tzIGxpa2UgYSBZWVlZL01NL0REIGRhdGUK
ICAgICAgICAgIGlmICghKisrZGF0ZVN0cmluZykKLSAgICAgICAgICAgcmV0dXJuIGludmFsaWRE
YXRlOworICAgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgICAgeWVhciA9IGRheTsKICAgICAg
ICAgIG1vbnRoID0gc3RydG9sKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwKSAtIDE7CiAgICAg
ICAgICBpZiAoZXJybm8pCi0gICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAg
ICAgcmV0dXJuIE5hTjsKICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAg
ICBpZiAoKmRhdGVTdHJpbmcrKyAhPSAnLycgfHwgISpkYXRlU3RyaW5nKQotICAgICAgICAgICBy
ZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgIHJldHVybiBOYU47CiAgICAgICAgICBkYXkg
PSBzdHJ0b2woZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTApOwogICAgICAgICAgaWYgKGVycm5v
KQotICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgIHJldHVybiBOYU47
CiAgICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwogICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgIH0K
ICAgICAgfSBlbHNlIGlmICgqZGF0ZVN0cmluZyA9PSAnLycgJiYgZGF5IDw9IDEyICYmIG1vbnRo
ID09IC0xKSB7CiAgICAgIAlkYXRlU3RyaW5nKys7CkBAIC0xMTYzLDEyICsxMDE5LDEyIEBAIGRv
dWJsZSBLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAgICAgICAgbW9udGggPSBk
YXkgLSAxOyAvLyAwLWJhc2VkCiAgICAgICAgIGRheSA9IHN0cnRvbChkYXRlU3RyaW5nLCAmbmV3
UG9zU3RyLCAxMCk7CiAgICAgICAgIGlmIChlcnJubykKLSAgICAgICAgICByZXR1cm4gaW52YWxp
ZERhdGU7CisgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bv
c1N0cjsKICAgICAgICAgaWYgKCpkYXRlU3RyaW5nID09ICcvJykKICAgICAgICAgICBkYXRlU3Ry
aW5nKys7CiAgICAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAgICAgICAgcmV0dXJuIGludmFs
aWREYXRlOworICAgICAgICAgIHJldHVybiBOYU47CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7
CkBAIC0xMTg0LDI5ICsxMDQwLDI5IEBAIGRvdWJsZSBLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3Qg
VVN0cmluZyAKICAgICAgICB7CiAgICAgICAgICBtb250aCA9IGZpbmRNb250aChkYXRlU3RyaW5n
KTsKICAgICAgICAgIGlmIChtb250aCA9PSAtMSkKLSAgICAgICAgICAgcmV0dXJuIGludmFsaWRE
YXRlOworICAgICAgICAgICByZXR1cm4gTmFOOwogCiAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJp
bmcgJiYgKCpkYXRlU3RyaW5nICE9ICctJykgJiYgIWlzc3BhY2UoKmRhdGVTdHJpbmcpKQogICAg
ICAgICAgICBkYXRlU3RyaW5nKys7CiAKICAgICAgICAgIGlmICghKmRhdGVTdHJpbmcpCi0gICAg
ICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgcmV0dXJuIE5hTjsKIAogICAg
ICAgICAgLy8gJy05OSAyMzoxMjo0MCBHTVQnCiAgICAgICAgICBpZiAoKCpkYXRlU3RyaW5nICE9
ICctJykgJiYgKCpkYXRlU3RyaW5nICE9ICcvJykgJiYgIWlzc3BhY2UoKmRhdGVTdHJpbmcpKQot
ICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgIHJldHVybiBOYU47CiAg
ICAgICAgICBkYXRlU3RyaW5nKys7CiAgICAgICAgfQogCiAgICAgICAgaWYgKChtb250aCA8IDAp
IHx8IChtb250aCA+IDExKSkKLSAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAg
IHJldHVybiBOYU47CiAgICAgIH0KIAogICAgICAvLyAnOTkgMjM6MTI6NDAgR01UJwogICAgICBp
ZiAoeWVhciA8PSAwICYmICpkYXRlU3RyaW5nKSB7CiAgICAgICAgeWVhciA9IHN0cnRvbChkYXRl
U3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgICAgaWYgKGVycm5vKQotICAgICAgICAgcmV0
dXJuIGludmFsaWREYXRlOworICAgICAgICAgcmV0dXJuIE5hTjsKICAgICB9CiAgICAgCiAgICAg
IC8vIERvbid0IGZhaWwgaWYgdGhlIHRpbWUgaXMgbWlzc2luZy4KQEAgLTEyMTcsNyArMTA3Myw3
IEBAIGRvdWJsZSBLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAgICAgICAgICAg
aWYgKCAqbmV3UG9zU3RyID09ICc6JyApIC8vIEFoLCBzbyB0aGVyZSB3YXMgbm8geWVhciwgYnV0
IHRoZSBudW1iZXIgd2FzIHRoZSBob3VyCiAgICAgICAgICAgICAgICB5ZWFyID0gLTE7CiAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAg
ICAgICAgIHJldHVybiBOYU47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBpbiB0
aGUgbm9ybWFsIGNhc2UgKHdlIHBhcnNlZCB0aGUgeWVhciksIGFkdmFuY2UgdG8gdGhlIG5leHQg
bnVtYmVyCiAgICAgICAgICAgICBkYXRlU3RyaW5nID0gKytuZXdQb3NTdHI7CkBAIC0xMjM1LDI2
ICsxMDkxLDI2IEBAIGRvdWJsZSBLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAg
ICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwogCiAgICAgICAgICAgaWYgKChob3VyIDwg
MCkgfHwgKGhvdXIgPiAyMykpCi0gICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAg
ICAgICAgICByZXR1cm4gTmFOOwogCiAgICAgICAgICAgaWYgKCEqZGF0ZVN0cmluZykKLSAgICAg
ICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAg
ICAgICAgICAvLyAnOjEyOjQwIEdNVCcKICAgICAgICAgICBpZiAoKmRhdGVTdHJpbmcrKyAhPSAn
OicpCi0gICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgICByZXR1cm4g
TmFOOwogCiAgICAgICAgICAgbWludXRlID0gc3RydG9sKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIs
IDEwKTsKICAgICAgICAgICBpZiAoZXJybm8pCi0gICAgICAgICAgICByZXR1cm4gaW52YWxpZERh
dGU7CisgICAgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQ
b3NTdHI7CiAKICAgICAgICAgICBpZiAoKG1pbnV0ZSA8IDApIHx8IChtaW51dGUgPiA1OSkpCi0g
ICAgICAgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgICByZXR1cm4gTmFOOwog
CiAgICAgICAgICAgLy8gJzo0MCBHTVQnCiAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nICYmICpk
YXRlU3RyaW5nICE9ICc6JyAmJiAhaXNzcGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAgICBy
ZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICAgICByZXR1cm4gTmFOOwogCiAgICAgICAgICAg
Ly8gc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gcmZjODIyICsgcmZjMjgyMgogICAgICAgICAgIGlm
ICgqZGF0ZVN0cmluZyA9PSc6JykgewpAQCAtMTI2MiwyNSArMTExOCwyNSBAQCBkb3VibGUgS1JG
Q0RhdGVfcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgCiAKICAgICAgICAgICAgIHNlY29uZCA9IHN0
cnRvbChkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgICAgICAgICBpZiAoZXJybm8p
Ci0gICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgICAgcmV0dXJu
IE5hTjsKICAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICgoc2Vjb25kIDwgMCkgfHwgKHNlY29uZCA+IDU5KSkKLSAgICAgICAg
ICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgICAgICByZXR1cm4gTmFOOwogICAg
ICAgICAgIH0KIAogICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsK
IAogCSAgaWYgKHN0cm5jYXNlY21wKGRhdGVTdHJpbmcsICJBTSIsIDIpID09IDApIHsKIAkgICAg
aWYgKGhvdXIgPiAxMikKLQkgICAgICByZXR1cm4gaW52YWxpZERhdGU7CisJICAgICAgcmV0dXJu
IE5hTjsKIAkgICAgaWYgKGhvdXIgPT0gMTIpCiAJICAgICAgaG91ciA9IDA7CiAJICAgIGRhdGVT
dHJpbmcgKz0gMjsKICAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5n
KTsKIAkgIH0gZWxzZSBpZiAoc3RybmNhc2VjbXAoZGF0ZVN0cmluZywgIlBNIiwgMikgPT0gMCkg
ewogCSAgICBpZiAoaG91ciA+IDEyKQotCSAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKwkgICAg
ICByZXR1cm4gTmFOOwogCSAgICBpZiAoaG91ciAhPSAxMikKIAkgICAgICBob3VyICs9IDEyOwog
CSAgICBkYXRlU3RyaW5nICs9IDI7CkBAIC0xMzA4LDE4ICsxMTY0LDE4IEBAIGRvdWJsZSBLUkZD
RGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0cmluZyAKICAgICAgICBpZiAoKCpkYXRlU3RyaW5nID09
ICcrJykgfHwgKCpkYXRlU3RyaW5nID09ICctJykpIHsKICAgICAgICAgIG9mZnNldCA9IHN0cnRv
bChkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCk7CiAgICAgICAgICBpZiAoZXJybm8pCi0gICAg
ICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICAgICAgcmV0dXJuIE5hTjsKICAgICAg
ICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAKICAgICAgICAgIGlmICgob2Zmc2V0IDwgLTk5
NTkpIHx8IChvZmZzZXQgPiA5OTU5KSkKLSAgICAgICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZTsK
KyAgICAgICAgICAgIHJldHVybiBOYU47CiAKICAgICAgICAgIGludCBzZ24gPSAob2Zmc2V0IDwg
MCk/IC0xOjE7CiAgICAgICAgICBvZmZzZXQgPSBhYnMob2Zmc2V0KTsKICAgICAgICAgIGlmICgg
KmRhdGVTdHJpbmcgPT0gJzonICkgeyAvLyBHTVQrMDU6MDAKICAgICAgICAgICAgaW50IG9mZnNl
dDIgPSBzdHJ0b2woZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTApOwogICAgICAgICAgICBpZiAo
ZXJybm8pCi0gICAgICAgICAgICAgcmV0dXJuIGludmFsaWREYXRlOworICAgICAgICAgICAgIHJl
dHVybiBOYU47CiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgICAgICAg
IG9mZnNldCA9IChvZmZzZXQqNjAgKyBvZmZzZXQyKSpzZ247CiAgICAgICAgICB9CkBAIC0xMzQz
LDcgKzExOTksNyBAQCBkb3VibGUgS1JGQ0RhdGVfcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgCiAg
ICAgIGlmICggKmRhdGVTdHJpbmcgJiYgeWVhciA9PSAtMSApIHsKICAgICAgICB5ZWFyID0gc3Ry
dG9sKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwKTsKICAgICAgICBpZiAoZXJybm8pCi0gICAg
ICAgICByZXR1cm4gaW52YWxpZERhdGU7CisgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgIGRh
dGVTdHJpbmcgPSBuZXdQb3NTdHI7CiAgICAgIH0KICAgICAgCkBAIC0xMzUxLDcgKzEyMDcsNyBA
QCBkb3VibGUgS1JGQ0RhdGVfcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgCiAgICAgIAogICAgICAv
LyBUcmFpbGluZyBnYXJiYWdlCiAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnXDAnKQotICAgICAg
IHJldHVybiBpbnZhbGlkRGF0ZTsKKyAgICAgICByZXR1cm4gTmFOOwogCiAgICAgIC8vIFkySzog
U29sdmUgMiBkaWdpdCB5ZWFycwogICAgICBpZiAoKHllYXIgPj0gMCkgJiYgKHllYXIgPCA1MCkp
Cg==
</data>
<flag name="review"
          id="703"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>