<?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>131248</bug_id>
          
          <creation_ts>2014-04-04 16:16:52 -0700</creation_ts>
          <short_desc>Date object needs to check for ES5 15.9.1.14 TimeClip limit</short_desc>
          <delta_ts>2014-08-07 14:34:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gary</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>997737</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 16:16:52 -0700</bug_when>
    <thetext>The current Date object code does not adequately checks for the ES5 15.9.1.14 TimeClip limit.  As a result, some calculations can underflow / overflow and produce unexpected results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997758</commentid>
    <comment_count>1</comment_count>
      <attachid>228635</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 17:17:23 -0700</bug_when>
    <thetext>Created attachment 228635
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997760</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 17:19:02 -0700</bug_when>
    <thetext>FYI, the spec for ES5 15.9.1.14 can be viewed here: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.14.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997761</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 17:20:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/16513974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997762</commentid>
    <comment_count>4</comment_count>
      <attachid>228635</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-04 17:31:55 -0700</bug_when>
    <thetext>Comment on attachment 228635
the patch.

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        The current Date object code does not adequately checks for the ES5

adequately check

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        For example, we were getting an assertion failures in

failure

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        The changes has no noticeable impact on benchmark results.

have

&gt; LayoutTests/js/script-tests/regress-131248.js:2
&gt; +&quot;This tests checks date values at the limits set by the ES5 15.9.1.14 TimeClip specification and ensures that we don&apos;t crash on any assertions.&quot;

This test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997767</commentid>
    <comment_count>5</comment_count>
      <attachid>228638</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 17:41:07 -0700</bug_when>
    <thetext>Created attachment 228638
patch 2: addressed MarkH&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997768</commentid>
    <comment_count>6</comment_count>
      <attachid>228638</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-04 17:43:51 -0700</bug_when>
    <thetext>Comment on attachment 228638
patch 2: addressed MarkH&apos;s feedback.

I&apos;m not an expert on the Date code, so I&apos;m not sure what I should be looking for in this review. Why did you put ASSERTs in the places you did? Why did you choose to return NaN in some places? Why did you call timeClip (which looks like it already existed) where you did? I&apos;m not saying you&apos;re wrong, I just don&apos;t know what methodology you used to get here :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997769</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-04 17:44:49 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 228638 [details])
&gt; I&apos;m not an expert on the Date code, so I&apos;m not sure what I should be looking for in this review. Why did you put ASSERTs in the places you did? Why did you choose to return NaN in some places? Why did you call timeClip (which looks like it already existed) where you did? I&apos;m not saying you&apos;re wrong, I just don&apos;t know what methodology you used to get here :-)

I guess a better way to ask this question is: how do we know that we&apos;ve covered all our bases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997773</commentid>
    <comment_count>8</comment_count>
      <attachid>228638</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-04 18:04:19 -0700</bug_when>
    <thetext>Comment on attachment 228638
patch 2: addressed MarkH&apos;s feedback.

Okay, so the answer is that we&apos;re not 100% sure that we&apos;ll do the right thing always, but the test covers this particular bug. You should file a bug for us to revisit this with a more comprehensive solution that probably involves leveraging the type system in a creative way to make these sorts of bugs even less likely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997774</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-04 18:05:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 228638 [details] [details])
&gt; &gt; I&apos;m not an expert on the Date code, so I&apos;m not sure what I should be looking for in this review. Why did you put ASSERTs in the places you did? Why did you choose to return NaN in some places? Why did you call timeClip (which looks like it already existed) where you did? I&apos;m not saying you&apos;re wrong, I just don&apos;t know what methodology you used to get here :-)
&gt; 
&gt; I guess a better way to ask this question is: how do we know that we&apos;ve covered all our bases?

Here&apos;s what did do so far:
1. I looked thru JSDateMath.cpp and analyzed all the code paths that uses the milliseconds time value.  Based on that I added checked where I saw a need.
2. I added assertions in WTF::DateMath and at other relevant places to ensure that the milliseconds time value is sane where we would expect it to be.  I added checks to places where the assertions revealed an issue.
3. I added some layout tests that specifically exercise milliseconds to Date (and vice versa) with values at the TimeClip limits, and verified that the conversion works as expected in these edge cases.

I do know that this patch has improved the quality of the code bug does not guarantee that we&apos;ve exhaustively fix all possible issues pertaining to 15.9.1.14.  I&apos;ve filed https://bugs.webkit.org/show_bug.cgi?id=131250 for later if we want to do an exhaustive approach of solving this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997784</commentid>
    <comment_count>10</comment_count>
      <attachid>228638</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-04 18:35:59 -0700</bug_when>
    <thetext>Comment on attachment 228638
patch 2: addressed MarkH&apos;s feedback.

Rejecting attachment 228638 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 228638, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
chanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 8] nodename nor servname provided, or not known&gt;

Full output: http://webkit-queues.appspot.com/results/6177313318240256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998190</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-07 11:26:10 -0700</bug_when>
    <thetext>Thanks for the review.  svn up’ed and landed in r166876: &lt;http://trac.webkit.org/r166876&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018413</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-25 14:49:27 -0700</bug_when>
    <thetext>This patch caused a few test262 tests to fail &lt;http://test262.ecmascript.org/&gt;:

15.9.5.43-0-10	Date.prototype.toISOString - RangeError is not thrown when value of date is Date(1970, 0, -99999999, 0, 0, 0, 1), the time zone is UTC(0)	Fail

15.9.5.43-0-9	Date.prototype.toISOString - RangeError is not thrown when value of date is Date(1970, 0, -99999999, 0, 0, 0, 0), the time zone is UTC(0)	Fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018414</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-25 14:52:15 -0700</bug_when>
    <thetext>Reverted r166876 for reason:

Caused some ECMA test262 failures

Committed r170440: &lt;http://trac.webkit.org/changeset/170440&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228635</attachid>
            <date>2014-04-04 17:17:23 -0700</date>
            <delta_ts>2014-04-04 17:41:07 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-131248.patch</filename>
            <type>text/plain</type>
            <size>18017</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2ODE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA0LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBE
YXRlIG9iamVjdCBuZWVkcyB0byBjaGVjayBmb3IgRVM1IDE1LjkuMS4xNCBUaW1lQ2xpcCBsaW1p
dC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTI0OD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3VycmVudCBEYXRlIG9iamVj
dCBjb2RlIGRvZXMgbm90IGFkZXF1YXRlbHkgY2hlY2tzIGZvciB0aGUgRVM1CisgICAgICAgIDE1
LjkuMS4xNCBUaW1lQ2xpcCBsaW1pdC4gIEFzIGEgcmVzdWx0LCBzb21lIGNhbGN1bGF0aW9ucyBj
YW4gdW5kZXJmbG93CisgICAgICAgIC8gb3ZlcmZsb3cgYW5kIHByb2R1Y2UgdW5leHBlY3RlZCBy
ZXN1bHRzLgorCisgICAgICAgIEZvciBleGFtcGxlLCB3ZSB3ZXJlIGdldHRpbmcgYW4gYXNzZXJ0
aW9uIGZhaWx1cmVzIGluCisgICAgICAgIFdURjo6ZXF1aXZhbGVudFllYXJGb3JEU1QoKSBkdWUg
aW50IHVuZGVyZmxvd3MgaW4gdGhpcyBmdW5jdGlvbiwgd2hpY2gKKyAgICAgICAgaW4gdHVybiB3
ZXJlIGR1ZSB0byBhbiBpbnQgb3ZlcmZsb3cgaW4gV1RGOjptc1RvWWVhcigpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWRkcyB0aGUgbmVlZGVkIGNoZWNrcywgYW5kIGFkZHMgc29tZSBhc3NlcnRp
b25zIHRvIGVuc3VyZQorICAgICAgICB0aGF0IHRoZSB1c2VkIHZhbHVlcyBhcmUgc2FuZS4KKwor
ICAgICAgICBUaGUgY2hhbmdlcyBoYXMgbm8gbm90aWNlYWJsZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHJlc3VsdHMuCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNhbGxEYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgor
ICAgICAgICAoSlNDOjpsb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpncmVnb3JpYW5E
YXRlVGltZVRvTVMpOgorICAgICAgICAoSlNDOjptc1RvR3JlZ29yaWFuRGF0ZVRpbWUpOgorICAg
ICAgICAoSlNDOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKEpTQzo6cGFyc2VEYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguaDoKKyAg
ICAgICAgLSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKCkgZG9lcyBub3Qg
bmVlZCB0byBiZSBwdWJsaWMuCisgICAgICAgICAgTWFkZSBpdCBhIHN0YXRpYyBmdW5jdGlvbi4K
KyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnJlc2V0RGF0ZUNh
Y2hlKToKKyAgICAgICAgLSBDaGFuZ2VkIGNhY2hlZERhdGVTdHJpbmdWYWx1ZSB0byB1c2Ugc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKQorICAgICAgICAgIHRvIGJlIGNv
bnNpc3RlbnQgd2l0aCBvdGhlciBEYXRlIGNvZGUuCisKIDIwMTQtMDQtMDQgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBMb2cg
SlMgRXhjZXB0aW9ucyB0byBTeXN0ZW0gQ29uc29sZSBpZiBKYXZhU2NyaXB0Q29yZU91dHB1dENv
bnNvbGVNZXNzYWdlc1RvU3lzdGVtQ29uc29sZSBlbmFibGVkCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE2
Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxMSwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xOTAs
NyArMTkwLDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHRzOwotICAg
IG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2bSwgY3VycmVudFRpbWVNUygpLCBmYWxzZSwgdHMpOwor
CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gdGltZUNsaXAoY3VycmVudFRpbWVNUygpKTsKKyAg
ICBpZiAoc3RkOjppc25hbihjdXJyZW50VGltZSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOYU4oKSk7CisgICAgCisgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKHZtLCBjdXJy
ZW50VGltZSwgZmFsc2UsIHRzKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIGZvcm1hdERhdGVUaW1lKHRzLCBEYXRlVGltZUZvcm1hdERhdGVBbmRU
aW1lLCBmYWxzZSkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRlTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRlTWF0aC5jcHAJKHJldmlzaW9uIDE2Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcsIDIwMTIsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMCAmeWV0LCBMTEMuIChu
YXRlQGFuZHlldC5uZXQpCkBAIC0xMzgsNiArMTM4LDcgQEAgc3RhdGljIExvY2FsVGltZU9mZnNl
dCBsb2NhbFRpbWVPZmZzZXQoVgogICAgIGRvdWJsZSBzdGFydCA9IGNhY2hlLnN0YXJ0OwogICAg
IGRvdWJsZSBlbmQgPSBjYWNoZS5lbmQ7CiAKKyAgICBBU1NFUlQoZmFicyhtcykgPD0gV1RGOjpt
YXhFQ01BU2NyaXB0VGltZSk7CiAgICAgaWYgKHN0YXJ0IDw9IG1zKSB7CiAgICAgICAgIC8vIElm
IHRoZSB0aW1lIGZpdHMgaW4gdGhlIGNhY2hlZCBpbnRlcnZhbCwgcmV0dXJuIHRoZSBjYWNoZWQg
b2Zmc2V0LgogICAgICAgICBpZiAobXMgPD0gZW5kKSByZXR1cm4gY2FjaGUub2Zmc2V0OwpAQCAt
MTQ1LDcgKzE0Niw3IEBAIHN0YXRpYyBMb2NhbFRpbWVPZmZzZXQgbG9jYWxUaW1lT2Zmc2V0KFYK
ICAgICAgICAgLy8gQ29tcHV0ZSBhIHBvc3NpYmxlIG5ldyBpbnRlcnZhbCBlbmQuCiAgICAgICAg
IGRvdWJsZSBuZXdFbmQgPSBlbmQgKyBjYWNoZS5pbmNyZW1lbnQ7CiAKLSAgICAgICAgaWYgKG1z
IDw9IG5ld0VuZCkgeworICAgICAgICBpZiAobXMgPD0gbmV3RW5kICYmIG5ld0VuZCA8PSBXVEY6
Om1heEVDTUFTY3JpcHRUaW1lKSB7CiAgICAgICAgICAgICBMb2NhbFRpbWVPZmZzZXQgZW5kT2Zm
c2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KG5ld0VuZCk7CiAgICAgICAgICAgICBpZiAo
Y2FjaGUub2Zmc2V0ID09IGVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBv
ZmZzZXQgYXQgdGhlIGVuZCBvZiB0aGUgbmV3IGludGVydmFsIHN0aWxsIG1hdGNoZXMKQEAgLTE5
NCwxNSArMTk1LDE5IEBAIGRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoVk0mIHZtLCBjb24K
ICAgICBkb3VibGUgbXMgPSB0aW1lVG9NUyh0LmhvdXIoKSwgdC5taW51dGUoKSwgdC5zZWNvbmQo
KSwgbWlsbGlTZWNvbmRzKTsKICAgICBkb3VibGUgcmVzdWx0ID0gKGRheSAqIFdURjo6bXNQZXJE
YXkpICsgbXM7CiAKKyAgICBpZiAoZmFicyhyZXN1bHQpID4gV1RGOjptYXhFQ01BU2NyaXB0VGlt
ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisKICAgICBpZiAoIWlucHV0SXNVVEMpCiAgICAgICAgIHJlc3VsdCAtPSBsb2NhbFRpbWVP
ZmZzZXQodm0sIHJlc3VsdCkub2Zmc2V0OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gdGltZUNsaXAocmVzdWx0KTsKIH0KIAogLy8gaW5wdXQgaXMgVVRDCiB2b2lkIG1zVG9HcmVn
b3JpYW5EYXRlVGltZShWTSYgdm0sIGRvdWJsZSBtcywgYm9vbCBvdXRwdXRJc1VUQywgR3JlZ29y
aWFuRGF0ZVRpbWUmIHRtKQogeworICAgIEFTU0VSVChmYWJzKG1zKSA8PSBXVEY6Om1heEVDTUFT
Y3JpcHRUaW1lKTsKICAgICBMb2NhbFRpbWVPZmZzZXQgbG9jYWxUaW1lOwogICAgIGlmICghb3V0
cHV0SXNVVEMpIHsKICAgICAgICAgbG9jYWxUaW1lID0gbG9jYWxUaW1lT2Zmc2V0KHZtLCBtcyk7
CkBAIC0yMjIsMTMgKzIyNywxMyBAQCB2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShWTSYgdm0s
IGRvdWJsCiAgICAgdG0uc2V0VXRjT2Zmc2V0KGxvY2FsVGltZS5vZmZzZXQgLyBXVEY6Om1zUGVy
U2Vjb25kKTsKIH0KIAotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3Rl
cnMoVk0mIHZtLCBjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQorc3RhdGljIGRvdWJsZSBwYXJzZURh
dGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKFZNJiB2bSwgY29uc3QgY2hhciogZGF0ZVN0
cmluZykKIHsKICAgICBib29sIGhhdmVUWjsKICAgICBpbnQgb2Zmc2V0OwogICAgIGRvdWJsZSBt
cyA9IFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyaW5n
LCBoYXZlVFosIG9mZnNldCk7Ci0gICAgaWYgKHN0ZDo6aXNuYW4obXMpKQotICAgICAgICByZXR1
cm4gUU5hTjsKKyAgICBpZiAoc3RkOjppc25hbihtcykgfHwgZmFicyhtcykgPiBXVEY6Om1heEVD
TUFTY3JpcHRUaW1lKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKIAogICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0aW1lem9uZQogICAg
IGlmICghaGF2ZVRaKQpAQCAtMjQ0LDYgKzI0OSw3IEBAIGRvdWJsZSBwYXJzZURhdGUoVk0mIHZt
LCBjb25zdCBTdHJpbmcmIGQKICAgICBkb3VibGUgdmFsdWUgPSBwYXJzZUVTNURhdGVGcm9tTnVs
bFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGRhdGUudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKHN0ZDo6
aXNuYW4odmFsdWUpKQogICAgICAgICB2YWx1ZSA9IHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRl
ZENoYXJhY3RlcnModm0sIGRhdGUudXRmOCgpLmRhdGEoKSk7CisgICAgdmFsdWUgPSB0aW1lQ2xp
cCh2YWx1ZSk7CiAgICAgdm0uY2FjaGVkRGF0ZVN0cmluZyA9IGRhdGU7CiAgICAgdm0uY2FjaGVk
RGF0ZVN0cmluZ1ZhbHVlID0gdmFsdWU7CiAgICAgcmV0dXJuIHZhbHVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaAkocmV2aXNpb24gMTY2NzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpA
QCAtNTMsNyArNTMsNiBAQCBjbGFzcyBWTTsKIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKFZN
JiwgZG91YmxlLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYpOwogZG91Ymxl
IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhWTSYsIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lJiwgZG91
YmxlLCBib29sIGlucHV0SXNVVEMpOwogZG91YmxlIGdldFVUQ09mZnNldChWTSYpOwotZG91Ymxl
IHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoVk0mLCBjb25zdCBjaGFyKiBk
YXRlU3RyaW5nKTsKIGRvdWJsZSBwYXJzZURhdGUoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYpOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHJldmlzaW9uIDE2Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQgVk06OnJlc2V0RGF0
ZUNhY2hlKCkKIHsKICAgICBsb2NhbFRpbWVPZmZzZXRDYWNoZS5yZXNldCgpOwogICAgIGNhY2hl
ZERhdGVTdHJpbmcgPSBTdHJpbmcoKTsKLSAgICBjYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBRTmFO
OworICAgIGNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CiAgICAgZGF0ZUluc3RhbmNlQ2FjaGUucmVzZXQoKTsKIH0KIApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE2NjgxNikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDQtMDQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgorCisgICAgICAgIERhdGUgb2JqZWN0IG5lZWRzIHRvIGNoZWNrIGZvciBFUzUgMTUu
OS4xLjE0IFRpbWVDbGlwIGxpbWl0LgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMx
MjQ4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgLSBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiBtYXhF
Q01BU2NyaXB0VGltZSB0byB0aGUgLmggZmlsZSBzbyB0aGF0IHdlCisgICAgICAgICAgY2FuIHVz
ZSBpdCBpbiBvdGhlciBmaWxlcyBhcyB3ZWxsLgorICAgICAgICAoV1RGOjptc1RvWWVhcik6Cisg
ICAgICAgIC0gUmVtb3ZlZCBhIHN0YWxlIGNvbW1lbnQgZm9yIHBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnMoKS4KKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguaDoKKwogMjAxNC0w
NC0wMyAgWnNvbHQgQm9yYmVseSAgPHpzYm9yYmVseS51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcu
Y29tPgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBDU1MgSklUIGFnYWluLCBpdCB3b3JrcyBmaW5l
IGFmdGVyIHIxNjY2NjYuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCShyZXZpc2lvbiAxNjY3NDYpCisr
KyBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwICZ5ZXQsIExMQy4gKG5hdGVAYW5keWV0
Lm5ldCkKQEAgLTEwOSwxMCArMTA5LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAvKiBDb25zdGFudHMg
Ki8KIAogc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhVbml4VGltZSA9IDIxNDU4NTkyMDAuMDsgLy8g
MTIvMzEvMjAzNwotLy8gRUNNQVNjcmlwdCBhc2tzIG5vdCB0byBzdXBwb3J0IGZvciBhIGRhdGUg
b2Ygd2hpY2ggdG90YWwKLS8vIG1pbGxpc2Vjb25kIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBm
b2xsb3dpbmcgdmFsdWUuCi0vLyBTZWUgMTUuOS4xLjE0IG9mIEVDTUEtMjYyIDV0aCBlZGl0aW9u
Lgotc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhFQ01BU2NyaXB0VGltZSA9IDguNjRFMTU7CiAKIC8v
IERheSBvZiB5ZWFyIGZvciB0aGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9udGgsIHdoZXJlIGluZGV4
IDAgaXMgSmFudWFyeSwgYW5kIGRheSAwIGlzIEphbnVhcnkgMS4KIC8vIEZpcnN0IGZvciBub24t
bGVhcCB5ZWFycywgdGhlbiBmb3IgbGVhcCB5ZWFycy4KQEAgLTE4NCw2ICsxODAsNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRUd29EaWdpdE51bWJlcihTdHJpbmdCCiAKIGludCBtc1RvWWVhcihkb3Vi
bGUgbXMpCiB7CisgICAgQVNTRVJUKGZhYnMobXMpIDw9IG1heEVDTUFTY3JpcHRUaW1lKTsKICAg
ICBpbnQgYXBwcm94WWVhciA9IHN0YXRpY19jYXN0PGludD4oZmxvb3IobXMgLyAobXNQZXJEYXkg
KiAzNjUuMjQyNSkpICsgMTk3MCk7CiAgICAgZG91YmxlIG1zRnJvbUFwcHJveFllYXJUbzE5NzAg
PSBtc1BlckRheSAqIGRheXNGcm9tMTk3MFRvWWVhcihhcHByb3hZZWFyKTsKICAgICBpZiAobXNG
cm9tQXBwcm94WWVhclRvMTk3MCA+IG1zKQpAQCAtMzMwLDcgKzMyNyw3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IG1pbmltdW1ZZWFyRm9yRFNUKCkKIH0KIAogLyoKLSAqIEZpbmQgYW4gZXF1aXZhbGVu
dCB5ZWFyIGZvciB0aGUgb25lIGdpdmVuLCB3aGVyZSBlcXVpdmFsZW5jZSBpcyBkZXRlcmluZWQg
YnkKKyAqIEZpbmQgYW4gZXF1aXZhbGVudCB5ZWFyIGZvciB0aGUgb25lIGdpdmVuLCB3aGVyZSBl
cXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5CiAgKiB0aGUgdHdvIHllYXJzIGhhdmluZyB0aGUg
c2FtZSBsZWFwbmVzcyBhbmQgdGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciwgZmFsbGluZwogICog
b24gdGhlIHNhbWUgZGF5IG9mIHRoZSB3ZWVrLgogICoKQEAgLTc5Niw3ICs3OTMsNiBAQCBkb3Vi
bGUgcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhCiAgICAgcmV0dXJuIGRhdGVTZWNv
bmRzICogbXNQZXJTZWNvbmQ7CiB9CiAKLS8vIE9kZCBjYXNlIHdoZXJlICdleGVjJyBpcyBhbGxv
d2VkIHRvIGJlIDAsIHRvIGFjY29tb2RhdGUgYSBjYWxsZXIgaW4gV2ViQ29yZS4KIGRvdWJsZSBw
YXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJp
bmcsIGJvb2wmIGhhdmVUWiwgaW50JiBvZmZzZXQpCiB7CiAgICAgaGF2ZVRaID0gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0RhdGVNYXRoLmgJKHJldmlzaW9uIDE2Njc0MikKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGVN
YXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCkBAIC01Myw2ICs1MywxMSBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAor
Ly8gRUNNQVNjcmlwdCBhc2tzIG5vdCB0byBzdXBwb3J0IGZvciBhIGRhdGUgb2Ygd2hpY2ggdG90
YWwKKy8vIG1pbGxpc2Vjb25kIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBmb2xsb3dpbmcgdmFs
dWUuCisvLyBTZWUgMTUuOS4xLjE0IG9mIEVDTUEtMjYyIDV0aCBlZGl0aW9uLgorc3RhdGljIGNv
bnN0IGRvdWJsZSBtYXhFQ01BU2NyaXB0VGltZSA9IDguNjRFMTU7CisKIHN0cnVjdCBMb2NhbFRp
bWVPZmZzZXQgewogICAgIExvY2FsVGltZU9mZnNldCgpCiAgICAgICAgIDogaXNEU1QoZmFsc2Up
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNjY4MTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wNC0wNCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0ZSBvYmplY3QgbmVlZHMgdG8gY2hlY2sgZm9y
IEVTNSAxNS45LjEuMTQgVGltZUNsaXAgbGltaXQuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5v
cmcvYi8xMzEyNDg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBqcy9yZWdyZXNzLTEzMTI0OC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3MtMTMxMjQ4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0
cy9yZWdyZXNzLTEzMTI0OC5qczogQWRkZWQuCisgICAgICAgICh0ZXN0RGF0ZUZyb21TZXREYXRl
QWRqdXN0ZW1lbnQpOgorICAgICAgICAodGVzdERhdGVGcm9tU2V0VGltZVdpdGhNaWxsaXNlY29u
ZHMpOgorICAgICAgICAodGVzdERhdGVGcm9tU3RyaW5nKToKKwogMjAxNC0wNC0wNCAgWm9sdGFu
IEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbQ1NTIFNoYXBlc10gcG9s
eWdvbiB5LXZhbHVlIGNhbGMoKSBhcmdzIHNlcmlhbGl6ZSBpbmNvcnJlY3RseQpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy0xMzEyNDgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTMxMjQ4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTMxMjQ4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACitUaGlzIHRlc3RzIGNoZWNrcyBkYXRlIHZhbHVlcyBhdCB0aGUg
bGltaXRzIHNldCBieSB0aGUgRVM1IDE1LjkuMS4xNCBUaW1lQ2xpcCBzcGVjaWZpY2F0aW9uIGFu
ZCBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgY3Jhc2ggb24gYW55IGFzc2VydGlvbnMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisobmV3IERhdGUoMTM5NjU0NzgwMzc2NikpLnNldERh
dGUoMTM5NjU0OTAwMzc2OSkgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRlCisobmV3IERhdGUoMTM5
NjU0NzgwMzc2NikpLnNldERhdGUoMTAwMDAwMDAwKSA9PT4gTmFOIG1zLCBJbnZhbGlkIERhdGUK
KyhuZXcgRGF0ZSgxMzk2NTQ3ODAzNzY2KSkuc2V0RGF0ZSg5OTk4Mzg0MCkgPT0+IE5hTiBtcywg
SW52YWxpZCBEYXRlCisobmV3IERhdGUoMTM5NjU0NzgwMzc2NikpLnNldERhdGUoOTk5ODM4Mzkp
ID09PiA4NjM5OTk5OTc4MjAzNzY2IG1zLCBGcmkgU2VwIDEyIDI3NTc2MAorKG5ldyBEYXRlKDEz
OTY1NDc4MDM3NjYpKS5zZXREYXRlKDEwMDAwMDAwKSA9PT4gODY1Mzk2Mjg4NjAzNzY2IG1zLCBU
aHUgQXByIDI1IDI5MzkzCisKKyhuZXcgRGF0ZSgwKSkuc2V0VGltZSg4NjQwMDAwMDAwMDAwMDAx
KSA9PT4gTmFOIG1zLCBJbnZhbGlkIERhdGUgTmFOIG1zCisobmV3IERhdGUoMCkpLnNldFRpbWUo
ODY0MDAwMDAwMDAwMDAwMCkgPT0+IDg2NDAwMDAwMDAwMDAwMDAgbXMsIFNhdCwgMTMgU2VwIDI3
NTc2MCAwMDowMDowMCBHTVQgMCBtcworKG5ldyBEYXRlKDApKS5zZXRUaW1lKC04NjQwMDAwMDAw
MDAwMDAwKSA9PT4gLTg2NDAwMDAwMDAwMDAwMDAgbXMsIFR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6
MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgwKSkuc2V0VGltZSgtODY0MDAwMDAwMDAwMDAwMSkg
PT0+IE5hTiBtcywgSW52YWxpZCBEYXRlIE5hTiBtcworCisobmV3IERhdGUoMTMgU2VwIDI3NTc2
MCAwMDowMDowMCAtMDAwMSkgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRlIE5hTiBtcworKG5ldyBE
YXRlKDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgKzAwMDApID09PiA4NjQwMDAwMDAwMDAwMDAwIG1z
LCBTYXQsIDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgxMyBTZXAg
Mjc1NzYwIDAwOjAwOjAwICswMDAxKSA9PT4gODYzOTk5OTk5NjQwMDAwMCBtcywgRnJpLCAxMiBT
ZXAgMjc1NzYwIDIzOjAwOjAwIEdNVCAwIG1zCisobmV3IERhdGUoMjAgQXByIC0yNzE4MjEgMDA6
MDA6MDAgLTAwMDEpID09PiAtODYzOTk5OTk5NjQwMDAwMCBtcywgVHVlLCAyMCBBcHIgLTI3MTgy
MSAwMTowMDowMCBHTVQgMCBtcworKG5ldyBEYXRlKDIwIEFwciAtMjcxODIxIDAwOjAwOjAwICsw
MDAwKSA9PT4gLTg2NDAwMDAwMDAwMDAwMDAgbXMsIFR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6
MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgyMCBBcHIgLTI3MTgyMSAwMDowMDowMCArMDAwMSkgPT0+
IE5hTiBtcywgSW52YWxpZCBEYXRlIE5hTiBtcworCisobmV3IERhdGUoMTkgQXByIC0yNzE4MjEg
MjM6NTk6NTkpID09PiBOYU4gbXMsIEludmFsaWQgRGF0ZSBOYU4gbXMKKworKG5ldyBEYXRlKDI3
NTc2MC0wOS0xM1QwMDowMDowMC4wMDEpID09PiBOYU4gbXMsIEludmFsaWQgRGF0ZSBOYU4gbXMK
KyhuZXcgRGF0ZSgyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwKSA9PT4gODY0MDAwMDAwMDAwMDAw
MCBtcywgU2F0LCAxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIEdNVCAwIG1zCisobmV3IERhdGUoLTI3
MTgyMS0wNC0yMFQwMDowMDowMC4wMDAwKSA9PT4gLTg2NDAwMDAwMDAwMDAwMDAgbXMsIFR1ZSwg
MjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgtMjcxODIxLTA0LTE5
VDIzOjU5OjU5Ljk5OSkgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRlIE5hTiBtcworCisobmV3IERh
dGUoU2F0LCAxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIFVUQy0yKSA9PT4gTmFOIG1zLCBJbnZhbGlk
IERhdGUgTmFOIG1zCisobmV3IERhdGUoU2F0LCAxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIFVUQykg
PT0+IDg2NDAwMDAwMDAwMDAwMDAgbXMsIFNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBHTVQg
MCBtcworKG5ldyBEYXRlKFNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMrMikgPT0+IDg2
Mzk5OTk5OTI4MDAwMDAgbXMsIEZyaSwgMTIgU2VwIDI3NTc2MCAyMjowMDowMCBHTVQgMCBtcwor
KG5ldyBEYXRlKFR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDLTIpID09PiAtODYzOTk5
OTk5MjgwMDAwMCBtcywgVHVlLCAyMCBBcHIgLTI3MTgyMSAwMjowMDowMCBHTVQgMCBtcworKG5l
dyBEYXRlKFR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDKSA9PT4gLTg2NDAwMDAwMDAw
MDAwMDAgbXMsIFR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0
ZShUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIFVUQysyKSA9PT4gTmFOIG1zLCBJbnZhbGlk
IERhdGUgTmFOIG1zCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTEzMTI0OC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTMxMjQ4Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTEzMTI0OC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9yZWdyZXNzLTEzMTI0OC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0xMzEyNDguanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTMxMjQ4LmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTMxMjQ4LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKK2Rlc2NyaXB0aW9uKAorIlRoaXMgdGVzdHMg
Y2hlY2tzIGRhdGUgdmFsdWVzIGF0IHRoZSBsaW1pdHMgc2V0IGJ5IHRoZSBFUzUgMTUuOS4xLjE0
IFRpbWVDbGlwIHNwZWNpZmljYXRpb24gYW5kIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBjcmFzaCBv
biBhbnkgYXNzZXJ0aW9ucy4iCispOworCitmdW5jdGlvbiB0ZXN0RGF0ZUZyb21TZXREYXRlQWRq
dXN0ZW1lbnQoaW5pdGlhbE1zLCBhZGp1c3RNcykgeworICAgIHZhciBkYXRlID0gbmV3IERhdGUo
aW5pdGlhbE1zKTsKKyAgICBkZWJ1ZygiKG5ldyBEYXRlKCIgKyBpbml0aWFsTXMgKyAiKSkuc2V0
RGF0ZSgiICsgYWRqdXN0TXMgKyAiKSA9PT4gIiArIGRhdGUuc2V0RGF0ZShhZGp1c3RNcykgKyAi
IG1zLCAiICsgZGF0ZS50b0RhdGVTdHJpbmcoKSk7Cit9CisKK3Rlc3REYXRlRnJvbVNldERhdGVB
ZGp1c3RlbWVudCgxMzk2NTQ3ODAzNzY2LCAxMzk2NTQ5MDAzNzY5KTsKK3Rlc3REYXRlRnJvbVNl
dERhdGVBZGp1c3RlbWVudCgxMzk2NTQ3ODAzNzY2LCAxMDAwMDAwMDApOwordGVzdERhdGVGcm9t
U2V0RGF0ZUFkanVzdGVtZW50KDEzOTY1NDc4MDM3NjYsIDk5OTgzODM5KzEpOwordGVzdERhdGVG
cm9tU2V0RGF0ZUFkanVzdGVtZW50KDEzOTY1NDc4MDM3NjYsIDk5OTgzODM5KTsKK3Rlc3REYXRl
RnJvbVNldERhdGVBZGp1c3RlbWVudCgxMzk2NTQ3ODAzNzY2LCAxMDAwMDAwMCk7CitkZWJ1Zygi
Iik7CisKK2Z1bmN0aW9uIHRlc3REYXRlRnJvbVNldFRpbWVXaXRoTWlsbGlzZWNvbmRzKG1zKSB7
CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKTsKKyAgICBkZWJ1ZygiKG5ldyBEYXRlKDApKS5z
ZXRUaW1lKCIgKyBtcyArICIpID09PiAiICsgZGF0ZS5zZXRUaW1lKG1zKSArICIgbXMsICIgKyBk
YXRlLnRvVVRDU3RyaW5nKCkgKyAiICIgKyBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpICsgIiBt
cyIpOworfQorCit0ZXN0RGF0ZUZyb21TZXRUaW1lV2l0aE1pbGxpc2Vjb25kcyg4NjQwMDAwMDAw
MDAwMDAxKTsKK3Rlc3REYXRlRnJvbVNldFRpbWVXaXRoTWlsbGlzZWNvbmRzKDg2NDAwMDAwMDAw
MDAwMDApOwordGVzdERhdGVGcm9tU2V0VGltZVdpdGhNaWxsaXNlY29uZHMoLTg2NDAwMDAwMDAw
MDAwMDApOwordGVzdERhdGVGcm9tU2V0VGltZVdpdGhNaWxsaXNlY29uZHMoLTg2NDAwMDAwMDAw
MDAwMDEpOworZGVidWcoIiIpOworCitmdW5jdGlvbiB0ZXN0RGF0ZUZyb21TdHJpbmcoc3RyKSB7
CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHIpOworICAgIGRlYnVnKCIobmV3IERhdGUoIiAr
IHN0ciArICIpID09PiAiICsgZGF0ZS5nZXRUaW1lKCkgKyAiIG1zLCAiICsgZGF0ZS50b1VUQ1N0
cmluZygpICsgIiAiICsgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSArICIgbXMiKTsKK30KKwor
dGVzdERhdGVGcm9tU3RyaW5nKCIxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIC0wMDAxIik7Cit0ZXN0
RGF0ZUZyb21TdHJpbmcoIjEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgKzAwMDAiKTsKK3Rlc3REYXRl
RnJvbVN0cmluZygiMTMgU2VwIDI3NTc2MCAwMDowMDowMCArMDAwMSIpOwordGVzdERhdGVGcm9t
U3RyaW5nKCIyMCBBcHIgLTI3MTgyMSAwMDowMDowMCAtMDAwMSIpOwordGVzdERhdGVGcm9tU3Ry
aW5nKCIyMCBBcHIgLTI3MTgyMSAwMDowMDowMCArMDAwMCIpOwordGVzdERhdGVGcm9tU3RyaW5n
KCIyMCBBcHIgLTI3MTgyMSAwMDowMDowMCArMDAwMSIpOworZGVidWcoIiIpOworCit0ZXN0RGF0
ZUZyb21TdHJpbmcoIjE5IEFwciAtMjcxODIxIDIzOjU5OjU5Iik7CitkZWJ1ZygiIik7CisKK3Rl
c3REYXRlRnJvbVN0cmluZygiMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMSIpOwordGVzdERhdGVG
cm9tU3RyaW5nKCIyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwIik7Cit0ZXN0RGF0ZUZyb21TdHJp
bmcoIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwMCIpOwordGVzdERhdGVGcm9tU3RyaW5nKCIt
MjcxODIxLTA0LTE5VDIzOjU5OjU5Ljk5OSIpOworZGVidWcoIiIpOworCit0ZXN0RGF0ZUZyb21T
dHJpbmcoIlNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMtMiIpOwordGVzdERhdGVGcm9t
U3RyaW5nKCJTYXQsIDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgVVRDIik7Cit0ZXN0RGF0ZUZyb21T
dHJpbmcoIlNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMrMiIpOwordGVzdERhdGVGcm9t
U3RyaW5nKCJUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIFVUQy0yIik7Cit0ZXN0RGF0ZUZy
b21TdHJpbmcoIlR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDIik7Cit0ZXN0RGF0ZUZy
b21TdHJpbmcoIlR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDKzIiKTsKK2RlYnVnKCIi
KTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228638</attachid>
            <date>2014-04-04 17:41:07 -0700</date>
            <delta_ts>2014-04-04 18:35:59 -0700</delta_ts>
            <desc>patch 2: addressed MarkH&apos;s feedback.</desc>
            <filename>bug-131248.patch</filename>
            <type>text/plain</type>
            <size>17897</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA0LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBE
YXRlIG9iamVjdCBuZWVkcyB0byBjaGVjayBmb3IgRVM1IDE1LjkuMS4xNCBUaW1lQ2xpcCBsaW1p
dC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTI0OD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3VycmVudCBEYXRlIG9iamVj
dCBjb2RlIGRvZXMgbm90IGFkZXF1YXRlbHkgY2hlY2sgZm9yIHRoZSBFUzUKKyAgICAgICAgMTUu
OS4xLjE0IFRpbWVDbGlwIGxpbWl0LiAgQXMgYSByZXN1bHQsIHNvbWUgY2FsY3VsYXRpb25zIGNh
biB1bmRlcmZsb3cKKyAgICAgICAgLyBvdmVyZmxvdyBhbmQgcHJvZHVjZSB1bmV4cGVjdGVkIHJl
c3VsdHMuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHdlIHdlcmUgZ2V0dGluZyBhbiBhc3NlcnRp
b24gZmFpbHVyZSBpbgorICAgICAgICBXVEY6OmVxdWl2YWxlbnRZZWFyRm9yRFNUKCkgZHVlIGlu
dCB1bmRlcmZsb3dzIGluIHRoaXMgZnVuY3Rpb24sIHdoaWNoCisgICAgICAgIGluIHR1cm4gd2Vy
ZSBkdWUgdG8gYW4gaW50IG92ZXJmbG93IGluIFdURjo6bXNUb1llYXIoKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgdGhlIG5lZWRlZCBjaGVja3MsIGFuZCBhZGRzIHNvbWUgYXNzZXJ0aW9u
cyB0byBlbnN1cmUKKyAgICAgICAgdGhhdCB0aGUgdXNlZCB2YWx1ZXMgYXJlIHNhbmUuCisKKyAg
ICAgICAgVGhlIGNoYW5nZXMgaGF2ZSBubyBub3RpY2VhYmxlIGltcGFjdCBvbiBiZW5jaG1hcmsg
cmVzdWx0cy4KKworICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbERhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHA6Cisg
ICAgICAgIChKU0M6OmxvY2FsVGltZU9mZnNldCk6CisgICAgICAgIChKU0M6OmdyZWdvcmlhbkRh
dGVUaW1lVG9NUyk6CisgICAgICAgIChKU0M6Om1zVG9HcmVnb3JpYW5EYXRlVGltZSk6CisgICAg
ICAgIChKU0M6OnBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMpOgorICAgICAg
ICAoSlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRlTWF0aC5oOgorICAg
ICAgICAtIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoKSBkb2VzIG5vdCBu
ZWVkIHRvIGJlIHB1YmxpYy4KKyAgICAgICAgICBNYWRlIGl0IGEgc3RhdGljIGZ1bmN0aW9uLgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6cmVzZXREYXRlQ2Fj
aGUpOgorICAgICAgICAtIENoYW5nZWQgY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlIHRvIHVzZSBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpCisgICAgICAgICAgdG8gYmUgY29u
c2lzdGVudCB3aXRoIG90aGVyIERhdGUgY29kZS4KKwogMjAxNC0wNC0wMyAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJpdCByb3QgaW4gQVJNdjcgSklUIHBy
b2JlIG1lY2hhbmlzbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTY2NzQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNC0yMDA4LCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5MCw3ICsxOTAsMTIgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdHM7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1l
KHZtLCBjdXJyZW50VGltZU1TKCksIGZhbHNlLCB0cyk7CisKKyAgICBkb3VibGUgY3VycmVudFRp
bWUgPSB0aW1lQ2xpcChjdXJyZW50VGltZU1TKCkpOworICAgIGlmIChzdGQ6OmlzbmFuKGN1cnJl
bnRUaW1lKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICAK
KyAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUodm0sIGN1cnJlbnRUaW1lLCBmYWxzZSwgdHMpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKCZ2bSwgZm9ybWF0
RGF0ZVRpbWUodHMsIERhdGVUaW1lRm9ybWF0RGF0ZUFuZFRpbWUsIGZhbHNlKSkpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmNwcAkocmV2
aXNpb24gMTY2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgog
ICogQ29weXJpZ2h0IChDKSAyMDEwICZ5ZXQsIExMQy4gKG5hdGVAYW5keWV0Lm5ldCkKQEAgLTEz
OCw2ICsxMzgsNyBAQCBzdGF0aWMgTG9jYWxUaW1lT2Zmc2V0IGxvY2FsVGltZU9mZnNldChWCiAg
ICAgZG91YmxlIHN0YXJ0ID0gY2FjaGUuc3RhcnQ7CiAgICAgZG91YmxlIGVuZCA9IGNhY2hlLmVu
ZDsKIAorICAgIEFTU0VSVChmYWJzKG1zKSA8PSBXVEY6Om1heEVDTUFTY3JpcHRUaW1lKTsKICAg
ICBpZiAoc3RhcnQgPD0gbXMpIHsKICAgICAgICAgLy8gSWYgdGhlIHRpbWUgZml0cyBpbiB0aGUg
Y2FjaGVkIGludGVydmFsLCByZXR1cm4gdGhlIGNhY2hlZCBvZmZzZXQuCiAgICAgICAgIGlmICht
cyA8PSBlbmQpIHJldHVybiBjYWNoZS5vZmZzZXQ7CkBAIC0xNDUsNyArMTQ2LDcgQEAgc3RhdGlj
IExvY2FsVGltZU9mZnNldCBsb2NhbFRpbWVPZmZzZXQoVgogICAgICAgICAvLyBDb21wdXRlIGEg
cG9zc2libGUgbmV3IGludGVydmFsIGVuZC4KICAgICAgICAgZG91YmxlIG5ld0VuZCA9IGVuZCAr
IGNhY2hlLmluY3JlbWVudDsKIAotICAgICAgICBpZiAobXMgPD0gbmV3RW5kKSB7CisgICAgICAg
IGlmIChtcyA8PSBuZXdFbmQgJiYgbmV3RW5kIDw9IFdURjo6bWF4RUNNQVNjcmlwdFRpbWUpIHsK
ICAgICAgICAgICAgIExvY2FsVGltZU9mZnNldCBlbmRPZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRp
bWVPZmZzZXQobmV3RW5kKTsKICAgICAgICAgICAgIGlmIChjYWNoZS5vZmZzZXQgPT0gZW5kT2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9mZnNldCBhdCB0aGUgZW5kIG9mIHRo
ZSBuZXcgaW50ZXJ2YWwgc3RpbGwgbWF0Y2hlcwpAQCAtMTk0LDE1ICsxOTUsMTkgQEAgZG91Ymxl
IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhWTSYgdm0sIGNvbgogICAgIGRvdWJsZSBtcyA9IHRpbWVU
b01TKHQuaG91cigpLCB0Lm1pbnV0ZSgpLCB0LnNlY29uZCgpLCBtaWxsaVNlY29uZHMpOwogICAg
IGRvdWJsZSByZXN1bHQgPSAoZGF5ICogV1RGOjptc1BlckRheSkgKyBtczsKIAorICAgIGlmIChm
YWJzKHJlc3VsdCkgPiBXVEY6Om1heEVDTUFTY3JpcHRUaW1lKQorICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKwogICAgIGlmICghaW5wdXRJ
c1VUQykKICAgICAgICAgcmVzdWx0IC09IGxvY2FsVGltZU9mZnNldCh2bSwgcmVzdWx0KS5vZmZz
ZXQ7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0aW1lQ2xpcChyZXN1bHQpOwog
fQogCiAvLyBpbnB1dCBpcyBVVEMKIHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKFZNJiB2bSwg
ZG91YmxlIG1zLCBib29sIG91dHB1dElzVVRDLCBHcmVnb3JpYW5EYXRlVGltZSYgdG0pCiB7Cisg
ICAgQVNTRVJUKGZhYnMobXMpIDw9IFdURjo6bWF4RUNNQVNjcmlwdFRpbWUpOwogICAgIExvY2Fs
VGltZU9mZnNldCBsb2NhbFRpbWU7CiAgICAgaWYgKCFvdXRwdXRJc1VUQykgewogICAgICAgICBs
b2NhbFRpbWUgPSBsb2NhbFRpbWVPZmZzZXQodm0sIG1zKTsKQEAgLTIyMiwxMyArMjI3LDEzIEBA
IHZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKFZNJiB2bSwgZG91YmwKICAgICB0bS5zZXRVdGNP
ZmZzZXQobG9jYWxUaW1lLm9mZnNldCAvIFdURjo6bXNQZXJTZWNvbmQpOwogfQogCi1kb3VibGUg
cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhWTSYgdm0sIGNvbnN0IGNoYXIq
IGRhdGVTdHJpbmcpCitzdGF0aWMgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENo
YXJhY3RlcnMoVk0mIHZtLCBjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQogewogICAgIGJvb2wgaGF2
ZVRaOwogICAgIGludCBvZmZzZXQ7CiAgICAgZG91YmxlIG1zID0gV1RGOjpwYXJzZURhdGVGcm9t
TnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGRhdGVTdHJpbmcsIGhhdmVUWiwgb2Zmc2V0KTsKLSAg
ICBpZiAoc3RkOjppc25hbihtcykpCi0gICAgICAgIHJldHVybiBRTmFOOworICAgIGlmIChzdGQ6
OmlzbmFuKG1zKSB8fCBmYWJzKG1zKSA+IFdURjo6bWF4RUNNQVNjcmlwdFRpbWUpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCiAgICAg
Ly8gZmFsbCBiYWNrIHRvIGxvY2FsIHRpbWV6b25lCiAgICAgaWYgKCFoYXZlVFopCkBAIC0yNDQs
NiArMjQ5LDcgQEAgZG91YmxlIHBhcnNlRGF0ZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgZAogICAg
IGRvdWJsZSB2YWx1ZSA9IHBhcnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMo
ZGF0ZS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkpCiAgICAgICAg
IHZhbHVlID0gcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyh2bSwgZGF0ZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB2YWx1ZSA9IHRpbWVDbGlwKHZhbHVlKTsKICAgICB2bS5jYWNo
ZWREYXRlU3RyaW5nID0gZGF0ZTsKICAgICB2bS5jYWNoZWREYXRlU3RyaW5nVmFsdWUgPSB2YWx1
ZTsKICAgICByZXR1cm4gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGVNYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRlTWF0aC5oCShyZXZpc2lvbiAxNjY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGVNYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC01Myw3ICs1Myw2IEBAIGNsYXNz
IFZNOwogdm9pZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoVk0mLCBkb3VibGUsIGJvb2wgb3V0cHV0
SXNVVEMsIEdyZWdvcmlhbkRhdGVUaW1lJik7CiBkb3VibGUgZ3JlZ29yaWFuRGF0ZVRpbWVUb01T
KFZNJiwgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmLCBkb3VibGUsIGJvb2wgaW5wdXRJc1VUQyk7
CiBkb3VibGUgZ2V0VVRDT2Zmc2V0KFZNJik7Ci1kb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJt
aW5hdGVkQ2hhcmFjdGVycyhWTSYsIGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogZG91YmxlIHBh
cnNlRGF0ZShWTSYsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTY2NzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDEsNyArNTAxLDcgQEAgdm9pZCBWTTo6cmVzZXREYXRlQ2FjaGUoKQogewogICAgIGxvY2Fs
VGltZU9mZnNldENhY2hlLnJlc2V0KCk7CiAgICAgY2FjaGVkRGF0ZVN0cmluZyA9IFN0cmluZygp
OwotICAgIGNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IFFOYU47CisgICAgY2FjaGVkRGF0ZVN0cmlu
Z1ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKICAgICBk
YXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NzQyKQor
KysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAxNC0wNC0wNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0
ZSBvYmplY3QgbmVlZHMgdG8gY2hlY2sgZm9yIEVTNSAxNS45LjEuMTQgVGltZUNsaXAgbGltaXQu
CisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEyNDg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguY3BwOgorICAg
ICAgICAtIE1vdmVkIHRoZSBkZWZpbml0aW9uIG9mIG1heEVDTUFTY3JpcHRUaW1lIHRvIHRoZSAu
aCBmaWxlIHNvIHRoYXQgd2UKKyAgICAgICAgICBjYW4gdXNlIGl0IGluIG90aGVyIGZpbGVzIGFz
IHdlbGwuCisgICAgICAgIChXVEY6Om1zVG9ZZWFyKToKKyAgICAgICAgLSBSZW1vdmVkIGEgc3Rh
bGUgY29tbWVudCBmb3IgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycygpLgor
ICAgICAgICAqIHd0Zi9EYXRlTWF0aC5oOgorCiAyMDE0LTA0LTAzICBac29sdCBCb3JiZWx5ICA8
enNib3JiZWx5LnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
RW5hYmxlIENTUyBKSVQgYWdhaW4sIGl0IHdvcmtzIGZpbmUgYWZ0ZXIgcjE2NjY2Ni4KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0RhdGVNYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9EYXRlTWF0aC5jcHAJKHJldmlzaW9uIDE2Njc0MikKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGVN
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDA3LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgJnlldCwgTExDLiAobmF0ZUBhbmR5ZXQubmV0KQpAQCAtMTA5LDEwICsxMDks
NiBAQCBuYW1lc3BhY2UgV1RGIHsKIC8qIENvbnN0YW50cyAqLwogCiBzdGF0aWMgY29uc3QgZG91
YmxlIG1heFVuaXhUaW1lID0gMjE0NTg1OTIwMC4wOyAvLyAxMi8zMS8yMDM3Ci0vLyBFQ01BU2Ny
aXB0IGFza3Mgbm90IHRvIHN1cHBvcnQgZm9yIGEgZGF0ZSBvZiB3aGljaCB0b3RhbAotLy8gbWls
bGlzZWNvbmQgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGZvbGxvd2luZyB2YWx1ZS4KLS8vIFNl
ZSAxNS45LjEuMTQgb2YgRUNNQS0yNjIgNXRoIGVkaXRpb24uCi1zdGF0aWMgY29uc3QgZG91Ymxl
IG1heEVDTUFTY3JpcHRUaW1lID0gOC42NEUxNTsKIAogLy8gRGF5IG9mIHllYXIgZm9yIHRoZSBm
aXJzdCBkYXkgb2YgZWFjaCBtb250aCwgd2hlcmUgaW5kZXggMCBpcyBKYW51YXJ5LCBhbmQgZGF5
IDAgaXMgSmFudWFyeSAxLgogLy8gRmlyc3QgZm9yIG5vbi1sZWFwIHllYXJzLCB0aGVuIGZvciBs
ZWFwIHllYXJzLgpAQCAtMTg0LDYgKzE4MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFR3b0RpZ2l0
TnVtYmVyKFN0cmluZ0IKIAogaW50IG1zVG9ZZWFyKGRvdWJsZSBtcykKIHsKKyAgICBBU1NFUlQo
ZmFicyhtcykgPD0gbWF4RUNNQVNjcmlwdFRpbWUpOwogICAgIGludCBhcHByb3hZZWFyID0gc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcihtcyAvIChtc1BlckRheSAqIDM2NS4yNDI1KSkgKyAxOTcwKTsK
ICAgICBkb3VibGUgbXNGcm9tQXBwcm94WWVhclRvMTk3MCA9IG1zUGVyRGF5ICogZGF5c0Zyb20x
OTcwVG9ZZWFyKGFwcHJveFllYXIpOwogICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8xOTcwID4g
bXMpCkBAIC0zMzAsNyArMzI3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWluaW11bVllYXJGb3JE
U1QoKQogfQogCiAvKgotICogRmluZCBhbiBlcXVpdmFsZW50IHllYXIgZm9yIHRoZSBvbmUgZ2l2
ZW4sIHdoZXJlIGVxdWl2YWxlbmNlIGlzIGRldGVyaW5lZCBieQorICogRmluZCBhbiBlcXVpdmFs
ZW50IHllYXIgZm9yIHRoZSBvbmUgZ2l2ZW4sIHdoZXJlIGVxdWl2YWxlbmNlIGlzIGRldGVybWlu
ZWQgYnkKICAqIHRoZSB0d28geWVhcnMgaGF2aW5nIHRoZSBzYW1lIGxlYXBuZXNzIGFuZCB0aGUg
Zmlyc3QgZGF5IG9mIHRoZSB5ZWFyLCBmYWxsaW5nCiAgKiBvbiB0aGUgc2FtZSBkYXkgb2YgdGhl
IHdlZWsuCiAgKgpAQCAtNzk2LDcgKzc5Myw2IEBAIGRvdWJsZSBwYXJzZUVTNURhdGVGcm9tTnVs
bFRlcm1pbmF0ZWRDaGEKICAgICByZXR1cm4gZGF0ZVNlY29uZHMgKiBtc1BlclNlY29uZDsKIH0K
IAotLy8gT2RkIGNhc2Ugd2hlcmUgJ2V4ZWMnIGlzIGFsbG93ZWQgdG8gYmUgMCwgdG8gYWNjb21v
ZGF0ZSBhIGNhbGxlciBpbiBXZWJDb3JlLgogZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWlu
YXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBpbnQm
IG9mZnNldCkKIHsKICAgICBoYXZlVFogPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Rh
dGVNYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0ZU1hdGguaAkocmV2aXNp
b24gMTY2NzQyKQorKysgU291cmNlL1dURi93dGYvRGF0ZU1hdGguaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTUz
LDYgKzUzLDExIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBFQ01BU2NyaXB0IGFza3Mgbm90
IHRvIHN1cHBvcnQgZm9yIGEgZGF0ZSBvZiB3aGljaCB0b3RhbAorLy8gbWlsbGlzZWNvbmQgdmFs
dWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGZvbGxvd2luZyB2YWx1ZS4KKy8vIFNlZSAxNS45LjEuMTQg
b2YgRUNNQS0yNjIgNXRoIGVkaXRpb24uCitzdGF0aWMgY29uc3QgZG91YmxlIG1heEVDTUFTY3Jp
cHRUaW1lID0gOC42NEUxNTsKKwogc3RydWN0IExvY2FsVGltZU9mZnNldCB7CiAgICAgTG9jYWxU
aW1lT2Zmc2V0KCkKICAgICAgICAgOiBpc0RTVChmYWxzZSkKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2
Njc0MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDE0LTA0LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAg
ICAgICBEYXRlIG9iamVjdCBuZWVkcyB0byBjaGVjayBmb3IgRVM1IDE1LjkuMS4xNCBUaW1lQ2xp
cCBsaW1pdC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTI0OD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MtMTMx
MjQ4LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy0xMzEyNDguaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTMxMjQ4LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHRlc3REYXRlRnJvbVNldERhdGVBZGp1c3RlbWVudCk6CisgICAgICAg
ICh0ZXN0RGF0ZUZyb21TZXRUaW1lV2l0aE1pbGxpc2Vjb25kcyk6CisgICAgICAgICh0ZXN0RGF0
ZUZyb21TdHJpbmcpOgorCiAyMDE0LTA0LTAzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBDb250aW51YXRpb25zIGNhc3RpbmcgaXNzdWUuCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzLTEzMTI0OC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy0xMzEyNDgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy0xMzEyNDgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDEgQEAKK1RoaXMgdGVzdCBjaGVja3MgZGF0ZSB2YWx1ZXMgYXQgdGhlIGxpbWl0
cyBzZXQgYnkgdGhlIEVTNSAxNS45LjEuMTQgVGltZUNsaXAgc3BlY2lmaWNhdGlvbiBhbmQgZW5z
dXJlcyB0aGF0IHdlIGRvbid0IGNyYXNoIG9uIGFueSBhc3NlcnRpb25zLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworKG5ldyBEYXRlKDEzOTY1NDc4MDM3NjYpKS5zZXREYXRlKDEz
OTY1NDkwMDM3NjkpID09PiBOYU4gbXMsIEludmFsaWQgRGF0ZQorKG5ldyBEYXRlKDEzOTY1NDc4
MDM3NjYpKS5zZXREYXRlKDEwMDAwMDAwMCkgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRlCisobmV3
IERhdGUoMTM5NjU0NzgwMzc2NikpLnNldERhdGUoOTk5ODM4NDApID09PiBOYU4gbXMsIEludmFs
aWQgRGF0ZQorKG5ldyBEYXRlKDEzOTY1NDc4MDM3NjYpKS5zZXREYXRlKDk5OTgzODM5KSA9PT4g
ODYzOTk5OTk3ODIwMzc2NiBtcywgRnJpIFNlcCAxMiAyNzU3NjAKKyhuZXcgRGF0ZSgxMzk2NTQ3
ODAzNzY2KSkuc2V0RGF0ZSgxMDAwMDAwMCkgPT0+IDg2NTM5NjI4ODYwMzc2NiBtcywgVGh1IEFw
ciAyNSAyOTM5MworCisobmV3IERhdGUoMCkpLnNldFRpbWUoODY0MDAwMDAwMDAwMDAwMSkgPT0+
IE5hTiBtcywgSW52YWxpZCBEYXRlIE5hTiBtcworKG5ldyBEYXRlKDApKS5zZXRUaW1lKDg2NDAw
MDAwMDAwMDAwMDApID09PiA4NjQwMDAwMDAwMDAwMDAwIG1zLCBTYXQsIDEzIFNlcCAyNzU3NjAg
MDA6MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgwKSkuc2V0VGltZSgtODY0MDAwMDAwMDAwMDAw
MCkgPT0+IC04NjQwMDAwMDAwMDAwMDAwIG1zLCBUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAw
IEdNVCAwIG1zCisobmV3IERhdGUoMCkpLnNldFRpbWUoLTg2NDAwMDAwMDAwMDAwMDEpID09PiBO
YU4gbXMsIEludmFsaWQgRGF0ZSBOYU4gbXMKKworKG5ldyBEYXRlKDEzIFNlcCAyNzU3NjAgMDA6
MDA6MDAgLTAwMDEpID09PiBOYU4gbXMsIEludmFsaWQgRGF0ZSBOYU4gbXMKKyhuZXcgRGF0ZSgx
MyBTZXAgMjc1NzYwIDAwOjAwOjAwICswMDAwKSA9PT4gODY0MDAwMDAwMDAwMDAwMCBtcywgU2F0
LCAxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIEdNVCAwIG1zCisobmV3IERhdGUoMTMgU2VwIDI3NTc2
MCAwMDowMDowMCArMDAwMSkgPT0+IDg2Mzk5OTk5OTY0MDAwMDAgbXMsIEZyaSwgMTIgU2VwIDI3
NTc2MCAyMzowMDowMCBHTVQgMCBtcworKG5ldyBEYXRlKDIwIEFwciAtMjcxODIxIDAwOjAwOjAw
IC0wMDAxKSA9PT4gLTg2Mzk5OTk5OTY0MDAwMDAgbXMsIFR1ZSwgMjAgQXByIC0yNzE4MjEgMDE6
MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0ZSgyMCBBcHIgLTI3MTgyMSAwMDowMDowMCArMDAwMCkg
PT0+IC04NjQwMDAwMDAwMDAwMDAwIG1zLCBUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIEdN
VCAwIG1zCisobmV3IERhdGUoMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgKzAwMDEpID09PiBOYU4g
bXMsIEludmFsaWQgRGF0ZSBOYU4gbXMKKworKG5ldyBEYXRlKDE5IEFwciAtMjcxODIxIDIzOjU5
OjU5KSA9PT4gTmFOIG1zLCBJbnZhbGlkIERhdGUgTmFOIG1zCisKKyhuZXcgRGF0ZSgyNzU3NjAt
MDktMTNUMDA6MDA6MDAuMDAxKSA9PT4gTmFOIG1zLCBJbnZhbGlkIERhdGUgTmFOIG1zCisobmV3
IERhdGUoMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMCkgPT0+IDg2NDAwMDAwMDAwMDAwMDAgbXMs
IFNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBHTVQgMCBtcworKG5ldyBEYXRlKC0yNzE4MjEt
MDQtMjBUMDA6MDA6MDAuMDAwMCkgPT0+IC04NjQwMDAwMDAwMDAwMDAwIG1zLCBUdWUsIDIwIEFw
ciAtMjcxODIxIDAwOjAwOjAwIEdNVCAwIG1zCisobmV3IERhdGUoLTI3MTgyMS0wNC0xOVQyMzo1
OTo1OS45OTkpID09PiBOYU4gbXMsIEludmFsaWQgRGF0ZSBOYU4gbXMKKworKG5ldyBEYXRlKFNh
dCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMtMikgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRl
IE5hTiBtcworKG5ldyBEYXRlKFNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMpID09PiA4
NjQwMDAwMDAwMDAwMDAwIG1zLCBTYXQsIDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgR01UIDAgbXMK
KyhuZXcgRGF0ZShTYXQsIDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgVVRDKzIpID09PiA4NjM5OTk5
OTkyODAwMDAwIG1zLCBGcmksIDEyIFNlcCAyNzU3NjAgMjI6MDA6MDAgR01UIDAgbXMKKyhuZXcg
RGF0ZShUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIFVUQy0yKSA9PT4gLTg2Mzk5OTk5OTI4
MDAwMDAgbXMsIFR1ZSwgMjAgQXByIC0yNzE4MjEgMDI6MDA6MDAgR01UIDAgbXMKKyhuZXcgRGF0
ZShUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIFVUQykgPT0+IC04NjQwMDAwMDAwMDAwMDAw
IG1zLCBUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIEdNVCAwIG1zCisobmV3IERhdGUoVHVl
LCAyMCBBcHIgLTI3MTgyMSAwMDowMDowMCBVVEMrMikgPT0+IE5hTiBtcywgSW52YWxpZCBEYXRl
IE5hTiBtcworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzEyNDguaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTEzMTI0OC5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzEyNDguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
cmVncmVzcy0xMzEyNDguanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTMxMjQ4LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9yZWdyZXNzLTEzMTI0OC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9yZWdyZXNzLTEzMTI0OC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tz
IGRhdGUgdmFsdWVzIGF0IHRoZSBsaW1pdHMgc2V0IGJ5IHRoZSBFUzUgMTUuOS4xLjE0IFRpbWVD
bGlwIHNwZWNpZmljYXRpb24gYW5kIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBjcmFzaCBvbiBhbnkg
YXNzZXJ0aW9ucy4iCispOworCitmdW5jdGlvbiB0ZXN0RGF0ZUZyb21TZXREYXRlQWRqdXN0ZW1l
bnQoaW5pdGlhbE1zLCBhZGp1c3RNcykgeworICAgIHZhciBkYXRlID0gbmV3IERhdGUoaW5pdGlh
bE1zKTsKKyAgICBkZWJ1ZygiKG5ldyBEYXRlKCIgKyBpbml0aWFsTXMgKyAiKSkuc2V0RGF0ZSgi
ICsgYWRqdXN0TXMgKyAiKSA9PT4gIiArIGRhdGUuc2V0RGF0ZShhZGp1c3RNcykgKyAiIG1zLCAi
ICsgZGF0ZS50b0RhdGVTdHJpbmcoKSk7Cit9CisKK3Rlc3REYXRlRnJvbVNldERhdGVBZGp1c3Rl
bWVudCgxMzk2NTQ3ODAzNzY2LCAxMzk2NTQ5MDAzNzY5KTsKK3Rlc3REYXRlRnJvbVNldERhdGVB
ZGp1c3RlbWVudCgxMzk2NTQ3ODAzNzY2LCAxMDAwMDAwMDApOwordGVzdERhdGVGcm9tU2V0RGF0
ZUFkanVzdGVtZW50KDEzOTY1NDc4MDM3NjYsIDk5OTgzODM5KzEpOwordGVzdERhdGVGcm9tU2V0
RGF0ZUFkanVzdGVtZW50KDEzOTY1NDc4MDM3NjYsIDk5OTgzODM5KTsKK3Rlc3REYXRlRnJvbVNl
dERhdGVBZGp1c3RlbWVudCgxMzk2NTQ3ODAzNzY2LCAxMDAwMDAwMCk7CitkZWJ1ZygiIik7CisK
K2Z1bmN0aW9uIHRlc3REYXRlRnJvbVNldFRpbWVXaXRoTWlsbGlzZWNvbmRzKG1zKSB7CisgICAg
dmFyIGRhdGUgPSBuZXcgRGF0ZSgwKTsKKyAgICBkZWJ1ZygiKG5ldyBEYXRlKDApKS5zZXRUaW1l
KCIgKyBtcyArICIpID09PiAiICsgZGF0ZS5zZXRUaW1lKG1zKSArICIgbXMsICIgKyBkYXRlLnRv
VVRDU3RyaW5nKCkgKyAiICIgKyBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpICsgIiBtcyIpOwor
fQorCit0ZXN0RGF0ZUZyb21TZXRUaW1lV2l0aE1pbGxpc2Vjb25kcyg4NjQwMDAwMDAwMDAwMDAx
KTsKK3Rlc3REYXRlRnJvbVNldFRpbWVXaXRoTWlsbGlzZWNvbmRzKDg2NDAwMDAwMDAwMDAwMDAp
OwordGVzdERhdGVGcm9tU2V0VGltZVdpdGhNaWxsaXNlY29uZHMoLTg2NDAwMDAwMDAwMDAwMDAp
OwordGVzdERhdGVGcm9tU2V0VGltZVdpdGhNaWxsaXNlY29uZHMoLTg2NDAwMDAwMDAwMDAwMDEp
OworZGVidWcoIiIpOworCitmdW5jdGlvbiB0ZXN0RGF0ZUZyb21TdHJpbmcoc3RyKSB7CisgICAg
dmFyIGRhdGUgPSBuZXcgRGF0ZShzdHIpOworICAgIGRlYnVnKCIobmV3IERhdGUoIiArIHN0ciAr
ICIpID09PiAiICsgZGF0ZS5nZXRUaW1lKCkgKyAiIG1zLCAiICsgZGF0ZS50b1VUQ1N0cmluZygp
ICsgIiAiICsgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSArICIgbXMiKTsKK30KKwordGVzdERh
dGVGcm9tU3RyaW5nKCIxMyBTZXAgMjc1NzYwIDAwOjAwOjAwIC0wMDAxIik7Cit0ZXN0RGF0ZUZy
b21TdHJpbmcoIjEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgKzAwMDAiKTsKK3Rlc3REYXRlRnJvbVN0
cmluZygiMTMgU2VwIDI3NTc2MCAwMDowMDowMCArMDAwMSIpOwordGVzdERhdGVGcm9tU3RyaW5n
KCIyMCBBcHIgLTI3MTgyMSAwMDowMDowMCAtMDAwMSIpOwordGVzdERhdGVGcm9tU3RyaW5nKCIy
MCBBcHIgLTI3MTgyMSAwMDowMDowMCArMDAwMCIpOwordGVzdERhdGVGcm9tU3RyaW5nKCIyMCBB
cHIgLTI3MTgyMSAwMDowMDowMCArMDAwMSIpOworZGVidWcoIiIpOworCit0ZXN0RGF0ZUZyb21T
dHJpbmcoIjE5IEFwciAtMjcxODIxIDIzOjU5OjU5Iik7CitkZWJ1ZygiIik7CisKK3Rlc3REYXRl
RnJvbVN0cmluZygiMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMSIpOwordGVzdERhdGVGcm9tU3Ry
aW5nKCIyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwIik7Cit0ZXN0RGF0ZUZyb21TdHJpbmcoIi0y
NzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwMCIpOwordGVzdERhdGVGcm9tU3RyaW5nKCItMjcxODIx
LTA0LTE5VDIzOjU5OjU5Ljk5OSIpOworZGVidWcoIiIpOworCit0ZXN0RGF0ZUZyb21TdHJpbmco
IlNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMtMiIpOwordGVzdERhdGVGcm9tU3RyaW5n
KCJTYXQsIDEzIFNlcCAyNzU3NjAgMDA6MDA6MDAgVVRDIik7Cit0ZXN0RGF0ZUZyb21TdHJpbmco
IlNhdCwgMTMgU2VwIDI3NTc2MCAwMDowMDowMCBVVEMrMiIpOwordGVzdERhdGVGcm9tU3RyaW5n
KCJUdWUsIDIwIEFwciAtMjcxODIxIDAwOjAwOjAwIFVUQy0yIik7Cit0ZXN0RGF0ZUZyb21TdHJp
bmcoIlR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDIik7Cit0ZXN0RGF0ZUZyb21TdHJp
bmcoIlR1ZSwgMjAgQXByIC0yNzE4MjEgMDA6MDA6MDAgVVRDKzIiKTsKK2RlYnVnKCIiKTsKKwo=
</data>
<flag name="review"
          id="252955"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="252956"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>