<?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>37502</bug_id>
          
          <creation_ts>2010-04-13 08:46:18 -0700</creation_ts>
          <short_desc>Web Inspector: Removes public callLocation API from ScriptCallStack and replaces with ability to get top 10 stack frames</short_desc>
          <delta_ts>2010-05-24 14:14:03 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jaimeyap</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>knorton</cc>
    
    <cc>levin</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>211968</commentid>
    <comment_count>0</comment_count>
    <who name="">jaimeyap</who>
    <bug_when>2010-04-13 08:46:18 -0700</bug_when>
    <thetext>This patch removes public callLocation API from ScriptCallStack and replaces it with a function for getting top 10 stack frames, returned as a String.

ScriptCallStack::callLocation() had a null impl previously in JSC.  ScriptCallStack::stackTrace also has a null impl in JSC, so nothing has changed there.

I have updated the TimelinePanel UI to consume this stack trace instead of the callerLocation fields that used to be set on timeline records. I left it displaying only the top call frame since there are some UI considerations there that would probably be better addressed in a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211970</commentid>
    <comment_count>1</comment_count>
      <attachid>53257</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-04-13 08:53:09 -0700</bug_when>
    <thetext>Created attachment 53257
patch

I would like feedback on the general approach. One thing to note is that my measurements show that grabbing the stack trace only adds 1 to 3ms in the worse case to a node. This can add up for traces with hundreds or thousands of nodes. So I have implemented a simple cache for the current stack trace in InspectorTimelineAgent.cpp

The rationale is that the JS Stack trace, once acquired will be unchanged until we run some javascript. This means we invalidate the cached stack trace on ScriptEvaluation, FunctionCalls, or when we pop the record stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212198</commentid>
    <comment_count>2</comment_count>
      <attachid>53257</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-13 20:45:36 -0700</bug_when>
    <thetext>Comment on attachment 53257
patch

&gt; +    static bool stackTrace(String&amp; stackTrace);

Should be String* as in other places returning values.

&gt;  InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
&gt; -    : m_frontend(frontend)
&gt; +    : m_frontend(frontend),
&gt; +      m_currentStackTrace(),

No need to init this one.

&gt; +      m_hasStackTrace(false)

Is following true?

m_hasStackTrace == !m_currentStackTrace.isEmpty()

&gt;  {
&gt;      ++s_instanceCount;
&gt;      ScriptGCEvent::addEventListener(this);
&gt; @@ -57,7 +60,7 @@ InspectorTimelineAgent::InspectorTimelin
&gt;  void InspectorTimelineAgent::pushGCEventRecords()
&gt;  {
&gt;      for (GCEvents::iterator i = m_gcEvents.begin(); i != m_gcEvents.end(); ++i) {
&gt; -        ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i-&gt;startTime);
&gt; +        ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i-&gt;startTime, getCurrentStackTrace());

Present stack has nothing to do with the stack while doing GC.

&gt; +    if (m_recordStack.isEmpty()) {
&gt;          m_frontend-&gt;addRecordToTimeline(record);
&gt; -    else {
&gt; +        invalidateStackTrace();
&gt; +    } else {
&gt;          TimelineRecordEntry parent = m_recordStack.last();
&gt;          parent.children.set(parent.children.length(), record);
&gt;      }

No need for { } in single-line statements.

&gt; +String* InspectorTimelineAgent::getCurrentStackTrace()
&gt; +{
&gt; +    if (m_currentStackTrace.isEmpty()) {

I wonder if you covered all the cases where stack needs to be invalidated. How often do we get nested records where this cache is actually helping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212234</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2010-04-13 22:41:44 -0700</bug_when>
    <thetext>&gt; Index: WebCore/ChangeLog
&gt; +
&gt; +String* InspectorTimelineAgent::getCurrentStackTrace()
&gt; +{
&gt; +    if (m_currentStackTrace.isEmpty()) {       
&gt; +        m_hasStackTrace = ScriptCallStack::stackTrace(&amp;m_currentStackTrace);
&gt; +        // So that we don&apos;t attempt to regrab a strack trace when there is none to grab.
&gt; +        if (!m_hasStackTrace)
&gt; +            m_currentStackTrace = &quot;NotEmpty&quot;;
&gt; +    }
&gt; +    if (m_hasStackTrace)
&gt; +        return &amp;m_currentStackTrace;
&gt; +    else
&gt; +        return 0;
&gt; +}
&gt; +
&gt; +void InspectorTimelineAgent::invalidateStackTrace() {
&gt; +    m_currentStackTrace = &quot;&quot;;
&gt; +    m_hasStackTrace = false;
&gt; +}

We can have a bit complex situation as example with two listeners (an event with two nested callFunction events will be generated).
If the first one generate an install timer event then for the second willCallFunction event we assign the call stack of install timer event.

I think it might be interesting to cache call stack in the parent event record but I&apos;m not sure that we will have no problem.


&gt; @@ -811,8 +812,11 @@ WebInspector.TimelinePanel.FormattedReco
&gt;      } else if (record.type === recordTypes.TimerFire) {
&gt;          var timerInstalledRecord = timerRecords[record.data.timerId];
&gt;          if (timerInstalledRecord) {
&gt; -            this.callSiteScriptName = timerInstalledRecord.callerScriptName;
&gt; -            this.callSiteScriptLine = timerInstalledRecord.callerScriptLine;
&gt; +            var stackTrace = timerInstalledRecord.stackTrace;
&gt; +            if (stackTrace &amp;&amp; stackTrace[0]) {
&gt; +                this.callSiteScriptName = stackTrace[0].scriptName;
&gt; +                this.callSiteScriptLine = stackTrace[0].scriptLine + 1;                
&gt; +            }


We can&apos;t use +1 for scriptLine here because JSC numbers are starting from 1. It should be done in V8 specific code.



&gt; @@ -918,8 +922,10 @@ WebInspector.TimelinePanel.FormattedReco
&gt;                  recordContentTable.appendChild(this._createRow(WebInspector.UIString(&quot;Details&quot;), this.details));
&gt;          }
&gt;  
&gt; -        if (this.type !== recordTypes.GCEvent &amp;&amp; this.callerScriptName) {
&gt; -            var link = WebInspector.linkifyResourceAsNode(this.callerScriptName, &quot;scripts&quot;, this.callerScriptLine);
&gt; +        if (this.type !== recordTypes.GCEvent &amp;&amp; this.stackTrace) {
&gt; +            var callerScriptName = this.stackTrace[0] ? this.stackTrace[0].scriptName : &quot;&quot;;
&gt; +            var callerScriptLine = this.stackTrace[0] ? this.stackTrace[0].scriptLine + 1 : 0;


Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212327</commentid>
    <comment_count>4</comment_count>
    <who name="">jaimeyap</who>
    <bug_when>2010-04-14 07:02:27 -0700</bug_when>
    <thetext>I forgot to reply on the bug itself. I for some reason thought replying via email would post the response. Re-posting here:

(In reply to comment #2)
&gt; (From update of attachment 53257 [details])
&gt; &gt; +    static bool stackTrace(String&amp; stackTrace);
&gt; 
&gt; Should be String* as in other places returning values.
&gt; 
&gt; &gt;  InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
&gt; &gt; -    : m_frontend(frontend)
&gt; &gt; +    : m_frontend(frontend),
&gt; &gt; +      m_currentStackTrace(),
&gt; 
&gt; No need to init this one.
&gt; 
&gt; &gt; +      m_hasStackTrace(false)
&gt; 
&gt; Is following true?
&gt; 
&gt; m_hasStackTrace == !m_currentStackTrace.isEmpty()

Not necessarily. Consider the case where the the method in the utility context fails to set a value for the stack trace (in the case where there is no stack trace). That is, we try to retrieve a stack trace, but for some reason the returned value is the empty String.

We do not want to have to re-enter the utility context for each node if we have already attempted to retrieve a stack trace, so we need to keep some separate state reflecting the condition &quot;I have checked for a stack trace, and failed to get one.&quot;. This is separate from simply saying &quot;The stack is invalid&quot; (empty) or &quot;the stack is valid&quot; (set to some value).

&gt; 
&gt; &gt;  {
&gt; &gt;      ++s_instanceCount;
&gt; &gt;      ScriptGCEvent::addEventListener(this);
&gt; &gt; @@ -57,7 +60,7 @@ InspectorTimelineAgent::InspectorTimelin
&gt; &gt;  void InspectorTimelineAgent::pushGCEventRecords()
&gt; &gt;  {
&gt; &gt;      for (GCEvents::iterator i = m_gcEvents.begin(); i != m_gcEvents.end(); ++i) {
&gt; &gt; -        ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i-&gt;startTime);
&gt; &gt; +        ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i-&gt;startTime, getCurrentStackTrace());
&gt; 
&gt; Present stack has nothing to do with the stack while doing GC.
&gt; 

Good point.

&gt; &gt; +    if (m_recordStack.isEmpty()) {
&gt; &gt;          m_frontend-&gt;addRecordToTimeline(record);
&gt; &gt; -    else {
&gt; &gt; +        invalidateStackTrace();
&gt; &gt; +    } else {
&gt; &gt;          TimelineRecordEntry parent = m_recordStack.last();
&gt; &gt;          parent.children.set(parent.children.length(), record);
&gt; &gt;      }
&gt; 
&gt; No need for { } in single-line statements.
&gt; 
&gt; &gt; +String* InspectorTimelineAgent::getCurrentStackTrace()
&gt; &gt; +{
&gt; &gt; +    if (m_currentStackTrace.isEmpty()) {
&gt; 
&gt; I wonder if you covered all the cases where stack needs to be invalidated. 

I did miss a few cases. I will update the patch in the morning. I also need to invalidate when popping function call and eval script.

How
&gt; often do we get nested records where this cache is actually helping?

Alot! You should see Wave or GMail. The pattern of UI construction where using innerHTML for lots of small widgets causes literally hundreds of parseHTML nodes. For nearly all complicated traces, caching the trace  makes a very large difference. It is literally the difference between a few milliseconds versus sometimes several seconds of overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212333</commentid>
    <comment_count>5</comment_count>
    <who name="">jaimeyap</who>
    <bug_when>2010-04-14 07:19:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; +
&gt; &gt; +String* InspectorTimelineAgent::getCurrentStackTrace()
&gt; &gt; +{
&gt; &gt; +    if (m_currentStackTrace.isEmpty()) {       
&gt; &gt; +        m_hasStackTrace = ScriptCallStack::stackTrace(&amp;m_currentStackTrace);
&gt; &gt; +        // So that we don&apos;t attempt to regrab a strack trace when there is none to grab.
&gt; &gt; +        if (!m_hasStackTrace)
&gt; &gt; +            m_currentStackTrace = &quot;NotEmpty&quot;;
&gt; &gt; +    }
&gt; &gt; +    if (m_hasStackTrace)
&gt; &gt; +        return &amp;m_currentStackTrace;
&gt; &gt; +    else
&gt; &gt; +        return 0;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void InspectorTimelineAgent::invalidateStackTrace() {
&gt; &gt; +    m_currentStackTrace = &quot;&quot;;
&gt; &gt; +    m_hasStackTrace = false;
&gt; &gt; +}
&gt; 
&gt; We can have a bit complex situation as example with two listeners (an event
&gt; with two nested callFunction events will be generated).
&gt; If the first one generate an install timer event then for the second
&gt; willCallFunction event we assign the call stack of install timer event.

Do the willCallFunctions nest within eachother? Or will they be peers? If they are peers then it will be sufficient to invalidate the stack when popping willCallFunctions. 

That being said though, I think I had a rather large flaw in my reasoning about re-entering javascript. The approach that I thought would work was to invalidate:
- When pushing willCallFunction or EvalScript.
- When popping willCallFunction or EvalScript.
- When popping the entire record stack, completing a top level event.

But the issue is that control can return to javascript anytime within either of these two events. I am starting to think that caching the stack trace is in fact incorrect in the common case. It only &quot;helps&quot; in the cases where layout and style recalculation run side-by-side before returning control to JS, and in the case where nodes nest before returning control to JS. The case I intended to optimize, which is the common case where we have many peer nodes that are children of some JavaScript execution, would in fact be incorrect to no re-grab stack traces each time.

I will experiment with reducing the number of stack frames we stringify to see what overhead we still see. I think I will take out the cache in my subsequent patch.

&gt; 
&gt; I think it might be interesting to cache call stack in the parent event record
&gt; but I&apos;m not sure that we will have no problem.
&gt; 
&gt; 
&gt; &gt; @@ -811,8 +812,11 @@ WebInspector.TimelinePanel.FormattedReco
&gt; &gt;      } else if (record.type === recordTypes.TimerFire) {
&gt; &gt;          var timerInstalledRecord = timerRecords[record.data.timerId];
&gt; &gt;          if (timerInstalledRecord) {
&gt; &gt; -            this.callSiteScriptName = timerInstalledRecord.callerScriptName;
&gt; &gt; -            this.callSiteScriptLine = timerInstalledRecord.callerScriptLine;
&gt; &gt; +            var stackTrace = timerInstalledRecord.stackTrace;
&gt; &gt; +            if (stackTrace &amp;&amp; stackTrace[0]) {
&gt; &gt; +                this.callSiteScriptName = stackTrace[0].scriptName;
&gt; &gt; +                this.callSiteScriptLine = stackTrace[0].scriptLine + 1;                
&gt; &gt; +            }
&gt; 
&gt; 
&gt; We can&apos;t use +1 for scriptLine here because JSC numbers are starting from 1. It
&gt; should be done in V8 specific code.
&gt; 

Yes ofcourse :).

&gt; 
&gt; 
&gt; &gt; @@ -918,8 +922,10 @@ WebInspector.TimelinePanel.FormattedReco
&gt; &gt;                  recordContentTable.appendChild(this._createRow(WebInspector.UIString(&quot;Details&quot;), this.details));
&gt; &gt;          }
&gt; &gt;  
&gt; &gt; -        if (this.type !== recordTypes.GCEvent &amp;&amp; this.callerScriptName) {
&gt; &gt; -            var link = WebInspector.linkifyResourceAsNode(this.callerScriptName, &quot;scripts&quot;, this.callerScriptLine);
&gt; &gt; +        if (this.type !== recordTypes.GCEvent &amp;&amp; this.stackTrace) {
&gt; &gt; +            var callerScriptName = this.stackTrace[0] ? this.stackTrace[0].scriptName : &quot;&quot;;
&gt; &gt; +            var callerScriptLine = this.stackTrace[0] ? this.stackTrace[0].scriptLine + 1 : 0;
&gt; 
&gt; 
&gt; Ditto.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224232</commentid>
    <comment_count>6</comment_count>
      <attachid>55774</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-11 16:14:38 -0700</bug_when>
    <thetext>Created attachment 55774
uses new v8 stacktrace api.

This patch has the same intended functionality, but it uses the new StackTrace API in V8.

It is very fast, and it removes the need to the utility context in ScriptCallStack. I would like some comments before requesting commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224290</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-11 17:36:36 -0700</bug_when>
    <thetext>Attachment 55774 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2231171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224301</commentid>
    <comment_count>8</comment_count>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-11 17:52:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 55774 [details] did not build on chromium:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/2231171

This V8 API just got rolled into chromium. I am assuming this build failure it due to the webkit try bots needing a Deps roll.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224303</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-11 17:56:07 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Attachment 55774 [details] [details] did not build on chromium:
&gt; &gt; Build output: http://webkit-commit-queue.appspot.com/results/2231171
&gt; 
&gt; This V8 API just got rolled into chromium. I am assuming this build failure it due to the webkit try bots needing a Deps roll.

You likely need to change this file: http://trac.webkit.org/browser/trunk/WebKit/chromium/DEPS to pick up a new version of chromium (and that will in turn pick up the new v8 rev).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224402</commentid>
    <comment_count>10</comment_count>
      <attachid>55774</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-11 22:07:00 -0700</bug_when>
    <thetext>Comment on attachment 55774
uses new v8 stacktrace api.

Great job! Make sure you roll the WebKit deps bots as suggested by David.

WebCore/bindings/v8/ScriptCallStack.cpp:97
 +      if (trace.IsEmpty() || !trace-&gt;GetFrameCount()) {
no { } needed

WebCore/bindings/v8/ScriptCallStack.cpp:98
 +        return false;
wrong indent

WebCore/inspector/TimelineRecordFactory.cpp:53
 +      if (ScriptCallStack::stackTrace(5, frontend-&gt;scriptState(), stackTrace)) {
no { } needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224619</commentid>
    <comment_count>11</comment_count>
      <attachid>55848</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-12 08:17:41 -0700</bug_when>
    <thetext>Created attachment 55848
Fixes style issues and updates chromium deps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226351</commentid>
    <comment_count>12</comment_count>
      <attachid>55848</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 16:51:10 -0700</bug_when>
    <thetext>Comment on attachment 55848
Fixes style issues and updates chromium deps

Rejecting patch 55848 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Pavel Feldman&apos;, u&apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
youtTests/inspector/timeline-test.js
patching file LayoutTests/platform/chromium-win/inspector/timeline-event-dispatch-expected.txt
patching file LayoutTests/platform/chromium-win/inspector/timeline-mark-timeline-expected.txt
patching file LayoutTests/platform/chromium-win/inspector/timeline-network-resource-expected.txt
patching file LayoutTests/platform/chromium-win/inspector/timeline-paint-expected.txt
patching file LayoutTests/platform/chromium-win/inspector/timeline-parse-html-expected.txt

Full output: http://webkit-commit-queue.appspot.com/results/2312131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226430</commentid>
    <comment_count>13</comment_count>
      <attachid>55774</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-16 00:35:52 -0700</bug_when>
    <thetext>Comment on attachment 55774
uses new v8 stacktrace api.

Cleared Pavel Feldman&apos;s review+ from obsolete attachment 55774 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226832</commentid>
    <comment_count>14</comment_count>
      <attachid>56252</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-17 11:09:02 -0700</bug_when>
    <thetext>Created attachment 56252
undoes the DEPS change

The previous patch rolled the chromium deps, but someone else rolled it before the commit queue got to it, and thus it conflicted.

This patch simply undoes the DEPS change since the DEPS in webkit should support the appropriate version of chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226833</commentid>
    <comment_count>15</comment_count>
      <attachid>55848</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-17 11:10:06 -0700</bug_when>
    <thetext>Comment on attachment 55848
Fixes style issues and updates chromium deps

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 59177)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,28 @@
&gt; +2010-05-11  Jaime Yap  &lt;jaimeyap@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Removes public callLocation API and utility context from ScriptCallStack.
&gt; +        Adds ability to grab the top 5 JavaScript stack frames for each timeline
&gt; +        record using new fast V8 stack trace API.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=37502
&gt; +
&gt; +        * bindings/js/ScriptCallStack.cpp:
&gt; +        (WebCore::ScriptCallStack::stackTrace):
&gt; +        * bindings/js/ScriptCallStack.h:
&gt; +        * bindings/v8/ScriptArray.h:
&gt; +        (WebCore::ScriptArray::ScriptArray):
&gt; +        * bindings/v8/ScriptCallStack.cpp:
&gt; +        (WebCore::ScriptCallStack::callLocation):
&gt; +        (WebCore::ScriptCallStack::stackTrace):
&gt; +        * bindings/v8/ScriptCallStack.h:
&gt; +        * inspector/TimelineRecordFactory.cpp:
&gt; +        (WebCore::TimelineRecordFactory::createGenericRecord):
&gt; +        * inspector/front-end/TimelinePanel.js:
&gt; +        (WebInspector.TimelinePanel.FormattedRecord):
&gt; +        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
&gt; +        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
&gt; +
&gt;  2010-05-11  Mark Rowe  &lt;mrowe@apple.com&gt;
&gt;  
&gt;          Fix the world.
&gt; Index: WebCore/bindings/js/ScriptCallStack.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/js/ScriptCallStack.cpp	(revision 59174)
&gt; +++ WebCore/bindings/js/ScriptCallStack.cpp	(working copy)
&gt; @@ -101,7 +101,7 @@ void ScriptCallStack::initialize()
&gt;      m_initialized = true;
&gt;  }
&gt;  
&gt; -bool ScriptCallStack::callLocation(String*, int*, String*)
&gt; +bool ScriptCallStack::stackTrace(int, ScriptState*, ScriptArray&amp;)
&gt;  {
&gt;      return false;
&gt;  }
&gt; Index: WebCore/bindings/js/ScriptCallStack.h
&gt; ===================================================================
&gt; --- WebCore/bindings/js/ScriptCallStack.h	(revision 59174)
&gt; +++ WebCore/bindings/js/ScriptCallStack.h	(working copy)
&gt; @@ -31,6 +31,7 @@
&gt;  #ifndef ScriptCallStack_h
&gt;  #define ScriptCallStack_h
&gt;  
&gt; +#include &quot;ScriptArray.h&quot;
&gt;  #include &quot;ScriptCallFrame.h&quot;
&gt;  #include &quot;ScriptState.h&quot;
&gt;  #include &quot;ScriptString.h&quot;
&gt; @@ -53,7 +54,7 @@ namespace WebCore {
&gt;          // frame retrieval methods
&gt;          const ScriptCallFrame &amp;at(unsigned);
&gt;          unsigned size();
&gt; -        static bool callLocation(String*, int*, String*);
&gt; +        static bool stackTrace(int, ScriptState*, ScriptArray&amp;);
&gt;  
&gt;      private:
&gt;          void initialize();
&gt; Index: WebCore/bindings/v8/ScriptArray.h
&gt; ===================================================================
&gt; --- WebCore/bindings/v8/ScriptArray.h	(revision 59174)
&gt; +++ WebCore/bindings/v8/ScriptArray.h	(working copy)
&gt; @@ -41,6 +41,7 @@ namespace WebCore {
&gt;      class ScriptArray : public ScriptObject {
&gt;      public:
&gt;          ScriptArray(ScriptState* scriptState, v8::Handle&lt;v8::Array&gt;);
&gt; +        ScriptArray() {};
&gt;          virtual ~ScriptArray() {}
&gt;  
&gt;          bool set(unsigned index, const ScriptObject&amp;);
&gt; Index: WebCore/bindings/v8/ScriptCallStack.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/v8/ScriptCallStack.cpp	(revision 59174)
&gt; +++ WebCore/bindings/v8/ScriptCallStack.cpp	(working copy)
&gt; @@ -31,6 +31,7 @@
&gt;  #include &quot;config.h&quot;
&gt;  #include &quot;ScriptCallStack.h&quot;
&gt;  
&gt; +#include &quot;ScriptScope.h&quot;
&gt;  #include &quot;ScriptController.h&quot;
&gt;  #include &quot;ScriptDebugServer.h&quot;
&gt;  #include &quot;V8Binding.h&quot;
&gt; @@ -41,8 +42,6 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -v8::Persistent&lt;v8::Context&gt; ScriptCallStack::s_utilityContext;
&gt; -
&gt;  ScriptCallStack* ScriptCallStack::create(const v8::Arguments&amp; arguments, unsigned skipArgumentCount) {
&gt;      String sourceName;
&gt;      int sourceLineNumber;
&gt; @@ -54,9 +53,22 @@ ScriptCallStack* ScriptCallStack::create
&gt;  
&gt;  bool ScriptCallStack::callLocation(String* sourceName, int* sourceLineNumber, String* functionName)
&gt;  {
&gt; -    if (!topStackFrame(*sourceName, *sourceLineNumber, *functionName))
&gt; -        return false;
&gt; -    *sourceLineNumber += 1;
&gt; +    v8::HandleScope scope;
&gt; +    v8::Context::Scope contextScope(v8::Context::GetCurrent());
&gt; +    v8::Handle&lt;v8::StackTrace&gt; stackTrace(v8::StackTrace::CurrentStackTrace(1));
&gt; +    if (stackTrace.IsEmpty())
&gt; +        return false;
&gt; +    if (stackTrace-&gt;GetFrameCount() &lt;= 0) {
&gt; +        // Fallback to setting lineNumber to 0, and source and function name to &quot;undefined&quot;.
&gt; +        *sourceName = toWebCoreString(v8::Undefined());
&gt; +        *sourceLineNumber = 0;
&gt; +        *functionName = toWebCoreString(v8::Undefined());
&gt; +        return true;
&gt; +    }
&gt; +    v8::Handle&lt;v8::StackFrame&gt; frame = stackTrace-&gt;GetFrame(0);
&gt; +    *sourceName = toWebCoreString(frame-&gt;GetScriptName());
&gt; +    *sourceLineNumber = frame-&gt;GetLineNumber();
&gt; +    *functionName = toWebCoreString(frame-&gt;GetFunctionName());
&gt;      return true;
&gt;  }
&gt;  
&gt; @@ -78,66 +90,13 @@ const ScriptCallFrame&amp; ScriptCallStack::
&gt;      return m_lastCaller;
&gt;  }
&gt;  
&gt; -// Create the utility context for holding JavaScript functions used internally
&gt; -// which are not visible to JavaScript executing on the page.
&gt; -void ScriptCallStack::createUtilityContext()
&gt; +bool ScriptCallStack::stackTrace(int frameLimit, ScriptState* state, ScriptArray&amp; stackTrace)
&gt;  {
&gt; -    ASSERT(s_utilityContext.IsEmpty());
&gt; -
&gt; -    v8::HandleScope scope;
&gt; -    v8::Handle&lt;v8::ObjectTemplate&gt; globalTemplate = v8::ObjectTemplate::New();
&gt; -    s_utilityContext = v8::Context::New(0, globalTemplate);
&gt; -    v8::Context::Scope contextScope(s_utilityContext);
&gt; -
&gt; -    // Compile JavaScript function for retrieving the source line, the source
&gt; -    // name and the symbol name for the top JavaScript stack frame.
&gt; -    DEFINE_STATIC_LOCAL(const char*, topStackFrame,
&gt; -        (&quot;function topStackFrame(exec_state) {&quot;
&gt; -        &quot;  if (!exec_state.frameCount())&quot;
&gt; -        &quot;      return undefined;&quot;
&gt; -        &quot;  var frame = exec_state.frame(0);&quot;
&gt; -        &quot;  var func = frame.func();&quot;
&gt; -        &quot;  var scriptName;&quot;
&gt; -        &quot;  if (func.resolved() &amp;&amp; func.script())&quot;
&gt; -        &quot;      scriptName = func.script().name();&quot;
&gt; -        &quot;  return [scriptName, frame.sourceLine(), (func.name() || func.inferredName())];&quot;
&gt; -        &quot;}&quot;));
&gt; -    v8::Script::Compile(v8::String::New(topStackFrame))-&gt;Run();
&gt; -}
&gt; -
&gt; -bool ScriptCallStack::topStackFrame(String&amp; sourceName, int&amp; lineNumber, String&amp; functionName)
&gt; -{
&gt; -    v8::HandleScope scope;
&gt; -    v8::Handle&lt;v8::Context&gt; v8UtilityContext = utilityContext();
&gt; -    if (v8UtilityContext.IsEmpty())
&gt; -        return false;
&gt; -    v8::Context::Scope contextScope(v8UtilityContext);
&gt; -    v8::Handle&lt;v8::Function&gt; topStackFrame;
&gt; -    topStackFrame = v8::Local&lt;v8::Function&gt;::Cast(v8UtilityContext-&gt;Global()-&gt;Get(v8::String::New(&quot;topStackFrame&quot;)));
&gt; -    if (topStackFrame.IsEmpty())
&gt; -        return false;
&gt; -    v8::Handle&lt;v8::Value&gt; value = v8::Debug::Call(topStackFrame);
&gt; -    if (value.IsEmpty())
&gt; -        return false;
&gt; -    // If there is no top stack frame, we still return success, but fill the input params with defaults.
&gt; -    if (value-&gt;IsUndefined()) {
&gt; -      // Fallback to setting lineNumber to 0, and source and function name to &quot;undefined&quot;.
&gt; -      sourceName = toWebCoreString(value);
&gt; -      lineNumber = 0;
&gt; -      functionName = toWebCoreString(value);
&gt; -      return true;
&gt; -    }
&gt; -    if (!value-&gt;IsArray())
&gt; -        return false;
&gt; -    v8::Local&lt;v8::Object&gt; jsArray = value-&gt;ToObject();
&gt; -    v8::Local&lt;v8::Value&gt; sourceNameValue = jsArray-&gt;Get(0);
&gt; -    v8::Local&lt;v8::Value&gt; lineNumberValue = jsArray-&gt;Get(1);
&gt; -    v8::Local&lt;v8::Value&gt; functionNameValue = jsArray-&gt;Get(2);
&gt; -    if (sourceNameValue.IsEmpty() || lineNumberValue.IsEmpty() || functionNameValue.IsEmpty())
&gt; +    ScriptScope scope(state);
&gt; +    v8::Handle&lt;v8::StackTrace&gt; trace(v8::StackTrace::CurrentStackTrace(frameLimit));
&gt; +    if (trace.IsEmpty() || !trace-&gt;GetFrameCount())
&gt;          return false;
&gt; -    sourceName = toWebCoreString(sourceNameValue);
&gt; -    lineNumber = lineNumberValue-&gt;Int32Value();
&gt; -    functionName = toWebCoreString(functionNameValue);
&gt; +    stackTrace = ScriptArray(state, trace-&gt;AsArray());
&gt;      return true;
&gt;  }
&gt;  
&gt; Index: WebCore/bindings/v8/ScriptCallStack.h
&gt; ===================================================================
&gt; --- WebCore/bindings/v8/ScriptCallStack.h	(revision 59174)
&gt; +++ WebCore/bindings/v8/ScriptCallStack.h	(working copy)
&gt; @@ -31,6 +31,7 @@
&gt;  #ifndef ScriptCallStack_h
&gt;  #define ScriptCallStack_h
&gt;  
&gt; +#include &quot;ScriptArray.h&quot;
&gt;  #include &quot;ScriptCallFrame.h&quot;
&gt;  #include &quot;ScriptState.h&quot;
&gt;  #include &quot;ScriptValue.h&quot;
&gt; @@ -47,7 +48,16 @@ public:
&gt;      static ScriptCallStack* create(const v8::Arguments&amp;, unsigned skipArgumentCount = 0);
&gt;      ~ScriptCallStack();
&gt;  
&gt; -    static bool callLocation(String* sourceName, int* sourceLineNumber, String* functionName);
&gt; +    // Returns false if there is no running JavaScript or if fetching the stack failed.
&gt; +    // Sets stackTrace to be an array of stack frame objects.
&gt; +    // A stack frame object looks like:
&gt; +    // {
&gt; +    //   scriptName: &lt;file name for the associated script resource&gt;
&gt; +    //   functionName: &lt;name of the JavaScript function&gt;
&gt; +    //   lineNumber: &lt;1 based line number&gt;
&gt; +    //   column: &lt;1 based column offset on the line&gt;
&gt; +    // }
&gt; +    static bool stackTrace(int frameLimit, ScriptState* state, ScriptArray&amp; stackTrace);
&gt;  
&gt;      const ScriptCallFrame&amp; at(unsigned) const;
&gt;      // FIXME: implement retrieving and storing call stack trace
&gt; @@ -59,30 +69,10 @@ public:
&gt;  private:
&gt;      ScriptCallStack(const v8::Arguments&amp; arguments, unsigned skipArgumentCount, String sourceName, int sourceLineNumber, String funcName);
&gt;  
&gt; -    // Function for retrieving the source name, line number and function name for the top
&gt; -    // JavaScript stack frame.
&gt; -    //
&gt; -    // It will return true if the caller information was successfully retrieved and written
&gt; -    // into the function parameters, otherwise the function will return false. It may
&gt; -    // fail due to a stack overflow in the underlying JavaScript implementation, handling
&gt; -    // of such exception is up to the caller.
&gt; -    static bool topStackFrame(String&amp; sourceName, int&amp; lineNumber, String&amp; functionName);
&gt; -
&gt; -    static void createUtilityContext();
&gt; -
&gt; -     // Returns a local handle of the utility context.
&gt; -    static v8::Local&lt;v8::Context&gt; utilityContext()
&gt; -    {
&gt; -      if (s_utilityContext.IsEmpty())
&gt; -          createUtilityContext();
&gt; -      return v8::Local&lt;v8::Context&gt;::New(s_utilityContext);
&gt; -    }
&gt; +    static bool callLocation(String* sourceName, int* sourceLineNumber, String* functionName);
&gt;  
&gt;      ScriptCallFrame m_lastCaller;
&gt;      ScriptState* m_scriptState;
&gt; -
&gt; -    // Utility context holding JavaScript functions used internally.
&gt; -    static v8::Persistent&lt;v8::Context&gt; s_utilityContext;
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; Index: WebCore/inspector/TimelineRecordFactory.cpp
&gt; ===================================================================
&gt; --- WebCore/inspector/TimelineRecordFactory.cpp	(revision 59174)
&gt; +++ WebCore/inspector/TimelineRecordFactory.cpp	(working copy)
&gt; @@ -49,14 +49,9 @@ ScriptObject TimelineRecordFactory::crea
&gt;      ScriptObject record = frontend-&gt;newScriptObject();
&gt;      record.set(&quot;startTime&quot;, startTime);
&gt;  
&gt; -    String sourceName;
&gt; -    int sourceLineNumber;
&gt; -    String functionName;
&gt; -    if (ScriptCallStack::callLocation(&amp;sourceName, &amp;sourceLineNumber, &amp;functionName) &amp;&amp; sourceName != &quot;undefined&quot;) {
&gt; -        record.set(&quot;callerScriptName&quot;, sourceName);
&gt; -        record.set(&quot;callerScriptLine&quot;, sourceLineNumber);
&gt; -        record.set(&quot;callerFunctionName&quot;, functionName);
&gt; -    }
&gt; +    ScriptArray stackTrace;
&gt; +    if (ScriptCallStack::stackTrace(5, frontend-&gt;scriptState(), stackTrace))
&gt; +        record.set(&quot;stackTrace&quot;, stackTrace);
&gt;      return record;
&gt;  }
&gt;  
&gt; Index: WebCore/inspector/front-end/TimelinePanel.js
&gt; ===================================================================
&gt; --- WebCore/inspector/front-end/TimelinePanel.js	(revision 59174)
&gt; +++ WebCore/inspector/front-end/TimelinePanel.js	(working copy)
&gt; @@ -800,8 +800,7 @@ WebInspector.TimelinePanel.FormattedReco
&gt;      this._selfTime = this.endTime - this.startTime;
&gt;      this._lastChildEndTime = this.endTime;
&gt;      this.originalRecordForTests = record;
&gt; -    this.callerScriptName = record.callerScriptName;
&gt; -    this.callerScriptLine = record.callerScriptLine;
&gt; +    this.stackTrace = record.stackTrace;
&gt;      this.totalHeapSize = record.totalHeapSize;
&gt;      this.usedHeapSize = record.usedHeapSize;
&gt;  
&gt; @@ -830,8 +829,11 @@ WebInspector.TimelinePanel.FormattedReco
&gt;      } else if (record.type === recordTypes.TimerFire) {
&gt;          var timerInstalledRecord = timerRecords[record.data.timerId];
&gt;          if (timerInstalledRecord) {
&gt; -            this.callSiteScriptName = timerInstalledRecord.callerScriptName;
&gt; -            this.callSiteScriptLine = timerInstalledRecord.callerScriptLine;
&gt; +            if (timerInstalledRecord.stackTrace) {
&gt; +                var callSite = timerInstalledRecord.stackTrace[0];            
&gt; +                this.callSiteScriptName = callSite.scriptName;
&gt; +                this.callSiteScriptLine = callSite.lineNumber;
&gt; +            }
&gt;              this.timeout = timerInstalledRecord.timeout;
&gt;              this.singleShot = timerInstalledRecord.singleShot;
&gt;          }
&gt; @@ -931,8 +933,10 @@ WebInspector.TimelinePanel.FormattedReco
&gt;          if (this.data.scriptName &amp;&amp; this.type !== recordTypes.FunctionCall)
&gt;              contentHelper._appendLinkRow(&quot;Function Call&quot;, this.data.scriptName, this.data.scriptLine);
&gt;  
&gt; -        if (this.callerScriptName &amp;&amp; this.type !== recordTypes.GCEvent)
&gt; -            contentHelper._appendLinkRow(&quot;Caller&quot;, this.callerScriptName, this.callerScriptLine);
&gt; +        if (this.stackTrace &amp;&amp; this.type !== recordTypes.GCEvent) {
&gt; +            var callSite = this.stackTrace[0];
&gt; +            contentHelper._appendLinkRow(&quot;Caller&quot;, callSite.scriptName, callSite.lineNumber);
&gt; +        }
&gt;  
&gt;          if (this.usedHeapSize)
&gt;              contentHelper._appendTextRow(&quot;Used Heap Size&quot;, WebInspector.UIString(&quot;%s of %s&quot;, Number.bytesToString(this.usedHeapSize), Number.bytesToString(this.totalHeapSize)));
&gt; @@ -955,7 +959,8 @@ WebInspector.TimelinePanel.FormattedReco
&gt;                  return record.data.width + &quot;\u2009\u00d7\u2009&quot; + record.data.height;
&gt;              case WebInspector.TimelineAgent.RecordType.TimerInstall:
&gt;              case WebInspector.TimelineAgent.RecordType.TimerRemove:
&gt; -                return this.callerScriptName ? WebInspector.linkifyResourceAsNode(this.callerScriptName, &quot;scripts&quot;, this.callerScriptLine, &quot;&quot;, &quot;&quot;) : record.data.timerId;
&gt; +                var callSite = this.stackTrace;
&gt; +                return callSite ? WebInspector.linkifyResourceAsNode(callSite.scriptName, &quot;scripts&quot;, callSite.lineNumber, &quot;&quot;, &quot;&quot;) : record.data.timerId;
&gt;              case WebInspector.TimelineAgent.RecordType.ParseHTML:
&gt;              case WebInspector.TimelineAgent.RecordType.RecalculateStyles:
&gt;                  return this.callerScriptName ? WebInspector.linkifyResourceAsNode(this.callerScriptName, &quot;scripts&quot;, this.callerScriptLine, &quot;&quot;, &quot;&quot;) : null;
&gt; Index: WebKit/chromium/DEPS
&gt; ===================================================================
&gt; --- WebKit/chromium/DEPS	(revision 59174)
&gt; +++ WebKit/chromium/DEPS	(working copy)
&gt; @@ -32,7 +32,7 @@
&gt;  
&gt;  vars = {
&gt;    &apos;chromium_svn&apos;: &apos;http://src.chromium.org/svn/trunk/src&apos;,
&gt; -  &apos;chromium_rev&apos;: &apos;46805&apos;,
&gt; +  &apos;chromium_rev&apos;: &apos;46991&apos;,
&gt;  
&gt;    &apos;pthreads-win32_rev&apos;: &apos;26716&apos;,
&gt;  }
&gt; Index: LayoutTests/ChangeLog
&gt; ===================================================================
&gt; --- LayoutTests/ChangeLog	(revision 59177)
&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; @@ -1,3 +1,17 @@
&gt; +2010-05-11  Jaime Yap  &lt;jaimeyap@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Test expectations changed due to new stackTrace field on timeline records.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=37502
&gt; +
&gt; +        * inspector/timeline-test.js:
&gt; +        * platform/chromium-win/inspector/timeline-event-dispatch-expected.txt:
&gt; +        * platform/chromium-win/inspector/timeline-mark-timeline-expected.txt:
&gt; +        * platform/chromium-win/inspector/timeline-network-resource-expected.txt:
&gt; +        * platform/chromium-win/inspector/timeline-paint-expected.txt:
&gt; +        * platform/chromium-win/inspector/timeline-parse-html-expected.txt:
&gt; +
&gt;  2010-05-11  Dimitri Glazkov  &lt;dglazkov@chromium.org&gt;
&gt;  
&gt;          Reviewed by Darin Adler.
&gt; Index: LayoutTests/inspector/timeline-test.js
&gt; ===================================================================
&gt; --- LayoutTests/inspector/timeline-test.js	(revision 59174)
&gt; +++ LayoutTests/inspector/timeline-test.js	(working copy)
&gt; @@ -8,9 +8,7 @@ var timelineNonDeterministicProps = { 
&gt;      identifier : 1,
&gt;      startTime : 1,
&gt;      width : 1,
&gt; -    callerScriptName: 1,
&gt; -    callerScriptLine: 1,
&gt; -    callerFunctionName: 1,
&gt; +    stackTrace: 1,
&gt;      url : 1,
&gt;      usedHeapSize: 1,
&gt;      totalHeapSize: 1,
&gt; Index: LayoutTests/platform/chromium-win/inspector/timeline-event-dispatch-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/chromium-win/inspector/timeline-event-dispatch-expected.txt	(revision 59174)
&gt; +++ LayoutTests/platform/chromium-win/inspector/timeline-event-dispatch-expected.txt	(working copy)
&gt; @@ -3,9 +3,7 @@ Tests the Timeline API instrumentation o
&gt;  Test Mouse Target
&gt;  EventDispatch Properties:
&gt;  + startTime : * DEFINED *
&gt; -+ callerScriptName : * DEFINED *
&gt; -+ callerScriptLine : * DEFINED *
&gt; -+ callerFunctionName : * DEFINED *
&gt; ++ stackTrace : * DEFINED *
&gt;  + data : {
&gt;  +- type : mousedown
&gt;  + }
&gt; Index: LayoutTests/platform/chromium-win/inspector/timeline-mark-timeline-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/chromium-win/inspector/timeline-mark-timeline-expected.txt	(revision 59174)
&gt; +++ LayoutTests/platform/chromium-win/inspector/timeline-mark-timeline-expected.txt	(working copy)
&gt; @@ -2,9 +2,7 @@ Tests the Timeline API mark feature
&gt;  
&gt;  MarkTimeline Properties:
&gt;  + startTime : * DEFINED *
&gt; -+ callerScriptName : * DEFINED *
&gt; -+ callerScriptLine : * DEFINED *
&gt; -+ callerFunctionName : * DEFINED *
&gt; ++ stackTrace : * DEFINED *
&gt;  + data : {
&gt;  +- message : MARK TIMELINE
&gt;  + }
&gt; Index: LayoutTests/platform/chromium-win/inspector/timeline-network-resource-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/chromium-win/inspector/timeline-network-resource-expected.txt	(revision 59174)
&gt; +++ LayoutTests/platform/chromium-win/inspector/timeline-network-resource-expected.txt	(working copy)
&gt; @@ -3,9 +3,7 @@ Tests the Timeline API instrumentation o
&gt;  
&gt;  ResourceSendRequest Properties:
&gt;  + startTime : * DEFINED *
&gt; -+ callerScriptName : * DEFINED *
&gt; -+ callerScriptLine : * DEFINED *
&gt; -+ callerFunctionName : * DEFINED *
&gt; ++ stackTrace : * DEFINED *
&gt;  + data : {
&gt;  +- identifier : * DEFINED *
&gt;  +- url : * DEFINED *
&gt; Index: LayoutTests/platform/chromium-win/inspector/timeline-paint-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/chromium-win/inspector/timeline-paint-expected.txt	(revision 59174)
&gt; +++ LayoutTests/platform/chromium-win/inspector/timeline-paint-expected.txt	(working copy)
&gt; @@ -2,9 +2,7 @@ Tests the Timeline API instrumentation o
&gt;  
&gt;  Paint Properties:
&gt;  + startTime : * DEFINED *
&gt; -+ callerScriptName : * DEFINED *
&gt; -+ callerScriptLine : * DEFINED *
&gt; -+ callerFunctionName : * DEFINED *
&gt; ++ stackTrace : * DEFINED *
&gt;  + data : {
&gt;  +- x : 0
&gt;  +- y : 0
&gt; Index: LayoutTests/platform/chromium-win/inspector/timeline-parse-html-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/chromium-win/inspector/timeline-parse-html-expected.txt	(revision 59174)
&gt; +++ LayoutTests/platform/chromium-win/inspector/timeline-parse-html-expected.txt	(working copy)
&gt; @@ -2,9 +2,7 @@ Tests the Timeline API instrumentation o
&gt;  
&gt;  ParseHTML Properties:
&gt;  + startTime : * DEFINED *
&gt; -+ callerScriptName : * DEFINED *
&gt; -+ callerScriptLine : * DEFINED *
&gt; -+ callerFunctionName : * DEFINED *
&gt; ++ stackTrace : * DEFINED *
&gt;  + data : {
&gt;  +- length : 9
&gt;  +- startLine : 0

R-ing this obsolete patch so that it no longer shows up in commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227358</commentid>
    <comment_count>16</comment_count>
      <attachid>56252</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-18 10:01:41 -0700</bug_when>
    <thetext>Comment on attachment 56252
undoes the DEPS change

Changeset 59570 (see https://bugs.webkit.org/show_bug.cgi?id=39086) is going to conflict with this change when eseidel pumps the commit queue.

Argg. I am C- and R- ing again. Will update the patch after rebasing.

Can someone land this by hand when I update the patch? Its been stomped on twice due to commit latency :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227415</commentid>
    <comment_count>17</comment_count>
      <attachid>56398</attachid>
    <who name="">jaimeyap</who>
    <bug_when>2010-05-18 12:02:33 -0700</bug_when>
    <thetext>Created attachment 56398
Rebased against r59670

Ill give this another shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229896</commentid>
    <comment_count>18</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-24 14:03:49 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/inspector/timeline-test.js
	M	LayoutTests/platform/chromium-win/inspector/timeline-event-dispatch-expected.txt
	M	LayoutTests/platform/chromium-win/inspector/timeline-mark-timeline-expected.txt
	M	LayoutTests/platform/chromium-win/inspector/timeline-network-resource-expected.txt
	M	LayoutTests/platform/chromium-win/inspector/timeline-paint-expected.txt
	M	LayoutTests/platform/chromium-win/inspector/timeline-parse-html-expected.txt
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/ScriptCallStack.cpp
	M	WebCore/bindings/js/ScriptCallStack.h
	M	WebCore/bindings/v8/ScriptArray.h
	M	WebCore/bindings/v8/ScriptCallStack.cpp
	M	WebCore/bindings/v8/ScriptCallStack.h
	M	WebCore/inspector/TimelineRecordFactory.cpp
	M	WebCore/inspector/front-end/TimelinePanel.js
Committed r60083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229904</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-24 14:14:03 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60083 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53257</attachid>
            <date>2010-04-13 08:53:09 -0700</date>
            <delta_ts>2010-05-11 16:14:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stack-trace.patch</filename>
            <type>text/plain</type>
            <size>25878</size>
            <attacher>jaimeyap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzUxNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDQtMTMgIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlcyBwdWJsaWMgY2FsbExvY2F0aW9uIEFQSSBmcm9tIFNjcmlwdENhbGxTdGFjayBhbmQgcmVw
bGFjZXMgaXQgd2l0aAorICAgICAgICBhIGZ1bmN0aW9uIGZvciBncmFiYmluZyB0aGUgdG9wIDEw
IHN0YWNrIGZyYW1lcyBhcyBhIFN0cmluZy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc1MDIKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENhbGxTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OnN0YWNr
VHJhY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDYWxsU3RhY2s6OnN0YWNrVHJhY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dENhbGxTdGFjay5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVVdGlsaXR5Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RhY2tUcmFjZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpJbnNwZWN0b3JUaW1lbGluZUFnZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hHQ0V2ZW50UmVjb3Jkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsQ2FsbEZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEluc3RhbGxU
aW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRSZW1v
dmVUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxs
RXZhbHVhdGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6d2lsbFNlbmRSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6ZGlkRmluaXNoTG9hZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtUaW1lbGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRNYXJrRE9NQ29udGVudEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtMb2FkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3Jk
VG9UaW1lbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpw
dXNoQ3VycmVudFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpnZXRDdXJyZW50U3RhY2tUcmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjppbnZhbGlkYXRlU3RhY2tUcmFjZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVj
b3JkRmFjdG9yeS5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY29y
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5Gb3JtYXR0ZWRSZWNvcmQu
cHJvdG90eXBlLl9nZW5lcmF0ZVBvcHVwQ29udGVudCk6CisKIDIwMTAtMDQtMTMgIFN0ZXBoYW4g
QcOfbXVzICA8c3VwZXJzdGlwcGlAZ214LmRlPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAkocmV2
aXNpb24gNTczODcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIFNjcmlwdENhbGxTdGFjazo6
aW5pdGlhbGl6ZSgpCiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiB9CiAKLWJvb2wgU2NyaXB0
Q2FsbFN0YWNrOjpjYWxsTG9jYXRpb24oU3RyaW5nKiwgaW50KiwgU3RyaW5nKikKK2Jvb2wgU2Ny
aXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKFN0cmluZyopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCShyZXZpc2lvbiA1NzM4
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBmcmFt
ZSByZXRyaWV2YWwgbWV0aG9kcwogICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUgJmF0KHVu
c2lnbmVkKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSgpOwotICAgICAgICBzdGF0aWMgYm9vbCBj
YWxsTG9jYXRpb24oU3RyaW5nKiwgaW50KiwgU3RyaW5nKik7CisgICAgICAgIHN0YXRpYyBib29s
IHN0YWNrVHJhY2UoU3RyaW5nKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRp
YWxpemUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHAJKHJl
dmlzaW9uIDU3Mzg3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBib29sIFNjcmlwdENhbGxTdGFjazo6
Y2FsbExvY2F0aW9uKFN0cmluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU2NyaXB0Q2Fs
bFN0YWNrOjpzdGFja1RyYWNlKFN0cmluZyogc3RhY2tUcmFjZSkKK3sKKyAgICByZXR1cm4gU2Ny
aXB0RGVidWdTZXJ2ZXI6OnN0YWNrVHJhY2UoKnN0YWNrVHJhY2UpOworfQorCiBTY3JpcHRDYWxs
U3RhY2s6OlNjcmlwdENhbGxTdGFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmd1bWVudHMsIHVu
c2lnbmVkIHNraXBBcmd1bWVudENvdW50LCBTdHJpbmcgc291cmNlTmFtZSwgaW50IHNvdXJjZUxp
bmVOdW1iZXIsIFN0cmluZyBmdW5jdGlvbk5hbWUpCiAgICAgOiBtX2xhc3RDYWxsZXIoZnVuY3Rp
b25OYW1lLCBzb3VyY2VOYW1lLCBzb3VyY2VMaW5lTnVtYmVyLCBhcmd1bWVudHMsIHNraXBBcmd1
bWVudENvdW50KQogICAgICwgbV9zY3JpcHRTdGF0ZShTY3JpcHRTdGF0ZTo6Y3VycmVudCgpKQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5oCShyZXZpc2lvbiA1NzM4NykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgU2Ny
aXB0Q2FsbFN0YWNrKiBjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYsIHVuc2lnbmVkIHNraXBB
cmd1bWVudENvdW50ID0gMCk7CiAgICAgICAgIH5TY3JpcHRDYWxsU3RhY2soKTsKIAotICAgICAg
ICBzdGF0aWMgYm9vbCBjYWxsTG9jYXRpb24oU3RyaW5nKiBzb3VyY2VOYW1lLCBpbnQqIHNvdXJj
ZUxpbmVOdW1iZXIsIFN0cmluZyogZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgc3RhdGljIGJvb2wg
c3RhY2tUcmFjZShTdHJpbmcqIHN0YWNrVHJhY2UpOwogCiAgICAgICAgIGNvbnN0IFNjcmlwdENh
bGxGcmFtZSYgYXQodW5zaWduZWQpIGNvbnN0OwogICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHJldHJpZXZpbmcgYW5kIHN0b3JpbmcgY2FsbCBzdGFjayB0cmFjZQpAQCAtNTcsOCArNTcsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JpcHRTdGF0ZSogZ2xvYmFsU3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3NjcmlwdFN0YXRlOyB9CiAKICAgICBwcml2YXRlOgorICAgICAg
ICBzdGF0aWMgYm9vbCBjYWxsTG9jYXRpb24oU3RyaW5nKiBzb3VyY2VOYW1lLCBpbnQqIHNvdXJj
ZUxpbmVOdW1iZXIsIFN0cmluZyogZnVuY3Rpb25OYW1lKTsKKwogICAgICAgICBTY3JpcHRDYWxs
U3RhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJndW1lbnRzLCB1bnNpZ25lZCBza2lwQXJndW1l
bnRDb3VudCwgU3RyaW5nIHNvdXJjZU5hbWUsIGludCBzb3VyY2VMaW5lTnVtYmVyLCBTdHJpbmcg
ZnVuY05hbWUpOwotICAgIAorCiAgICAgICAgIFNjcmlwdENhbGxGcmFtZSBtX2xhc3RDYWxsZXI7
CiAgICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwogICAgIH07CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gNTczODcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsMjkgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3JlYXRlVXRpbGl0
eUNvbgogICAgICAgICAiICByZXR1cm4gW3NjcmlwdE5hbWUsIGZyYW1lLnNvdXJjZUxpbmUoKSwg
KGZ1bmMubmFtZSgpIHx8IGZ1bmMuaW5mZXJyZWROYW1lKCkpXTsiCiAgICAgICAgICJ9IikpOwog
ICAgIHY4OjpTY3JpcHQ6OkNvbXBpbGUodjg6OlN0cmluZzo6TmV3KHRvcFN0YWNrRnJhbWUpKS0+
UnVuKCk7CisKKyAgICAvLyBDb21waWxlIEphdmFTY3JpcHQgZnVuY3Rpb24gZm9yIHJldHJpZXZp
bmcgdGhlIHRvcCAxMCBKYXZhU2NyaXB0IHN0YWNrCisgICAgLy8gZnJhbWVzIGFzIGEgc3RyaW5n
LgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgY2hhciosIHN0YWNrVHJhY2UsCisgICAg
ICAgICgiZnVuY3Rpb24gc3RhY2tUcmFjZShleGVjX3N0YXRlKSB7IgorICAgICAgICAiICB2YXIg
ZnJhbWVDb3VudCA9IGV4ZWNfc3RhdGUuZnJhbWVDb3VudCgpOyIKKyAgICAgICAgIiAgaWYgKCFm
cmFtZUNvdW50KSIKKyAgICAgICAgIiAgICAgIHJldHVybiB1bmRlZmluZWQ7IgorICAgICAgICAi
ICBmcmFtZUNvdW50ID0gTWF0aC5taW4oZnJhbWVDb3VudCwgMTApOyIKKyAgICAgICAgIiAgdmFy
IGZyYW1lcyA9IFtdOyIKKyAgICAgICAgIiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZUNvdW50
OyBpKyspIHsiCisgICAgICAgICIgICAgdmFyIGZyYW1lTWFwID0ge307IgorICAgICAgICAiICAg
IHZhciBmcmFtZSA9IGV4ZWNfc3RhdGUuZnJhbWUoaSk7IgorICAgICAgICAiICAgIHZhciBmdW5j
ID0gZnJhbWUuZnVuYygpOyIKKyAgICAgICAgIiAgICBmcmFtZU1hcC5zY3JpcHROYW1lID0gKGZ1
bmMucmVzb2x2ZWQoKSAmJiBmdW5jLnNjcmlwdCgpKSA/IGZ1bmMuc2NyaXB0KCkubmFtZSgpIDog
Jyc7IgorICAgICAgICAiICAgIGZyYW1lTWFwLnNjcmlwdExpbmUgPSBmcmFtZS5zb3VyY2VMaW5l
KCk7IgorICAgICAgICAiICAgIGZyYW1lTWFwLnNjcmlwdENvbHVtbiA9IGZyYW1lLnNvdXJjZUNv
bHVtbigpOyIKKyAgICAgICAgIiAgICBmcmFtZU1hcC5mdW5jdGlvbk5hbWUgPSAoZnVuYy5uYW1l
KCkgfHwgZnVuYy5pbmZlcnJlZE5hbWUoKSB8fCAnJyk7IgorICAgICAgICAiICAgIGZyYW1lcy5w
dXNoKGZyYW1lTWFwKTsiCisgICAgICAgICIgIH0iCisgICAgICAgICIgIHJldHVybiBKU09OLnN0
cmluZ2lmeShmcmFtZXMpOyIKKyAgICAgICAgIn0iKSk7CisgICAgdjg6OlNjcmlwdDo6Q29tcGls
ZSh2ODo6U3RyaW5nOjpOZXcoc3RhY2tUcmFjZSkpLT5SdW4oKTsKIH0KIAogYm9vbCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6dG9wU3RhY2tGcmFtZShTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51
bWJlciwgU3RyaW5nJiBmdW5jdGlvbk5hbWUpCkBAIC0xMTEsNiArMTM0LDI2IEBAIGJvb2wgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnRvcFN0YWNrRnJhbWUoU3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RhY2tUcmFjZShTdHJpbmcmIHN0YWNrVHJhY2UpCit7
CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IHY4VXRpbGl0eUNvbnRleHQgPSB1dGlsaXR5Q29udGV4dCgpOworICAgIGlmICh2OFV0aWxpdHlD
b250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjb250ZXh0U2NvcGUodjhVdGlsaXR5Q29udGV4dCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IHN0YWNrVHJhY2VGdW5jdGlvbjsKKyAgICBzdGFja1RyYWNlRnVuY3Rpb24g
PSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2OFV0aWxpdHlDb250ZXh0LT5HbG9iYWwo
KS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic3RhY2tUcmFjZSIpKSk7CisgICAgaWYgKHN0YWNrVHJh
Y2VGdW5jdGlvbi5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNhbGwoc3RhY2tUcmFjZUZ1bmN0aW9u
KTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7ICAgIAor
ICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHN0YWNrVHJhY2UgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgJ
KHJldmlzaW9uIDU3Mzg3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAvLyBmYWls
IGR1ZSB0byBhIHN0YWNrIG92ZXJmbG93IGluIHRoZSB1bmRlcmx5aW5nIEphdmFTY3JpcHQgaW1w
bGVtZW50YXRpb24sIGhhbmRsaW5nCiAgICAgLy8gb2Ygc3VjaCBleGNlcHRpb24gaXMgdXAgdG8g
dGhlIGNhbGxlci4KICAgICBzdGF0aWMgYm9vbCB0b3BTdGFja0ZyYW1lKFN0cmluZyYgc291cmNl
TmFtZSwgaW50JiBsaW5lTnVtYmVyLCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7CisgICAgc3RhdGlj
IGJvb2wgc3RhY2tUcmFjZShTdHJpbmcmIHN0YWNrVHJhY2UpOwogCiAgICAgdm9pZCBhZGRMaXN0
ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopIHsgfQogICAgIHZvaWQgcmVtb3ZlTGlz
dGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKSB7IH0KSW5kZXg6IFdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCShyZXZpc2lvbiA1NzM4NykKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJUaW1lbGluZVJlY29yZEZhY3RvcnkuaCIK
IAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtNDcsNyArNDgsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBpbnQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c19pbnN0YW5jZUNvdW50
ID0gMDsKIAogSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudChJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAgOiBtX2Zyb250ZW5kKGZyb250ZW5kKQor
ICAgIDogbV9mcm9udGVuZChmcm9udGVuZCksCisgICAgICBtX2N1cnJlbnRTdGFja1RyYWNlKCks
CisgICAgICBtX2hhc1N0YWNrVHJhY2UoZmFsc2UpCiB7CiAgICAgKytzX2luc3RhbmNlQ291bnQ7
CiAgICAgU2NyaXB0R0NFdmVudDo6YWRkRXZlbnRMaXN0ZW5lcih0aGlzKTsKQEAgLTU3LDcgKzYw
LDcgQEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6SW5zcGVjdG9yVGltZWxpbgogdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpwdXNoR0NFdmVudFJlY29yZHMoKQogewogICAgIGZvciAoR0NF
dmVudHM6Oml0ZXJhdG9yIGkgPSBtX2djRXZlbnRzLmJlZ2luKCk7IGkgIT0gbV9nY0V2ZW50cy5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgaS0+c3RhcnRUaW1lKTsK
KyAgICAgICAgU2NyaXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlR2VuZXJpY1JlY29yZChtX2Zyb250ZW5kLCBpLT5zdGFydFRpbWUsIGdldEN1cnJlbnRTdGFj
a1RyYWNlKCkpOwogICAgICAgICByZWNvcmQuc2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVHQ0V2ZW50RGF0YShtX2Zyb250ZW5kLCBpLT5jb2xsZWN0ZWRCeXRlcykpOwog
ICAgICAgICByZWNvcmQuc2V0KCJlbmRUaW1lIiwgaS0+ZW5kVGltZSk7CiAgICAgICAgIGFkZFJl
Y29yZFRvVGltZWxpbmUocmVjb3JkLCBHQ0V2ZW50VGltZWxpbmVSZWNvcmRUeXBlKTsKQEAgLTgw
LDYgKzgzLDcgQEAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6fkluc3BlY3RvclRpbWVsaQogdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsQ2FsbEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYg
c2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVGdW5jdGlvbkNhbGxEYXRhKG1fZnJvbnRlbmQsIHNj
cmlwdE5hbWUsIHNjcmlwdExpbmUpLCBGdW5jdGlvbkNhbGxUaW1lbGluZVJlY29yZFR5cGUpOwor
ICAgIGludmFsaWRhdGVTdGFja1RyYWNlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlkQ2FsbEZ1bmN0aW9uKCkKQEAgLTE0NSw3ICsxNDksNyBAQCB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmRpZFdyaXRlSFRNCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZEluc3RhbGxUaW1lcihpbnQgdGltZXJJZCwgaW50IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hv
dCkKIHsKICAgICBwdXNoR0NFdmVudFJlY29yZHMoKTsKLSAgICBTY3JpcHRPYmplY3QgcmVjb3Jk
ID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQs
IFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3Vy
cmVudFRpbWVNUygpLCBnZXRDdXJyZW50U3RhY2tUcmFjZSgpKTsKICAgICByZWNvcmQuc2V0KCJk
YXRhIiwgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVUaW1lckluc3RhbGxEYXRhKG1fZnJv
bnRlbmQsIHRpbWVySWQsIHRpbWVvdXQsIHNpbmdsZVNob3QpKTsKICAgICBhZGRSZWNvcmRUb1Rp
bWVsaW5lKHJlY29yZCwgVGltZXJJbnN0YWxsVGltZWxpbmVSZWNvcmRUeXBlKTsKIH0KQEAgLTE1
Myw3ICsxNTcsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZEluc3RhbGxUCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZFJlbW92ZVRpbWVyKGludCB0aW1lcklkKQog
ewogICAgIHB1c2hHQ0V2ZW50UmVjb3JkcygpOwotICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RG
OjpjdXJyZW50VGltZU1TKCkpOworICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RGOjpjdXJyZW50
VGltZU1TKCksIGdldEN1cnJlbnRTdGFja1RyYWNlKCkpOwogICAgIHJlY29yZC5zZXQoImRhdGEi
LCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNUaW1lckRhdGEobV9mcm9udGVu
ZCwgdGltZXJJZCkpOwogICAgIGFkZFJlY29yZFRvVGltZWxpbmUocmVjb3JkLCBUaW1lclJlbW92
ZVRpbWVsaW5lUmVjb3JkVHlwZSk7CiB9CkBAIC0xOTEsNiArMTk1LDcgQEAgdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRMb2FkWEhSKAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
Ojp3aWxsRXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lTnVtYmVyKQog
ewogICAgIHB1c2hDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlRXZh
bHVhdGVTY3JpcHREYXRhKG1fZnJvbnRlbmQsIHVybCwgbGluZU51bWJlciksIEV2YWx1YXRlU2Ny
aXB0VGltZWxpbmVSZWNvcmRUeXBlKTsKKyAgICBpbnZhbGlkYXRlU3RhY2tUcmFjZSgpOwogfQog
ICAgIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRFdmFsdWF0ZVNjcmlwdCgpCkBA
IC0yMDIsNyArMjA3LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsU2VuZFJl
cwogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBwdXNoR0NFdmVu
dFJlY29yZHMoKTsKLSAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0
b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygp
KTsKKyAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpLCBnZXRDdXJy
ZW50U3RhY2tUcmFjZSgpKTsKICAgICByZWNvcmQuc2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhdGVSZXNvdXJjZVNlbmRSZXF1ZXN0RGF0YShtX2Zyb250ZW5kLCBpZGVudGlm
aWVyLCBpc01haW5SZXNvdXJjZSwgcmVxdWVzdCkpOwogICAgIHJlY29yZC5zZXQoInR5cGUiLCBS
ZXNvdXJjZVNlbmRSZXF1ZXN0VGltZWxpbmVSZWNvcmRUeXBlKTsKICAgICBzZXRIZWFwU2l6ZVN0
YXRpc3RpYyhyZWNvcmQpOwpAQCAtMjMyLDcgKzIzNyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6ZGlkUmVjZWl2ZVIKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkRmlu
aXNoTG9hZGluZ1Jlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgYm9vbCBkaWRGYWls
KQogewogICAgIHB1c2hHQ0V2ZW50UmVjb3JkcygpOwotICAgIFNjcmlwdE9iamVjdCByZWNvcmQg
PSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwg
V1RGOjpjdXJyZW50VGltZU1TKCkpOworICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RGOjpjdXJy
ZW50VGltZU1TKCksIGdldEN1cnJlbnRTdGFja1RyYWNlKCkpOwogICAgIHJlY29yZC5zZXQoImRh
dGEiLCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVJlc291cmNlRmluaXNoRGF0YShtX2Zy
b250ZW5kLCBpZGVudGlmaWVyLCBkaWRGYWlsKSk7CiAgICAgcmVjb3JkLnNldCgidHlwZSIsIFJl
c291cmNlRmluaXNoVGltZWxpbmVSZWNvcmRUeXBlKTsKICAgICBzZXRIZWFwU2l6ZVN0YXRpc3Rp
YyhyZWNvcmQpOwpAQCAtMjQyLDcgKzI0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkRmluaXNoTG8KIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkTWFya1RpbWVs
aW5lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBwdXNoR0NFdmVudFJlY29yZHMoKTsK
LSAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVH
ZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAgICBTY3Jp
cHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVj
b3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpLCBnZXRDdXJyZW50U3RhY2tUcmFj
ZSgpKTsKICAgICByZWNvcmQuc2V0KCJkYXRhIiwgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVNYXJrVGltZWxpbmVEYXRhKG1fZnJvbnRlbmQsIG1lc3NhZ2UpKTsKICAgICBhZGRSZWNvcmRU
b1RpbWVsaW5lKHJlY29yZCwgTWFya1RpbWVsaW5lUmVjb3JkVHlwZSk7CiB9CkBAIC0yNTAsMTQg
KzI1NSwxNCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtUaW1lCiB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZE1hcmtET01Db250ZW50RXZlbnQoKQogewogICAg
IHB1c2hHQ0V2ZW50UmVjb3JkcygpOwotICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RGOjpjdXJy
ZW50VGltZU1TKCkpOworICAgIFNjcmlwdE9iamVjdCByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQobV9mcm9udGVuZCwgV1RGOjpjdXJyZW50VGltZU1T
KCksIGdldEN1cnJlbnRTdGFja1RyYWNlKCkpOwogICAgIGFkZFJlY29yZFRvVGltZWxpbmUocmVj
b3JkLCBNYXJrRE9NQ29udGVudEV2ZW50VHlwZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6ZGlkTWFya0xvYWRFdmVudCgpCiB7CiAgICAgcHVzaEdDRXZlbnRSZWNvcmRzKCk7
Ci0gICAgU2NyaXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
R2VuZXJpY1JlY29yZChtX2Zyb250ZW5kLCBXVEY6OmN1cnJlbnRUaW1lTVMoKSk7CisgICAgU2Ny
aXB0T2JqZWN0IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZChtX2Zyb250ZW5kLCBXVEY6OmN1cnJlbnRUaW1lTVMoKSwgZ2V0Q3VycmVudFN0YWNrVHJh
Y2UoKSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShyZWNvcmQsIE1hcmtMb2FkRXZlbnRUeXBl
KTsKIH0KIApAQCAtMjc3LDkgKzI4MiwxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmFkZFJlY29yZFRvCiB7CiAgICAgcmVjb3JkLnNldCgidHlwZSIsIHR5cGUpOwogICAgIHNldEhl
YXBTaXplU3RhdGlzdGljKHJlY29yZCk7Ci0gICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgp
KQorICAgIGlmIChtX3JlY29yZFN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBtX2Zyb250ZW5k
LT5hZGRSZWNvcmRUb1RpbWVsaW5lKHJlY29yZCk7Ci0gICAgZWxzZSB7CisgICAgICAgIGludmFs
aWRhdGVTdGFja1RyYWNlKCk7CisgICAgfSBlbHNlIHsKICAgICAgICAgVGltZWxpbmVSZWNvcmRF
bnRyeSBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKICAgICAgICAgcGFyZW50LmNoaWxk
cmVuLnNldChwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKCksIHJlY29yZCk7CiAgICAgfQpAQCAtMzEz
LDkgKzMxOSwyOSBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFNjcmlwdE9iamVj
dCBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBwdXNoR0NFdmVudFJlY29y
ZHMoKTsKLSAgICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVHZW5lcmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpKTsKKyAg
ICBTY3JpcHRPYmplY3QgcmVjb3JkID0gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5l
cmljUmVjb3JkKG1fZnJvbnRlbmQsIFdURjo6Y3VycmVudFRpbWVNUygpLCBnZXRDdXJyZW50U3Rh
Y2tUcmFjZSgpKTsKICAgICBtX3JlY29yZFN0YWNrLmFwcGVuZChUaW1lbGluZVJlY29yZEVudHJ5
KHJlY29yZCwgZGF0YSwgbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKSwgdHlwZSkpOwogfQor
CitTdHJpbmcqIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmdldEN1cnJlbnRTdGFja1RyYWNlKCkK
K3sKKyAgICBpZiAobV9jdXJyZW50U3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsgICAgICAgCisgICAg
ICAgIG1faGFzU3RhY2tUcmFjZSA9IFNjcmlwdENhbGxTdGFjazo6c3RhY2tUcmFjZSgmbV9jdXJy
ZW50U3RhY2tUcmFjZSk7CisgICAgICAgIC8vIFNvIHRoYXQgd2UgZG9uJ3QgYXR0ZW1wdCB0byBy
ZWdyYWIgYSBzdHJhY2sgdHJhY2Ugd2hlbiB0aGVyZSBpcyBub25lIHRvIGdyYWIuCisgICAgICAg
IGlmICghbV9oYXNTdGFja1RyYWNlKQorICAgICAgICAgICAgbV9jdXJyZW50U3RhY2tUcmFjZSA9
ICJOb3RFbXB0eSI7CisgICAgfQorICAgIGlmIChtX2hhc1N0YWNrVHJhY2UpCisgICAgICAgIHJl
dHVybiAmbV9jdXJyZW50U3RhY2tUcmFjZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOwor
fQorCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludmFsaWRhdGVTdGFja1RyYWNlKCkg
eworICAgIG1fY3VycmVudFN0YWNrVHJhY2UgPSAiIjsKKyAgICBtX2hhc1N0YWNrVHJhY2UgPSBm
YWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50
LmgJKHJldmlzaW9uIDU3Mzg3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHB1c2hHQ0V2ZW50UmVjb3JkcygpOwogCisgICAgaW5saW5lIFN0cmluZyogZ2V0
Q3VycmVudFN0YWNrVHJhY2UoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZVN0YWNrVHJhY2UoKTsK
KwogICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwogCiAgICAgVmVjdG9yPFRpbWVs
aW5lUmVjb3JkRW50cnk+IG1fcmVjb3JkU3RhY2s7CkBAIC0xNjQsNiArMTY4LDggQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIHR5cGVkZWYgVmVjdG9yPEdDRXZlbnQ+IEdDRXZlbnRzOwogICAgIEdD
RXZlbnRzIG1fZ2NFdmVudHM7CisgICAgU3RyaW5nIG1fY3VycmVudFN0YWNrVHJhY2U7CisgICAg
Ym9vbCBtX2hhc1N0YWNrVHJhY2U7CiB9OwogCiBpbmxpbmUgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCogSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cmV0cmlldmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcAkocmV2aXNpb24gNTczODcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJl
Y29yZEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksMTYgQEAKICNpbmNs
dWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRP
YmplY3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCwgZG91YmxlIHN0YXJ0VGltZSkKK1NjcmlwdE9iamVjdCBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQoSW5zcGVjdG9yRnJvbnRlbmQq
IGZyb250ZW5kLCBkb3VibGUgc3RhcnRUaW1lLCBTdHJpbmcqIHN0YWNrVHJhY2UpCiB7CiAgICAg
U2NyaXB0T2JqZWN0IHJlY29yZCA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBy
ZWNvcmQuc2V0KCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwotCi0gICAgU3RyaW5nIHNvdXJjZU5h
bWU7Ci0gICAgaW50IHNvdXJjZUxpbmVOdW1iZXI7Ci0gICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsK
LSAgICBpZiAoU2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRpb24oJnNvdXJjZU5hbWUsICZzb3Vy
Y2VMaW5lTnVtYmVyLCAmZnVuY3Rpb25OYW1lKSAmJiBzb3VyY2VOYW1lICE9ICJ1bmRlZmluZWQi
KSB7Ci0gICAgICAgIHJlY29yZC5zZXQoImNhbGxlclNjcmlwdE5hbWUiLCBzb3VyY2VOYW1lKTsK
LSAgICAgICAgcmVjb3JkLnNldCgiY2FsbGVyU2NyaXB0TGluZSIsIHNvdXJjZUxpbmVOdW1iZXIp
OwotICAgICAgICByZWNvcmQuc2V0KCJjYWxsZXJGdW5jdGlvbk5hbWUiLCBmdW5jdGlvbk5hbWUp
OwotICAgIH0KKyAgICBpZiAoc3RhY2tUcmFjZSkKKyAgICAgICAgcmVjb3JkLnNldCgic3RhY2tU
cmFjZSIsICpzdGFja1RyYWNlKTsgCiAgICAgcmV0dXJuIHJlY29yZDsKIH0KIApJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgJKHJldmlzaW9uIDU3Mzg3KQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBTY3JpcHRP
YmplY3QgY3JlYXRlR2VuZXJpY1JlY29yZChJbnNwZWN0b3JGcm9udGVuZCosIGRvdWJsZSBzdGFy
dFRpbWUpOworICAgICAgICBzdGF0aWMgU2NyaXB0T2JqZWN0IGNyZWF0ZUdlbmVyaWNSZWNvcmQo
SW5zcGVjdG9yRnJvbnRlbmQqLCBkb3VibGUgc3RhcnRUaW1lLCBTdHJpbmcqIHN0YWNrVHJhY2Up
OwogCiAgICAgICAgIHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRlR0NFdmVudERhdGEoSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kLCBjb25zdCBzaXplX3QgdXNlZEhlYXBTaXplRGVsdGEpOwog
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwko
cmV2aXNpb24gNTczODcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQ
YW5lbC5qcwkod29ya2luZyBjb3B5KQpAQCAtNzgxLDggKzc4MSw5IEBAIFdlYkluc3BlY3Rvci5U
aW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY28KICAgICB0aGlzLmVuZFRpbWUgPSAodHlwZW9mIHJl
Y29yZC5lbmRUaW1lICE9PSAidW5kZWZpbmVkIikgPyByZWNvcmQuZW5kVGltZSAvIDEwMDAgOiB0
aGlzLnN0YXJ0VGltZTsKICAgICB0aGlzLl9sYXN0Q2hpbGRFbmRUaW1lID0gdGhpcy5lbmRUaW1l
OwogICAgIHRoaXMub3JpZ2luYWxSZWNvcmRGb3JUZXN0cyA9IHJlY29yZDsKLSAgICB0aGlzLmNh
bGxlclNjcmlwdE5hbWUgPSByZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICB0aGlzLmNhbGxl
clNjcmlwdExpbmUgPSByZWNvcmQuY2FsbGVyU2NyaXB0TGluZTsKKyAgICBpZiAocmVjb3JkLnN0
YWNrVHJhY2UpIHsKKyAgICAgIHRoaXMuc3RhY2tUcmFjZSA9IEpTT04ucGFyc2UocmVjb3JkLnN0
YWNrVHJhY2UpOworICAgIH0KICAgICB0aGlzLnRvdGFsSGVhcFNpemUgPSByZWNvcmQudG90YWxI
ZWFwU2l6ZTsKICAgICB0aGlzLnVzZWRIZWFwU2l6ZSA9IHJlY29yZC51c2VkSGVhcFNpemU7CiAK
QEAgLTgxMSw4ICs4MTIsMTEgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuRm9ybWF0dGVk
UmVjbwogICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IHJlY29yZFR5cGVzLlRpbWVyRmly
ZSkgewogICAgICAgICB2YXIgdGltZXJJbnN0YWxsZWRSZWNvcmQgPSB0aW1lclJlY29yZHNbcmVj
b3JkLmRhdGEudGltZXJJZF07CiAgICAgICAgIGlmICh0aW1lckluc3RhbGxlZFJlY29yZCkgewot
ICAgICAgICAgICAgdGhpcy5jYWxsU2l0ZVNjcmlwdE5hbWUgPSB0aW1lckluc3RhbGxlZFJlY29y
ZC5jYWxsZXJTY3JpcHROYW1lOwotICAgICAgICAgICAgdGhpcy5jYWxsU2l0ZVNjcmlwdExpbmUg
PSB0aW1lckluc3RhbGxlZFJlY29yZC5jYWxsZXJTY3JpcHRMaW5lOworICAgICAgICAgICAgdmFy
IHN0YWNrVHJhY2UgPSB0aW1lckluc3RhbGxlZFJlY29yZC5zdGFja1RyYWNlOworICAgICAgICAg
ICAgaWYgKHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZVswXSkgeworICAgICAgICAgICAgICAgIHRo
aXMuY2FsbFNpdGVTY3JpcHROYW1lID0gc3RhY2tUcmFjZVswXS5zY3JpcHROYW1lOworICAgICAg
ICAgICAgICAgIHRoaXMuY2FsbFNpdGVTY3JpcHRMaW5lID0gc3RhY2tUcmFjZVswXS5zY3JpcHRM
aW5lICsgMTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlz
LnRpbWVvdXQgPSB0aW1lckluc3RhbGxlZFJlY29yZC50aW1lb3V0OwogICAgICAgICAgICAgdGhp
cy5zaW5nbGVTaG90ID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuc2luZ2xlU2hvdDsKICAgICAgICAg
fQpAQCAtOTE4LDggKzkyMiwxMCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5Gb3JtYXR0
ZWRSZWNvCiAgICAgICAgICAgICAgICAgcmVjb3JkQ29udGVudFRhYmxlLmFwcGVuZENoaWxkKHRo
aXMuX2NyZWF0ZVJvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRldGFpbHMiKSwgdGhpcy5kZXRh
aWxzKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodGhpcy50eXBlICE9PSByZWNvcmRUeXBl
cy5HQ0V2ZW50ICYmIHRoaXMuY2FsbGVyU2NyaXB0TmFtZSkgewotICAgICAgICAgICAgdmFyIGxp
bmsgPSBXZWJJbnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2RlKHRoaXMuY2FsbGVyU2NyaXB0
TmFtZSwgInNjcmlwdHMiLCB0aGlzLmNhbGxlclNjcmlwdExpbmUpOworICAgICAgICBpZiAodGhp
cy50eXBlICE9PSByZWNvcmRUeXBlcy5HQ0V2ZW50ICYmIHRoaXMuc3RhY2tUcmFjZSkgeworICAg
ICAgICAgICAgdmFyIGNhbGxlclNjcmlwdE5hbWUgPSB0aGlzLnN0YWNrVHJhY2VbMF0gPyB0aGlz
LnN0YWNrVHJhY2VbMF0uc2NyaXB0TmFtZSA6ICIiOworICAgICAgICAgICAgdmFyIGNhbGxlclNj
cmlwdExpbmUgPSB0aGlzLnN0YWNrVHJhY2VbMF0gPyB0aGlzLnN0YWNrVHJhY2VbMF0uc2NyaXB0
TGluZSArIDEgOiAwOworICAgICAgICAgICAgdmFyIGxpbmsgPSBXZWJJbnNwZWN0b3IubGlua2lm
eVJlc291cmNlQXNOb2RlKGNhbGxlclNjcmlwdE5hbWUsICJzY3JpcHRzIiwgY2FsbGVyU2NyaXB0
TGluZSk7CiAgICAgICAgICAgICByZWNvcmRDb250ZW50VGFibGUuYXBwZW5kQ2hpbGQodGhpcy5f
Y3JlYXRlTGlua1JvdyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbGxlciIpLCBsaW5rKSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMudXNlZEhlYXBTaXplKSB7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1NzUxNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE5IEBACisyMDEwLTA0LTEzICBKYWltZSBZYXAgIDxqYWltZXlhcEBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRpbWVs
aW5lIHJlY29yZCB0ZXN0IGV4cGVjdGF0aW9ucyBjaGFuZ2VkLiBJbnN0ZWFkIG9mIGNhbGxlckxv
Y2F0aW9uIGZpZWxkcywKKyAgICAgICAgd2UgaGF2ZSBhIHNpbmdsZSBzdHJpbmdpZmllZCBKU09O
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRvcCAxMCBKUyBzdGFjayBmcmFtZXMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qczoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1hcmst
dGltZWxpbmUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9p
bnNwZWN0b3IvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGlu
ZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wNC0xMyAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBmaXgsIHBs
YXRmb3JtIHNwZWNpZmljIGV4cGVjdGVkIGZpbGUgdXBkYXRlZCBhZnRlciByNTc1MTEuCkluZGV4
OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwkocmV2aXNpb24gNTczODcpCisr
KyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtOCw5ICs4LDcgQEAgdmFyIHRpbWVsaW5lTm9uRGV0ZXJtaW5pc3RpY1Byb3BzID0geyAKICAg
ICBpZGVudGlmaWVyIDogMSwKICAgICBzdGFydFRpbWUgOiAxLAogICAgIHdpZHRoIDogMSwKLSAg
ICBjYWxsZXJTY3JpcHROYW1lOiAxLAotICAgIGNhbGxlclNjcmlwdExpbmU6IDEsCi0gICAgY2Fs
bGVyRnVuY3Rpb25OYW1lOiAxLAorICAgIHN0YWNrVHJhY2U6IDEsCiAgICAgdXJsIDogMSwKICAg
ICB1c2VkSGVhcFNpemU6IDEsCiAgICAgdG90YWxIZWFwU2l6ZTogMSwKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0
Y2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA1NzM4NykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNw
ZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zLDkgKzMsNyBAQCBUZXN0cyB0aGUgVGltZWxpbmUgQVBJIGluc3RydW1lbnRhdGlvbiBv
CiBUZXN0IE1vdXNlIFRhcmdldAogRXZlbnREaXNwYXRjaCBQcm9wZXJ0aWVzOgogKyBzdGFydFRp
bWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2Fs
bGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVG
SU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewogKy0gdHlwZSA6
IG1vdXNlZG93bgogKyB9CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4v
aW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUt
bWFyay10aW1lbGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3Mzg3KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1tYXJrLXRpbWVsaW5l
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw5ICsyLDcgQEAgVGVzdHMgdGhlIFRp
bWVsaW5lIEFQSSBtYXJrIGZlYXR1cmUKIAogTWFya1RpbWVsaW5lIFByb3BlcnRpZXM6CiArIHN0
YXJ0VGltZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdE5hbWUgOiAqIERFRklORUQgKgot
KyBjYWxsZXJTY3JpcHRMaW5lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyRnVuY3Rpb25OYW1lIDog
KiBERUZJTkVEICoKKysgc3RhY2tUcmFjZSA6ICogREVGSU5FRCAqCiArIGRhdGEgOiB7CiArLSBt
ZXNzYWdlIDogTUFSSyBUSU1FTElORQogKyB9CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW5ldHdvcmstcmVzb3VyY2UtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNw
ZWN0b3IvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3
Mzg3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1l
bGluZS1uZXR3b3JrLXJlc291cmNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw5
ICszLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gbwogCiBSZXNv
dXJjZVNlbmRSZXF1ZXN0IFByb3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVGSU5FRCAqCi0r
IGNhbGxlclNjcmlwdE5hbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRMaW5lIDogKiBE
RUZJTkVEICoKLSsgY2FsbGVyRnVuY3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysgc3RhY2tUcmFj
ZSA6ICogREVGSU5FRCAqCiArIGRhdGEgOiB7CiArLSBpZGVudGlmaWVyIDogKiBERUZJTkVEICoK
ICstIHVybCA6ICogREVGSU5FRCAqCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhaW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBh
aW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTczODcpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhaW50LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMiw5ICsyLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVt
ZW50YXRpb24gbwogCiBQYWludCBQcm9wZXJ0aWVzOgogKyBzdGFydFRpbWUgOiAqIERFRklORUQg
KgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TGluZSA6
ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVGSU5FRCAqCisrIHN0YWNr
VHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewogKy0geCA6IDAKICstIHkgOiAwCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBh
cnNlLWh0bWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtcGFyc2UtaHRtbC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDU3Mzg3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2lu
c3BlY3Rvci90aW1lbGluZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMiw5ICsyLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gbwog
CiBQYXJzZUhUTUwgUHJvcGVydGllczoKICsgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKLSsgY2Fs
bGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdExpbmUgOiAqIERFRklO
RUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklORUQgKgorKyBzdGFja1RyYWNlIDog
KiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIGxlbmd0aCA6IDkKICstIHN0YXJ0TGluZSA6IDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55774</attachid>
            <date>2010-05-11 16:14:38 -0700</date>
            <delta_ts>2010-05-16 00:35:52 -0700</delta_ts>
            <desc>uses new v8 stacktrace api.</desc>
            <filename>v8-stacktrace.patch</filename>
            <type>text/plain</type>
            <size>19680</size>
            <attacher>jaimeyap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMTEgIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlcyBwdWJsaWMgY2FsbExvY2F0aW9uIEFQSSBhbmQgdXRpbGl0eSBjb250ZXh0IGZyb20gU2Ny
aXB0Q2FsbFN0YWNrLgorICAgICAgICBBZGRzIGFiaWxpdHkgdG8gZ3JhYiB0aGUgdG9wIDUgSmF2
YVNjcmlwdCBzdGFjayBmcmFtZXMgZm9yIGVhY2ggdGltZWxpbmUKKyAgICAgICAgcmVjb3JkIHVz
aW5nIG5ldyBmYXN0IFY4IHN0YWNrIHRyYWNlIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpz
dGFja1RyYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0QXJyYXk6OlNjcmlwdEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxs
U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjb3JkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90b3R5cGUuX2dlbmVyYXRlUG9wdXBDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90
b3R5cGUuX2dldFJlY29yZERldGFpbHMpOgorCiAyMDEwLTA1LTExICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSB3b3JsZC4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQogICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOwogfQogCi1ib29sIFNjcmlwdENhbGxTdGFjazo6Y2FsbExvY2F0aW9uKFN0
cmluZyosIGludCosIFN0cmluZyopCitib29sIFNjcmlwdENhbGxTdGFjazo6c3RhY2tUcmFjZShp
bnQsIFNjcmlwdFN0YXRlKiwgU2NyaXB0QXJyYXkmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNTkxNzQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdENhbGxTdGFja19oCiAjZGVmaW5lIFNj
cmlwdENhbGxTdGFja19oCiAKKyNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNj
cmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RyaW5nLmgiCkBAIC01Myw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gZnJhbWUgcmV0cmlldmFsIG1ldGhvZHMKICAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZy
YW1lICZhdCh1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUoKTsKLSAgICAgICAgc3Rh
dGljIGJvb2wgY2FsbExvY2F0aW9uKFN0cmluZyosIGludCosIFN0cmluZyopOworICAgICAgICBz
dGF0aWMgYm9vbCBzdGFja1RyYWNlKGludCwgU2NyaXB0U3RhdGUqLCBTY3JpcHRBcnJheSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRBcnJheS5oCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0QXJyYXkgOiBwdWJsaWMgU2NyaXB0T2JqZWN0
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdEFycmF5KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgdjg6OkhhbmRsZTx2ODo6QXJyYXk+KTsKKyAgICAgICAgU2NyaXB0QXJyYXkoKSB7fTsK
ICAgICAgICAgdmlydHVhbCB+U2NyaXB0QXJyYXkoKSB7fQogCiAgICAgICAgIGJvb2wgc2V0KHVu
c2lnbmVkIGluZGV4LCBjb25zdCBTY3JpcHRPYmplY3QmKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAK
KyNpbmNsdWRlICJTY3JpcHRTY29wZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpA
QCAtNDEsOCArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBTY3JpcHRDYWxsU3RhY2s6OnNfdXRpbGl0eUNvbnRleHQ7Ci0KIFNjcmlw
dENhbGxTdGFjayogU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJndW1lbnRzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkgewogICAgIFN0cmluZyBzb3Vy
Y2VOYW1lOwogICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwpAQCAtNTQsOSArNTMsMjIgQEAgU2Ny
aXB0Q2FsbFN0YWNrKiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZQogCiBib29sIFNjcmlwdENhbGxT
dGFjazo6Y2FsbExvY2F0aW9uKFN0cmluZyogc291cmNlTmFtZSwgaW50KiBzb3VyY2VMaW5lTnVt
YmVyLCBTdHJpbmcqIGZ1bmN0aW9uTmFtZSkKIHsKLSAgICBpZiAoIXRvcFN0YWNrRnJhbWUoKnNv
dXJjZU5hbWUsICpzb3VyY2VMaW5lTnVtYmVyLCAqZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICpzb3VyY2VMaW5lTnVtYmVyICs9IDE7CisgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RhY2tUcmFjZT4gc3RhY2tU
cmFjZSh2ODo6U3RhY2tUcmFjZTo6Q3VycmVudFN0YWNrVHJhY2UoMSkpOworICAgIGlmIChzdGFj
a1RyYWNlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGFja1Ry
YWNlLT5HZXRGcmFtZUNvdW50KCkgPD0gMCkgeworICAgICAgICAvLyBGYWxsYmFjayB0byBzZXR0
aW5nIGxpbmVOdW1iZXIgdG8gMCwgYW5kIHNvdXJjZSBhbmQgZnVuY3Rpb24gbmFtZSB0byAidW5k
ZWZpbmVkIi4KKyAgICAgICAgKnNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodjg6OlVuZGVm
aW5lZCgpKTsKKyAgICAgICAgKnNvdXJjZUxpbmVOdW1iZXIgPSAwOworICAgICAgICAqZnVuY3Rp
b25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4OjpVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4OjpTdGFja0ZyYW1lPiBmcmFtZSA9IHN0
YWNrVHJhY2UtPkdldEZyYW1lKDApOworICAgICpzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5n
KGZyYW1lLT5HZXRTY3JpcHROYW1lKCkpOworICAgICpzb3VyY2VMaW5lTnVtYmVyID0gZnJhbWUt
PkdldExpbmVOdW1iZXIoKTsKKyAgICAqZnVuY3Rpb25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKGZy
YW1lLT5HZXRGdW5jdGlvbk5hbWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTc4LDY2
ICs5MCwxNCBAQCBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIFNjcmlwdENhbGxTdGFjazo6CiAgICAg
cmV0dXJuIG1fbGFzdENhbGxlcjsKIH0KIAotLy8gQ3JlYXRlIHRoZSB1dGlsaXR5IGNvbnRleHQg
Zm9yIGhvbGRpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5Ci0vLyB3aGlj
aCBhcmUgbm90IHZpc2libGUgdG8gSmF2YVNjcmlwdCBleGVjdXRpbmcgb24gdGhlIHBhZ2UuCi12
b2lkIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlVXRpbGl0eUNvbnRleHQoKQorYm9vbCBTY3JpcHRD
YWxsU3RhY2s6OnN0YWNrVHJhY2UoaW50IGZyYW1lTGltaXQsIFNjcmlwdFN0YXRlKiBzdGF0ZSwg
U2NyaXB0QXJyYXkmIHN0YWNrVHJhY2UpCiB7Ci0gICAgQVNTRVJUKHNfdXRpbGl0eUNvbnRleHQu
SXNFbXB0eSgpKTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSB2ODo6T2JqZWN0VGVtcGxhdGU6
Ok5ldygpOwotICAgIHNfdXRpbGl0eUNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KDAsIGdsb2Jh
bFRlbXBsYXRlKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHNfdXRpbGl0
eUNvbnRleHQpOwotCi0gICAgLy8gQ29tcGlsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciByZXRy
aWV2aW5nIHRoZSBzb3VyY2UgbGluZSwgdGhlIHNvdXJjZQotICAgIC8vIG5hbWUgYW5kIHRoZSBz
eW1ib2wgbmFtZSBmb3IgdGhlIHRvcCBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgY2hhciosIHRvcFN0YWNrRnJhbWUsCi0gICAgICAgICgiZnVu
Y3Rpb24gdG9wU3RhY2tGcmFtZShleGVjX3N0YXRlKSB7IgotICAgICAgICAiICBpZiAoIWV4ZWNf
c3RhdGUuZnJhbWVDb3VudCgpKSIKLSAgICAgICAgIiAgICAgIHJldHVybiB1bmRlZmluZWQ7Igot
ICAgICAgICAiICB2YXIgZnJhbWUgPSBleGVjX3N0YXRlLmZyYW1lKDApOyIKLSAgICAgICAgIiAg
dmFyIGZ1bmMgPSBmcmFtZS5mdW5jKCk7IgotICAgICAgICAiICB2YXIgc2NyaXB0TmFtZTsiCi0g
ICAgICAgICIgIGlmIChmdW5jLnJlc29sdmVkKCkgJiYgZnVuYy5zY3JpcHQoKSkiCi0gICAgICAg
ICIgICAgICBzY3JpcHROYW1lID0gZnVuYy5zY3JpcHQoKS5uYW1lKCk7IgotICAgICAgICAiICBy
ZXR1cm4gW3NjcmlwdE5hbWUsIGZyYW1lLnNvdXJjZUxpbmUoKSwgKGZ1bmMubmFtZSgpIHx8IGZ1
bmMuaW5mZXJyZWROYW1lKCkpXTsiCi0gICAgICAgICJ9IikpOwotICAgIHY4OjpTY3JpcHQ6OkNv
bXBpbGUodjg6OlN0cmluZzo6TmV3KHRvcFN0YWNrRnJhbWUpKS0+UnVuKCk7Ci19Ci0KLWJvb2wg
U2NyaXB0Q2FsbFN0YWNrOjp0b3BTdGFja0ZyYW1lKFN0cmluZyYgc291cmNlTmFtZSwgaW50JiBs
aW5lTnVtYmVyLCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhVdGlsaXR5Q29udGV4dCA9IHV0
aWxpdHlDb250ZXh0KCk7Ci0gICAgaWYgKHY4VXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2
OFV0aWxpdHlDb250ZXh0KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9wU3RhY2tG
cmFtZTsKLSAgICB0b3BTdGFja0ZyYW1lID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
djhVdGlsaXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInRvcFN0YWNr
RnJhbWUiKSkpOwotICAgIGlmICh0b3BTdGFja0ZyYW1lLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IHY4OjpEZWJ1Zzo6
Q2FsbCh0b3BTdGFja0ZyYW1lKTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gdG9wIHN0YWNrIGZyYW1lLCB3ZSBz
dGlsbCByZXR1cm4gc3VjY2VzcywgYnV0IGZpbGwgdGhlIGlucHV0IHBhcmFtcyB3aXRoIGRlZmF1
bHRzLgotICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSkgewotICAgICAgLy8gRmFsbGJhY2sg
dG8gc2V0dGluZyBsaW5lTnVtYmVyIHRvIDAsIGFuZCBzb3VyY2UgYW5kIGZ1bmN0aW9uIG5hbWUg
dG8gInVuZGVmaW5lZCIuCi0gICAgICBzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVl
KTsKLSAgICAgIGxpbmVOdW1iZXIgPSAwOwotICAgICAgZnVuY3Rpb25OYW1lID0gdG9XZWJDb3Jl
U3RyaW5nKHZhbHVlKTsKLSAgICAgIHJldHVybiB0cnVlOworICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KHN0YXRlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdGFja1RyYWNlPiB0cmFjZSh2ODo6U3RhY2tU
cmFjZTo6Q3VycmVudFN0YWNrVHJhY2UoZnJhbWVMaW1pdCkpOworICAgIGlmICh0cmFjZS5Jc0Vt
cHR5KCkgfHwgIXRyYWNlLT5HZXRGcmFtZUNvdW50KCkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgaWYgKCF2YWx1ZS0+SXNBcnJheSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGpzQXJyYXkgPSB2YWx1ZS0+VG9PYmplY3QoKTsK
LSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzb3VyY2VOYW1lVmFsdWUgPSBqc0FycmF5LT5HZXQo
MCk7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGluZU51bWJlclZhbHVlID0ganNBcnJheS0+
R2V0KDEpOwotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZ1bmN0aW9uTmFtZVZhbHVlID0ganNB
cnJheS0+R2V0KDIpOwotICAgIGlmIChzb3VyY2VOYW1lVmFsdWUuSXNFbXB0eSgpIHx8IGxpbmVO
dW1iZXJWYWx1ZS5Jc0VtcHR5KCkgfHwgZnVuY3Rpb25OYW1lVmFsdWUuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc291cmNlTmFtZSA9IHRvV2ViQ29yZVN0cmluZyhzb3Vy
Y2VOYW1lVmFsdWUpOwotICAgIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyVmFsdWUtPkludDMyVmFs
dWUoKTsKLSAgICBmdW5jdGlvbk5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoZnVuY3Rpb25OYW1lVmFs
dWUpOworICAgIHN0YWNrVHJhY2UgPSBTY3JpcHRBcnJheShzdGF0ZSwgdHJhY2UtPkFzQXJyYXko
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRD
YWxsU3RhY2suaAkocmV2aXNpb24gNTkxNzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNj
cmlwdENhbGxTdGFja19oCiAjZGVmaW5lIFNjcmlwdENhbGxTdGFja19oCiAKKyNpbmNsdWRlICJT
Y3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlNj
cmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKQEAgLTQ3LDcgKzQ4LDE2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgU2NyaXB0Q2FsbFN0YWNrKiBjcmVhdGUoY29uc3Qgdjg6OkFy
Z3VtZW50cyYsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50ID0gMCk7CiAgICAgflNjcmlwdENh
bGxTdGFjaygpOwogCi0gICAgc3RhdGljIGJvb2wgY2FsbExvY2F0aW9uKFN0cmluZyogc291cmNl
TmFtZSwgaW50KiBzb3VyY2VMaW5lTnVtYmVyLCBTdHJpbmcqIGZ1bmN0aW9uTmFtZSk7CisgICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiB0aGVyZSBpcyBubyBydW5uaW5nIEphdmFTY3JpcHQgb3IgaWYg
ZmV0Y2hpbmcgdGhlIHN0YWNrIGZhaWxlZC4KKyAgICAvLyBTZXRzIHN0YWNrVHJhY2UgdG8gYmUg
YW4gYXJyYXkgb2Ygc3RhY2sgZnJhbWUgb2JqZWN0cy4KKyAgICAvLyBBIHN0YWNrIGZyYW1lIG9i
amVjdCBsb29rcyBsaWtlOgorICAgIC8vIHsKKyAgICAvLyAgIHNjcmlwdE5hbWU6IDxmaWxlIG5h
bWUgZm9yIHRoZSBhc3NvY2lhdGVkIHNjcmlwdCByZXNvdXJjZT4KKyAgICAvLyAgIGZ1bmN0aW9u
TmFtZTogPG5hbWUgb2YgdGhlIEphdmFTY3JpcHQgZnVuY3Rpb24+CisgICAgLy8gICBsaW5lTnVt
YmVyOiA8MSBiYXNlZCBsaW5lIG51bWJlcj4KKyAgICAvLyAgIGNvbHVtbjogPDEgYmFzZWQgY29s
dW1uIG9mZnNldCBvbiB0aGUgbGluZT4KKyAgICAvLyB9CisgICAgc3RhdGljIGJvb2wgc3RhY2tU
cmFjZShpbnQgZnJhbWVMaW1pdCwgU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRBcnJheSYgc3Rh
Y2tUcmFjZSk7CiAKICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGF0KHVuc2lnbmVkKSBjb25z
dDsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHJldHJpZXZpbmcgYW5kIHN0b3JpbmcgY2FsbCBz
dGFjayB0cmFjZQpAQCAtNTksMzAgKzY5LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU2Ny
aXB0Q2FsbFN0YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3VtZW50cywgdW5zaWduZWQgc2tp
cEFyZ3VtZW50Q291bnQsIFN0cmluZyBzb3VyY2VOYW1lLCBpbnQgc291cmNlTGluZU51bWJlciwg
U3RyaW5nIGZ1bmNOYW1lKTsKIAotICAgIC8vIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBz
b3VyY2UgbmFtZSwgbGluZSBudW1iZXIgYW5kIGZ1bmN0aW9uIG5hbWUgZm9yIHRoZSB0b3AKLSAg
ICAvLyBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgotICAgIC8vCi0gICAgLy8gSXQgd2lsbCByZXR1
cm4gdHJ1ZSBpZiB0aGUgY2FsbGVyIGluZm9ybWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcmV0cmll
dmVkIGFuZCB3cml0dGVuCi0gICAgLy8gaW50byB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycywgb3Ro
ZXJ3aXNlIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZS4gSXQgbWF5Ci0gICAgLy8gZmFp
bCBkdWUgdG8gYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgdW5kZXJseWluZyBKYXZhU2NyaXB0IGlt
cGxlbWVudGF0aW9uLCBoYW5kbGluZwotICAgIC8vIG9mIHN1Y2ggZXhjZXB0aW9uIGlzIHVwIHRv
IHRoZSBjYWxsZXIuCi0gICAgc3RhdGljIGJvb2wgdG9wU3RhY2tGcmFtZShTdHJpbmcmIHNvdXJj
ZU5hbWUsIGludCYgbGluZU51bWJlciwgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwotCi0gICAgc3Rh
dGljIHZvaWQgY3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKLQotICAgICAvLyBSZXR1cm5zIGEgbG9j
YWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCi0gICAgc3RhdGljIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gdXRpbGl0eUNvbnRleHQoKQotICAgIHsKLSAgICAgIGlmIChzX3V0aWxpdHlD
b250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgICBjcmVhdGVVdGlsaXR5Q29udGV4dCgpOwotICAg
ICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhzX3V0aWxpdHlDb250ZXh0KTsK
LSAgICB9CisgICAgc3RhdGljIGJvb2wgY2FsbExvY2F0aW9uKFN0cmluZyogc291cmNlTmFtZSwg
aW50KiBzb3VyY2VMaW5lTnVtYmVyLCBTdHJpbmcqIGZ1bmN0aW9uTmFtZSk7CiAKICAgICBTY3Jp
cHRDYWxsRnJhbWUgbV9sYXN0Q2FsbGVyOwogICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRl
OwotCi0gICAgLy8gVXRpbGl0eSBjb250ZXh0IGhvbGRpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMg
dXNlZCBpbnRlcm5hbGx5LgotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
c191dGlsaXR5Q29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAkocmV2aXNpb24gNTkx
NzQpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxMyArNDksOSBAQCBTY3JpcHRPYmplY3QgVGltZWxpbmVSZWNvcmRG
YWN0b3J5OjpjcmVhCiAgICAgU2NyaXB0T2JqZWN0IHJlY29yZCA9IGZyb250ZW5kLT5uZXdTY3Jp
cHRPYmplY3QoKTsKICAgICByZWNvcmQuc2V0KCJzdGFydFRpbWUiLCBzdGFydFRpbWUpOwogCi0g
ICAgU3RyaW5nIHNvdXJjZU5hbWU7Ci0gICAgaW50IHNvdXJjZUxpbmVOdW1iZXI7Ci0gICAgU3Ry
aW5nIGZ1bmN0aW9uTmFtZTsKLSAgICBpZiAoU2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRpb24o
JnNvdXJjZU5hbWUsICZzb3VyY2VMaW5lTnVtYmVyLCAmZnVuY3Rpb25OYW1lKSAmJiBzb3VyY2VO
YW1lICE9ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgIHJlY29yZC5zZXQoImNhbGxlclNjcmlwdE5h
bWUiLCBzb3VyY2VOYW1lKTsKLSAgICAgICAgcmVjb3JkLnNldCgiY2FsbGVyU2NyaXB0TGluZSIs
IHNvdXJjZUxpbmVOdW1iZXIpOwotICAgICAgICByZWNvcmQuc2V0KCJjYWxsZXJGdW5jdGlvbk5h
bWUiLCBmdW5jdGlvbk5hbWUpOworICAgIFNjcmlwdEFycmF5IHN0YWNrVHJhY2U7CisgICAgaWYg
KFNjcmlwdENhbGxTdGFjazo6c3RhY2tUcmFjZSg1LCBmcm9udGVuZC0+c2NyaXB0U3RhdGUoKSwg
c3RhY2tUcmFjZSkpIHsKKyAgICAgICAgcmVjb3JkLnNldCgic3RhY2tUcmFjZSIsIHN0YWNrVHJh
Y2UpOwogICAgIH0KICAgICByZXR1cm4gcmVjb3JkOwogfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMJKHJldmlzaW9uIDU5MTc0KQorKysgV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMJKHdvcmtpbmcgY29weSkK
QEAgLTgwMCw4ICs4MDAsNyBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5Gb3JtYXR0ZWRS
ZWNvCiAgICAgdGhpcy5fc2VsZlRpbWUgPSB0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZTsK
ICAgICB0aGlzLl9sYXN0Q2hpbGRFbmRUaW1lID0gdGhpcy5lbmRUaW1lOwogICAgIHRoaXMub3Jp
Z2luYWxSZWNvcmRGb3JUZXN0cyA9IHJlY29yZDsKLSAgICB0aGlzLmNhbGxlclNjcmlwdE5hbWUg
PSByZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICB0aGlzLmNhbGxlclNjcmlwdExpbmUgPSBy
ZWNvcmQuY2FsbGVyU2NyaXB0TGluZTsKKyAgICB0aGlzLnN0YWNrVHJhY2UgPSByZWNvcmQuc3Rh
Y2tUcmFjZTsKICAgICB0aGlzLnRvdGFsSGVhcFNpemUgPSByZWNvcmQudG90YWxIZWFwU2l6ZTsK
ICAgICB0aGlzLnVzZWRIZWFwU2l6ZSA9IHJlY29yZC51c2VkSGVhcFNpemU7CiAKQEAgLTgzMCw4
ICs4MjksMTEgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuRm9ybWF0dGVkUmVjbwogICAg
IH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IHJlY29yZFR5cGVzLlRpbWVyRmlyZSkgewogICAg
ICAgICB2YXIgdGltZXJJbnN0YWxsZWRSZWNvcmQgPSB0aW1lclJlY29yZHNbcmVjb3JkLmRhdGEu
dGltZXJJZF07CiAgICAgICAgIGlmICh0aW1lckluc3RhbGxlZFJlY29yZCkgewotICAgICAgICAg
ICAgdGhpcy5jYWxsU2l0ZVNjcmlwdE5hbWUgPSB0aW1lckluc3RhbGxlZFJlY29yZC5jYWxsZXJT
Y3JpcHROYW1lOwotICAgICAgICAgICAgdGhpcy5jYWxsU2l0ZVNjcmlwdExpbmUgPSB0aW1lcklu
c3RhbGxlZFJlY29yZC5jYWxsZXJTY3JpcHRMaW5lOworICAgICAgICAgICAgaWYgKHRpbWVySW5z
dGFsbGVkUmVjb3JkLnN0YWNrVHJhY2UpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbFNpdGUg
PSB0aW1lckluc3RhbGxlZFJlY29yZC5zdGFja1RyYWNlWzBdOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHRoaXMuY2FsbFNpdGVTY3JpcHROYW1lID0gY2FsbFNpdGUuc2NyaXB0TmFtZTsK
KyAgICAgICAgICAgICAgICB0aGlzLmNhbGxTaXRlU2NyaXB0TGluZSA9IGNhbGxTaXRlLmxpbmVO
dW1iZXI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lcklu
c3RhbGxlZFJlY29yZC50aW1lb3V0OwogICAgICAgICAgICAgdGhpcy5zaW5nbGVTaG90ID0gdGlt
ZXJJbnN0YWxsZWRSZWNvcmQuc2luZ2xlU2hvdDsKICAgICAgICAgfQpAQCAtOTMxLDggKzkzMywx
MCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5Gb3JtYXR0ZWRSZWNvCiAgICAgICAgIGlm
ICh0aGlzLmRhdGEuc2NyaXB0TmFtZSAmJiB0aGlzLnR5cGUgIT09IHJlY29yZFR5cGVzLkZ1bmN0
aW9uQ2FsbCkKICAgICAgICAgICAgIGNvbnRlbnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkZ1bmN0
aW9uIENhbGwiLCB0aGlzLmRhdGEuc2NyaXB0TmFtZSwgdGhpcy5kYXRhLnNjcmlwdExpbmUpOwog
Ci0gICAgICAgIGlmICh0aGlzLmNhbGxlclNjcmlwdE5hbWUgJiYgdGhpcy50eXBlICE9PSByZWNv
cmRUeXBlcy5HQ0V2ZW50KQotICAgICAgICAgICAgY29udGVudEhlbHBlci5fYXBwZW5kTGlua1Jv
dygiQ2FsbGVyIiwgdGhpcy5jYWxsZXJTY3JpcHROYW1lLCB0aGlzLmNhbGxlclNjcmlwdExpbmUp
OworICAgICAgICBpZiAodGhpcy5zdGFja1RyYWNlICYmIHRoaXMudHlwZSAhPT0gcmVjb3JkVHlw
ZXMuR0NFdmVudCkgeworICAgICAgICAgICAgdmFyIGNhbGxTaXRlID0gdGhpcy5zdGFja1RyYWNl
WzBdOworICAgICAgICAgICAgY29udGVudEhlbHBlci5fYXBwZW5kTGlua1JvdygiQ2FsbGVyIiwg
Y2FsbFNpdGUuc2NyaXB0TmFtZSwgY2FsbFNpdGUubGluZU51bWJlcik7CisgICAgICAgIH0KIAog
ICAgICAgICBpZiAodGhpcy51c2VkSGVhcFNpemUpCiAgICAgICAgICAgICBjb250ZW50SGVscGVy
Ll9hcHBlbmRUZXh0Um93KCJVc2VkIEhlYXAgU2l6ZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
JXMgb2YgJXMiLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnVzZWRIZWFwU2l6ZSksIE51bWJl
ci5ieXRlc1RvU3RyaW5nKHRoaXMudG90YWxIZWFwU2l6ZSkpKTsKQEAgLTk1NSw3ICs5NTksOCBA
QCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5Gb3JtYXR0ZWRSZWNvCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlY29yZC5kYXRhLndpZHRoICsgIlx1MjAwOVx1MDBkN1x1MjAwOSIgKyByZWNv
cmQuZGF0YS5oZWlnaHQ7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZUFn
ZW50LlJlY29yZFR5cGUuVGltZXJJbnN0YWxsOgogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlRpbWVyUmVtb3ZlOgotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmNhbGxlclNjcmlwdE5hbWUgPyBXZWJJbnNwZWN0b3IubGlua2lmeVJlc291
cmNlQXNOb2RlKHRoaXMuY2FsbGVyU2NyaXB0TmFtZSwgInNjcmlwdHMiLCB0aGlzLmNhbGxlclNj
cmlwdExpbmUsICIiLCAiIikgOiByZWNvcmQuZGF0YS50aW1lcklkOworICAgICAgICAgICAgICAg
IHZhciBjYWxsU2l0ZSA9IHRoaXMuc3RhY2tUcmFjZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y2FsbFNpdGUgPyBXZWJJbnNwZWN0b3IubGlua2lmeVJlc291cmNlQXNOb2RlKGNhbGxTaXRlLnNj
cmlwdE5hbWUsICJzY3JpcHRzIiwgY2FsbFNpdGUubGluZU51bWJlciwgIiIsICIiKSA6IHJlY29y
ZC5kYXRhLnRpbWVySWQ7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UaW1lbGluZUFn
ZW50LlJlY29yZFR5cGUuUGFyc2VIVE1MOgogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlJlY2FsY3VsYXRlU3R5bGVzOgogICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmNhbGxlclNjcmlwdE5hbWUgPyBXZWJJbnNwZWN0b3IubGlua2lmeVJl
c291cmNlQXNOb2RlKHRoaXMuY2FsbGVyU2NyaXB0TmFtZSwgInNjcmlwdHMiLCB0aGlzLmNhbGxl
clNjcmlwdExpbmUsICIiLCAiIikgOiBudWxsOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTkxNzcpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAxMC0wNS0xMSAgSmFpbWUgWWFwICA8amFpbWV5YXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IGV4cGVjdGF0aW9ucyBj
aGFuZ2VkIGR1ZSB0byBuZXcgc3RhY2tUcmFjZSBmaWVsZCBvbiB0aW1lbGluZSByZWNvcmRzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc1MDIKKwor
ICAgICAgICAqIGluc3BlY3Rvci90aW1lbGluZS10ZXN0LmpzOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0Y2gtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUt
bWFyay10aW1lbGluZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0t
d2luL2luc3BlY3Rvci90aW1lbGluZS1uZXR3b3JrLXJlc291cmNlLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhaW50LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3Rp
bWVsaW5lLXBhcnNlLWh0bWwtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTA1LTExICBEaW1pdHJpIEds
YXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwkocmV2
aXNpb24gNTkxNzQpCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwko
d29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDcgQEAgdmFyIHRpbWVsaW5lTm9uRGV0ZXJtaW5pc3Rp
Y1Byb3BzID0geyAKICAgICBpZGVudGlmaWVyIDogMSwKICAgICBzdGFydFRpbWUgOiAxLAogICAg
IHdpZHRoIDogMSwKLSAgICBjYWxsZXJTY3JpcHROYW1lOiAxLAotICAgIGNhbGxlclNjcmlwdExp
bmU6IDEsCi0gICAgY2FsbGVyRnVuY3Rpb25OYW1lOiAxLAorICAgIHN0YWNrVHJhY2U6IDEsCiAg
ICAgdXJsIDogMSwKICAgICB1c2VkSGVhcFNpemU6IDEsCiAgICAgdG90YWxIZWFwU2l6ZTogMSwK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxp
bmUtZXZlbnQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0Y2gt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE3NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtZXZlbnQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDkgKzMsNyBAQCBUZXN0cyB0aGUgVGltZWxpbmUgQVBJIGlu
c3RydW1lbnRhdGlvbiBvCiBUZXN0IE1vdXNlIFRhcmdldAogRXZlbnREaXNwYXRjaCBQcm9wZXJ0
aWVzOgogKyBzdGFydFRpbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBE
RUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0
aW9uTmFtZSA6ICogREVGSU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRh
IDogewogKy0gdHlwZSA6IG1vdXNlZG93bgogKyB9CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNw
ZWN0b3IvdGltZWxpbmUtbWFyay10aW1lbGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU5MTc0
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGlu
ZS1tYXJrLXRpbWVsaW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw5ICsyLDcg
QEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBtYXJrIGZlYXR1cmUKIAogTWFya1RpbWVsaW5lIFBy
b3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdE5hbWUg
OiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRMaW5lIDogKiBERUZJTkVEICoKLSsgY2FsbGVy
RnVuY3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysgc3RhY2tUcmFjZSA6ICogREVGSU5FRCAqCiAr
IGRhdGEgOiB7CiArLSBtZXNzYWdlIDogTUFSSyBUSU1FTElORQogKyB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW5ldHdvcmstcmVz
b3VyY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDU5MTc0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2lu
L2luc3BlY3Rvci90aW1lbGluZS1uZXR3b3JrLXJlc291cmNlLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMyw5ICszLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50
YXRpb24gbwogCiBSZXNvdXJjZVNlbmRSZXF1ZXN0IFByb3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6
ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdE5hbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJT
Y3JpcHRMaW5lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyRnVuY3Rpb25OYW1lIDogKiBERUZJTkVE
ICoKKysgc3RhY2tUcmFjZSA6ICogREVGSU5FRCAqCiArIGRhdGEgOiB7CiArLSBpZGVudGlmaWVy
IDogKiBERUZJTkVEICoKICstIHVybCA6ICogREVGSU5FRCAqCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhaW50LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVj
dG9yL3RpbWVsaW5lLXBhaW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTkxNzQpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhaW50LWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw5ICsyLDcgQEAgVGVzdHMgdGhlIFRpbWVs
aW5lIEFQSSBpbnN0cnVtZW50YXRpb24gbwogCiBQYWludCBQcm9wZXJ0aWVzOgogKyBzdGFydFRp
bWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2Fs
bGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVG
SU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewogKy0geCA6IDAK
ICstIHkgOiAwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVj
dG9yL3RpbWVsaW5lLXBhcnNlLWh0bWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtcGFyc2UtaHRt
bC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU5MTc0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMiw5ICsyLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0
cnVtZW50YXRpb24gbwogCiBQYXJzZUhUTUwgUHJvcGVydGllczoKICsgc3RhcnRUaW1lIDogKiBE
RUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlw
dExpbmUgOiAqIERFRklORUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklORUQgKgor
KyBzdGFja1RyYWNlIDogKiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIGxlbmd0aCA6IDkKICst
IHN0YXJ0TGluZSA6IDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55848</attachid>
            <date>2010-05-12 08:17:41 -0700</date>
            <delta_ts>2010-05-17 11:10:06 -0700</delta_ts>
            <desc>Fixes style issues and updates chromium deps</desc>
            <filename>v8-stacktrace-v2.patch</filename>
            <type>text/plain</type>
            <size>20020</size>
            <attacher>jaimeyap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMTEgIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlcyBwdWJsaWMgY2FsbExvY2F0aW9uIEFQSSBhbmQgdXRpbGl0eSBjb250ZXh0IGZyb20gU2Ny
aXB0Q2FsbFN0YWNrLgorICAgICAgICBBZGRzIGFiaWxpdHkgdG8gZ3JhYiB0aGUgdG9wIDUgSmF2
YVNjcmlwdCBzdGFjayBmcmFtZXMgZm9yIGVhY2ggdGltZWxpbmUKKyAgICAgICAgcmVjb3JkIHVz
aW5nIG5ldyBmYXN0IFY4IHN0YWNrIHRyYWNlIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpz
dGFja1RyYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0QXJyYXk6OlNjcmlwdEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxs
U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjb3JkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90b3R5cGUuX2dlbmVyYXRlUG9wdXBDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90
b3R5cGUuX2dldFJlY29yZERldGFpbHMpOgorCiAyMDEwLTA1LTExICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSB3b3JsZC4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQogICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOwogfQogCi1ib29sIFNjcmlwdENhbGxTdGFjazo6Y2FsbExvY2F0aW9uKFN0
cmluZyosIGludCosIFN0cmluZyopCitib29sIFNjcmlwdENhbGxTdGFjazo6c3RhY2tUcmFjZShp
bnQsIFNjcmlwdFN0YXRlKiwgU2NyaXB0QXJyYXkmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNTkxNzQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdENhbGxTdGFja19oCiAjZGVmaW5lIFNj
cmlwdENhbGxTdGFja19oCiAKKyNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNj
cmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RyaW5nLmgiCkBAIC01Myw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gZnJhbWUgcmV0cmlldmFsIG1ldGhvZHMKICAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZy
YW1lICZhdCh1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUoKTsKLSAgICAgICAgc3Rh
dGljIGJvb2wgY2FsbExvY2F0aW9uKFN0cmluZyosIGludCosIFN0cmluZyopOworICAgICAgICBz
dGF0aWMgYm9vbCBzdGFja1RyYWNlKGludCwgU2NyaXB0U3RhdGUqLCBTY3JpcHRBcnJheSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRBcnJheS5oCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0QXJyYXkgOiBwdWJsaWMgU2NyaXB0T2JqZWN0
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdEFycmF5KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgdjg6OkhhbmRsZTx2ODo6QXJyYXk+KTsKKyAgICAgICAgU2NyaXB0QXJyYXkoKSB7fTsK
ICAgICAgICAgdmlydHVhbCB+U2NyaXB0QXJyYXkoKSB7fQogCiAgICAgICAgIGJvb2wgc2V0KHVu
c2lnbmVkIGluZGV4LCBjb25zdCBTY3JpcHRPYmplY3QmKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAK
KyNpbmNsdWRlICJTY3JpcHRTY29wZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpA
QCAtNDEsOCArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBTY3JpcHRDYWxsU3RhY2s6OnNfdXRpbGl0eUNvbnRleHQ7Ci0KIFNjcmlw
dENhbGxTdGFjayogU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJndW1lbnRzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkgewogICAgIFN0cmluZyBzb3Vy
Y2VOYW1lOwogICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwpAQCAtNTQsOSArNTMsMjIgQEAgU2Ny
aXB0Q2FsbFN0YWNrKiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZQogCiBib29sIFNjcmlwdENhbGxT
dGFjazo6Y2FsbExvY2F0aW9uKFN0cmluZyogc291cmNlTmFtZSwgaW50KiBzb3VyY2VMaW5lTnVt
YmVyLCBTdHJpbmcqIGZ1bmN0aW9uTmFtZSkKIHsKLSAgICBpZiAoIXRvcFN0YWNrRnJhbWUoKnNv
dXJjZU5hbWUsICpzb3VyY2VMaW5lTnVtYmVyLCAqZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICpzb3VyY2VMaW5lTnVtYmVyICs9IDE7CisgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RhY2tUcmFjZT4gc3RhY2tU
cmFjZSh2ODo6U3RhY2tUcmFjZTo6Q3VycmVudFN0YWNrVHJhY2UoMSkpOworICAgIGlmIChzdGFj
a1RyYWNlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGFja1Ry
YWNlLT5HZXRGcmFtZUNvdW50KCkgPD0gMCkgeworICAgICAgICAvLyBGYWxsYmFjayB0byBzZXR0
aW5nIGxpbmVOdW1iZXIgdG8gMCwgYW5kIHNvdXJjZSBhbmQgZnVuY3Rpb24gbmFtZSB0byAidW5k
ZWZpbmVkIi4KKyAgICAgICAgKnNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodjg6OlVuZGVm
aW5lZCgpKTsKKyAgICAgICAgKnNvdXJjZUxpbmVOdW1iZXIgPSAwOworICAgICAgICAqZnVuY3Rp
b25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4OjpVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4OjpTdGFja0ZyYW1lPiBmcmFtZSA9IHN0
YWNrVHJhY2UtPkdldEZyYW1lKDApOworICAgICpzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5n
KGZyYW1lLT5HZXRTY3JpcHROYW1lKCkpOworICAgICpzb3VyY2VMaW5lTnVtYmVyID0gZnJhbWUt
PkdldExpbmVOdW1iZXIoKTsKKyAgICAqZnVuY3Rpb25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKGZy
YW1lLT5HZXRGdW5jdGlvbk5hbWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTc4LDY2
ICs5MCwxMyBAQCBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIFNjcmlwdENhbGxTdGFjazo6CiAgICAg
cmV0dXJuIG1fbGFzdENhbGxlcjsKIH0KIAotLy8gQ3JlYXRlIHRoZSB1dGlsaXR5IGNvbnRleHQg
Zm9yIGhvbGRpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5Ci0vLyB3aGlj
aCBhcmUgbm90IHZpc2libGUgdG8gSmF2YVNjcmlwdCBleGVjdXRpbmcgb24gdGhlIHBhZ2UuCi12
b2lkIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlVXRpbGl0eUNvbnRleHQoKQorYm9vbCBTY3JpcHRD
YWxsU3RhY2s6OnN0YWNrVHJhY2UoaW50IGZyYW1lTGltaXQsIFNjcmlwdFN0YXRlKiBzdGF0ZSwg
U2NyaXB0QXJyYXkmIHN0YWNrVHJhY2UpCiB7Ci0gICAgQVNTRVJUKHNfdXRpbGl0eUNvbnRleHQu
SXNFbXB0eSgpKTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSB2ODo6T2JqZWN0VGVtcGxhdGU6
Ok5ldygpOwotICAgIHNfdXRpbGl0eUNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KDAsIGdsb2Jh
bFRlbXBsYXRlKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHNfdXRpbGl0
eUNvbnRleHQpOwotCi0gICAgLy8gQ29tcGlsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciByZXRy
aWV2aW5nIHRoZSBzb3VyY2UgbGluZSwgdGhlIHNvdXJjZQotICAgIC8vIG5hbWUgYW5kIHRoZSBz
eW1ib2wgbmFtZSBmb3IgdGhlIHRvcCBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgY2hhciosIHRvcFN0YWNrRnJhbWUsCi0gICAgICAgICgiZnVu
Y3Rpb24gdG9wU3RhY2tGcmFtZShleGVjX3N0YXRlKSB7IgotICAgICAgICAiICBpZiAoIWV4ZWNf
c3RhdGUuZnJhbWVDb3VudCgpKSIKLSAgICAgICAgIiAgICAgIHJldHVybiB1bmRlZmluZWQ7Igot
ICAgICAgICAiICB2YXIgZnJhbWUgPSBleGVjX3N0YXRlLmZyYW1lKDApOyIKLSAgICAgICAgIiAg
dmFyIGZ1bmMgPSBmcmFtZS5mdW5jKCk7IgotICAgICAgICAiICB2YXIgc2NyaXB0TmFtZTsiCi0g
ICAgICAgICIgIGlmIChmdW5jLnJlc29sdmVkKCkgJiYgZnVuYy5zY3JpcHQoKSkiCi0gICAgICAg
ICIgICAgICBzY3JpcHROYW1lID0gZnVuYy5zY3JpcHQoKS5uYW1lKCk7IgotICAgICAgICAiICBy
ZXR1cm4gW3NjcmlwdE5hbWUsIGZyYW1lLnNvdXJjZUxpbmUoKSwgKGZ1bmMubmFtZSgpIHx8IGZ1
bmMuaW5mZXJyZWROYW1lKCkpXTsiCi0gICAgICAgICJ9IikpOwotICAgIHY4OjpTY3JpcHQ6OkNv
bXBpbGUodjg6OlN0cmluZzo6TmV3KHRvcFN0YWNrRnJhbWUpKS0+UnVuKCk7Ci19Ci0KLWJvb2wg
U2NyaXB0Q2FsbFN0YWNrOjp0b3BTdGFja0ZyYW1lKFN0cmluZyYgc291cmNlTmFtZSwgaW50JiBs
aW5lTnVtYmVyLCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhVdGlsaXR5Q29udGV4dCA9IHV0
aWxpdHlDb250ZXh0KCk7Ci0gICAgaWYgKHY4VXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2
OFV0aWxpdHlDb250ZXh0KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9wU3RhY2tG
cmFtZTsKLSAgICB0b3BTdGFja0ZyYW1lID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
djhVdGlsaXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInRvcFN0YWNr
RnJhbWUiKSkpOwotICAgIGlmICh0b3BTdGFja0ZyYW1lLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IHY4OjpEZWJ1Zzo6
Q2FsbCh0b3BTdGFja0ZyYW1lKTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gdG9wIHN0YWNrIGZyYW1lLCB3ZSBz
dGlsbCByZXR1cm4gc3VjY2VzcywgYnV0IGZpbGwgdGhlIGlucHV0IHBhcmFtcyB3aXRoIGRlZmF1
bHRzLgotICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSkgewotICAgICAgLy8gRmFsbGJhY2sg
dG8gc2V0dGluZyBsaW5lTnVtYmVyIHRvIDAsIGFuZCBzb3VyY2UgYW5kIGZ1bmN0aW9uIG5hbWUg
dG8gInVuZGVmaW5lZCIuCi0gICAgICBzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVl
KTsKLSAgICAgIGxpbmVOdW1iZXIgPSAwOwotICAgICAgZnVuY3Rpb25OYW1lID0gdG9XZWJDb3Jl
U3RyaW5nKHZhbHVlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIXZhbHVl
LT5Jc0FycmF5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4ganNBcnJheSA9IHZhbHVlLT5Ub09iamVjdCgpOwotICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHNvdXJjZU5hbWVWYWx1ZSA9IGpzQXJyYXktPkdldCgwKTsKLSAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBsaW5lTnVtYmVyVmFsdWUgPSBqc0FycmF5LT5HZXQoMSk7Ci0gICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gZnVuY3Rpb25OYW1lVmFsdWUgPSBqc0FycmF5LT5HZXQoMik7Ci0gICAgaWYg
KHNvdXJjZU5hbWVWYWx1ZS5Jc0VtcHR5KCkgfHwgbGluZU51bWJlclZhbHVlLklzRW1wdHkoKSB8
fCBmdW5jdGlvbk5hbWVWYWx1ZS5Jc0VtcHR5KCkpCisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc3Rh
dGUpOworICAgIHY4OjpIYW5kbGU8djg6OlN0YWNrVHJhY2U+IHRyYWNlKHY4OjpTdGFja1RyYWNl
OjpDdXJyZW50U3RhY2tUcmFjZShmcmFtZUxpbWl0KSk7CisgICAgaWYgKHRyYWNlLklzRW1wdHko
KSB8fCAhdHJhY2UtPkdldEZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoc291cmNlTmFtZVZhbHVlKTsKLSAgICBsaW5l
TnVtYmVyID0gbGluZU51bWJlclZhbHVlLT5JbnQzMlZhbHVlKCk7Ci0gICAgZnVuY3Rpb25OYW1l
ID0gdG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uTmFtZVZhbHVlKTsKKyAgICBzdGFja1RyYWNlID0g
U2NyaXB0QXJyYXkoc3RhdGUsIHRyYWNlLT5Bc0FycmF5KCkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmgJKHJldmlzaW9uIDU5
MTc0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRDYWxsU3RhY2tfaAogI2RlZmlu
ZSBTY3JpcHRDYWxsU3RhY2tfaAogCisjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRl
ICJTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCkBAIC00Nyw3ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNj
cmlwdENhbGxTdGFjayogY3JlYXRlKGNvbnN0IHY4OjpBcmd1bWVudHMmLCB1bnNpZ25lZCBza2lw
QXJndW1lbnRDb3VudCA9IDApOwogICAgIH5TY3JpcHRDYWxsU3RhY2soKTsKIAotICAgIHN0YXRp
YyBib29sIGNhbGxMb2NhdGlvbihTdHJpbmcqIHNvdXJjZU5hbWUsIGludCogc291cmNlTGluZU51
bWJlciwgU3RyaW5nKiBmdW5jdGlvbk5hbWUpOworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhl
cmUgaXMgbm8gcnVubmluZyBKYXZhU2NyaXB0IG9yIGlmIGZldGNoaW5nIHRoZSBzdGFjayBmYWls
ZWQuCisgICAgLy8gU2V0cyBzdGFja1RyYWNlIHRvIGJlIGFuIGFycmF5IG9mIHN0YWNrIGZyYW1l
IG9iamVjdHMuCisgICAgLy8gQSBzdGFjayBmcmFtZSBvYmplY3QgbG9va3MgbGlrZToKKyAgICAv
LyB7CisgICAgLy8gICBzY3JpcHROYW1lOiA8ZmlsZSBuYW1lIGZvciB0aGUgYXNzb2NpYXRlZCBz
Y3JpcHQgcmVzb3VyY2U+CisgICAgLy8gICBmdW5jdGlvbk5hbWU6IDxuYW1lIG9mIHRoZSBKYXZh
U2NyaXB0IGZ1bmN0aW9uPgorICAgIC8vICAgbGluZU51bWJlcjogPDEgYmFzZWQgbGluZSBudW1i
ZXI+CisgICAgLy8gICBjb2x1bW46IDwxIGJhc2VkIGNvbHVtbiBvZmZzZXQgb24gdGhlIGxpbmU+
CisgICAgLy8gfQorICAgIHN0YXRpYyBib29sIHN0YWNrVHJhY2UoaW50IGZyYW1lTGltaXQsIFNj
cmlwdFN0YXRlKiBzdGF0ZSwgU2NyaXB0QXJyYXkmIHN0YWNrVHJhY2UpOwogCiAgICAgY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lJiBhdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudCByZXRyaWV2aW5nIGFuZCBzdG9yaW5nIGNhbGwgc3RhY2sgdHJhY2UKQEAgLTU5LDMwICs2
OSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNjcmlwdENhbGxTdGFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmd1bWVudHMsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50LCBTdHJpbmcg
c291cmNlTmFtZSwgaW50IHNvdXJjZUxpbmVOdW1iZXIsIFN0cmluZyBmdW5jTmFtZSk7CiAKLSAg
ICAvLyBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc291cmNlIG5hbWUsIGxpbmUgbnVtYmVy
IGFuZCBmdW5jdGlvbiBuYW1lIGZvciB0aGUgdG9wCi0gICAgLy8gSmF2YVNjcmlwdCBzdGFjayBm
cmFtZS4KLSAgICAvLwotICAgIC8vIEl0IHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIGNhbGxlciBp
bmZvcm1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBhbmQgd3JpdHRlbgotICAgIC8v
IGludG8gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24gd2ls
bCByZXR1cm4gZmFsc2UuIEl0IG1heQotICAgIC8vIGZhaWwgZHVlIHRvIGEgc3RhY2sgb3ZlcmZs
b3cgaW4gdGhlIHVuZGVybHlpbmcgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiwgaGFuZGxpbmcK
LSAgICAvLyBvZiBzdWNoIGV4Y2VwdGlvbiBpcyB1cCB0byB0aGUgY2FsbGVyLgotICAgIHN0YXRp
YyBib29sIHRvcFN0YWNrRnJhbWUoU3RyaW5nJiBzb3VyY2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIs
IFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKLQotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVV0aWxpdHlD
b250ZXh0KCk7Ci0KLSAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgdXRpbGl0
eSBjb250ZXh0LgotICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHV0aWxpdHlDb250
ZXh0KCkKLSAgICB7Ci0gICAgICBpZiAoc191dGlsaXR5Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgY3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKLSAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcoc191dGlsaXR5Q29udGV4dCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29s
IGNhbGxMb2NhdGlvbihTdHJpbmcqIHNvdXJjZU5hbWUsIGludCogc291cmNlTGluZU51bWJlciwg
U3RyaW5nKiBmdW5jdGlvbk5hbWUpOwogCiAgICAgU2NyaXB0Q2FsbEZyYW1lIG1fbGFzdENhbGxl
cjsKICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKLQotICAgIC8vIFV0aWxpdHkgY29u
dGV4dCBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseS4KLSAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHNfdXRpbGl0eUNvbnRleHQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5
LDkgQEAgU2NyaXB0T2JqZWN0IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYQogICAgIFNjcmlw
dE9iamVjdCByZWNvcmQgPSBmcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgcmVjb3Jk
LnNldCgic3RhcnRUaW1lIiwgc3RhcnRUaW1lKTsKIAotICAgIFN0cmluZyBzb3VyY2VOYW1lOwot
ICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwotICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7Ci0gICAg
aWYgKFNjcmlwdENhbGxTdGFjazo6Y2FsbExvY2F0aW9uKCZzb3VyY2VOYW1lLCAmc291cmNlTGlu
ZU51bWJlciwgJmZ1bmN0aW9uTmFtZSkgJiYgc291cmNlTmFtZSAhPSAidW5kZWZpbmVkIikgewot
ICAgICAgICByZWNvcmQuc2V0KCJjYWxsZXJTY3JpcHROYW1lIiwgc291cmNlTmFtZSk7Ci0gICAg
ICAgIHJlY29yZC5zZXQoImNhbGxlclNjcmlwdExpbmUiLCBzb3VyY2VMaW5lTnVtYmVyKTsKLSAg
ICAgICAgcmVjb3JkLnNldCgiY2FsbGVyRnVuY3Rpb25OYW1lIiwgZnVuY3Rpb25OYW1lKTsKLSAg
ICB9CisgICAgU2NyaXB0QXJyYXkgc3RhY2tUcmFjZTsKKyAgICBpZiAoU2NyaXB0Q2FsbFN0YWNr
OjpzdGFja1RyYWNlKDUsIGZyb250ZW5kLT5zY3JpcHRTdGF0ZSgpLCBzdGFja1RyYWNlKSkKKyAg
ICAgICAgcmVjb3JkLnNldCgic3RhY2tUcmFjZSIsIHN0YWNrVHJhY2UpOwogICAgIHJldHVybiBy
ZWNvcmQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBh
bmVsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZVBhbmVsLmpzCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZVBhbmVsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04MDAsOCArODAwLDcgQEAgV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuRm9ybWF0dGVkUmVjbwogICAgIHRoaXMuX3NlbGZUaW1l
ID0gdGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWU7CiAgICAgdGhpcy5fbGFzdENoaWxkRW5k
VGltZSA9IHRoaXMuZW5kVGltZTsKICAgICB0aGlzLm9yaWdpbmFsUmVjb3JkRm9yVGVzdHMgPSBy
ZWNvcmQ7Ci0gICAgdGhpcy5jYWxsZXJTY3JpcHROYW1lID0gcmVjb3JkLmNhbGxlclNjcmlwdE5h
bWU7Ci0gICAgdGhpcy5jYWxsZXJTY3JpcHRMaW5lID0gcmVjb3JkLmNhbGxlclNjcmlwdExpbmU7
CisgICAgdGhpcy5zdGFja1RyYWNlID0gcmVjb3JkLnN0YWNrVHJhY2U7CiAgICAgdGhpcy50b3Rh
bEhlYXBTaXplID0gcmVjb3JkLnRvdGFsSGVhcFNpemU7CiAgICAgdGhpcy51c2VkSGVhcFNpemUg
PSByZWNvcmQudXNlZEhlYXBTaXplOwogCkBAIC04MzAsOCArODI5LDExIEBAIFdlYkluc3BlY3Rv
ci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY28KICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBl
ID09PSByZWNvcmRUeXBlcy5UaW1lckZpcmUpIHsKICAgICAgICAgdmFyIHRpbWVySW5zdGFsbGVk
UmVjb3JkID0gdGltZXJSZWNvcmRzW3JlY29yZC5kYXRhLnRpbWVySWRdOwogICAgICAgICBpZiAo
dGltZXJJbnN0YWxsZWRSZWNvcmQpIHsKLSAgICAgICAgICAgIHRoaXMuY2FsbFNpdGVTY3JpcHRO
YW1lID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICAgICAgICAg
IHRoaXMuY2FsbFNpdGVTY3JpcHRMaW5lID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2Ny
aXB0TGluZTsKKyAgICAgICAgICAgIGlmICh0aW1lckluc3RhbGxlZFJlY29yZC5zdGFja1RyYWNl
KSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxTaXRlID0gdGltZXJJbnN0YWxsZWRSZWNvcmQu
c3RhY2tUcmFjZVswXTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aGlzLmNhbGxTaXRl
U2NyaXB0TmFtZSA9IGNhbGxTaXRlLnNjcmlwdE5hbWU7CisgICAgICAgICAgICAgICAgdGhpcy5j
YWxsU2l0ZVNjcmlwdExpbmUgPSBjYWxsU2l0ZS5saW5lTnVtYmVyOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJJbnN0YWxsZWRSZWNvcmQudGltZW91dDsK
ICAgICAgICAgICAgIHRoaXMuc2luZ2xlU2hvdCA9IHRpbWVySW5zdGFsbGVkUmVjb3JkLnNpbmds
ZVNob3Q7CiAgICAgICAgIH0KQEAgLTkzMSw4ICs5MzMsMTAgQEAgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjbwogICAgICAgICBpZiAodGhpcy5kYXRhLnNjcmlwdE5hbWUg
JiYgdGhpcy50eXBlICE9PSByZWNvcmRUeXBlcy5GdW5jdGlvbkNhbGwpCiAgICAgICAgICAgICBj
b250ZW50SGVscGVyLl9hcHBlbmRMaW5rUm93KCJGdW5jdGlvbiBDYWxsIiwgdGhpcy5kYXRhLnNj
cmlwdE5hbWUsIHRoaXMuZGF0YS5zY3JpcHRMaW5lKTsKIAotICAgICAgICBpZiAodGhpcy5jYWxs
ZXJTY3JpcHROYW1lICYmIHRoaXMudHlwZSAhPT0gcmVjb3JkVHlwZXMuR0NFdmVudCkKLSAgICAg
ICAgICAgIGNvbnRlbnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIHRoaXMuY2FsbGVy
U2NyaXB0TmFtZSwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lKTsKKyAgICAgICAgaWYgKHRoaXMuc3Rh
Y2tUcmFjZSAmJiB0aGlzLnR5cGUgIT09IHJlY29yZFR5cGVzLkdDRXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjYWxsU2l0ZSA9IHRoaXMuc3RhY2tUcmFjZVswXTsKKyAgICAgICAgICAgIGNvbnRl
bnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIGNhbGxTaXRlLnNjcmlwdE5hbWUsIGNh
bGxTaXRlLmxpbmVOdW1iZXIpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMudXNlZEhl
YXBTaXplKQogICAgICAgICAgICAgY29udGVudEhlbHBlci5fYXBwZW5kVGV4dFJvdygiVXNlZCBI
ZWFwIFNpemUiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIG9mICVzIiwgTnVtYmVyLmJ5dGVz
VG9TdHJpbmcodGhpcy51c2VkSGVhcFNpemUpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnRv
dGFsSGVhcFNpemUpKSk7CkBAIC05NTUsNyArOTU5LDggQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UGFuZWwuRm9ybWF0dGVkUmVjbwogICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQuZGF0YS53
aWR0aCArICJcdTIwMDlcdTAwZDdcdTIwMDkiICsgcmVjb3JkLmRhdGEuaGVpZ2h0OwogICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlRpbWVySW5z
dGFsbDoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3Jk
VHlwZS5UaW1lclJlbW92ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJTY3Jp
cHROYW1lID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxlclNj
cmlwdE5hbWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDogcmVj
b3JkLmRhdGEudGltZXJJZDsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbFNpdGUgPSB0aGlzLnN0
YWNrVHJhY2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxTaXRlID8gV2ViSW5zcGVjdG9y
LmxpbmtpZnlSZXNvdXJjZUFzTm9kZShjYWxsU2l0ZS5zY3JpcHROYW1lLCAic2NyaXB0cyIsIGNh
bGxTaXRlLmxpbmVOdW1iZXIsICIiLCAiIikgOiByZWNvcmQuZGF0YS50aW1lcklkOwogICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlBhcnNlSFRN
TDoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3JkVHlw
ZS5SZWNhbGN1bGF0ZVN0eWxlczoKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJT
Y3JpcHROYW1lID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxl
clNjcmlwdE5hbWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDog
bnVsbDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9ERVBTCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYktpdC9jaHJvbWl1bS9ERVBTCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIHZhcnMgPSB7CiAgICdjaHJvbWl1bV9z
dm4nOiAnaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvc3ZuL3RydW5rL3NyYycsCi0gICdjaHJvbWl1
bV9yZXYnOiAnNDY4MDUnLAorICAnY2hyb21pdW1fcmV2JzogJzQ2OTkxJywKIAogICAncHRocmVh
ZHMtd2luMzJfcmV2JzogJzI2NzE2JywKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MTc3KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTAtMDUtMTEgIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBleHBlY3RhdGlvbnMgY2hh
bmdlZCBkdWUgdG8gbmV3IHN0YWNrVHJhY2UgZmllbGQgb24gdGltZWxpbmUgcmVjb3Jkcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qczoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1h
cmstdGltZWxpbmUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdp
bi9pbnNwZWN0b3IvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1l
bGluZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wNS0xMSAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHJldmlz
aW9uIDU5MTc0KQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHdv
cmtpbmcgY29weSkKQEAgLTgsOSArOCw3IEBAIHZhciB0aW1lbGluZU5vbkRldGVybWluaXN0aWNQ
cm9wcyA9IHsgCiAgICAgaWRlbnRpZmllciA6IDEsCiAgICAgc3RhcnRUaW1lIDogMSwKICAgICB3
aWR0aCA6IDEsCi0gICAgY2FsbGVyU2NyaXB0TmFtZTogMSwKLSAgICBjYWxsZXJTY3JpcHRMaW5l
OiAxLAotICAgIGNhbGxlckZ1bmN0aW9uTmFtZTogMSwKKyAgICBzdGFja1RyYWNlOiAxLAogICAg
IHVybCA6IDEsCiAgICAgdXNlZEhlYXBTaXplOiAxLAogICAgIHRvdGFsSGVhcFNpemU6IDEsCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5l
LWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTkxNzQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMyw5ICszLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0
cnVtZW50YXRpb24gbwogVGVzdCBNb3VzZSBUYXJnZXQKIEV2ZW50RGlzcGF0Y2ggUHJvcGVydGll
czoKICsgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TmFtZSA6ICogREVG
SU5FRCAqCi0rIGNhbGxlclNjcmlwdExpbmUgOiAqIERFRklORUQgKgotKyBjYWxsZXJGdW5jdGlv
bk5hbWUgOiAqIERFRklORUQgKgorKyBzdGFja1RyYWNlIDogKiBERUZJTkVEICoKICsgZGF0YSA6
IHsKICstIHR5cGUgOiBtb3VzZWRvd24KICsgfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1tYXJrLXRpbWVsaW5lLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVj
dG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE3NCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUt
bWFyay10aW1lbGluZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsOSArMiw3IEBA
IFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgbWFyayBmZWF0dXJlCiAKIE1hcmtUaW1lbGluZSBQcm9w
ZXJ0aWVzOgogKyBzdGFydFRpbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDog
KiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1
bmN0aW9uTmFtZSA6ICogREVGSU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBk
YXRhIDogewogKy0gbWVzc2FnZSA6IE1BUksgVElNRUxJTkUKICsgfQpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1uZXR3b3JrLXJlc291
cmNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW5ldHdvcmstcmVzb3VyY2UtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA1OTE3NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9p
bnNwZWN0b3IvdGltZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTMsOSArMyw3IEBAIFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0
aW9uIG8KIAogUmVzb3VyY2VTZW5kUmVxdWVzdCBQcm9wZXJ0aWVzOgogKyBzdGFydFRpbWUgOiAq
IERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2Ny
aXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVGSU5FRCAq
CisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewogKy0gaWRlbnRpZmllciA6
ICogREVGSU5FRCAqCiArLSB1cmwgOiAqIERFRklORUQgKgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rv
ci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU5MTc0KQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsOSArMiw3IEBAIFRlc3RzIHRoZSBUaW1lbGlu
ZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG8KIAogUGFpbnQgUHJvcGVydGllczoKICsgc3RhcnRUaW1l
IDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxl
clNjcmlwdExpbmUgOiAqIERFRklORUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklO
RUQgKgorKyBzdGFja1RyYWNlIDogKiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIHggOiAwCiAr
LSB5IDogMApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rv
ci90aW1lbGluZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhcnNlLWh0bWwt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE3NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtcGFyc2UtaHRtbC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTIsOSArMiw3IEBAIFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1
bWVudGF0aW9uIG8KIAogUGFyc2VIVE1MIFByb3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVG
SU5FRCAqCi0rIGNhbGxlclNjcmlwdE5hbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRM
aW5lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyRnVuY3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysg
c3RhY2tUcmFjZSA6ICogREVGSU5FRCAqCiArIGRhdGEgOiB7CiArLSBsZW5ndGggOiA5CiArLSBz
dGFydExpbmUgOiAwCg==
</data>
<flag name="review"
          id="40137"
          type_id="1"
          status="-"
          setter="jaimeyap"
    />
    <flag name="commit-queue"
          id="40522"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56252</attachid>
            <date>2010-05-17 11:09:02 -0700</date>
            <delta_ts>2010-05-18 12:02:33 -0700</delta_ts>
            <desc>undoes the DEPS change</desc>
            <filename>v8-stacktrace-v3.patch</filename>
            <type>text/plain</type>
            <size>19657</size>
            <attacher>jaimeyap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMTEgIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlcyBwdWJsaWMgY2FsbExvY2F0aW9uIEFQSSBhbmQgdXRpbGl0eSBjb250ZXh0IGZyb20gU2Ny
aXB0Q2FsbFN0YWNrLgorICAgICAgICBBZGRzIGFiaWxpdHkgdG8gZ3JhYiB0aGUgdG9wIDUgSmF2
YVNjcmlwdCBzdGFjayBmcmFtZXMgZm9yIGVhY2ggdGltZWxpbmUKKyAgICAgICAgcmVjb3JkIHVz
aW5nIG5ldyBmYXN0IFY4IHN0YWNrIHRyYWNlIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpz
dGFja1RyYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0QXJyYXk6OlNjcmlwdEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxs
U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjb3JkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90b3R5cGUuX2dlbmVyYXRlUG9wdXBDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90
b3R5cGUuX2dldFJlY29yZERldGFpbHMpOgorCiAyMDEwLTA1LTExICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSB3b3JsZC4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQogICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOwogfQogCi1ib29sIFNjcmlwdENhbGxTdGFjazo6Y2FsbExvY2F0aW9uKFN0
cmluZyosIGludCosIFN0cmluZyopCitib29sIFNjcmlwdENhbGxTdGFjazo6c3RhY2tUcmFjZShp
bnQsIFNjcmlwdFN0YXRlKiwgU2NyaXB0QXJyYXkmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNTkxNzQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdENhbGxTdGFja19oCiAjZGVmaW5lIFNj
cmlwdENhbGxTdGFja19oCiAKKyNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNj
cmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RyaW5nLmgiCkBAIC01Myw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gZnJhbWUgcmV0cmlldmFsIG1ldGhvZHMKICAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZy
YW1lICZhdCh1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUoKTsKLSAgICAgICAgc3Rh
dGljIGJvb2wgY2FsbExvY2F0aW9uKFN0cmluZyosIGludCosIFN0cmluZyopOworICAgICAgICBz
dGF0aWMgYm9vbCBzdGFja1RyYWNlKGludCwgU2NyaXB0U3RhdGUqLCBTY3JpcHRBcnJheSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRBcnJheS5oCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0QXJyYXkgOiBwdWJsaWMgU2NyaXB0T2JqZWN0
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdEFycmF5KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgdjg6OkhhbmRsZTx2ODo6QXJyYXk+KTsKKyAgICAgICAgU2NyaXB0QXJyYXkoKSB7fTsK
ICAgICAgICAgdmlydHVhbCB+U2NyaXB0QXJyYXkoKSB7fQogCiAgICAgICAgIGJvb2wgc2V0KHVu
c2lnbmVkIGluZGV4LCBjb25zdCBTY3JpcHRPYmplY3QmKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAK
KyNpbmNsdWRlICJTY3JpcHRTY29wZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpA
QCAtNDEsOCArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBTY3JpcHRDYWxsU3RhY2s6OnNfdXRpbGl0eUNvbnRleHQ7Ci0KIFNjcmlw
dENhbGxTdGFjayogU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJndW1lbnRzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkgewogICAgIFN0cmluZyBzb3Vy
Y2VOYW1lOwogICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwpAQCAtNTQsOSArNTMsMjIgQEAgU2Ny
aXB0Q2FsbFN0YWNrKiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZQogCiBib29sIFNjcmlwdENhbGxT
dGFjazo6Y2FsbExvY2F0aW9uKFN0cmluZyogc291cmNlTmFtZSwgaW50KiBzb3VyY2VMaW5lTnVt
YmVyLCBTdHJpbmcqIGZ1bmN0aW9uTmFtZSkKIHsKLSAgICBpZiAoIXRvcFN0YWNrRnJhbWUoKnNv
dXJjZU5hbWUsICpzb3VyY2VMaW5lTnVtYmVyLCAqZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICpzb3VyY2VMaW5lTnVtYmVyICs9IDE7CisgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RhY2tUcmFjZT4gc3RhY2tU
cmFjZSh2ODo6U3RhY2tUcmFjZTo6Q3VycmVudFN0YWNrVHJhY2UoMSkpOworICAgIGlmIChzdGFj
a1RyYWNlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGFja1Ry
YWNlLT5HZXRGcmFtZUNvdW50KCkgPD0gMCkgeworICAgICAgICAvLyBGYWxsYmFjayB0byBzZXR0
aW5nIGxpbmVOdW1iZXIgdG8gMCwgYW5kIHNvdXJjZSBhbmQgZnVuY3Rpb24gbmFtZSB0byAidW5k
ZWZpbmVkIi4KKyAgICAgICAgKnNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodjg6OlVuZGVm
aW5lZCgpKTsKKyAgICAgICAgKnNvdXJjZUxpbmVOdW1iZXIgPSAwOworICAgICAgICAqZnVuY3Rp
b25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4OjpVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4OjpTdGFja0ZyYW1lPiBmcmFtZSA9IHN0
YWNrVHJhY2UtPkdldEZyYW1lKDApOworICAgICpzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5n
KGZyYW1lLT5HZXRTY3JpcHROYW1lKCkpOworICAgICpzb3VyY2VMaW5lTnVtYmVyID0gZnJhbWUt
PkdldExpbmVOdW1iZXIoKTsKKyAgICAqZnVuY3Rpb25OYW1lID0gdG9XZWJDb3JlU3RyaW5nKGZy
YW1lLT5HZXRGdW5jdGlvbk5hbWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTc4LDY2
ICs5MCwxMyBAQCBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIFNjcmlwdENhbGxTdGFjazo6CiAgICAg
cmV0dXJuIG1fbGFzdENhbGxlcjsKIH0KIAotLy8gQ3JlYXRlIHRoZSB1dGlsaXR5IGNvbnRleHQg
Zm9yIGhvbGRpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5Ci0vLyB3aGlj
aCBhcmUgbm90IHZpc2libGUgdG8gSmF2YVNjcmlwdCBleGVjdXRpbmcgb24gdGhlIHBhZ2UuCi12
b2lkIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlVXRpbGl0eUNvbnRleHQoKQorYm9vbCBTY3JpcHRD
YWxsU3RhY2s6OnN0YWNrVHJhY2UoaW50IGZyYW1lTGltaXQsIFNjcmlwdFN0YXRlKiBzdGF0ZSwg
U2NyaXB0QXJyYXkmIHN0YWNrVHJhY2UpCiB7Ci0gICAgQVNTRVJUKHNfdXRpbGl0eUNvbnRleHQu
SXNFbXB0eSgpKTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSB2ODo6T2JqZWN0VGVtcGxhdGU6
Ok5ldygpOwotICAgIHNfdXRpbGl0eUNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KDAsIGdsb2Jh
bFRlbXBsYXRlKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHNfdXRpbGl0
eUNvbnRleHQpOwotCi0gICAgLy8gQ29tcGlsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciByZXRy
aWV2aW5nIHRoZSBzb3VyY2UgbGluZSwgdGhlIHNvdXJjZQotICAgIC8vIG5hbWUgYW5kIHRoZSBz
eW1ib2wgbmFtZSBmb3IgdGhlIHRvcCBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgY2hhciosIHRvcFN0YWNrRnJhbWUsCi0gICAgICAgICgiZnVu
Y3Rpb24gdG9wU3RhY2tGcmFtZShleGVjX3N0YXRlKSB7IgotICAgICAgICAiICBpZiAoIWV4ZWNf
c3RhdGUuZnJhbWVDb3VudCgpKSIKLSAgICAgICAgIiAgICAgIHJldHVybiB1bmRlZmluZWQ7Igot
ICAgICAgICAiICB2YXIgZnJhbWUgPSBleGVjX3N0YXRlLmZyYW1lKDApOyIKLSAgICAgICAgIiAg
dmFyIGZ1bmMgPSBmcmFtZS5mdW5jKCk7IgotICAgICAgICAiICB2YXIgc2NyaXB0TmFtZTsiCi0g
ICAgICAgICIgIGlmIChmdW5jLnJlc29sdmVkKCkgJiYgZnVuYy5zY3JpcHQoKSkiCi0gICAgICAg
ICIgICAgICBzY3JpcHROYW1lID0gZnVuYy5zY3JpcHQoKS5uYW1lKCk7IgotICAgICAgICAiICBy
ZXR1cm4gW3NjcmlwdE5hbWUsIGZyYW1lLnNvdXJjZUxpbmUoKSwgKGZ1bmMubmFtZSgpIHx8IGZ1
bmMuaW5mZXJyZWROYW1lKCkpXTsiCi0gICAgICAgICJ9IikpOwotICAgIHY4OjpTY3JpcHQ6OkNv
bXBpbGUodjg6OlN0cmluZzo6TmV3KHRvcFN0YWNrRnJhbWUpKS0+UnVuKCk7Ci19Ci0KLWJvb2wg
U2NyaXB0Q2FsbFN0YWNrOjp0b3BTdGFja0ZyYW1lKFN0cmluZyYgc291cmNlTmFtZSwgaW50JiBs
aW5lTnVtYmVyLCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhVdGlsaXR5Q29udGV4dCA9IHV0
aWxpdHlDb250ZXh0KCk7Ci0gICAgaWYgKHY4VXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2
OFV0aWxpdHlDb250ZXh0KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gdG9wU3RhY2tG
cmFtZTsKLSAgICB0b3BTdGFja0ZyYW1lID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3Qo
djhVdGlsaXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInRvcFN0YWNr
RnJhbWUiKSkpOwotICAgIGlmICh0b3BTdGFja0ZyYW1lLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IHY4OjpEZWJ1Zzo6
Q2FsbCh0b3BTdGFja0ZyYW1lKTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gdG9wIHN0YWNrIGZyYW1lLCB3ZSBz
dGlsbCByZXR1cm4gc3VjY2VzcywgYnV0IGZpbGwgdGhlIGlucHV0IHBhcmFtcyB3aXRoIGRlZmF1
bHRzLgotICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSkgewotICAgICAgLy8gRmFsbGJhY2sg
dG8gc2V0dGluZyBsaW5lTnVtYmVyIHRvIDAsIGFuZCBzb3VyY2UgYW5kIGZ1bmN0aW9uIG5hbWUg
dG8gInVuZGVmaW5lZCIuCi0gICAgICBzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVl
KTsKLSAgICAgIGxpbmVOdW1iZXIgPSAwOwotICAgICAgZnVuY3Rpb25OYW1lID0gdG9XZWJDb3Jl
U3RyaW5nKHZhbHVlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIXZhbHVl
LT5Jc0FycmF5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4ganNBcnJheSA9IHZhbHVlLT5Ub09iamVjdCgpOwotICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHNvdXJjZU5hbWVWYWx1ZSA9IGpzQXJyYXktPkdldCgwKTsKLSAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBsaW5lTnVtYmVyVmFsdWUgPSBqc0FycmF5LT5HZXQoMSk7Ci0gICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gZnVuY3Rpb25OYW1lVmFsdWUgPSBqc0FycmF5LT5HZXQoMik7Ci0gICAgaWYg
KHNvdXJjZU5hbWVWYWx1ZS5Jc0VtcHR5KCkgfHwgbGluZU51bWJlclZhbHVlLklzRW1wdHkoKSB8
fCBmdW5jdGlvbk5hbWVWYWx1ZS5Jc0VtcHR5KCkpCisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc3Rh
dGUpOworICAgIHY4OjpIYW5kbGU8djg6OlN0YWNrVHJhY2U+IHRyYWNlKHY4OjpTdGFja1RyYWNl
OjpDdXJyZW50U3RhY2tUcmFjZShmcmFtZUxpbWl0KSk7CisgICAgaWYgKHRyYWNlLklzRW1wdHko
KSB8fCAhdHJhY2UtPkdldEZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoc291cmNlTmFtZVZhbHVlKTsKLSAgICBsaW5l
TnVtYmVyID0gbGluZU51bWJlclZhbHVlLT5JbnQzMlZhbHVlKCk7Ci0gICAgZnVuY3Rpb25OYW1l
ID0gdG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uTmFtZVZhbHVlKTsKKyAgICBzdGFja1RyYWNlID0g
U2NyaXB0QXJyYXkoc3RhdGUsIHRyYWNlLT5Bc0FycmF5KCkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmgJKHJldmlzaW9uIDU5
MTc0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRDYWxsU3RhY2tfaAogI2RlZmlu
ZSBTY3JpcHRDYWxsU3RhY2tfaAogCisjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRl
ICJTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCkBAIC00Nyw3ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNj
cmlwdENhbGxTdGFjayogY3JlYXRlKGNvbnN0IHY4OjpBcmd1bWVudHMmLCB1bnNpZ25lZCBza2lw
QXJndW1lbnRDb3VudCA9IDApOwogICAgIH5TY3JpcHRDYWxsU3RhY2soKTsKIAotICAgIHN0YXRp
YyBib29sIGNhbGxMb2NhdGlvbihTdHJpbmcqIHNvdXJjZU5hbWUsIGludCogc291cmNlTGluZU51
bWJlciwgU3RyaW5nKiBmdW5jdGlvbk5hbWUpOworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhl
cmUgaXMgbm8gcnVubmluZyBKYXZhU2NyaXB0IG9yIGlmIGZldGNoaW5nIHRoZSBzdGFjayBmYWls
ZWQuCisgICAgLy8gU2V0cyBzdGFja1RyYWNlIHRvIGJlIGFuIGFycmF5IG9mIHN0YWNrIGZyYW1l
IG9iamVjdHMuCisgICAgLy8gQSBzdGFjayBmcmFtZSBvYmplY3QgbG9va3MgbGlrZToKKyAgICAv
LyB7CisgICAgLy8gICBzY3JpcHROYW1lOiA8ZmlsZSBuYW1lIGZvciB0aGUgYXNzb2NpYXRlZCBz
Y3JpcHQgcmVzb3VyY2U+CisgICAgLy8gICBmdW5jdGlvbk5hbWU6IDxuYW1lIG9mIHRoZSBKYXZh
U2NyaXB0IGZ1bmN0aW9uPgorICAgIC8vICAgbGluZU51bWJlcjogPDEgYmFzZWQgbGluZSBudW1i
ZXI+CisgICAgLy8gICBjb2x1bW46IDwxIGJhc2VkIGNvbHVtbiBvZmZzZXQgb24gdGhlIGxpbmU+
CisgICAgLy8gfQorICAgIHN0YXRpYyBib29sIHN0YWNrVHJhY2UoaW50IGZyYW1lTGltaXQsIFNj
cmlwdFN0YXRlKiBzdGF0ZSwgU2NyaXB0QXJyYXkmIHN0YWNrVHJhY2UpOwogCiAgICAgY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lJiBhdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudCByZXRyaWV2aW5nIGFuZCBzdG9yaW5nIGNhbGwgc3RhY2sgdHJhY2UKQEAgLTU5LDMwICs2
OSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNjcmlwdENhbGxTdGFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmd1bWVudHMsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50LCBTdHJpbmcg
c291cmNlTmFtZSwgaW50IHNvdXJjZUxpbmVOdW1iZXIsIFN0cmluZyBmdW5jTmFtZSk7CiAKLSAg
ICAvLyBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc291cmNlIG5hbWUsIGxpbmUgbnVtYmVy
IGFuZCBmdW5jdGlvbiBuYW1lIGZvciB0aGUgdG9wCi0gICAgLy8gSmF2YVNjcmlwdCBzdGFjayBm
cmFtZS4KLSAgICAvLwotICAgIC8vIEl0IHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIGNhbGxlciBp
bmZvcm1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBhbmQgd3JpdHRlbgotICAgIC8v
IGludG8gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24gd2ls
bCByZXR1cm4gZmFsc2UuIEl0IG1heQotICAgIC8vIGZhaWwgZHVlIHRvIGEgc3RhY2sgb3ZlcmZs
b3cgaW4gdGhlIHVuZGVybHlpbmcgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiwgaGFuZGxpbmcK
LSAgICAvLyBvZiBzdWNoIGV4Y2VwdGlvbiBpcyB1cCB0byB0aGUgY2FsbGVyLgotICAgIHN0YXRp
YyBib29sIHRvcFN0YWNrRnJhbWUoU3RyaW5nJiBzb3VyY2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIs
IFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKLQotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVV0aWxpdHlD
b250ZXh0KCk7Ci0KLSAgICAgLy8gUmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgdXRpbGl0
eSBjb250ZXh0LgotICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHV0aWxpdHlDb250
ZXh0KCkKLSAgICB7Ci0gICAgICBpZiAoc191dGlsaXR5Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgY3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKLSAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcoc191dGlsaXR5Q29udGV4dCk7Ci0gICAgfQorICAgIHN0YXRpYyBib29s
IGNhbGxMb2NhdGlvbihTdHJpbmcqIHNvdXJjZU5hbWUsIGludCogc291cmNlTGluZU51bWJlciwg
U3RyaW5nKiBmdW5jdGlvbk5hbWUpOwogCiAgICAgU2NyaXB0Q2FsbEZyYW1lIG1fbGFzdENhbGxl
cjsKICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKLQotICAgIC8vIFV0aWxpdHkgY29u
dGV4dCBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseS4KLSAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHNfdXRpbGl0eUNvbnRleHQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5jcHAJKHJldmlzaW9uIDU5MTc0KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5
LDkgQEAgU2NyaXB0T2JqZWN0IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYQogICAgIFNjcmlw
dE9iamVjdCByZWNvcmQgPSBmcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgcmVjb3Jk
LnNldCgic3RhcnRUaW1lIiwgc3RhcnRUaW1lKTsKIAotICAgIFN0cmluZyBzb3VyY2VOYW1lOwot
ICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwotICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7Ci0gICAg
aWYgKFNjcmlwdENhbGxTdGFjazo6Y2FsbExvY2F0aW9uKCZzb3VyY2VOYW1lLCAmc291cmNlTGlu
ZU51bWJlciwgJmZ1bmN0aW9uTmFtZSkgJiYgc291cmNlTmFtZSAhPSAidW5kZWZpbmVkIikgewot
ICAgICAgICByZWNvcmQuc2V0KCJjYWxsZXJTY3JpcHROYW1lIiwgc291cmNlTmFtZSk7Ci0gICAg
ICAgIHJlY29yZC5zZXQoImNhbGxlclNjcmlwdExpbmUiLCBzb3VyY2VMaW5lTnVtYmVyKTsKLSAg
ICAgICAgcmVjb3JkLnNldCgiY2FsbGVyRnVuY3Rpb25OYW1lIiwgZnVuY3Rpb25OYW1lKTsKLSAg
ICB9CisgICAgU2NyaXB0QXJyYXkgc3RhY2tUcmFjZTsKKyAgICBpZiAoU2NyaXB0Q2FsbFN0YWNr
OjpzdGFja1RyYWNlKDUsIGZyb250ZW5kLT5zY3JpcHRTdGF0ZSgpLCBzdGFja1RyYWNlKSkKKyAg
ICAgICAgcmVjb3JkLnNldCgic3RhY2tUcmFjZSIsIHN0YWNrVHJhY2UpOwogICAgIHJldHVybiBy
ZWNvcmQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBh
bmVsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZVBhbmVsLmpzCShyZXZpc2lvbiA1OTE3NCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZVBhbmVsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04MDAsOCArODAwLDcgQEAgV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwuRm9ybWF0dGVkUmVjbwogICAgIHRoaXMuX3NlbGZUaW1l
ID0gdGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWU7CiAgICAgdGhpcy5fbGFzdENoaWxkRW5k
VGltZSA9IHRoaXMuZW5kVGltZTsKICAgICB0aGlzLm9yaWdpbmFsUmVjb3JkRm9yVGVzdHMgPSBy
ZWNvcmQ7Ci0gICAgdGhpcy5jYWxsZXJTY3JpcHROYW1lID0gcmVjb3JkLmNhbGxlclNjcmlwdE5h
bWU7Ci0gICAgdGhpcy5jYWxsZXJTY3JpcHRMaW5lID0gcmVjb3JkLmNhbGxlclNjcmlwdExpbmU7
CisgICAgdGhpcy5zdGFja1RyYWNlID0gcmVjb3JkLnN0YWNrVHJhY2U7CiAgICAgdGhpcy50b3Rh
bEhlYXBTaXplID0gcmVjb3JkLnRvdGFsSGVhcFNpemU7CiAgICAgdGhpcy51c2VkSGVhcFNpemUg
PSByZWNvcmQudXNlZEhlYXBTaXplOwogCkBAIC04MzAsOCArODI5LDExIEBAIFdlYkluc3BlY3Rv
ci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY28KICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBl
ID09PSByZWNvcmRUeXBlcy5UaW1lckZpcmUpIHsKICAgICAgICAgdmFyIHRpbWVySW5zdGFsbGVk
UmVjb3JkID0gdGltZXJSZWNvcmRzW3JlY29yZC5kYXRhLnRpbWVySWRdOwogICAgICAgICBpZiAo
dGltZXJJbnN0YWxsZWRSZWNvcmQpIHsKLSAgICAgICAgICAgIHRoaXMuY2FsbFNpdGVTY3JpcHRO
YW1lID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICAgICAgICAg
IHRoaXMuY2FsbFNpdGVTY3JpcHRMaW5lID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2Ny
aXB0TGluZTsKKyAgICAgICAgICAgIGlmICh0aW1lckluc3RhbGxlZFJlY29yZC5zdGFja1RyYWNl
KSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxTaXRlID0gdGltZXJJbnN0YWxsZWRSZWNvcmQu
c3RhY2tUcmFjZVswXTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aGlzLmNhbGxTaXRl
U2NyaXB0TmFtZSA9IGNhbGxTaXRlLnNjcmlwdE5hbWU7CisgICAgICAgICAgICAgICAgdGhpcy5j
YWxsU2l0ZVNjcmlwdExpbmUgPSBjYWxsU2l0ZS5saW5lTnVtYmVyOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJJbnN0YWxsZWRSZWNvcmQudGltZW91dDsK
ICAgICAgICAgICAgIHRoaXMuc2luZ2xlU2hvdCA9IHRpbWVySW5zdGFsbGVkUmVjb3JkLnNpbmds
ZVNob3Q7CiAgICAgICAgIH0KQEAgLTkzMSw4ICs5MzMsMTAgQEAgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjbwogICAgICAgICBpZiAodGhpcy5kYXRhLnNjcmlwdE5hbWUg
JiYgdGhpcy50eXBlICE9PSByZWNvcmRUeXBlcy5GdW5jdGlvbkNhbGwpCiAgICAgICAgICAgICBj
b250ZW50SGVscGVyLl9hcHBlbmRMaW5rUm93KCJGdW5jdGlvbiBDYWxsIiwgdGhpcy5kYXRhLnNj
cmlwdE5hbWUsIHRoaXMuZGF0YS5zY3JpcHRMaW5lKTsKIAotICAgICAgICBpZiAodGhpcy5jYWxs
ZXJTY3JpcHROYW1lICYmIHRoaXMudHlwZSAhPT0gcmVjb3JkVHlwZXMuR0NFdmVudCkKLSAgICAg
ICAgICAgIGNvbnRlbnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIHRoaXMuY2FsbGVy
U2NyaXB0TmFtZSwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lKTsKKyAgICAgICAgaWYgKHRoaXMuc3Rh
Y2tUcmFjZSAmJiB0aGlzLnR5cGUgIT09IHJlY29yZFR5cGVzLkdDRXZlbnQpIHsKKyAgICAgICAg
ICAgIHZhciBjYWxsU2l0ZSA9IHRoaXMuc3RhY2tUcmFjZVswXTsKKyAgICAgICAgICAgIGNvbnRl
bnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIGNhbGxTaXRlLnNjcmlwdE5hbWUsIGNh
bGxTaXRlLmxpbmVOdW1iZXIpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMudXNlZEhl
YXBTaXplKQogICAgICAgICAgICAgY29udGVudEhlbHBlci5fYXBwZW5kVGV4dFJvdygiVXNlZCBI
ZWFwIFNpemUiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIG9mICVzIiwgTnVtYmVyLmJ5dGVz
VG9TdHJpbmcodGhpcy51c2VkSGVhcFNpemUpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnRv
dGFsSGVhcFNpemUpKSk7CkBAIC05NTUsNyArOTU5LDggQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
UGFuZWwuRm9ybWF0dGVkUmVjbwogICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQuZGF0YS53
aWR0aCArICJcdTIwMDlcdTAwZDdcdTIwMDkiICsgcmVjb3JkLmRhdGEuaGVpZ2h0OwogICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlRpbWVySW5z
dGFsbDoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3Jk
VHlwZS5UaW1lclJlbW92ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJTY3Jp
cHROYW1lID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxlclNj
cmlwdE5hbWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDogcmVj
b3JkLmRhdGEudGltZXJJZDsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbFNpdGUgPSB0aGlzLnN0
YWNrVHJhY2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxTaXRlID8gV2ViSW5zcGVjdG9y
LmxpbmtpZnlSZXNvdXJjZUFzTm9kZShjYWxsU2l0ZS5zY3JpcHROYW1lLCAic2NyaXB0cyIsIGNh
bGxTaXRlLmxpbmVOdW1iZXIsICIiLCAiIikgOiByZWNvcmQuZGF0YS50aW1lcklkOwogICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlBhcnNlSFRN
TDoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3JkVHlw
ZS5SZWNhbGN1bGF0ZVN0eWxlczoKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJT
Y3JpcHROYW1lID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxl
clNjcmlwdE5hbWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDog
bnVsbDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MTc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUtMTEgIEphaW1lIFlhcCAg
PGphaW1leWFwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdCBleHBlY3RhdGlvbnMgY2hhbmdlZCBkdWUgdG8gbmV3IHN0YWNr
VHJhY2UgZmllbGQgb24gdGltZWxpbmUgcmVjb3Jkcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvdGlt
ZWxpbmUtdGVzdC5qczoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9y
L3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUt
bmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYXJzZS1odG1sLWV4cGVj
dGVkLnR4dDoKKwogMjAxMC0wNS0xMSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHJldmlzaW9uIDU5MTc0KQorKysgTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTgsOSAr
OCw3IEBAIHZhciB0aW1lbGluZU5vbkRldGVybWluaXN0aWNQcm9wcyA9IHsgCiAgICAgaWRlbnRp
ZmllciA6IDEsCiAgICAgc3RhcnRUaW1lIDogMSwKICAgICB3aWR0aCA6IDEsCi0gICAgY2FsbGVy
U2NyaXB0TmFtZTogMSwKLSAgICBjYWxsZXJTY3JpcHRMaW5lOiAxLAotICAgIGNhbGxlckZ1bmN0
aW9uTmFtZTogMSwKKyAgICBzdGFja1RyYWNlOiAxLAogICAgIHVybCA6IDEsCiAgICAgdXNlZEhl
YXBTaXplOiAxLAogICAgIHRvdGFsSGVhcFNpemU6IDEsCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4v
aW5zcGVjdG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NTkxNzQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3Rp
bWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw5
ICszLDcgQEAgVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gbwogVGVzdCBN
b3VzZSBUYXJnZXQKIEV2ZW50RGlzcGF0Y2ggUHJvcGVydGllczoKICsgc3RhcnRUaW1lIDogKiBE
RUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlw
dExpbmUgOiAqIERFRklORUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklORUQgKgor
KyBzdGFja1RyYWNlIDogKiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIHR5cGUgOiBtb3VzZWRv
d24KICsgfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rv
ci90aW1lbGluZS1tYXJrLXRpbWVsaW5lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGlt
ZWxpbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE3NCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtbWFyay10aW1lbGluZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsOSArMiw3IEBAIFRlc3RzIHRoZSBUaW1lbGluZSBB
UEkgbWFyayBmZWF0dXJlCiAKIE1hcmtUaW1lbGluZSBQcm9wZXJ0aWVzOgogKyBzdGFydFRpbWUg
OiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVy
U2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVGSU5F
RCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewogKy0gbWVzc2FnZSA6
IE1BUksgVElNRUxJTkUKICsgfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0t
d2luL2luc3BlY3Rvci90aW1lbGluZS1uZXR3b3JrLXJlc291cmNlLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3Rp
bWVsaW5lLW5ldHdvcmstcmVzb3VyY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE3NCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtbmV0
d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOSArMyw3IEBA
IFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG8KIAogUmVzb3VyY2VTZW5k
UmVxdWVzdCBQcm9wZXJ0aWVzOgogKyBzdGFydFRpbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJT
Y3JpcHROYW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAq
Ci0rIGNhbGxlckZ1bmN0aW9uTmFtZSA6ICogREVGSU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERF
RklORUQgKgogKyBkYXRhIDogewogKy0gaWRlbnRpZmllciA6ICogREVGSU5FRCAqCiArLSB1cmwg
OiAqIERFRklORUQgKgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2lu
c3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDU5MTc0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTIsOSArMiw3IEBAIFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9u
IG8KIAogUGFpbnQgUHJvcGVydGllczoKICsgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKLSsgY2Fs
bGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdExpbmUgOiAqIERFRklO
RUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklORUQgKgorKyBzdGFja1RyYWNlIDog
KiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIHggOiAwCiArLSB5IDogMApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYXJzZS1odG1s
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhcnNlLWh0bWwtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA1OTE3NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3Iv
dGltZWxpbmUtcGFyc2UtaHRtbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsOSAr
Miw3IEBAIFRlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG8KIAogUGFyc2VI
VE1MIFByb3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlw
dE5hbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRMaW5lIDogKiBERUZJTkVEICoKLSsg
Y2FsbGVyRnVuY3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysgc3RhY2tUcmFjZSA6ICogREVGSU5F
RCAqCiArIGRhdGEgOiB7CiArLSBsZW5ndGggOiA5CiArLSBzdGFydExpbmUgOiAwCg==
</data>
<flag name="review"
          id="40650"
          type_id="1"
          status="-"
          setter="jaimeyap"
    />
    <flag name="commit-queue"
          id="40651"
          type_id="3"
          status="-"
          setter="jaimeyap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56398</attachid>
            <date>2010-05-18 12:02:33 -0700</date>
            <delta_ts>2010-05-24 14:04:02 -0700</delta_ts>
            <desc>Rebased against r59670</desc>
            <filename>v8-stacktrace-v4.patch</filename>
            <type>text/plain</type>
            <size>19697</size>
            <attacher>jaimeyap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTY3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMTggIEphaW1lIFlhcCAgPGphaW1leWFwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlcyBwdWJsaWMgY2FsbExvY2F0aW9uIEFQSSBhbmQgdXRpbGl0eSBjb250ZXh0IGZyb20gU2Ny
aXB0Q2FsbFN0YWNrLgorICAgICAgICBBZGRzIGFiaWxpdHkgdG8gZ3JhYiB0aGUgdG9wIDUgSmF2
YVNjcmlwdCBzdGFjayBmcmFtZXMgZm9yIGVhY2ggdGltZWxpbmUKKyAgICAgICAgcmVjb3JkIHVz
aW5nIG5ldyBmYXN0IFY4IHN0YWNrIHRyYWNlIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpz
dGFja1RyYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0QXJyYXk6OlNjcmlwdEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxs
U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpjYWxsTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWVsaW5l
UmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwuRm9ybWF0dGVkUmVjb3JkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90b3R5cGUuX2dlbmVyYXRlUG9wdXBDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLkZvcm1hdHRlZFJlY29yZC5wcm90
b3R5cGUuX2dldFJlY29yZERldGFpbHMpOgorCiAyMDEwLTA1LTE3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCShyZXZpc2lvbiA1OTY3MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgU2NyaXB0Q2FsbFN0YWNrOjppbml0aWFsaXplKCkKICAg
ICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKIH0KIAotYm9vbCBTY3JpcHRDYWxsU3RhY2s6OmNhbGxM
b2NhdGlvbihTdHJpbmcqLCBpbnQqLCBTdHJpbmcqKQorYm9vbCBTY3JpcHRDYWxsU3RhY2s6OnN0
YWNrVHJhY2UoaW50LCBTY3JpcHRTdGF0ZSosIFNjcmlwdEFycmF5JikKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgJKHJldmlz
aW9uIDU5NjcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRDYWxsU3RhY2tfaAog
I2RlZmluZSBTY3JpcHRDYWxsU3RhY2tfaAogCisjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFN0cmluZy5oIgpAQCAtNTMsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIGZyYW1lIHJldHJpZXZhbCBtZXRob2RzCiAgICAgICAgIGNvbnN0IFNj
cmlwdENhbGxGcmFtZSAmYXQodW5zaWduZWQpOwogICAgICAgICB1bnNpZ25lZCBzaXplKCk7Ci0g
ICAgICAgIHN0YXRpYyBib29sIGNhbGxMb2NhdGlvbihTdHJpbmcqLCBpbnQqLCBTdHJpbmcqKTsK
KyAgICAgICAgc3RhdGljIGJvb2wgc3RhY2tUcmFjZShpbnQsIFNjcmlwdFN0YXRlKiwgU2NyaXB0
QXJyYXkmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0QXJyYXkuaAkocmV2aXNpb24gNTk2NzApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNjcmlwdEFycmF5IDogcHVibGljIFNj
cmlwdE9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBTY3JpcHRBcnJheShTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIHY4OjpIYW5kbGU8djg6OkFycmF5Pik7CisgICAgICAgIFNjcmlwdEFy
cmF5KCkge307CiAgICAgICAgIHZpcnR1YWwgflNjcmlwdEFycmF5KCkge30KIAogICAgICAgICBi
b29sIHNldCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU2NyaXB0T2JqZWN0Jik7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suY3BwCShyZXZpc2lvbiA1OTY3MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxT
dGFjay5oIgogCisjaW5jbHVkZSAiU2NyaXB0U2NvcGUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKQEAgLTQwLDggKzQxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0Q2FsbFN0YWNrOjpzX3V0aWxpdHlDb250ZXh0
OwotCiBTY3JpcHRDYWxsU3RhY2sqIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3VtZW50cywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpIHsKICAgICBT
dHJpbmcgc291cmNlTmFtZTsKICAgICBpbnQgc291cmNlTGluZU51bWJlcjsKQEAgLTUzLDkgKzUy
LDIyIEBAIFNjcmlwdENhbGxTdGFjayogU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUKIAogYm9vbCBT
Y3JpcHRDYWxsU3RhY2s6OmNhbGxMb2NhdGlvbihTdHJpbmcqIHNvdXJjZU5hbWUsIGludCogc291
cmNlTGluZU51bWJlciwgU3RyaW5nKiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgaWYgKCF0b3BTdGFj
a0ZyYW1lKCpzb3VyY2VOYW1lLCAqc291cmNlTGluZU51bWJlciwgKmZ1bmN0aW9uTmFtZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqc291cmNlTGluZU51bWJlciArPSAxOworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3Bl
KHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpOworICAgIHY4OjpIYW5kbGU8djg6OlN0YWNrVHJh
Y2U+IHN0YWNrVHJhY2Uodjg6OlN0YWNrVHJhY2U6OkN1cnJlbnRTdGFja1RyYWNlKDEpKTsKKyAg
ICBpZiAoc3RhY2tUcmFjZS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoc3RhY2tUcmFjZS0+R2V0RnJhbWVDb3VudCgpIDw9IDApIHsKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gc2V0dGluZyBsaW5lTnVtYmVyIHRvIDAsIGFuZCBzb3VyY2UgYW5kIGZ1bmN0aW9uIG5h
bWUgdG8gInVuZGVmaW5lZCIuCisgICAgICAgICpzb3VyY2VOYW1lID0gdG9XZWJDb3JlU3RyaW5n
KHY4OjpVbmRlZmluZWQoKSk7CisgICAgICAgICpzb3VyY2VMaW5lTnVtYmVyID0gMDsKKyAgICAg
ICAgKmZ1bmN0aW9uTmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2ODo6VW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgdjg6OkhhbmRsZTx2ODo6U3RhY2tGcmFtZT4g
ZnJhbWUgPSBzdGFja1RyYWNlLT5HZXRGcmFtZSgwKTsKKyAgICAqc291cmNlTmFtZSA9IHRvV2Vi
Q29yZVN0cmluZyhmcmFtZS0+R2V0U2NyaXB0TmFtZSgpKTsKKyAgICAqc291cmNlTGluZU51bWJl
ciA9IGZyYW1lLT5HZXRMaW5lTnVtYmVyKCk7CisgICAgKmZ1bmN0aW9uTmFtZSA9IHRvV2ViQ29y
ZVN0cmluZyhmcmFtZS0+R2V0RnVuY3Rpb25OYW1lKCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC03Nyw2NiArODksMTMgQEAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBTY3JpcHRDYWxsU3Rh
Y2s6OgogICAgIHJldHVybiBtX2xhc3RDYWxsZXI7CiB9CiAKLS8vIENyZWF0ZSB0aGUgdXRpbGl0
eSBjb250ZXh0IGZvciBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxs
eQotLy8gd2hpY2ggYXJlIG5vdCB2aXNpYmxlIHRvIEphdmFTY3JpcHQgZXhlY3V0aW5nIG9uIHRo
ZSBwYWdlLgotdm9pZCBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKK2Jv
b2wgU2NyaXB0Q2FsbFN0YWNrOjpzdGFja1RyYWNlKGludCBmcmFtZUxpbWl0LCBTY3JpcHRTdGF0
ZSogc3RhdGUsIFNjcmlwdEFycmF5JiBzdGFja1RyYWNlKQogewotICAgIEFTU0VSVChzX3V0aWxp
dHlDb250ZXh0LklzRW1wdHkoKSk7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IGdsb2JhbFRlbXBsYXRlID0gdjg6Ok9iamVj
dFRlbXBsYXRlOjpOZXcoKTsKLSAgICBzX3V0aWxpdHlDb250ZXh0ID0gdjg6OkNvbnRleHQ6Ok5l
dygwLCBnbG9iYWxUZW1wbGF0ZSk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29w
ZShzX3V0aWxpdHlDb250ZXh0KTsKLQotICAgIC8vIENvbXBpbGUgSmF2YVNjcmlwdCBmdW5jdGlv
biBmb3IgcmV0cmlldmluZyB0aGUgc291cmNlIGxpbmUsIHRoZSBzb3VyY2UKLSAgICAvLyBuYW1l
IGFuZCB0aGUgc3ltYm9sIG5hbWUgZm9yIHRoZSB0b3AgSmF2YVNjcmlwdCBzdGFjayBmcmFtZS4K
LSAgICBjb25zdCBjaGFyKiB0b3BTdGFja0ZyYW1lID0KLSAgICAgICAgImZ1bmN0aW9uIHRvcFN0
YWNrRnJhbWUoZXhlY19zdGF0ZSkgeyIKLSAgICAgICAgIiAgaWYgKCFleGVjX3N0YXRlLmZyYW1l
Q291bnQoKSkiCi0gICAgICAgICIgICAgICByZXR1cm4gdW5kZWZpbmVkOyIKLSAgICAgICAgIiAg
dmFyIGZyYW1lID0gZXhlY19zdGF0ZS5mcmFtZSgwKTsiCi0gICAgICAgICIgIHZhciBmdW5jID0g
ZnJhbWUuZnVuYygpOyIKLSAgICAgICAgIiAgdmFyIHNjcmlwdE5hbWU7IgotICAgICAgICAiICBp
ZiAoZnVuYy5yZXNvbHZlZCgpICYmIGZ1bmMuc2NyaXB0KCkpIgotICAgICAgICAiICAgICAgc2Ny
aXB0TmFtZSA9IGZ1bmMuc2NyaXB0KCkubmFtZSgpOyIKLSAgICAgICAgIiAgcmV0dXJuIFtzY3Jp
cHROYW1lLCBmcmFtZS5zb3VyY2VMaW5lKCksIChmdW5jLm5hbWUoKSB8fCBmdW5jLmluZmVycmVk
TmFtZSgpKV07IgotICAgICAgICAifSI7Ci0gICAgdjg6OlNjcmlwdDo6Q29tcGlsZSh2ODo6U3Ry
aW5nOjpOZXcodG9wU3RhY2tGcmFtZSkpLT5SdW4oKTsKLX0KLQotYm9vbCBTY3JpcHRDYWxsU3Rh
Y2s6OnRvcFN0YWNrRnJhbWUoU3RyaW5nJiBzb3VyY2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIsIFN0
cmluZyYgZnVuY3Rpb25OYW1lKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OFV0aWxpdHlDb250ZXh0ID0gdXRpbGl0eUNvbnRleHQo
KTsKLSAgICBpZiAodjhVdGlsaXR5Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4VXRpbGl0eUNvbnRl
eHQpOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB0b3BTdGFja0ZyYW1lOwotICAgIHRv
cFN0YWNrRnJhbWUgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2OFV0aWxpdHlDb250
ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygidG9wU3RhY2tGcmFtZSIpKSk7Ci0g
ICAgaWYgKHRvcFN0YWNrRnJhbWUuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gdjg6OkRlYnVnOjpDYWxsKHRvcFN0YWNr
RnJhbWUpOwotICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAvLyBJZiB0aGVyZSBpcyBubyB0b3Agc3RhY2sgZnJhbWUsIHdlIHN0aWxsIHJldHVybiBz
dWNjZXNzLCBidXQgZmlsbCB0aGUgaW5wdXQgcGFyYW1zIHdpdGggZGVmYXVsdHMuCi0gICAgaWYg
KHZhbHVlLT5Jc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAvLyBGYWxsYmFjayB0byBzZXR0aW5nIGxp
bmVOdW1iZXIgdG8gMCwgYW5kIHNvdXJjZSBhbmQgZnVuY3Rpb24gbmFtZSB0byAidW5kZWZpbmVk
Ii4KLSAgICAgIHNvdXJjZU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwotICAgICAgbGlu
ZU51bWJlciA9IDA7Ci0gICAgICBmdW5jdGlvbk5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUp
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghdmFsdWUtPklzQXJyYXkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBqc0FycmF5
ID0gdmFsdWUtPlRvT2JqZWN0KCk7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gc291cmNlTmFt
ZVZhbHVlID0ganNBcnJheS0+R2V0KDApOwotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpbmVO
dW1iZXJWYWx1ZSA9IGpzQXJyYXktPkdldCgxKTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBm
dW5jdGlvbk5hbWVWYWx1ZSA9IGpzQXJyYXktPkdldCgyKTsKLSAgICBpZiAoc291cmNlTmFtZVZh
bHVlLklzRW1wdHkoKSB8fCBsaW5lTnVtYmVyVmFsdWUuSXNFbXB0eSgpIHx8IGZ1bmN0aW9uTmFt
ZVZhbHVlLklzRW1wdHkoKSkKKyAgICBTY3JpcHRTY29wZSBzY29wZShzdGF0ZSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6U3RhY2tUcmFjZT4gdHJhY2Uodjg6OlN0YWNrVHJhY2U6OkN1cnJlbnRTdGFj
a1RyYWNlKGZyYW1lTGltaXQpKTsKKyAgICBpZiAodHJhY2UuSXNFbXB0eSgpIHx8ICF0cmFjZS0+
R2V0RnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc291cmNlTmFtZSA9
IHRvV2ViQ29yZVN0cmluZyhzb3VyY2VOYW1lVmFsdWUpOwotICAgIGxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyVmFsdWUtPkludDMyVmFsdWUoKTsKLSAgICBmdW5jdGlvbk5hbWUgPSB0b1dlYkNvcmVT
dHJpbmcoZnVuY3Rpb25OYW1lVmFsdWUpOworICAgIHN0YWNrVHJhY2UgPSBTY3JpcHRBcnJheShz
dGF0ZSwgdHJhY2UtPkFzQXJyYXkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNTk2NzApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdENhbGxTdGFja19oCiAjZGVmaW5lIFNjcmlwdENhbGxT
dGFja19oCiAKKyNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIKQEAgLTQ3LDcgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU2NyaXB0Q2FsbFN0YWNr
KiBjcmVhdGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50
ID0gMCk7CiAgICAgflNjcmlwdENhbGxTdGFjaygpOwogCi0gICAgc3RhdGljIGJvb2wgY2FsbExv
Y2F0aW9uKFN0cmluZyogc291cmNlTmFtZSwgaW50KiBzb3VyY2VMaW5lTnVtYmVyLCBTdHJpbmcq
IGZ1bmN0aW9uTmFtZSk7CisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGVyZSBpcyBubyBydW5u
aW5nIEphdmFTY3JpcHQgb3IgaWYgZmV0Y2hpbmcgdGhlIHN0YWNrIGZhaWxlZC4KKyAgICAvLyBT
ZXRzIHN0YWNrVHJhY2UgdG8gYmUgYW4gYXJyYXkgb2Ygc3RhY2sgZnJhbWUgb2JqZWN0cy4KKyAg
ICAvLyBBIHN0YWNrIGZyYW1lIG9iamVjdCBsb29rcyBsaWtlOgorICAgIC8vIHsKKyAgICAvLyAg
IHNjcmlwdE5hbWU6IDxmaWxlIG5hbWUgZm9yIHRoZSBhc3NvY2lhdGVkIHNjcmlwdCByZXNvdXJj
ZT4KKyAgICAvLyAgIGZ1bmN0aW9uTmFtZTogPG5hbWUgb2YgdGhlIEphdmFTY3JpcHQgZnVuY3Rp
b24+CisgICAgLy8gICBsaW5lTnVtYmVyOiA8MSBiYXNlZCBsaW5lIG51bWJlcj4KKyAgICAvLyAg
IGNvbHVtbjogPDEgYmFzZWQgY29sdW1uIG9mZnNldCBvbiB0aGUgbGluZT4KKyAgICAvLyB9Cisg
ICAgc3RhdGljIGJvb2wgc3RhY2tUcmFjZShpbnQgZnJhbWVMaW1pdCwgU2NyaXB0U3RhdGUqIHN0
YXRlLCBTY3JpcHRBcnJheSYgc3RhY2tUcmFjZSk7CiAKICAgICBjb25zdCBTY3JpcHRDYWxsRnJh
bWUmIGF0KHVuc2lnbmVkKSBjb25zdDsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHJldHJpZXZp
bmcgYW5kIHN0b3JpbmcgY2FsbCBzdGFjayB0cmFjZQpAQCAtNTksMzAgKzY5LDEwIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU2NyaXB0Q2FsbFN0YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3VtZW50cywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQsIFN0cmluZyBzb3VyY2VOYW1lLCBp
bnQgc291cmNlTGluZU51bWJlciwgU3RyaW5nIGZ1bmNOYW1lKTsKIAotICAgIC8vIEZ1bmN0aW9u
IGZvciByZXRyaWV2aW5nIHRoZSBzb3VyY2UgbmFtZSwgbGluZSBudW1iZXIgYW5kIGZ1bmN0aW9u
IG5hbWUgZm9yIHRoZSB0b3AKLSAgICAvLyBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgotICAgIC8v
Ci0gICAgLy8gSXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGVyIGluZm9ybWF0aW9uIHdh
cyBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGFuZCB3cml0dGVuCi0gICAgLy8gaW50byB0aGUgZnVu
Y3Rpb24gcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxz
ZS4gSXQgbWF5Ci0gICAgLy8gZmFpbCBkdWUgdG8gYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgdW5k
ZXJseWluZyBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uLCBoYW5kbGluZwotICAgIC8vIG9mIHN1
Y2ggZXhjZXB0aW9uIGlzIHVwIHRvIHRoZSBjYWxsZXIuCi0gICAgc3RhdGljIGJvb2wgdG9wU3Rh
Y2tGcmFtZShTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlciwgU3RyaW5nJiBmdW5j
dGlvbk5hbWUpOwotCi0gICAgc3RhdGljIHZvaWQgY3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKLQot
ICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCi0g
ICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdXRpbGl0eUNvbnRleHQoKQotICAgIHsK
LSAgICAgIGlmIChzX3V0aWxpdHlDb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgICBjcmVhdGVV
dGlsaXR5Q29udGV4dCgpOwotICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5l
dyhzX3V0aWxpdHlDb250ZXh0KTsKLSAgICB9CisgICAgc3RhdGljIGJvb2wgY2FsbExvY2F0aW9u
KFN0cmluZyogc291cmNlTmFtZSwgaW50KiBzb3VyY2VMaW5lTnVtYmVyLCBTdHJpbmcqIGZ1bmN0
aW9uTmFtZSk7CiAKICAgICBTY3JpcHRDYWxsRnJhbWUgbV9sYXN0Q2FsbGVyOwogICAgIFNjcmlw
dFN0YXRlKiBtX3NjcmlwdFN0YXRlOwotCi0gICAgLy8gVXRpbGl0eSBjb250ZXh0IGhvbGRpbmcg
SmF2YVNjcmlwdCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5LgotICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gc191dGlsaXR5Q29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmNwcAkocmV2aXNpb24gNTk2NzApCisrKyBXZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJl
Y29yZEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksOSBAQCBTY3JpcHRP
YmplY3QgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhCiAgICAgU2NyaXB0T2JqZWN0IHJlY29y
ZCA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICByZWNvcmQuc2V0KCJzdGFydFRp
bWUiLCBzdGFydFRpbWUpOwogCi0gICAgU3RyaW5nIHNvdXJjZU5hbWU7Ci0gICAgaW50IHNvdXJj
ZUxpbmVOdW1iZXI7Ci0gICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsKLSAgICBpZiAoU2NyaXB0Q2Fs
bFN0YWNrOjpjYWxsTG9jYXRpb24oJnNvdXJjZU5hbWUsICZzb3VyY2VMaW5lTnVtYmVyLCAmZnVu
Y3Rpb25OYW1lKSAmJiBzb3VyY2VOYW1lICE9ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgIHJlY29y
ZC5zZXQoImNhbGxlclNjcmlwdE5hbWUiLCBzb3VyY2VOYW1lKTsKLSAgICAgICAgcmVjb3JkLnNl
dCgiY2FsbGVyU2NyaXB0TGluZSIsIHNvdXJjZUxpbmVOdW1iZXIpOwotICAgICAgICByZWNvcmQu
c2V0KCJjYWxsZXJGdW5jdGlvbk5hbWUiLCBmdW5jdGlvbk5hbWUpOwotICAgIH0KKyAgICBTY3Jp
cHRBcnJheSBzdGFja1RyYWNlOworICAgIGlmIChTY3JpcHRDYWxsU3RhY2s6OnN0YWNrVHJhY2Uo
NSwgZnJvbnRlbmQtPnNjcmlwdFN0YXRlKCksIHN0YWNrVHJhY2UpKQorICAgICAgICByZWNvcmQu
c2V0KCJzdGFja1RyYWNlIiwgc3RhY2tUcmFjZSk7CiAgICAgcmV0dXJuIHJlY29yZDsKIH0KIApJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMJKHJl
dmlzaW9uIDU5NjcwKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFu
ZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTgwNSw4ICs4MDUsNyBAQCBXZWJJbnNwZWN0b3IuVGlt
ZWxpbmVQYW5lbC5Gb3JtYXR0ZWRSZWNvCiAgICAgdGhpcy5fc2VsZlRpbWUgPSB0aGlzLmVuZFRp
bWUgLSB0aGlzLnN0YXJ0VGltZTsKICAgICB0aGlzLl9sYXN0Q2hpbGRFbmRUaW1lID0gdGhpcy5l
bmRUaW1lOwogICAgIHRoaXMub3JpZ2luYWxSZWNvcmRGb3JUZXN0cyA9IHJlY29yZDsKLSAgICB0
aGlzLmNhbGxlclNjcmlwdE5hbWUgPSByZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICB0aGlz
LmNhbGxlclNjcmlwdExpbmUgPSByZWNvcmQuY2FsbGVyU2NyaXB0TGluZTsKKyAgICB0aGlzLnN0
YWNrVHJhY2UgPSByZWNvcmQuc3RhY2tUcmFjZTsKICAgICB0aGlzLnRvdGFsSGVhcFNpemUgPSBy
ZWNvcmQudG90YWxIZWFwU2l6ZTsKICAgICB0aGlzLnVzZWRIZWFwU2l6ZSA9IHJlY29yZC51c2Vk
SGVhcFNpemU7CiAKQEAgLTgzOSw4ICs4MzgsMTEgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFu
ZWwuRm9ybWF0dGVkUmVjbwogICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IHJlY29yZFR5
cGVzLlRpbWVyRmlyZSkgewogICAgICAgICB2YXIgdGltZXJJbnN0YWxsZWRSZWNvcmQgPSBwYW5l
bC5fdGltZXJSZWNvcmRzW3JlY29yZC5kYXRhLnRpbWVySWRdOwogICAgICAgICBpZiAodGltZXJJ
bnN0YWxsZWRSZWNvcmQpIHsKLSAgICAgICAgICAgIHRoaXMuY2FsbFNpdGVTY3JpcHROYW1lID0g
dGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2NyaXB0TmFtZTsKLSAgICAgICAgICAgIHRoaXMu
Y2FsbFNpdGVTY3JpcHRMaW5lID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuY2FsbGVyU2NyaXB0TGlu
ZTsKKyAgICAgICAgICAgIGlmICh0aW1lckluc3RhbGxlZFJlY29yZC5zdGFja1RyYWNlKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGNhbGxTaXRlID0gdGltZXJJbnN0YWxsZWRSZWNvcmQuc3RhY2tU
cmFjZVswXTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aGlzLmNhbGxTaXRlU2NyaXB0
TmFtZSA9IGNhbGxTaXRlLnNjcmlwdE5hbWU7CisgICAgICAgICAgICAgICAgdGhpcy5jYWxsU2l0
ZVNjcmlwdExpbmUgPSBjYWxsU2l0ZS5saW5lTnVtYmVyOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJJbnN0YWxsZWRSZWNvcmQudGltZW91dDsKICAgICAg
ICAgICAgIHRoaXMuc2luZ2xlU2hvdCA9IHRpbWVySW5zdGFsbGVkUmVjb3JkLnNpbmdsZVNob3Q7
CiAgICAgICAgIH0KQEAgLTk0MSw4ICs5NDMsMTAgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFu
ZWwuRm9ybWF0dGVkUmVjbwogICAgICAgICBpZiAodGhpcy5kYXRhLnNjcmlwdE5hbWUgJiYgdGhp
cy50eXBlICE9PSByZWNvcmRUeXBlcy5GdW5jdGlvbkNhbGwpCiAgICAgICAgICAgICBjb250ZW50
SGVscGVyLl9hcHBlbmRMaW5rUm93KCJGdW5jdGlvbiBDYWxsIiwgdGhpcy5kYXRhLnNjcmlwdE5h
bWUsIHRoaXMuZGF0YS5zY3JpcHRMaW5lKTsKIAotICAgICAgICBpZiAodGhpcy5jYWxsZXJTY3Jp
cHROYW1lICYmIHRoaXMudHlwZSAhPT0gcmVjb3JkVHlwZXMuR0NFdmVudCkKLSAgICAgICAgICAg
IGNvbnRlbnRIZWxwZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIHRoaXMuY2FsbGVyU2NyaXB0
TmFtZSwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lKTsKKyAgICAgICAgaWYgKHRoaXMuc3RhY2tUcmFj
ZSAmJiB0aGlzLnR5cGUgIT09IHJlY29yZFR5cGVzLkdDRXZlbnQpIHsKKyAgICAgICAgICAgIHZh
ciBjYWxsU2l0ZSA9IHRoaXMuc3RhY2tUcmFjZVswXTsKKyAgICAgICAgICAgIGNvbnRlbnRIZWxw
ZXIuX2FwcGVuZExpbmtSb3coIkNhbGxlciIsIGNhbGxTaXRlLnNjcmlwdE5hbWUsIGNhbGxTaXRl
LmxpbmVOdW1iZXIpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMudXNlZEhlYXBTaXpl
KQogICAgICAgICAgICAgY29udGVudEhlbHBlci5fYXBwZW5kVGV4dFJvdygiVXNlZCBIZWFwIFNp
emUiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzIG9mICVzIiwgTnVtYmVyLmJ5dGVzVG9TdHJp
bmcodGhpcy51c2VkSGVhcFNpemUpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnRvdGFsSGVh
cFNpemUpKSk7CkBAIC05NjUsNyArOTY5LDggQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwu
Rm9ybWF0dGVkUmVjbwogICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQuZGF0YS53aWR0aCAr
ICJcdTIwMDlcdTAwZDdcdTIwMDkiICsgcmVjb3JkLmRhdGEuaGVpZ2h0OwogICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlRpbWVySW5zdGFsbDoK
ICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3JkVHlwZS5U
aW1lclJlbW92ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJTY3JpcHROYW1l
ID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxlclNjcmlwdE5h
bWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDogcmVjb3JkLmRh
dGEudGltZXJJZDsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbFNpdGUgPSB0aGlzLnN0YWNrVHJh
Y2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxTaXRlID8gV2ViSW5zcGVjdG9yLmxpbmtp
ZnlSZXNvdXJjZUFzTm9kZShjYWxsU2l0ZS5zY3JpcHROYW1lLCAic2NyaXB0cyIsIGNhbGxTaXRl
LmxpbmVOdW1iZXIsICIiLCAiIikgOiByZWNvcmQuZGF0YS50aW1lcklkOwogICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5SZWNvcmRUeXBlLlBhcnNlSFRNTDoKICAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3JkVHlwZS5SZWNh
bGN1bGF0ZVN0eWxlczoKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsZXJTY3JpcHRO
YW1lID8gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLmNhbGxlclNjcmlw
dE5hbWUsICJzY3JpcHRzIiwgdGhpcy5jYWxsZXJTY3JpcHRMaW5lLCAiIiwgIiIpIDogbnVsbDsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU5Njc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDUtMTggIEphaW1lIFlhcCAgPGphaW1l
eWFwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdCBleHBlY3RhdGlvbnMgY2hhbmdlZCBkdWUgdG8gbmV3IHN0YWNrVHJhY2Ug
ZmllbGQgb24gdGltZWxpbmUKKyAgICAgICAgcmVjb3Jkcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTAyCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
dGltZWxpbmUtdGVzdC5qczoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVj
dG9yL3RpbWVsaW5lLWV2ZW50LWRpc3BhdGNoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxp
bmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYWludC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1wYXJzZS1odG1sLWV4
cGVjdGVkLnR4dDoKKwogMjAxMC0wNS0xOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4LiBEaXNhYmxlIGZpbGUtcmVhZGVyLmh0
bWwgZm9yIG1vcmUgaW52ZXN0aWdhdGlvbi4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci90
aW1lbGluZS10ZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1l
bGluZS10ZXN0LmpzCShyZXZpc2lvbiA1OTY3MCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90
aW1lbGluZS10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC04LDkgKzgsNyBAQCB2YXIgdGltZWxp
bmVOb25EZXRlcm1pbmlzdGljUHJvcHMgPSB7IAogICAgIGlkZW50aWZpZXIgOiAxLAogICAgIHN0
YXJ0VGltZSA6IDEsCiAgICAgd2lkdGggOiAxLAotICAgIGNhbGxlclNjcmlwdE5hbWU6IDEsCi0g
ICAgY2FsbGVyU2NyaXB0TGluZTogMSwKLSAgICBjYWxsZXJGdW5jdGlvbk5hbWU6IDEsCisgICAg
c3RhY2tUcmFjZTogMSwKICAgICB1cmwgOiAxLAogICAgIHVzZWRIZWFwU2l6ZTogMSwKICAgICB0
b3RhbEhlYXBTaXplOiAxLApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2lu
L2luc3BlY3Rvci90aW1lbGluZS1ldmVudC1kaXNwYXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGlu
ZS1ldmVudC1kaXNwYXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU5NjcwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1ldmVudC1kaXNw
YXRjaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOSArMyw3IEBAIFRlc3RzIHRo
ZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG8KIFRlc3QgTW91c2UgVGFyZ2V0CiBFdmVu
dERpc3BhdGNoIFByb3BlcnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVGSU5FRCAqCi0rIGNhbGxl
clNjcmlwdE5hbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRMaW5lIDogKiBERUZJTkVE
ICoKLSsgY2FsbGVyRnVuY3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysgc3RhY2tUcmFjZSA6ICog
REVGSU5FRCAqCiArIGRhdGEgOiB7CiArLSB0eXBlIDogbW91c2Vkb3duCiArIH0KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtbWFyay10
aW1lbGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1tYXJrLXRpbWVsaW5lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNTk2NzApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4v
aW5zcGVjdG9yL3RpbWVsaW5lLW1hcmstdGltZWxpbmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yLDkgKzIsNyBAQCBUZXN0cyB0aGUgVGltZWxpbmUgQVBJIG1hcmsgZmVhdHVyZQog
CiBNYXJrVGltZWxpbmUgUHJvcGVydGllczoKICsgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKLSsg
Y2FsbGVyU2NyaXB0TmFtZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdExpbmUgOiAqIERF
RklORUQgKgotKyBjYWxsZXJGdW5jdGlvbk5hbWUgOiAqIERFRklORUQgKgorKyBzdGFja1RyYWNl
IDogKiBERUZJTkVEICoKICsgZGF0YSA6IHsKICstIG1lc3NhZ2UgOiBNQVJLIFRJTUVMSU5FCiAr
IH0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGlt
ZWxpbmUtbmV0d29yay1yZXNvdXJjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90aW1lbGluZS1uZXR3b3JrLXJl
c291cmNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTk2NzApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLW5ldHdvcmstcmVzb3VyY2UtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDkgKzMsNyBAQCBUZXN0cyB0aGUgVGltZWxp
bmUgQVBJIGluc3RydW1lbnRhdGlvbiBvCiAKIFJlc291cmNlU2VuZFJlcXVlc3QgUHJvcGVydGll
czoKICsgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyU2NyaXB0TmFtZSA6ICogREVG
SU5FRCAqCi0rIGNhbGxlclNjcmlwdExpbmUgOiAqIERFRklORUQgKgotKyBjYWxsZXJGdW5jdGlv
bk5hbWUgOiAqIERFRklORUQgKgorKyBzdGFja1RyYWNlIDogKiBERUZJTkVEICoKICsgZGF0YSA6
IHsKICstIGlkZW50aWZpZXIgOiAqIERFRklORUQgKgogKy0gdXJsIDogKiBERUZJTkVEICoKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUt
cGFpbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtcGFpbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA1OTY3MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9pbnNwZWN0b3Iv
dGltZWxpbmUtcGFpbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDkgKzIsNyBA
QCBUZXN0cyB0aGUgVGltZWxpbmUgQVBJIGluc3RydW1lbnRhdGlvbiBvCiAKIFBhaW50IFByb3Bl
cnRpZXM6CiArIHN0YXJ0VGltZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlclNjcmlwdE5hbWUgOiAq
IERFRklORUQgKgotKyBjYWxsZXJTY3JpcHRMaW5lIDogKiBERUZJTkVEICoKLSsgY2FsbGVyRnVu
Y3Rpb25OYW1lIDogKiBERUZJTkVEICoKKysgc3RhY2tUcmFjZSA6ICogREVGSU5FRCAqCiArIGRh
dGEgOiB7CiArLSB4IDogMAogKy0geSA6IDAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtLXdpbi9pbnNwZWN0b3IvdGltZWxpbmUtcGFyc2UtaHRtbC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2luc3BlY3Rvci90
aW1lbGluZS1wYXJzZS1odG1sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTk2NzApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaW5zcGVjdG9yL3RpbWVsaW5lLXBhcnNlLWh0
bWwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDkgKzIsNyBAQCBUZXN0cyB0aGUg
VGltZWxpbmUgQVBJIGluc3RydW1lbnRhdGlvbiBvCiAKIFBhcnNlSFRNTCBQcm9wZXJ0aWVzOgog
KyBzdGFydFRpbWUgOiAqIERFRklORUQgKgotKyBjYWxsZXJTY3JpcHROYW1lIDogKiBERUZJTkVE
ICoKLSsgY2FsbGVyU2NyaXB0TGluZSA6ICogREVGSU5FRCAqCi0rIGNhbGxlckZ1bmN0aW9uTmFt
ZSA6ICogREVGSU5FRCAqCisrIHN0YWNrVHJhY2UgOiAqIERFRklORUQgKgogKyBkYXRhIDogewog
Ky0gbGVuZ3RoIDogOQogKy0gc3RhcnRMaW5lIDogMAo=
</data>
<flag name="review"
          id="40808"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>