<?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>42827</bug_id>
          
          <creation_ts>2010-07-22 08:19:08 -0700</creation_ts>
          <short_desc>Use the js-execute-active(entered) Frame to check the user gesture of page instead of checking the top frame</short_desc>
          <delta_ts>2010-08-12 05:54:38 -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>Frames</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://watchthesimpsons.com/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Johnny(Jianning) Ding">jnd</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>inferno</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254801</commentid>
    <comment_count>0</comment_count>
      <attachid>62300</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-22 08:19:08 -0700</bug_when>
    <thetext>Created attachment 62300
test case

On chromium with enabling popup blocker, http://watchthesimpsons.com/ bypassed the popup blocker [firefox does block it]

The attachment is the test case to reproduce this issue.

The following is my investigation.

The window.open is called in the iframe without user-initiated.

On Safari, it uses WebCore::Setting::m_javaScriptCanOpenWindowsAutomatically flag to do the popup blocker, when enabling popup blocker, m_javaScriptCanOpenWindowsAutomatically is set to true, so DOMWindow::allowPopUp returns false to deny to open the window. So this issue can not be reproduced on Safari.
On Chromium, the flag WebCore::Setting::m_javaScriptCanOpenWindowsAutomatically is always true, the request of opening window is always passed to browser process to do the popup check. When enabling chromium&apos;s popup blocker, only user-initiated open request can be allowed.

In this issue, the window.open was called in the iframe without user-initiated. but when calling WebFrame::isProcessingUserGesture in RenderView::createView, in the function FrameLoader::isProcessingUserGesture, it checked top frame&apos;s user gesture status, since there was no script executed in top frame, ScriptController::processingUserGesture assumed it&apos;s user-initiated (line 166-167). Then chromium treated the opening window request is legal and granted the opening.
I think the current behavior in the frameloader is wrong, we should check the js-execute-active frame (entered frame in V8) instead of the top frame since the script execution can be initiated in any frame not only the top frame. Please refer to the right implementation of the WebCore::processingUserGesture (both JS and V8 version)

The issue does not reproduce on Chromium v5 stable and popup is blocked, but reproducible on the latest Chrome trunk. After digging in the WebKit trunk, I found before r62380 (http://trac.webkit.org/changeset/62380), the function ScriptController::processingUserGesture did only check the active frame&apos;s user gesture status not current frame, so even we call the function to check the top frame&apos;s user gesture status, it still can returned the right status. But just because the function tested if there are any Frame on the stack where JS is executing, it caused bug https://bugs.webkit.org/show_bug.cgi?id=41511, that&apos;s why Yury changed it in r62380.


My solution is adding a function in ScriptController to get the active/entered frame, so the function FrameLoader::isProcessingUserGesture can correctly test the user gesture status of the page.

Any comments?

@Darin, your are the author of FrameLoader(according to http://trac.webkit.org/changeset/17652/), would you please give your comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254850</commentid>
    <comment_count>1</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-22 09:39:50 -0700</bug_when>
    <thetext>related chromium bug: http://crbug.com/49745</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254855</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-22 09:53:12 -0700</bug_when>
    <thetext>Maybe a better solution is to make the &quot;check for user gesture&quot; function on ScriptController static and have it figure out what frame it&apos;s supposed to ask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254862</commentid>
    <comment_count>3</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-22 10:05:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Maybe a better solution is to make the &quot;check for user gesture&quot; function on ScriptController static and have it figure out what frame it&apos;s supposed to ask.

the ScriptController::processingUserGesture before r62380 did find a active frame to check its status of user gesture, but looked like some tests needed a function to know whether a single frame was processing user gesture or not without caring about the other frames according to bug https://bugs.webkit.org/show_bug.cgi?id=41511.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255103</commentid>
    <comment_count>4</comment_count>
      <attachid>62366</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-22 17:35:02 -0700</bug_when>
    <thetext>Created attachment 62366
patch v1, adding a getActiveFrame method to get current active JS execute frame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255105</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-22 17:39:27 -0700</bug_when>
    <thetext>Attachment 62366 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/bindings/js/ScriptController.cpp:306:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/loader/FrameLoader.cpp:1132:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255151</commentid>
    <comment_count>6</comment_count>
      <attachid>62371</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-22 18:57:18 -0700</bug_when>
    <thetext>Created attachment 62371
patch v1, adding a getActiveFrame method to get current active JS execute frame

fixed style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255157</commentid>
    <comment_count>7</comment_count>
      <attachid>62371</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-22 19:08:41 -0700</bug_when>
    <thetext>Comment on attachment 62371
patch v1, adding a getActiveFrame method to get current active JS execute frame

WebCore/bindings/js/ScriptController.cpp:306
 +      return exec ? toDynamicFrame(exec) : 0;
This is dangerous.  The lexical frame is most likely to be the active frame.  The dynamic frame isn&apos;t used for very much beyond user gesture.

WebCore/loader/FrameLoader.cpp:1133
 +      Frame* enteredFrame = frame-&gt;script()-&gt;getActiveFrame();
We don&apos;t use the term &quot;enteredFrame&quot; outside the V8 bindings.

WebCore/loader/FrameLoader.cpp:1137
 +      return enteredFrame-&gt;script()-&gt;processingUserGesture(mainThreadNormalWorld()); // FIXME: Use pageIsProcessingUserGesture.
This is all way too complicated.  Every call site will need to do this dance.  Can&apos;t we push this junk into the bindings / ScriptController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255246</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-23 00:59:43 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=62300) [details]
&gt; 
&gt; My solution is adding a function in ScriptController to get the active/entered frame, so the function FrameLoader::isProcessingUserGesture can correctly test the user gesture status of the page.
&gt; 
&gt; Any comments?
&gt; 

I think that we shouldn&apos;t make conclusion based on the last entered frame. There may be several entered frames on the stack and it may happen that one of them processing user gesture is not the topmost one. 

I suggest isProcessingUserGesture should be a property of the owning Page. In that case we could check it from any frame and if any of the frames is processing user gesture the test would succeed for any frame in the page.


(In reply to comment #0)
&gt; Created an attachment (id=62300) [details]
&gt; On Chromium, the flag WebCore::Setting::m_javaScriptCanOpenWindowsAutomatically is always true, the request of opening window is always passed to browser process to do the popup check. When enabling chromium&apos;s popup blocker, only user-initiated open request can be allowed.
&gt; 
What I don&apos;t understand is why m_javaScriptCanOpenWindowsAutomatically is always true in Chromium if we want to allow only user initiated popups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255933</commentid>
    <comment_count>9</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-26 01:15:09 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think that we shouldn&apos;t make conclusion based on the last entered frame. There may be several entered frames on the stack and it may happen that one of them processing user gesture is not the topmost one. 

Yes, there may be several entered frames(V8 uses a list to save all entered frames), and it is possible that the frame which is processing user gesture is not the topmost one. But the entered frame we get from JS engine is the last entered frame, the event which can be treated as user gesture seems to only happen in that last entered frame. I may be wrong since I am not the engine expert, please correct me if I am wrong.
In my attached test case, the click event fired on the iframe, no matter which window finally opened the new popup, the last entered frame we get in chromium is always the frame of iframe element.

&gt; I suggest isProcessingUserGesture should be a property of the owning Page. In that case we could check it from any frame and if any of the frames is processing user gesture the test would succeed for any frame in the page.

I agree with you that the isProcessingUserGesture should only return the user-gesture status of the owning Page, not status of another page, that is why I proposed to add another function in ScriptController.

(In reply to comment #8)
&gt; What I don&apos;t understand is why m_javaScriptCanOpenWindowsAutomatically is always true in Chromium if we want to allow only user initiated popups.

That is because Chromium want to get all popup requests and judge them in browser process. In Chromium, we implement the popup blocked in the browser process and judge the popup requests according to their user-gesture status. If one popup request is not user initiated and user does not set exception rule for it, chromium will deny the request, otherwise the request will be granted (Please refer to TabContents::AddNewContents and TabContents::AddPopup, We will change the behavior of popup blocker a little bit according to bug http://crbug.com/38458)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255946</commentid>
    <comment_count>10</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-26 02:08:03 -0700</bug_when>
    <thetext>Thanks for review, Adam!

(In reply to comment #7)
&gt; (From update of attachment 62371 [details])
&gt; WebCore/bindings/js/ScriptController.cpp:306
&gt;  +      return exec ? toDynamicFrame(exec) : 0;
&gt; This is dangerous.  The lexical frame is most likely to be the active frame.  The dynamic frame isn&apos;t used for very much beyond user gesture.

I don&apos;t exactly know the difference between lexicalFrame and dynamicFrame. My only knowledge about those frame is from the comments in CallFrame.h(line 49-54).
According to the comments, the dynamicFrame is the frame in which execution began. lexicalFrame is  the frame in which current executing code was defined.
Differs from dynamicGlobalObject() during function calls across web browser frames. 
So if we define the window.open in the top frame and call the top frame&apos;s window.open in sub frame(iframe) by mouse click. The dynamicFrame seems like a right frame to test its user gesture status.
Also WebKit JS binding mostly use dynamicFrame to test the user gesture, please refer to JSDOMWindowCustom.cpp(line 520, 750, 764, 813), JSLocationCustom.cpp(line 194, 328).
also because JSDOMWindow::open test dynamicFrame&apos;s user gesture, my attached case can not affect WebKit.

&gt; 
&gt; WebCore/loader/FrameLoader.cpp:1133
&gt;  +      Frame* enteredFrame = frame-&gt;script()-&gt;getActiveFrame();
&gt; We don&apos;t use the term &quot;enteredFrame&quot; outside the V8 bindings.
Done.

&gt; WebCore/loader/FrameLoader.cpp:1137
&gt;  +      return enteredFrame-&gt;script()-&gt;processingUserGesture(mainThreadNormalWorld()); // FIXME: Use pageIsProcessingUserGesture.
&gt; This is all way too complicated.  Every call site will need to do this dance.  Can&apos;t we push this junk into the bindings / ScriptController?

I see, yes, we should hide those details in bindings/ScriptController. Only question is whether it needs to be implemented inside ScriptController::processingUserGesture. According to Yury&apos;s change and his comments, seems like the processingUserGesture should be a property of the owning Page. How about adding a new method like activeFrameIsProcessingUserGesture and use it to test active frame&apos;s user gesture. Otherwise can we use ScriptController::anyPageIsProcessingUserGesture() to test whether any frame is prcessing user gsture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255947</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-26 02:12:36 -0700</bug_when>
    <thetext>&gt; I don&apos;t exactly know the difference between lexicalFrame and dynamicFrame.

You&apos;re right that we use the dynamic frame for gestures, but we use the lexical frame for almost everything else.  Calling the dynamic frame the &quot;active frame&quot; is likely to confuse people into screwing up other uses.

&gt;How about adding a new method like activeFrameIsProcessingUserGesture and use it to test active frame&apos;s user gesture. Otherwise can we use ScriptController::anyPageIsProcessingUserGesture() to test whether any frame is prcessing user gsture.

I don&apos;t understand why we need these two APIs.  Can you explain why we need to make these distinctions?  It seems like clients just want to know if we&apos;re processing a user gesture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256516</commentid>
    <comment_count>12</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-27 04:47:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; 
&gt; You&apos;re right that we use the dynamic frame for gestures, but we use the lexical frame for almost everything else.  Calling the dynamic frame the &quot;active frame&quot; is likely to confuse people into screwing up other uses.

I see, sorry for the confused wording, I will change it.
 
&gt; I don&apos;t understand why we need these two APIs.  Can you explain why we need to make these distinctions?  It seems like clients just want to know if we&apos;re processing a user gesture.

If processingUserGesture is a instance method of ScriptController, it should reflect user gesture status of the owning Page and the caller should take responsibility to find the right Frame/ScriptController before calling the method. But unfortunately not every call follows this convention.
I saw that you and Yury had discussed this issues in https://bugs.webkit.org/show_bug.cgi?id=41350 before.

Like you suggest before, if we define processingUserGesture as a static member function of ScriptController, it makes sense to say it reflects whether WebKit is processing user gesture no matter which frame.
After searching all references of ScriptController::processingUserGesture in the WebCore, so far looks like every call of ScriptController::processingUserGesture just only wants to know whether WebKit is processing user gesture, they seems not to care which frame is processing.

Only thing we need to worry about is whether checking user gesture status of dynamic frame in ScriptController::processingUserGesture can cause regressions of bug 41350 &amp; 41511. It&apos;s because the patches of those two bugs introduced the current issue. 

@Yury, According to the comments in crbug.com/44070, looks like the root cause of the bug 41350 was not directly related to getting the dynamic/entered frame in ScriptController::processingUserGesture. Are you OK with defining the function as static member function of ScriptController and checking the user gesture status of the dynamic/entered frame?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258144</commentid>
    <comment_count>13</comment_count>
      <attachid>63047</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-30 04:49:58 -0700</bug_when>
    <thetext>Created attachment 63047
patch V2, change ScriptController::processingUserGesture to static 

I changed the code according to Adam&apos;s comments,  put the whole logic inside ScriptController::processingUserGesture and make it as static.
I have run the webkit layout tests(OSX 10.5) and chromium UI test, didn&apos;t see any regressions. So this patch should not affect  bug 41350 &amp; bug 41511.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258145</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-30 04:51:32 -0700</bug_when>
    <thetext>Attachment 63047 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/bindings/v8/ScriptController.cpp:165:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptController.cpp:166:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptController.cpp:167:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptController.cpp:168:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptController.cpp:169:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/ScriptController.cpp:251:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/ScriptController.cpp:252:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/ScriptController.cpp:253:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/js/ScriptController.cpp:254:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258146</commentid>
    <comment_count>15</comment_count>
      <attachid>63048</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-30 05:06:11 -0700</bug_when>
    <thetext>Created attachment 63048
fix style warnings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258345</commentid>
    <comment_count>16</comment_count>
      <attachid>63048</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-30 13:19:43 -0700</bug_when>
    <thetext>Comment on attachment 63048
fix style warnings

If all the callers are figuring out the current word from the ExecState, and ScriptController::processingUserGesture is going to get the exec state from JSMainThreadExecState::currentState then I don&apos;t think the world should be passed in to ScriptController. Why can&apos;t ScriptController call currentWorld?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258346</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-30 13:19:59 -0700</bug_when>
    <thetext>Current &quot;world&quot;, not &quot;word&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258742</commentid>
    <comment_count>18</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-02 00:31:23 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; @Yury, According to the comments in crbug.com/44070, looks like the root cause of the bug 41350 was not directly related to getting the dynamic/entered frame in ScriptController::processingUserGesture. Are you OK with defining the function as static member function of ScriptController and checking the user gesture status of the dynamic/entered frame?

The problem was in the assumption that any entered context has an internal field pointing to V8DOMWindow which is wrong in case of devtools utility context. In the scenario which I was trying to fix we had an inspector JS code calling inspector bindings from the utility context and then native inspector code invoking some method that required isProcessingUserGesture check. The check would end up with an assertion failure in V8Proxy::retrieveWindow(because there is not pointer to V8DOMWindow from the utility context). Making ScriptController::processingUserGesture not depend on the entered context looked like a good solution and I continue to think that it shouldn&apos;t depend on the entered context. ScriptController has access to the Frame and to its owning Page which should be enough to figure out whether there is an active user gesture. 

There is already a static method UserGestureIndicator::processingUserGesture() and having another one with the same name  also static looks confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258787</commentid>
    <comment_count>19</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-02 05:00:55 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; @Yury, According to the comments in crbug.com/44070, looks like the root cause of the bug 41350 was not directly related to getting the dynamic/entered frame in ScriptController::processingUserGesture. Are you OK with defining the function as static member function of ScriptController and checking the user gesture status of the dynamic/entered frame?

Now that http://trac.webkit.org/changeset/63965 changed the way DevTools dispatches messages on the back end so that it doesn&apos;t enter the utility context anymore, this change shouldn&apos;t break DevTools functionality that I was fixing in my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258789</commentid>
    <comment_count>20</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-02 05:06:37 -0700</bug_when>
    <thetext>(In reply to comment #18)

&gt; The problem was in the assumption that any entered context has an internal field pointing to V8DOMWindow which is wrong in case of devtools utility context. In the scenario which I was trying to fix we had an inspector JS code calling inspector bindings from the utility context and then native inspector code invoking some method that required isProcessingUserGesture check. The check would end up with an assertion failure in V8Proxy::retrieveWindow(because there is not pointer to V8DOMWindow from the utility context). Making ScriptController::processingUserGesture not depend on the entered context looked like a good solution and I continue to think that it shouldn&apos;t depend on the entered context. ScriptController has access to the Frame and to its owning Page which should be enough to figure out whether there is an active user gesture. 

@Yury, Thanks for your detailed explanation, Yury!
Yes, ScriptController has access to its owning Frame to check whether there is an active user gesture. But the user gesture can be initiated from another frame, I agree with Adam that in most situation clients just want to know if we&apos;re processing a user gesture, so a unified interface to get user gesture info looks more convenient.

@Adam, any comments for my patch V2 except Darin&apos;s comment? I&apos;d like to get more comments before sending the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258790</commentid>
    <comment_count>21</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-02 05:07:16 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; Now that http://trac.webkit.org/changeset/63965 changed the way DevTools dispatches messages on the back end so that it doesn&apos;t enter the utility context anymore, this change shouldn&apos;t break DevTools functionality that I was fixing in my patch.

Thanks, Yury!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258832</commentid>
    <comment_count>22</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-02 06:27:31 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 63048 [details])
&gt; If all the callers are figuring out the current word from the ExecState, and ScriptController::processingUserGesture is going to get the exec state from JSMainThreadExecState::currentState then I don&apos;t think the world should be passed in to ScriptController. Why can&apos;t ScriptController call currentWorld?

Thanks Darin, you are right, will change it in the new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258999</commentid>
    <comment_count>23</comment_count>
      <attachid>63048</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-02 11:18:54 -0700</bug_when>
    <thetext>Comment on attachment 63048
fix style warnings

WebCore/bindings/js/ScriptController.cpp:249
 +      ExecState* exec = JSMainThreadExecState::currentState();
Why don&apos;t we pass in the exec state?  (All the call sites I see so far seem in have an exec state.)

WebCore/bindings/v8/ScriptController.cpp:208
 +  bool ScriptController::anyPageIsProcessingUserGesture() const
Seems like we should just remove this method since it&apos;s the same as processingUserGesture().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259435</commentid>
    <comment_count>24</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-03 07:15:37 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 63048 [details])
&gt; WebCore/bindings/js/ScriptController.cpp:249
&gt;  +      ExecState* exec = JSMainThreadExecState::currentState();
&gt; Why don&apos;t we pass in the exec state?  (All the call sites I see so far seem in have an exec state.)
We passed the DOMWrapperWorld to ScriptController::processingUserGesture in both V8 binding and JSC binding. So we can call the ScriptController::processingUserGesture in other WebCore code regardless of which binding WebKit used.
If we change to pass the exec state to ScriptController::processingUserGesture, since there is no exec state in V8 binding, we can not call ScriptController::processingUserGesture in WebCore (for example, the call in FrameLoader) except we create a wrapper object for exec state in V8.
As Darin suggested, we can drop the DOMWrapperWorld parameter (V8 never use it) in both two bindings.


&gt; WebCore/bindings/v8/ScriptController.cpp:208
&gt;  +  bool ScriptController::anyPageIsProcessingUserGesture() const
&gt; Seems like we should just remove this method since it&apos;s the same as processingUserGesture().
In V8 binding, yes, anyPageIsProcessingUserGesture is the same as processingUserGesture, 
But looking the FIXME comment, looks like the original author is not confident for this implementation, and also anyPageIsProcessingUserGesture has its own implementation in JSC binding. So I am not sure we should remove this function in V8 binding in the patch of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259451</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-03 07:56:57 -0700</bug_when>
    <thetext>Ok.  I didn&apos;t see any call sites from webcore proper in this patch (I might have missed them).  Webcores view of exec state is called scriptstate, which exists for both jsc and v8.  That&apos;s proabaly not appropriate to use in this case, but I mention it in case its usefulness to you in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260022</commentid>
    <comment_count>26</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-04 07:45:52 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Ok.  I didn&apos;t see any call sites from webcore proper in this patch (I might have missed them).  Webcores view of exec state is called scriptstate, which exists for both jsc and v8.  That&apos;s proabaly not appropriate to use in this case, but I mention it in case its usefulness to you in the future.

I see, Thanks, Adam!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260023</commentid>
    <comment_count>27</comment_count>
      <attachid>63451</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-04 07:48:43 -0700</bug_when>
    <thetext>Created attachment 63451
patch V3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260245</commentid>
    <comment_count>28</comment_count>
      <attachid>63451</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-04 15:31:34 -0700</bug_when>
    <thetext>Comment on attachment 63451
patch V3

WebCore/WebCore.order:7344
 +  __ZN7WebCore16ScriptController21processingUserGestureEv�
There appears to be a strange character here.

WebCore/bindings/js/JSDOMBinding.cpp:682
 +  bool processingUserGesture()
Maybe remove all callers of this method?  They just need to call the ScriptController version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260313</commentid>
    <comment_count>29</comment_count>
      <attachid>63525</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-04 18:18:42 -0700</bug_when>
    <thetext>Created attachment 63525
patch v3 to remove strange character in previous patch

(In reply to comment #28)
&gt; (From update of attachment 63451 [details])
&gt; WebCore/WebCore.order:7344
&gt;  +  __ZN7WebCore16ScriptController21processingUserGestureEv�
&gt; There appears to be a strange character here.
Done

&gt; WebCore/bindings/js/JSDOMBinding.cpp:682
&gt;  +  bool processingUserGesture()
&gt; Maybe remove all callers of this method?  They just need to call the ScriptController version.
The processingUserGesture in JSDOMBinding.cpp is used in derived source code and all derived source files do not include ScriptController.h, so processingUserGesture looks like a wrapper function to call the implementation function without introducing more head files. We may need to keep it.


The new patch is same as the previous one yury approved except I removed the strange character in previous patch. So I didn&apos;t add the review mark.
If we are all satisfied with this one, would you please help on landing? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260315</commentid>
    <comment_count>30</comment_count>
      <attachid>63525</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-04 18:21:15 -0700</bug_when>
    <thetext>Comment on attachment 63525
patch v3 to remove strange character in previous patch

Ok.  We&apos;ll probably want to clean up the global function in a later patch.  The commit-queue is a bit backed up at the moment, but it should clear out eventually.

http://queues.webkit.org/queue-status/commit-queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260317</commentid>
    <comment_count>31</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-04 18:23:19 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 63525 [details])
&gt; Ok.  We&apos;ll probably want to clean up the global function in a later patch.  The commit-queue is a bit backed up at the moment, but it should clear out eventually.
&gt; 
&gt; http://queues.webkit.org/queue-status/commit-queue

OK, Thanks, Adam!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261058</commentid>
    <comment_count>32</comment_count>
      <attachid>63525</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-05 20:21:05 -0700</bug_when>
    <thetext>Comment on attachment 63525
patch v3 to remove strange character in previous patch

Rejecting patch 63525 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Adam Barth&apos;, u&apos;--force&apos;]&quot; exit_code: 2
Last 500 characters of output:
file LayoutTests/fast/events/popup-blocked-from-iframe-script-expected.txt
patching file LayoutTests/fast/events/popup-blocked-from-iframe-script.html
patch unexpectedly ends in middle of line
patch: **** malformed patch at line 32:  

fatal: pathspec &apos;LayoutTests/fast/events/popup-blocked-from-iframe-script.html&apos; did not match any files
Failed to git add LayoutTests/fast/events/popup-blocked-from-iframe-script.html. at /Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply line 427.

Full output: http://queues.webkit.org/results/3636412</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261828</commentid>
    <comment_count>33</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-07 21:57:48 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 63525 [details])
&gt; Rejecting patch 63525 from commit-queue.
&gt; 
&gt; Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Adam Barth&apos;, u&apos;--force&apos;]&quot; exit_code: 2
&gt; Last 500 characters of output:
&gt; file LayoutTests/fast/events/popup-blocked-from-iframe-script-expected.txt
&gt; patching file LayoutTests/fast/events/popup-blocked-from-iframe-script.html
&gt; patch unexpectedly ends in middle of line
&gt; patch: **** malformed patch at line 32:  
&gt; 
&gt; fatal: pathspec &apos;LayoutTests/fast/events/popup-blocked-from-iframe-script.html&apos; did not match any files
&gt; Failed to git add LayoutTests/fast/events/popup-blocked-from-iframe-script.html. at /Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply line 427.
&gt; 
&gt; Full output: http://queues.webkit.org/results/3636412

Hi Adam, Eric
I am not sure the reason of the commit failure, is that because I missed a new line at the end of &apos;LayoutTests/fast/events/popup-blocked-from-iframe-script.html&apos;?
The patch was generated by svn-create-patch, I didn&apos;t see any error/warning info at that time,.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261829</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-07 21:59:30 -0700</bug_when>
    <thetext>Hum... Not sure.  The commit-queue just uses &quot;svn-apply --force&quot; in a git checkout, so you can test it yourself if you like.  Otherwise, I can try landing your patch myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261832</commentid>
    <comment_count>35</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-07 22:08:43 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Hum... Not sure.  The commit-queue just uses &quot;svn-apply --force&quot; in a git checkout, so you can test it yourself if you like.  Otherwise, I can try landing your patch myself.

Thanks for your super quick response, Adam!
Now I can not access my mac computer. I will check it later, then I will ask for your help.
Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261869</commentid>
    <comment_count>36</comment_count>
      <attachid>63451</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-08 03:16:54 -0700</bug_when>
    <thetext>Comment on attachment 63451
patch V3

Cleared Yury Semikhatsky&apos;s review+ from obsolete attachment 63451 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262109</commentid>
    <comment_count>37</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-09 05:25:46 -0700</bug_when>
    <thetext>Hi Adam, 
I have tested the patch in my local svn checkout (I used the patch cmd), no patch error was generated, no new test was broken. Please help me to land my patch again.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262219</commentid>
    <comment_count>38</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-09 10:46:33 -0700</bug_when>
    <thetext>Ok.  I just kicked off a manual land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262228</commentid>
    <comment_count>39</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-09 11:10:11 -0700</bug_when>
    <thetext>Looks like your patch conflicts with something that just landed.  Probably http://trac.webkit.org/changeset/64991

$ patch -p0 &lt; patch 
patching file WebCore/ChangeLog
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file WebCore/ChangeLog.rej
patching file WebCore/WebCore.order
patching file WebCore/bindings/js/JSDOMBinding.cpp
patching file WebCore/bindings/js/JSDOMBinding.h
patching file WebCore/bindings/js/JSDOMWindowCustom.cpp
patching file WebCore/bindings/js/JSDocumentCustom.cpp
patching file WebCore/bindings/js/JSLocationCustom.cpp
patching file WebCore/bindings/js/ScriptController.cpp
patching file WebCore/bindings/js/ScriptController.h
patching file WebCore/bindings/scripts/CodeGeneratorJS.pm
Hunk #1 succeeded at 1968 (offset 17 lines).
patching file WebCore/bindings/scripts/test/JS/JSTestObj.cpp
Hunk #1 succeeded at 1064 (offset 39 lines).
Hunk #2 succeeded at 1088 (offset 39 lines).
patching file WebCore/bindings/v8/ScriptController.cpp
patching file WebCore/bindings/v8/ScriptController.h
patching file WebCore/bindings/v8/V8Utilities.cpp
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file WebCore/bindings/v8/V8Utilities.cpp.rej
patching file WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
Hunk #1 FAILED at 454.
1 out of 1 hunk FAILED -- saving rejects to file WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp.rej
patching file WebCore/loader/FrameLoader.cpp
Hunk #1 succeeded at 1129 (offset -1 lines).
patching file LayoutTests/ChangeLog
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/ChangeLog.rej
patching file LayoutTests/fast/events/popup-blocked-from-iframe-script-expected.txt
patching file LayoutTests/fast/events/popup-blocked-from-iframe-script.html
patch unexpectedly ends in middle of line
patch: **** malformed patch at line 440:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262502</commentid>
    <comment_count>40</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-09 23:06:42 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Looks like your patch conflicts with something that just landed.  Probably http://trac.webkit.org/changeset/64991
&gt; 
&gt; $ patch -p0 &lt; patch 
&gt; patching file WebCore/ChangeLog
&gt; Hunk #1 FAILED at 1.
&gt; ...
&gt; patching file LayoutTests/fast/events/popup-blocked-from-iframe-script.html
&gt; patch unexpectedly ends in middle of line
&gt; patch: **** malformed patch at line 440:

The patch expects extra EOL at the end of patch file. I see the same problem locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262503</commentid>
    <comment_count>41</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-09 23:07:40 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; Looks like your patch conflicts with something that just landed.  Probably http://trac.webkit.org/changeset/64991
&gt; &gt; 
&gt; &gt; $ patch -p0 &lt; patch 
&gt; &gt; patching file WebCore/ChangeLog
&gt; &gt; Hunk #1 FAILED at 1.
&gt; &gt; ...
&gt; &gt; patching file LayoutTests/fast/events/popup-blocked-from-iframe-script.html
&gt; &gt; patch unexpectedly ends in middle of line
&gt; &gt; patch: **** malformed patch at line 440:
&gt; 
&gt; The patch expects extra EOL at the end of patch file. I see the same problem locally.
(besides the conflicts with other changes, of cause)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262642</commentid>
    <comment_count>42</comment_count>
      <attachid>64006</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-10 06:03:26 -0700</bug_when>
    <thetext>Created attachment 64006
patch v3 to resolve conflicts

(In reply to comment #39)
&gt; Looks like your patch conflicts with something that just landed.  Probably http://trac.webkit.org/changeset/64991
Thanks Adam! 
Yes, it conflicted with http://trac.webkit.org/changeset/64991.
I have resolved all conflicts and tested again.  Now uploading the new patch. Please review it and help landing if it&apos;s OK.

(In reply to comment #40)
&gt; The patch expects extra EOL at the end of patch file. I see the same problem locally.
Thanks, Yury! I have rewritten the html file and used the hex editor to make sure every line has LF(0x0A). Hopefully it can resolve this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262643</commentid>
    <comment_count>43</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-10 06:04:22 -0700</bug_when>
    <thetext>Sorry for setting the wrong review flag:-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262765</commentid>
    <comment_count>44</comment_count>
      <attachid>64006</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-10 11:05:36 -0700</bug_when>
    <thetext>Comment on attachment 64006
patch v3 to resolve conflicts

BTW, you don&apos;t need to change WebCore.order.  I&apos;m not sure what that file does, but it&apos;s managed by some automated process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262784</commentid>
    <comment_count>45</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-10 11:18:13 -0700</bug_when>
    <thetext>WebKit.order is updated by Apple before shipping.  It&apos;s an optimization thing.  I you want to know more about order files, see -order_file in man ld(1):

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262807</commentid>
    <comment_count>46</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-10 11:57:16 -0700</bug_when>
    <thetext>Committed r65082: &lt;http://trac.webkit.org/changeset/65082&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263735</commentid>
    <comment_count>47</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-12 05:33:01 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; WebKit.order is updated by Apple before shipping.  It&apos;s an optimization thing.  I you want to know more about order files, see -order_file in man ld(1):
&gt; 
&gt; http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html

Thanks, Eric!
I changed the order file was because I was trapped by a link error (not in this patch) which cost me a lot of time to figure out, it was caused by order file unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263744</commentid>
    <comment_count>48</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-12 05:45:53 -0700</bug_when>
    <thetext>You may sometimes have to *remove* symbols from the order file (because I believe it&apos;s a link error if symbols are listed there but not present in the binary).  But you never have to add them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263756</commentid>
    <comment_count>49</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-08-12 05:54:38 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; You may sometimes have to *remove* symbols from the order file (because I believe it&apos;s a link error if symbols are listed there but not present in the binary).  But you never have to add them.

I see. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>62300</attachid>
            <date>2010-07-22 08:19:08 -0700</date>
            <delta_ts>2010-07-22 08:19:08 -0700</delta_ts>
            <desc>test case</desc>
            <filename>popup.html</filename>
            <type>text/html</type>
            <size>202</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0bWwsSSBkaWQgb3BlbiB0aGUg
d2luZG93PHNjcmlwdD53aW5kb3cub3BlbignaHR0cDovL3d3dy5nb29nbGUuY29tLycsJ19ibGFu
aycsICdoZWlnaHQ9NjAwLHdpZHRoPTcyMCcpOzwvc2NyaXB0PiI+PC9pZnJhbWU+CkkgZG9uJ3Qg
b3BlbiB0aGV3aW5kb3cuCjwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62366</attachid>
            <date>2010-07-22 17:35:02 -0700</date>
            <delta_ts>2010-07-22 18:57:18 -0700</delta_ts>
            <desc>patch v1, adding a getActiveFrame method to get current active JS execute frame</desc>
            <filename>patch001.txt</filename>
            <type>text/plain</type>
            <size>7076</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDctMjIgIEpvaG5ueSBKaWFubmluZyBEaW5nICA8am5kQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVc2UgdGhlIGFjdGl2ZShlbnRlcmVkKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0
dXJlIHN0YXR1cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyODI3CisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmdldEFj
dGl2ZUZyYW1lKTogYWRkIGdldEFjdGl2ZUZyYW1lIG1ldGhvZCBpbiBTY3JpcHRDb250cm9sbGVy
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Z2V0QWN0aXZlRnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKwogMjAx
MC0wNy0yMiAgQmFsYXpzIEtlbGVtZW4gIDxrYkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAg
VXJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gNjM4ODEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDEyIEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2kKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK0ZyYW1lKiBTY3JpcHRDb250cm9sbGVyOjpnZXRBY3RpdmVGcmFtZSgpIGNvbnN0Cit7Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUo
KTsKKyAgICByZXR1cm4gZXhlYyA/IHRvRHluYW1pY0ZyYW1lKGV4ZWMpIDogTlVMTDsKK30KKwog
Ym9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAq
ZnJhbWUpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpj
dXJyZW50U3RhdGUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
CShyZXZpc2lvbiA2Mzg4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBiKSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2Fs
bGJhY2sgPSBiOyB9CiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldv
cmxkKikgY29uc3Q7CiAgICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBj
b25zdDsKKyAgICBGcmFtZSogZ2V0QWN0aXZlRnJhbWUoKSBjb25zdDsKIAogICAgIHN0YXRpYyBi
b29sIGNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1lKik7CiAgICAgYm9vbCBjYW5FeGVj
dXRlU2NyaXB0cyhSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHMpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Mzg4MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNCw2ICsyMDQsMTEgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjphbnlQYWdlSXNQcm9j
ZXNzaQogICAgIHJldHVybiBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAorRnJhbWUqIFNj
cmlwdENvbnRyb2xsZXI6OmdldEFjdGl2ZUZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVjhQ
cm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Cit9CisKIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29u
c3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQogewogICAgIG1fcHJveHktPmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDYzODgxKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2
ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzU0MTgyCiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCA9IDApIGNvbnN0OwogICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkgY29uc3Q7CisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX3BhdXNlZCA9IHBhdXNlZDsgfQogICAg
IGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlZDsgfQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjM4ODEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjksNyArMTEyOSwxMiBAQCBib29sIEZyYW1l
TG9hZGVyOjppc1Byb2Nlc3NpbmdVc2VyR2VzdHVyCiAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFt
ZS0+dHJlZSgpLT50b3AoKTsKICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNj
cmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
SWYgSmF2YVNjcmlwdCBpcyBkaXNhYmxlZCwgYSB1c2VyIGdlc3R1cmUgbXVzdCBoYXZlIGluaXRp
YXRlZCB0aGUgbmF2aWdhdGlvbi4KLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOyAvLyBGSVhNRTogVXNlIHBh
Z2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZS4KKwkvLyBUZXN0IHRoZSB1c2VyIGdlc3R1cmUgc3Rh
dHVzIG9mIHRoZSBlbnRlcmVkIGZyYW1lIGluc3RlYWQgb2YgdGhlIHRvcCBmcmFtZS4KKyAgICBG
cmFtZSogZW50ZXJlZEZyYW1lID0gZnJhbWUtPnNjcmlwdCgpLT5nZXRBY3RpdmVGcmFtZSgpOwor
ICAgIC8vIElmIHRoZXJlIGlzIG5vIGVudGVyZWQgZnJhbWUsIHVzZSB0aGUgdG9wIGZyYW1lLgor
ICAgIGlmICghZW50ZXJlZEZyYW1lKQorICAgICAgICBlbnRlcmVkRnJhbWUgPSBmcmFtZTsKKyAg
ICByZXR1cm4gZW50ZXJlZEZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6IFVzZSBwYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUuCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlc2V0TXVsdGlwbGVGb3JtU3VibWlz
c2lvblByb3RlY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjM5MDApCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNy0yMiAg
Sm9obm55IEppYW5uaW5nIERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUgYWN0aXZlKGVudGVyZWQp
IGZyYW1lIHRvIGNoZWNrIHRoZSB1c2VyIGdlc3R1cmUgc3RhdHVzIG9mIHRoZSBwYWdlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcKKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1l
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTIyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorCitXaGVuIG9wZW5pbmcgYSB3aW5kb3cgZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwg
d2Via2l0IHNob3VsZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQg
YnkgdXNlci4gVGhpcyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MjgyNy4KK1BBU1NFRApJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1p
ZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5X
aW5kb3dzKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJs
ZWQodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5k
b3dzV2hlbkNvbXBsZXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAvLyBSZWNvcmQgY3VycmVudCB3aW5kb3cgY291bnQuCisgICAgd2luZG93
LndpbmRvd0NvdW50ID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndpbmRvd0NvdW50KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlciAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2luZG93Q291bnQoKSA9PSB3aW5k
b3cud2luZG93Q291bnQpCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuaW5uZXJUZXh0ID0gIlBBU1NFRCI7CisgICAgLy8gQ2xvc2UgdGhlIHRlc3QuCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgorPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLEkgZGlk
IG9wZW4gdGhlIHdpbmRvdzxzY3JpcHQ+d2luZG93Lm9wZW4oJ2Fib3V0OmJsYW5rJywnX2JsYW5r
JywgJ2hlaWdodD02MDAsd2lkdGg9NzIwJyk7PC9zY3JpcHQ+Ij48L2lmcmFtZT48YnI+CitXaGVu
IG9wZW5pbmcgYSB3aW5kb3cgZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwgd2Via2l0IHNob3Vs
ZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQgYnkgdXNlci4gVGhp
cyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MjgyNy4KKzxkaXYgaWQ9ImNvbnNvbGUiPkZBSUxFRDwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62371</attachid>
            <date>2010-07-22 18:57:18 -0700</date>
            <delta_ts>2010-07-30 04:49:58 -0700</delta_ts>
            <desc>patch v1, adding a getActiveFrame method to get current active JS execute frame</desc>
            <filename>patch001.txt</filename>
            <type>text/plain</type>
            <size>7076</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDctMjIgIEpvaG5ueSBKaWFubmluZyBEaW5nICA8am5kQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVc2UgdGhlIGFjdGl2ZShlbnRlcmVkKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0
dXJlIHN0YXR1cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyODI3CisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmdldEFj
dGl2ZUZyYW1lKTogYWRkIGdldEFjdGl2ZUZyYW1lIG1ldGhvZCBpbiBTY3JpcHRDb250cm9sbGVy
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Z2V0QWN0aXZlRnJhbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKwogMjAx
MC0wNy0yMiAgQmFsYXpzIEtlbGVtZW4gIDxrYkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAg
VXJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gNjM4ODEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDEyIEBAIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2kKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK0ZyYW1lKiBTY3JpcHRDb250cm9sbGVyOjpnZXRBY3RpdmVGcmFtZSgpIGNvbnN0Cit7Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUo
KTsKKyAgICByZXR1cm4gZXhlYyA/IHRvRHluYW1pY0ZyYW1lKGV4ZWMpIDogMDsKK30KKwogYm9v
bCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSAqZnJh
bWUpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJy
ZW50U3RhdGUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiA2Mzg4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBiKSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJh
Y2sgPSBiOyB9CiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxk
KikgY29uc3Q7CiAgICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25z
dDsKKyAgICBGcmFtZSogZ2V0QWN0aXZlRnJhbWUoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29s
IGNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1lKik7CiAgICAgYm9vbCBjYW5FeGVjdXRl
U2NyaXB0cyhSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHMpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Mzg4MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNCw2ICsyMDQsMTEgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjphbnlQYWdlSXNQcm9jZXNz
aQogICAgIHJldHVybiBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAorRnJhbWUqIFNjcmlw
dENvbnRyb2xsZXI6OmdldEFjdGl2ZUZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVjhQcm94
eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Cit9CisKIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQogewogICAgIG1fcHJveHktPmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDYzODgxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsx
NTYsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzU0MTgyCiAgICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9IDApIGNvbnN0OwogICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkgY29uc3Q7CisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCkgY29uc3Q7CiAKICAgICB2
b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX3BhdXNlZCA9IHBhdXNlZDsgfQogICAgIGJv
b2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlZDsgfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAkocmV2aXNpb24gNjM4ODEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjksNyArMTEyOSwxMiBAQCBib29sIEZyYW1lTG9h
ZGVyOjppc1Byb2Nlc3NpbmdVc2VyR2VzdHVyCiAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFtZS0+
dHJlZSgpLT50b3AoKTsKICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlw
dHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYg
SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCwgYSB1c2VyIGdlc3R1cmUgbXVzdCBoYXZlIGluaXRpYXRl
ZCB0aGUgbmF2aWdhdGlvbi4KLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOyAvLyBGSVhNRTogVXNlIHBhZ2VJ
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZS4KKyAgICAvLyBUZXN0IHRoZSB1c2VyIGdlc3R1cmUgc3Rh
dHVzIG9mIHRoZSBlbnRlcmVkIGZyYW1lIGluc3RlYWQgb2YgdGhlIHRvcCBmcmFtZS4KKyAgICBG
cmFtZSogZW50ZXJlZEZyYW1lID0gZnJhbWUtPnNjcmlwdCgpLT5nZXRBY3RpdmVGcmFtZSgpOwor
ICAgIC8vIElmIHRoZXJlIGlzIG5vIGVudGVyZWQgZnJhbWUsIHVzZSB0aGUgdG9wIGZyYW1lLgor
ICAgIGlmICghZW50ZXJlZEZyYW1lKQorICAgICAgICBlbnRlcmVkRnJhbWUgPSBmcmFtZTsKKyAg
ICByZXR1cm4gZW50ZXJlZEZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6IFVzZSBwYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUuCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlc2V0TXVsdGlwbGVGb3JtU3VibWlz
c2lvblByb3RlY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjM5MDApCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNy0yMiAg
Sm9obm55IEppYW5uaW5nIERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUgYWN0aXZlKGVudGVyZWQp
IGZyYW1lIHRvIGNoZWNrIHRoZSB1c2VyIGdlc3R1cmUgc3RhdHVzIG9mIHRoZSBwYWdlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcKKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1l
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTIyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorCitXaGVuIG9wZW5pbmcgYSB3aW5kb3cgZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwg
d2Via2l0IHNob3VsZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQg
YnkgdXNlci4gVGhpcyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MjgyNy4KK1BBU1NFRApJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1p
ZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5X
aW5kb3dzKCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJs
ZWQodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5k
b3dzV2hlbkNvbXBsZXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAvLyBSZWNvcmQgY3VycmVudCB3aW5kb3cgY291bnQuCisgICAgd2luZG93
LndpbmRvd0NvdW50ID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndpbmRvd0NvdW50KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlciAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2luZG93Q291bnQoKSA9PSB3aW5k
b3cud2luZG93Q291bnQpCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuaW5uZXJUZXh0ID0gIlBBU1NFRCI7CisgICAgLy8gQ2xvc2UgdGhlIHRlc3QuCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgorPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLEkgZGlk
IG9wZW4gdGhlIHdpbmRvdzxzY3JpcHQ+d2luZG93Lm9wZW4oJ2Fib3V0OmJsYW5rJywnX2JsYW5r
JywgJ2hlaWdodD02MDAsd2lkdGg9NzIwJyk7PC9zY3JpcHQ+Ij48L2lmcmFtZT48YnI+CitXaGVu
IG9wZW5pbmcgYSB3aW5kb3cgZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwgd2Via2l0IHNob3Vs
ZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQgYnkgdXNlci4gVGhp
cyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MjgyNy4KKzxkaXYgaWQ9ImNvbnNvbGUiPkZBSUxFRDwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>
<flag name="review"
          id="50553"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63047</attachid>
            <date>2010-07-30 04:49:58 -0700</date>
            <delta_ts>2010-07-30 05:06:11 -0700</delta_ts>
            <desc>patch V2, change ScriptController::processingUserGesture to static </desc>
            <filename>patch001.txt</filename>
            <type>text/plain</type>
            <size>13963</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDctMzAgIEpvaG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
dGhlIGFjdGl2ZShlbnRlcmVkKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0dXJlIHN0YXR1
cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyODI3LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQt
ZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRvbVdpbmRvd0FsbG93UG9wVXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KToK
KyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFsbG93UG9wVXApOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorCiAyMDEw
LTA3LTMwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsOCArNjgxLDcgQEAgRnJhbWUqIHRv
RHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHRvRHluYW1pY0ZyYW1l
KGV4ZWMpOwotICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdV
c2VyR2VzdHVyZShjdXJyZW50V29ybGQoZXhlYykpOworICAgIHJldHVybiBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoY3VycmVudFdvcmxkKGV4ZWMpKTsKIH0KIAogS1VS
TCBjb21wbGV0ZVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYxLDcgKzc2MSw3IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2lu
ZG93KEV4ZWNTdGF0ZSogZXgKIHN0YXRpYyBib29sIGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUq
IGFjdGl2ZUZyYW1lLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGFjdGl2ZUZyYW1l
KTsKLSAgICBpZiAoYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUo
Y3VycmVudFdvcmxkKGV4ZWMpKSkKKyAgICBpZiAoU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBET01XaW5kb3c6OmFsbG93UG9wVXAoYWN0aXZlRnJhbWUpOwogfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2NDI2OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIAogICAgIGlmIChhY3RpdmVGcmFtZSkKICAgICAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAKLSAgICBib29sIHVzZXJHZXN0
dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoY3VycmVu
dFdvcmxkKGV4ZWMpKTsKKyAgICBib29sIHVzZXJHZXN0dXJlID0gU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgZnJhbWUtPnJl
ZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uoc3RyLCBhY3RpdmVGcmFt
ZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgIWFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+
YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDQsMTQgKzI0NCwyNiBAQCBpbnQgU2NyaXB0Q29udHJvbGxlcjo6
ZXZlbnRIYW5kbGVyTGluZU51CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU2NyaXB0Q29udHJv
bGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpIGNvbnN0
Citib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFwcGVy
V29ybGQqIHdvcmxkKQogewotICAgIGlmIChtX2FsbG93UG9wdXBzRnJvbVBsdWdpbiB8fCBpc0ph
dmFTY3JpcHRBbmNob3JOYXZpZ2F0aW9uKCkpCisgICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBleGVj
ID8gdG9EeW5hbWljRnJhbWUoZXhlYykgOiAwOworICAgIC8vIE5vIHNjcmlwdCBpcyBydW5uaW5n
LCBzbyBpdCBpcyB1c2VyLWluaXRpYXRlZCB1bmxlc3MgdGhlIGdlc3R1cmUgc3RhY2sJCQorICAg
IC8vIGV4cGxpY2l0bHkgc2F5cyBpdCBpcyBub3QuCQkKKyAgICBpZiAoIWZyYW1lKQkJCisgICAg
ICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Z2V0VXNlckdlc3R1cmVTdGF0ZSgpICE9
IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmU7CQkKKworICAgIC8vIEZJWE1FOiBX
ZSBjaGVjayB0aGUgcGx1Z2luIHBvcHVwIGZsYWcgYW5kIGphdmFzY3JpcHQgYW5jaG9yIG5hdmln
YXRpb24KKyAgICAvLyBmcm9tIHRoZSBkeW5hbWljIGZyYW1lIGJlY3Vhc2UgdGhleSBzaG91bGQg
b25seSBiZSBpbml0aWF0ZWQgb24gdGhlCisgICAgLy8gZHluYW1pYyBmcmFtZSBpbiB3aGljaCBl
eGVjdXRpb24gYmVnYW4gaWYgdGhleSBkbyBoYXBwZW4uCisgICAgU2NyaXB0Q29udHJvbGxlciog
c2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKKyAgICBBU1NFUlQoc2NyaXB0Q29u
dHJvbGxlcik7CisgICAgaWYgKHNjcmlwdENvbnRyb2xsZXItPmFsbG93UG9wdXBzRnJvbVBsdWdp
bigpIHx8IHNjcmlwdENvbnRyb2xsZXItPmlzSmF2YVNjcmlwdEFuY2hvck5hdmlnYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBhIERPTSBldmVudCBpcyBiZWluZyBw
cm9jZXNzZWQsIGNoZWNrIHRoYXQgaXQgd2FzIGluaXRpYXRlZCBieSB0aGUgdXNlcgogICAgIC8v
IGFuZCB0aGF0IGl0IGlzIGluIHRoZSB3aGl0ZWxpc3Qgb2YgZXZlbnQgdHlwZXMgYWxsb3dlZCB0
byBnZW5lcmF0ZSBwb3AtdXBzLgotICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGV4
aXN0aW5nV2luZG93U2hlbGwod29ybGQpKQorICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVs
bCA9IHNjcmlwdENvbnRyb2xsZXItPmV4aXN0aW5nV2luZG93U2hlbGwod29ybGQpKQogICAgICAg
ICBpZiAoRXZlbnQqIGV2ZW50ID0gc2hlbGwtPndpbmRvdygpLT5jdXJyZW50RXZlbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBldmVudC0+ZnJvbVVzZXJHZXN0dXJlKCk7CiAKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NyArMTEwLDcgQEAgcHVibGljOgogICAgIGludCBldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkgY29u
c3Q7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhib29sIGIpIHsg
bV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IGI7IH0KLSAgICBib29sIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZShET01XcmFwcGVyV29ybGQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBwcm9jZXNz
aW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKik7CiAgICAgYm9vbCBhbnlQYWdlSXNQcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc0Zy
b21DdXJyZW50T3JpZ2luKEZyYW1lKik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDE1ICsxNjAsMTggQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNjcgogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLWJvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KERPTVdyYXBwZXJXb3JsZCopIGNvbnN0Citib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZShET01XcmFwcGVyV29ybGQqKQogewotICAgIC8vIE5vIHNjcmlwdCBpcyBy
dW5uaW5nLCBzbyBpdCBpcyB1c2VyLWluaXRpYXRlZCB1bmxlc3MgdGhlIGdlc3R1cmUgc3RhY2sK
LSAgICAvLyBleHBsaWNpdGx5IHNheXMgaXQgaXMgbm90LgotICAgIGlmICghbV9wcm94eS0+ZXhl
Y3V0aW5nU2NyaXB0KCkpCi0gICAgICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Z2V0
VXNlckdlc3R1cmVTdGF0ZSgpICE9IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmU7
CisgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVy
ZWRDb250ZXh0KCk7CQkKKyAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywgc28gaXQgaXMgdXNl
ci1pbml0aWF0ZWQgdW5sZXNzIHRoZSBnZXN0dXJlIHN0YWNrCQkKKyAgICAvLyBleHBsaWNpdGx5
IHNheXMgaXQgaXMgbm90LgkJCisgICAgaWYgKCFhY3RpdmVGcmFtZSkJCQorICAgICAgICByZXR1
cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmdldFVzZXJHZXN0dXJlU3RhdGUoKSAhPSBEZWZpbml0
ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwkJCisKKyAgICBWOFByb3h5KiBhY3RpdmVQcm94
eSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+cHJveHkoKTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBt
X3Byb3h5LT5tYWluV29ybGRDb250ZXh0KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
djhDb250ZXh0ID0gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dChhY3RpdmVGcmFtZSk7CiAgICAg
Ly8gRklYTUU6IGZpbmQgYWxsIGNhc2VzIGNvbnRleHQgY2FuIGJlIGVtcHR5OgogICAgIC8vICAx
KSBKUyBpcyBkaXNhYmxlZDsKICAgICAvLyAgMikgcGFnZSBpcyBOVUxMOwpAQCAtMTg4LDcgKzE5
MSwxMSBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgICAg
IC8vIEV2ZW50Ojpmcm9tVXNlckdlc3R1cmUgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBVc2VyR2Vz
dHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgcmV0dXJucyBmYWxzZS4KICAg
ICAgICAgcmV0dXJuIGV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKTsKICAgICB9Ci0gICAgaWYgKG1f
c291cmNlVVJMICYmIG1fc291cmNlVVJMLT5pc051bGwoKSAmJiAhbV9wcm94eS0+dGltZXJDYWxs
YmFjaygpKSB7CisgICAgLy8gRklYTUU6IFdlIGNoZWNrIHRoZSBqYXZhc2NyaXB0IGFuY2hvciBu
YXZpZ2F0aW9uIGZyb20gdGhlIGxhc3QgZW50ZXJlZAorICAgIC8vIGZyYW1lIGJlY3Vhc2UgaXQg
c2hvdWxkIG9ubHkgYmUgaW5pdGlhdGVkIG9uIHRoZSBsYXN0IGVudGVyZWQgZnJhbWUgaW4KKyAg
ICAvLyB3aGljaCBleGVjdXRpb24gYmVnYW4gaWYgaXQgZG9lcyBoYXBwZW4uICAgIAorICAgIGNv
bnN0IFN0cmluZyogc291cmNlVVJMID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5zb3VyY2VVUkwo
KTsKKyAgICBpZiAoc291cmNlVVJMICYmIHNvdXJjZVVSTC0+aXNOdWxsKCkgJiYgIWFjdGl2ZVBy
b3h5LT50aW1lckNhbGxiYWNrKCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgPGEgaHJlZj0i
amF2YXNjcmlwdDp3aW5kb3cub3BlbignLi4uJyk+IGNhc2UgLT4gd2UgbGV0IGl0IHRocm91Z2gu
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIwMSw3ICsyMDgsNyBAQCBib29sIFNj
cmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiBib29sIFNjcmlwdENvbnRyb2xsZXI6
OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
IGlzIHRoaXMgcmlnaHQ/Ci0gICAgcmV0dXJuIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAg
IHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAog
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjQyNjgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxi
YWNrKGJvb2wgcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxs
YmFjayA9IHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRs
eSB3ZSBkb24ndCB1c2UgdGhlIHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCiAgICAgLy8gU2VlIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzU0MTgyCi0gICAgYm9vbCBwcm9jZXNzaW5n
VXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IDApIGNvbnN0OworICAgIHN0YXRp
YyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFwcGVyV29ybGQqIHdvcmxkID0gMCk7
CiAgICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0UGF1c2VkKGJvb2wgcGF1c2VkKSB7IG1fcGF1c2VkID0gcGF1c2VkOyB9CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTIg
KzkyLDEwIEBAIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGUKICAgICBp
ZiAoIW5ld1ZhbHVlLT5Jc051bGwoKSAmJiAhbmV3VmFsdWUtPklzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3kob2JqZWN0LCBuZXdWYWx1ZSwgY2FjaGVJbmRleCk7
CiB9Ci0gICAgCiAKIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKIHsKLSAgICBGcmFtZSog
ZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBy
ZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
KyAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9
CiAKIEZyYW1lKiBjYWxsaW5nT3JFbnRlcmVkRnJhbWUoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNjQyNjgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKCkK
ICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRl
eHQoKTsKIAogICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKGZyYW1lLT5zY3JpcHQoKS0+cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpCisgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKICAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGlu
Z3MtPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDcgKzExMzAsNyBAQCBib29sIEZyYW1l
TG9hZGVyOjppc1Byb2Nlc3NpbmdVc2VyR2VzdHVyCiAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFt
ZS0+dHJlZSgpLT50b3AoKTsKICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNj
cmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
SWYgSmF2YVNjcmlwdCBpcyBkaXNhYmxlZCwgYSB1c2VyIGdlc3R1cmUgbXVzdCBoYXZlIGluaXRp
YXRlZCB0aGUgbmF2aWdhdGlvbi4KLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNz
aW5nVXNlckdlc3R1cmUobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOyAvLyBGSVhNRTogVXNlIHBh
Z2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZS4KKyAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6
IFVzZSBwYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUuCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6
OnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKQpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNjQzNDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMC0wNy0zMCAgSm9obm55IERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUg
YWN0aXZlKGVudGVyZWQpIGZyYW1lIHRvIGNoZWNrIHRoZSB1c2VyIGdlc3R1cmUgc3RhdHVzIG9m
IHRoZSBwYWdlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDI4MjcKKworICAgICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJh
bWUtc2NyaXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcG9w
dXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMzAg
IE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9w
dXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Bv
cHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACisKK1doZW4gY2FsbGluZyBzY3JpcHQgdG8gb3BlbiBhIHdpbmRvdyB3
aXRob3V0IHVzZXIgZ2VzdHVyZSBmcm9tIHRoZSBlbmNsb3NpbmcgaWZyYW1lLCB3ZWJraXQgc2hv
dWxkIHRlc3Qgb3V0IHRoYXQgdGhlIG9wZW5pbmcgaXMgbm90IGluaXRpYXRlZCBieSB1c2VyLiBU
aGlzIGlzIGEgdGVzdCBjYXNlIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQyODI3LgorUEFTU0VECkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9w
b3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZy
b20taWZyYW1lLXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c2V0Q2FuT3BlbldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRQb3B1cEJs
b2NraW5nRW5hYmxlZCh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDbG9zZVJl
bWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIC8vIFJlY29yZCBjdXJyZW50IHdpbmRvdyBjb3VudC4K
KyAgICB3aW5kb3cud2luZG93Q291bnQgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2lu
ZG93Q291bnQoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53aW5kb3dDb3Vu
dCgpID09IHdpbmRvdy53aW5kb3dDb3VudCkKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiUEFTU0VEIjsKKyAgICAvLyBDbG9zZSB0aGUgdGVz
dC4KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyI+Cis8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0
L2h0bWwsSSBkaWQgb3BlbiB0aGUgd2luZG93PHNjcmlwdD53aW5kb3cub3BlbignYWJvdXQ6Ymxh
bmsnLCdfYmxhbmsnLCAnaGVpZ2h0PTYwMCx3aWR0aD03MjAnKTs8L3NjcmlwdD4iPjwvaWZyYW1l
Pjxicj4KK1doZW4gY2FsbGluZyBzY3JpcHQgdG8gb3BlbiBhIHdpbmRvdyB3aXRob3V0IHVzZXIg
Z2VzdHVyZSBmcm9tIHRoZSBlbmNsb3NpbmcgaWZyYW1lLCB3ZWJraXQgc2hvdWxkIHRlc3Qgb3V0
IHRoYXQgdGhlIG9wZW5pbmcgaXMgbm90IGluaXRpYXRlZCBieSB1c2VyLiBUaGlzIGlzIGEgdGVz
dCBjYXNlIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQy
ODI3LgorPGRpdiBpZD0iY29uc29sZSI+RkFJTEVEPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63048</attachid>
            <date>2010-07-30 05:06:11 -0700</date>
            <delta_ts>2010-08-04 07:48:43 -0700</delta_ts>
            <desc>fix style warnings</desc>
            <filename>patch001.txt</filename>
            <type>text/plain</type>
            <size>13732</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDctMzAgIEpvaG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
dGhlIGFjdGl2ZShlbnRlcmVkKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0dXJlIHN0YXR1
cyBvZiB0aGUgcGFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyODI3LgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQt
ZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRvbVdpbmRvd0FsbG93UG9wVXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6c2V0TG9jYXRpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KToK
KyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFsbG93UG9wVXApOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorCiAyMDEw
LTA3LTMwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsOCArNjgxLDcgQEAgRnJhbWUqIHRv
RHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHRvRHluYW1pY0ZyYW1l
KGV4ZWMpOwotICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdV
c2VyR2VzdHVyZShjdXJyZW50V29ybGQoZXhlYykpOworICAgIHJldHVybiBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoY3VycmVudFdvcmxkKGV4ZWMpKTsKIH0KIAogS1VS
TCBjb21wbGV0ZVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYxLDcgKzc2MSw3IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2lu
ZG93KEV4ZWNTdGF0ZSogZXgKIHN0YXRpYyBib29sIGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUq
IGFjdGl2ZUZyYW1lLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGFjdGl2ZUZyYW1l
KTsKLSAgICBpZiAoYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUo
Y3VycmVudFdvcmxkKGV4ZWMpKSkKKyAgICBpZiAoU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBET01XaW5kb3c6OmFsbG93UG9wVXAoYWN0aXZlRnJhbWUpOwogfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA2NDI2OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RvY3VtZW50OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqIAogICAgIGlmIChhY3RpdmVGcmFtZSkKICAgICAgICAgc3RyID0gYWN0aXZlRnJhbWUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAKLSAgICBib29sIHVzZXJHZXN0
dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoY3VycmVu
dFdvcmxkKGV4ZWMpKTsKKyAgICBib29sIHVzZXJHZXN0dXJlID0gU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGN1cnJlbnRXb3JsZChleGVjKSk7CiAgICAgZnJhbWUtPnJl
ZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uoc3RyLCBhY3RpdmVGcmFt
ZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgIWFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+
YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDQsMTQgKzI0NCwyNiBAQCBpbnQgU2NyaXB0Q29udHJvbGxlcjo6
ZXZlbnRIYW5kbGVyTGluZU51CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU2NyaXB0Q29udHJv
bGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpIGNvbnN0
Citib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFwcGVy
V29ybGQqIHdvcmxkKQogewotICAgIGlmIChtX2FsbG93UG9wdXBzRnJvbVBsdWdpbiB8fCBpc0ph
dmFTY3JpcHRBbmNob3JOYXZpZ2F0aW9uKCkpCisgICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBleGVj
ID8gdG9EeW5hbWljRnJhbWUoZXhlYykgOiAwOworICAgIC8vIE5vIHNjcmlwdCBpcyBydW5uaW5n
LCBzbyBpdCBpcyB1c2VyLWluaXRpYXRlZCB1bmxlc3MgdGhlIGdlc3R1cmUgc3RhY2sKKyAgICAv
LyBleHBsaWNpdGx5IHNheXMgaXQgaXMgbm90LgorICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Z2V0VXNlckdlc3R1cmVTdGF0ZSgpICE9IERlZmlu
aXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmU7CisKKyAgICAvLyBGSVhNRTogV2UgY2hlY2sg
dGhlIHBsdWdpbiBwb3B1cCBmbGFnIGFuZCBqYXZhc2NyaXB0IGFuY2hvciBuYXZpZ2F0aW9uCisg
ICAgLy8gZnJvbSB0aGUgZHluYW1pYyBmcmFtZSBiZWN1YXNlIHRoZXkgc2hvdWxkIG9ubHkgYmUg
aW5pdGlhdGVkIG9uIHRoZQorICAgIC8vIGR5bmFtaWMgZnJhbWUgaW4gd2hpY2ggZXhlY3V0aW9u
IGJlZ2FuIGlmIHRoZXkgZG8gaGFwcGVuLgorICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENv
bnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CisgICAgQVNTRVJUKHNjcmlwdENvbnRyb2xsZXIp
OworICAgIGlmIChzY3JpcHRDb250cm9sbGVyLT5hbGxvd1BvcHVwc0Zyb21QbHVnaW4oKSB8fCBz
Y3JpcHRDb250cm9sbGVyLT5pc0phdmFTY3JpcHRBbmNob3JOYXZpZ2F0aW9uKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgYSBET00gZXZlbnQgaXMgYmVpbmcgcHJvY2Vzc2Vk
LCBjaGVjayB0aGF0IGl0IHdhcyBpbml0aWF0ZWQgYnkgdGhlIHVzZXIKICAgICAvLyBhbmQgdGhh
dCBpdCBpcyBpbiB0aGUgd2hpdGVsaXN0IG9mIGV2ZW50IHR5cGVzIGFsbG93ZWQgdG8gZ2VuZXJh
dGUgcG9wLXVwcy4KLSAgICBpZiAoSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dp
bmRvd1NoZWxsKHdvcmxkKSkKKyAgICBpZiAoSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBzY3Jp
cHRDb250cm9sbGVyLT5leGlzdGluZ1dpbmRvd1NoZWxsKHdvcmxkKSkKICAgICAgICAgaWYgKEV2
ZW50KiBldmVudCA9IHNoZWxsLT53aW5kb3coKS0+Y3VycmVudEV2ZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZXZlbnQtPmZyb21Vc2VyR2VzdHVyZSgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3
IEBAIHB1YmxpYzoKICAgICBpbnQgZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0OwogICAg
IAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBiKSB7IG1fcHJvY2Vz
c2luZ1RpbWVyQ2FsbGJhY2sgPSBiOyB9Ci0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUo
RE9NV3JhcHBlcldvcmxkKikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKERPTVdyYXBwZXJXb3JsZCopOwogICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcm9tQ3VycmVu
dE9yaWdpbihGcmFtZSopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNSArMTYwLDE4IEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TY3IKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFw
cGVyV29ybGQqKSBjb25zdAorYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoRE9NV3JhcHBlcldvcmxkKikKIHsKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKICAgICAvLyBObyBzY3JpcHQg
aXMgcnVubmluZywgc28gaXQgaXMgdXNlci1pbml0aWF0ZWQgdW5sZXNzIHRoZSBnZXN0dXJlIHN0
YWNrCiAgICAgLy8gZXhwbGljaXRseSBzYXlzIGl0IGlzIG5vdC4KLSAgICBpZiAoIW1fcHJveHkt
PmV4ZWN1dGluZ1NjcmlwdCgpKQorICAgIGlmICghYWN0aXZlRnJhbWUpCiAgICAgICAgIHJldHVy
biBVc2VyR2VzdHVyZUluZGljYXRvcjo6Z2V0VXNlckdlc3R1cmVTdGF0ZSgpICE9IERlZmluaXRl
bHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAKKyAgICBWOFByb3h5KiBhY3RpdmVQcm94eSA9
IGFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+cHJveHkoKTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBtX3By
b3h5LT5tYWluV29ybGRDb250ZXh0KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhD
b250ZXh0ID0gVjhQcm94eTo6bWFpbldvcmxkQ29udGV4dChhY3RpdmVGcmFtZSk7CiAgICAgLy8g
RklYTUU6IGZpbmQgYWxsIGNhc2VzIGNvbnRleHQgY2FuIGJlIGVtcHR5OgogICAgIC8vICAxKSBK
UyBpcyBkaXNhYmxlZDsKICAgICAvLyAgMikgcGFnZSBpcyBOVUxMOwpAQCAtMTg4LDcgKzE5MSwx
MSBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgICAgIC8v
IEV2ZW50Ojpmcm9tVXNlckdlc3R1cmUgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBVc2VyR2VzdHVy
ZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgcmV0dXJucyBmYWxzZS4KICAgICAg
ICAgcmV0dXJuIGV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKTsKICAgICB9Ci0gICAgaWYgKG1fc291
cmNlVVJMICYmIG1fc291cmNlVVJMLT5pc051bGwoKSAmJiAhbV9wcm94eS0+dGltZXJDYWxsYmFj
aygpKSB7CisgICAgLy8gRklYTUU6IFdlIGNoZWNrIHRoZSBqYXZhc2NyaXB0IGFuY2hvciBuYXZp
Z2F0aW9uIGZyb20gdGhlIGxhc3QgZW50ZXJlZAorICAgIC8vIGZyYW1lIGJlY3Vhc2UgaXQgc2hv
dWxkIG9ubHkgYmUgaW5pdGlhdGVkIG9uIHRoZSBsYXN0IGVudGVyZWQgZnJhbWUgaW4KKyAgICAv
LyB3aGljaCBleGVjdXRpb24gYmVnYW4gaWYgaXQgZG9lcyBoYXBwZW4uICAgIAorICAgIGNvbnN0
IFN0cmluZyogc291cmNlVVJMID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5zb3VyY2VVUkwoKTsK
KyAgICBpZiAoc291cmNlVVJMICYmIHNvdXJjZVVSTC0+aXNOdWxsKCkgJiYgIWFjdGl2ZVByb3h5
LT50aW1lckNhbGxiYWNrKCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgPGEgaHJlZj0iamF2
YXNjcmlwdDp3aW5kb3cub3BlbignLi4uJyk+IGNhc2UgLT4gd2UgbGV0IGl0IHRocm91Z2guCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTIwMSw3ICsyMDgsNyBAQCBib29sIFNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmFu
eVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGlz
IHRoaXMgcmlnaHQ/Ci0gICAgcmV0dXJuIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgIHJl
dHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3Js
ZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNr
KGJvb2wgcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFj
ayA9IHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3
ZSBkb24ndCB1c2UgdGhlIHBhcmFtZXRlciB3b3JsZCBhdCBhbGwuCiAgICAgLy8gU2VlIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzU0MTgyCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IDApIGNvbnN0OworICAgIHN0YXRpYyBi
b29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFwcGVyV29ybGQqIHdvcmxkID0gMCk7CiAg
ICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKIAogICAgIHZv
aWQgc2V0UGF1c2VkKGJvb2wgcGF1c2VkKSB7IG1fcGF1c2VkID0gcGF1c2VkOyB9CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTIgKzky
LDEwIEBAIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGUKICAgICBpZiAo
IW5ld1ZhbHVlLT5Jc051bGwoKSAmJiAhbmV3VmFsdWUtPklzVW5kZWZpbmVkKCkpCiAgICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3kob2JqZWN0LCBuZXdWYWx1ZSwgY2FjaGVJbmRleCk7CiB9
Ci0gICAgCiAKIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKIHsKLSAgICBGcmFtZSogZnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICByZXR1
cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAg
ICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAK
IEZyYW1lKiBjYWxsaW5nT3JFbnRlcmVkRnJhbWUoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNjQyNjgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKCkKICAg
ICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQo
KTsKIAogICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkpCisgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKICAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDcgKzExMzAsNyBAQCBib29sIEZyYW1lTG9h
ZGVyOjppc1Byb2Nlc3NpbmdVc2VyR2VzdHVyCiAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFtZS0+
dHJlZSgpLT50b3AoKTsKICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlw
dHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYg
SmF2YVNjcmlwdCBpcyBkaXNhYmxlZCwgYSB1c2VyIGdlc3R1cmUgbXVzdCBoYXZlIGluaXRpYXRl
ZCB0aGUgbmF2aWdhdGlvbi4KLSAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOyAvLyBGSVhNRTogVXNlIHBhZ2VJ
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZS4KKyAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6IFVz
ZSBwYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUuCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJl
c2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NjQzNDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMC0wNy0zMCAgSm9obm55IERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSB0aGUgYWN0
aXZlKGVudGVyZWQpIGZyYW1lIHRvIGNoZWNrIHRoZSB1c2VyIGdlc3R1cmUgc3RhdHVzIG9mIHRo
ZSBwYWdlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDI4MjcKKworICAgICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUt
c2NyaXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMzAgIE5p
a29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAt
YmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVw
LWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACisKK1doZW4gY2FsbGluZyBzY3JpcHQgdG8gb3BlbiBhIHdpbmRvdyB3aXRo
b3V0IHVzZXIgZ2VzdHVyZSBmcm9tIHRoZSBlbmNsb3NpbmcgaWZyYW1lLCB3ZWJraXQgc2hvdWxk
IHRlc3Qgb3V0IHRoYXQgdGhlIG9wZW5pbmcgaXMgbm90IGluaXRpYXRlZCBieSB1c2VyLiBUaGlz
IGlzIGEgdGVzdCBjYXNlIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyODI3LgorUEFTU0VECkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1
cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20t
aWZyYW1lLXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
Q2FuT3BlbldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZCh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDbG9zZVJlbWFp
bmluZ1dpbmRvd3NXaGVuQ29tcGxldGUodHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIC8vIFJlY29yZCBjdXJyZW50IHdpbmRvdyBjb3VudC4KKyAg
ICB3aW5kb3cud2luZG93Q291bnQgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2luZG93
Q291bnQoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53aW5kb3dDb3VudCgp
ID09IHdpbmRvdy53aW5kb3dDb3VudCkKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbnNvbGUiKS5pbm5lclRleHQgPSAiUEFTU0VEIjsKKyAgICAvLyBDbG9zZSB0aGUgdGVzdC4K
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyI+Cis8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0
bWwsSSBkaWQgb3BlbiB0aGUgd2luZG93PHNjcmlwdD53aW5kb3cub3BlbignYWJvdXQ6Ymxhbmsn
LCdfYmxhbmsnLCAnaGVpZ2h0PTYwMCx3aWR0aD03MjAnKTs8L3NjcmlwdD4iPjwvaWZyYW1lPjxi
cj4KK1doZW4gY2FsbGluZyBzY3JpcHQgdG8gb3BlbiBhIHdpbmRvdyB3aXRob3V0IHVzZXIgZ2Vz
dHVyZSBmcm9tIHRoZSBlbmNsb3NpbmcgaWZyYW1lLCB3ZWJraXQgc2hvdWxkIHRlc3Qgb3V0IHRo
YXQgdGhlIG9wZW5pbmcgaXMgbm90IGluaXRpYXRlZCBieSB1c2VyLiBUaGlzIGlzIGEgdGVzdCBj
YXNlIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyODI3
LgorPGRpdiBpZD0iY29uc29sZSI+RkFJTEVEPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="51337"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63451</attachid>
            <date>2010-08-04 07:48:43 -0700</date>
            <delta_ts>2010-08-08 03:16:53 -0700</delta_ts>
            <desc>patch V3</desc>
            <filename>patch001.txt</filename>
            <type>text/plain</type>
            <size>21509</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDY0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDgtMDQgIEpvaG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFu
Z2UgdGhlIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSB0byBzdGF0aWMg
bWV0aG9kCisgICAgICAgIGFuZCB1c2UgZHluYW1pYyhKU0MgYmluZGluZykvZW50ZXJlZChWOCBi
aW5kaW5nKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0dXJlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OmRvbVdpbmRvd0FsbG93UG9wVXApOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RvY3VtZW50OjpzZXRMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXZpZ2F0ZUlmQWxsb3dl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhE
eW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZmVySGlk
ZGVuRGVwZW5kZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphbGxvd1BvcFVwKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKToKKwogMjAxMC0wOC0wMyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVHVybiBvbiBQTEFURk9STV9TVFJBVEVHSUVTIG9uIFdpbmRvd3MKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUub3JkZXIJ
KHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkp
CkBAIC03MzQwLDggKzczNDAsOCBAQCBfX1pON1dlYkNvcmUyN0pTSFRNTE1lZGlhRWxlbWVudFBy
b3RvdHlwCiBfX1pOSzdXZWJDb3JlMThKU0hUTUxBdWRpb0VsZW1lbnQ5Y2xhc3NJbmZvRXYKIF9f
Wk43V2ViQ29yZTIxanNIVE1MTWVkaWFFbGVtZW50U3JjRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdK
U1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTM5anNIVE1MTWVkaWFFbGVt
ZW50UHJvdG90eXBlRnVuY3Rpb25Mb2FkRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RF
TlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMjFwcm9jZXNzaW5nVXNl
ckdlc3R1cmVFUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk5LN1dlYkNvcmUxNlNjcmlwdENvbnRyb2xs
ZXIyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUVQTlNfMTVET01XcmFwcGVyV29ybGRFCitfX1pON1dl
YkNvcmUyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CitfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRy
b2xsZXIyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUV2AAogX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFF
bGVtZW50NGxvYWRFYlJpCiBfX1pON1dlYkNvcmUxMU1lZGlhUGxheWVyRDBFdgogX19aTjdXZWJD
b3JlMThNZWRpYVBsYXllclByaXZhdGVEMEV2CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDEwICs2NzksOSBAQCBGcmFtZSogdG9E
eW5hbWljRnJhbWUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKIH0KIAotYm9vbCBw
cm9jZXNzaW5nVXNlckdlc3R1cmUoRXhlY1N0YXRlKiBleGVjKQorYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKQogewotICAgIEZyYW1lKiBmcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwot
ICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZShjdXJyZW50V29ybGQoZXhlYykpOworICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogS1VSTCBjb21wbGV0ZVVSTChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIEZyYW1lKiB0b0xleGljYWxGcmFtZShKU0M6OkV4ZWNTdGF0ZSopOwogICAg
IEZyYW1lKiB0b0R5bmFtaWNGcmFtZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKTsKICAgICBLVVJMIGNvbXBsZXRlVVJMKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVVSTCk7CiAgICAgCiAgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc1N0
cmluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxNyw3ICs1MTcsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3Rh
dGUqCiAKICAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkgfHwgYWxsb3dzQWNjZXNz
RnJvbShleGVjKSkgewogICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0
aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCi0gICAgICAgIGZyYW1lLT5yZWRp
cmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHVybCwgbGV4aWNhbEZyYW1l
LT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhbGV4aWNhbEZyYW1lLT5zY3JpcHQoKS0+
YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlLCBwcm9jZXNzaW5nVXNlckdl
c3R1cmUoZXhlYykpOworICAgICAgICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZSh1cmwsIGxleGljYWxGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSwgIWxleGljYWxGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpLCBmYWxzZSwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIH0KIH0KIApA
QCAtNzQ3LDcgKzc0Nyw3IEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0ZSog
ZXgKIAogICAgIGlmICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSB8fCBuZXdXaW5kb3ctPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpIHsKICAgICAgICAgS1VSTCBjb21wbGV0ZWRVUkwgPSB1cmwu
aXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxTdHJpbmcsICIiKSA6IGNvbXBsZXRlVVJMKGV4ZWMs
IHVybCk7Ci0gICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUo
ZXhlYyk7CisgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUo
KTsKIAogICAgICAgICBpZiAoY3JlYXRlZCkKICAgICAgICAgICAgIG5ld0ZyYW1lLT5sb2FkZXIo
KS0+Y2hhbmdlTG9jYXRpb24oY29tcGxldGVkVVJMLCByZWZlcnJlciwgZmFsc2UsIGZhbHNlLCB1
c2VyR2VzdHVyZSk7CkBAIC03NTgsMTAgKzc1OCwxMCBAQCBzdGF0aWMgRnJhbWUqIGNyZWF0ZVdp
bmRvdyhFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIG5ld0ZyYW1lOwogfQogCi1zdGF0aWMgYm9v
bCBkb21XaW5kb3dBbGxvd1BvcFVwKEZyYW1lKiBhY3RpdmVGcmFtZSwgRXhlY1N0YXRlKiBleGVj
KQorc3RhdGljIGJvb2wgZG9tV2luZG93QWxsb3dQb3BVcChGcmFtZSogYWN0aXZlRnJhbWUpCiB7
CiAgICAgQVNTRVJUKGFjdGl2ZUZyYW1lKTsKLSAgICBpZiAoYWN0aXZlRnJhbWUtPnNjcmlwdCgp
LT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoY3VycmVudFdvcmxkKGV4ZWMpKSkKKyAgICBpZiAoU2Ny
aXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBET01XaW5kb3c6OmFsbG93UG9wVXAoYWN0aXZlRnJhbWUpOwogfQpA
QCAtNzg2LDcgKzc4Niw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBl
eGUKIAogICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBl
bXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrIGZvciBlbXB0eSBmcmFtZW5hbWVzLgogICAgIC8v
IE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdpbmRvdy5vcGVuKCkgY2FsbHMgd2l0aCBubyBuYW1l
IHdpbGwgcGFzcyByaWdodCB0aHJvdWdoIHRoZSBwb3B1cCBibG9ja2VyLgotICAgIGlmICghZG9t
V2luZG93QWxsb3dQb3BVcChkeW5hbWljRnJhbWUsIGV4ZWMpICYmIChmcmFtZU5hbWUuaXNFbXB0
eSgpIHx8ICFmcmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKQorICAgIGlmICghZG9tV2lu
ZG93QWxsb3dQb3BVcChkeW5hbWljRnJhbWUpICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFm
cmFtZS0+dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNl
cyBvZiBfdG9wIGFuZCBfcGFyZW50LiAgSW4gdGhvc2UKQEAgLTgxMCw3ICs4MTAsNyBAQCBKU1Zh
bHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNTdGF0ZSogZXhlCiAKICAgICAgICAgY29uc3QgSlNE
T01XaW5kb3cqIHRhcmdldGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgY3VycmVudFdv
cmxkKGV4ZWMpKTsKICAgICAgICAgaWYgKCFjb21wbGV0ZWRVUkwuaXNFbXB0eSgpICYmICghcHJv
dG9jb2xJc0phdmFTY3JpcHQoY29tcGxldGVkVVJMKSB8fCAodGFyZ2V0ZWRXaW5kb3cgJiYgdGFy
Z2V0ZWRXaW5kb3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpKSkgewotICAgICAgICAgICAgYm9v
bCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShleGVjKTsKKyAgICAgICAgICAg
IGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIAogICAgICAgICAg
ICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBkeW5hbWljR2xvYmFs
T2JqZWN0IHRvCiAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIG91dGdvaW5nUmVmZXJyZXIu
ICBXZSByZXBsaWNhdGUgdGhhdCBiZWhhdmlvcgpAQCAtODU2LDcgKzg1Niw3IEBAIEpTVmFsdWUg
SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGUKICAgICBpZiAoIWR5bmFtaWNGcmFtZSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpZiAoIURPTVdpbmRvdzo6Y2Fu
U2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhZG9tV2luZG93QWxsb3dQb3BVcChkeW5hbWlj
RnJhbWUsIGV4ZWMpKQorICAgIGlmICghRE9NV2luZG93OjpjYW5TaG93TW9kYWxEaWFsb2dOb3co
ZnJhbWUpIHx8ICFkb21XaW5kb3dBbGxvd1BvcFVwKGR5bmFtaWNGcmFtZSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVy
ZXM7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIEpTRG9jdW1lbnQ6OnNldExvY2F0
aW9uKEV4ZWNTdGF0ZSogCiAgICAgaWYgKGFjdGl2ZUZyYW1lKQogICAgICAgICBzdHIgPSBhY3Rp
dmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyKS5zdHJpbmcoKTsKIAotICAgIGJv
b2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZShjdXJyZW50V29ybGQoZXhlYykpOworICAgIGJvb2wgdXNlckdlc3R1cmUgPSBTY3JpcHRD
b250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICBmcmFtZS0+cmVkaXJlY3RT
Y2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShzdHIsIGFjdGl2ZUZyYW1lLT5sb2Fk
ZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdl
SXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA2NDI2
OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBuYXZpZ2F0ZUlmQWxsb3dlZChF
eGVjU3RhdGUqCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcHJvdG9jb2xJc0phdmFTY3Jp
cHQodXJsKSB8fCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhlYywgZnJhbWUpKQotICAgICAgICBm
cmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3Ry
aW5nKCksIGxleGljYWxGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHByb2Nlc3NpbmdVc2VyR2VzdHVyZShleGVjKSk7
CisgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKHVybC5zdHJpbmcoKSwgbGV4aWNhbEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgcHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldEhyZWYoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQpAQCAtMzI1LDcgKzMyNSw3IEBAIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVs
b2FkKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBp
ZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KGZyYW1lLT5sb2FkZXIoKS0+dXJsKCkpKQotICAgICAg
ICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHByb2Nlc3NpbmdV
c2VyR2VzdHVyZShleGVjKSk7CisgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5z
Y2hlZHVsZVJlZnJlc2gocHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDE0ICsyNDQsMjYgQEAgaW50IFNjcmlw
dENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckxpbmVOdQogICAgIHJldHVybiAwOwogfQogCi1ib29s
IFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZShET01XcmFwcGVyV29ybGQq
IHdvcmxkKSBjb25zdAorYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKQogewotICAgIGlmIChtX2FsbG93UG9wdXBzRnJvbVBsdWdpbiB8fCBpc0phdmFTY3JpcHRB
bmNob3JOYXZpZ2F0aW9uKCkpCisgICAgRXhlY1N0YXRlKiBleGVjID0gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpjdXJyZW50U3RhdGUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBleGVjID8gdG9EeW5h
bWljRnJhbWUoZXhlYykgOiAwOworICAgIC8vIE5vIHNjcmlwdCBpcyBydW5uaW5nLCBzbyBpdCBp
cyB1c2VyLWluaXRpYXRlZCB1bmxlc3MgdGhlIGdlc3R1cmUgc3RhY2sKKyAgICAvLyBleHBsaWNp
dGx5IHNheXMgaXQgaXMgbm90LgorICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBVc2Vy
R2VzdHVyZUluZGljYXRvcjo6Z2V0VXNlckdlc3R1cmVTdGF0ZSgpICE9IERlZmluaXRlbHlOb3RQ
cm9jZXNzaW5nVXNlckdlc3R1cmU7CisKKyAgICAvLyBGSVhNRTogV2UgY2hlY2sgdGhlIHBsdWdp
biBwb3B1cCBmbGFnIGFuZCBqYXZhc2NyaXB0IGFuY2hvciBuYXZpZ2F0aW9uCisgICAgLy8gZnJv
bSB0aGUgZHluYW1pYyBmcmFtZSBiZWN1YXNlIHRoZXkgc2hvdWxkIG9ubHkgYmUgaW5pdGlhdGVk
IG9uIHRoZQorICAgIC8vIGR5bmFtaWMgZnJhbWUgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuIGlm
IHRoZXkgZG8gaGFwcGVuLgorICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIg
PSBmcmFtZS0+c2NyaXB0KCk7CisgICAgQVNTRVJUKHNjcmlwdENvbnRyb2xsZXIpOworICAgIGlm
IChzY3JpcHRDb250cm9sbGVyLT5hbGxvd1BvcHVwc0Zyb21QbHVnaW4oKSB8fCBzY3JpcHRDb250
cm9sbGVyLT5pc0phdmFTY3JpcHRBbmNob3JOYXZpZ2F0aW9uKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgLy8gSWYgYSBET00gZXZlbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLCBjaGVjayB0
aGF0IGl0IHdhcyBpbml0aWF0ZWQgYnkgdGhlIHVzZXIKICAgICAvLyBhbmQgdGhhdCBpdCBpcyBp
biB0aGUgd2hpdGVsaXN0IG9mIGV2ZW50IHR5cGVzIGFsbG93ZWQgdG8gZ2VuZXJhdGUgcG9wLXVw
cy4KLSAgICBpZiAoSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dpbmRvd1NoZWxs
KHdvcmxkKSkKKyAgICBpZiAoSlNET01XaW5kb3dTaGVsbCogc2hlbGwgPSBzY3JpcHRDb250cm9s
bGVyLT5leGlzdGluZ1dpbmRvd1NoZWxsKGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgIGlm
IChFdmVudCogZXZlbnQgPSBzaGVsbC0+d2luZG93KCktPmN1cnJlbnRFdmVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKTsKIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsx
MTAsNyBAQCBwdWJsaWM6CiAgICAgaW50IGV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKSBjb25zdDsK
ICAgICAKICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgYikgeyBtX3By
b2Nlc3NpbmdUaW1lckNhbGxiYWNrID0gYjsgfQotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKERPTVdyYXBwZXJXb3JsZCopIGNvbnN0OworICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpOwogICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkg
Y29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcm9tQ3VycmVudE9yaWdpbihGcmFt
ZSopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE5NTEsNyArMTk1MSw3IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVyZUNoZWNrIn0pIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJh
bUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICJwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoZXhlYykiOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICJwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAkcGFyYW1JbmRleCsrOwogICAgICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDcgKzEwMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW50IGludEFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CiAKLSAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZShkeW5h
bWljRnJhbWUsIGludEFyZywgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpKTsKKyAgICBpbXAt
PndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZShkeW5hbWljRnJhbWUsIGludEFyZywgcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTEwNDksNyArMTA0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKIAogICAgIGludCBvcHRpb25hbEFyZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7CiAKLSAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRVc2Vy
R2VzdHVyZUFTQUQoZHluYW1pY0ZyYW1lLCBpbnRBcmcsIG9wdGlvbmFsQXJnLCBwcm9jZXNzaW5n
VXNlckdlc3R1cmUoZXhlYykpOworICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0
dXJlQVNBRChkeW5hbWljRnJhbWUsIGludEFyZywgb3B0aW9uYWxBcmcsIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYwLDE1ICsxNjAsMTggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVy
Ojp1cGRhdGVQbGF0Zm9ybVNjcgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgU2Ny
aXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKERPTVdyYXBwZXJXb3JsZCopIGNv
bnN0Citib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7Cisg
ICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRD
b250ZXh0KCk7CiAgICAgLy8gTm8gc2NyaXB0IGlzIHJ1bm5pbmcsIHNvIGl0IGlzIHVzZXItaW5p
dGlhdGVkIHVubGVzcyB0aGUgZ2VzdHVyZSBzdGFjawogICAgIC8vIGV4cGxpY2l0bHkgc2F5cyBp
dCBpcyBub3QuCi0gICAgaWYgKCFtX3Byb3h5LT5leGVjdXRpbmdTY3JpcHQoKSkKKyAgICBpZiAo
IWFjdGl2ZUZyYW1lKQogICAgICAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmdldFVz
ZXJHZXN0dXJlU3RhdGUoKSAhPSBEZWZpbml0ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwog
CisgICAgVjhQcm94eSogYWN0aXZlUHJveHkgPSBhY3RpdmVGcmFtZS0+c2NyaXB0KCktPnByb3h5
KCk7CisKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gbV9wcm94eS0+bWFpbldvcmxkQ29udGV4dCgpOworICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJveHk6Om1haW5Xb3JsZENv
bnRleHQoYWN0aXZlRnJhbWUpOwogICAgIC8vIEZJWE1FOiBmaW5kIGFsbCBjYXNlcyBjb250ZXh0
IGNhbiBiZSBlbXB0eToKICAgICAvLyAgMSkgSlMgaXMgZGlzYWJsZWQ7CiAgICAgLy8gIDIpIHBh
Z2UgaXMgTlVMTDsKQEAgLTE4OCw3ICsxOTEsMTEgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlcwogICAgICAgICAvLyBFdmVudDo6ZnJvbVVzZXJHZXN0dXJlIHdpbGwg
cmV0dXJuIGZhbHNlIHdoZW4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpIHJldHVybnMgZmFsc2UuCiAgICAgICAgIHJldHVybiBldmVudC0+ZnJvbVVzZXJHZXN0
dXJlKCk7CiAgICAgfQotICAgIGlmIChtX3NvdXJjZVVSTCAmJiBtX3NvdXJjZVVSTC0+aXNOdWxs
KCkgJiYgIW1fcHJveHktPnRpbWVyQ2FsbGJhY2soKSkgeworICAgIC8vIEZJWE1FOiBXZSBjaGVj
ayB0aGUgamF2YXNjcmlwdCBhbmNob3IgbmF2aWdhdGlvbiBmcm9tIHRoZSBsYXN0IGVudGVyZWQK
KyAgICAvLyBmcmFtZSBiZWN1YXNlIGl0IHNob3VsZCBvbmx5IGJlIGluaXRpYXRlZCBvbiB0aGUg
bGFzdCBlbnRlcmVkIGZyYW1lIGluCisgICAgLy8gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuIGlmIGl0
IGRvZXMgaGFwcGVuLiAgICAKKyAgICBjb25zdCBTdHJpbmcqIHNvdXJjZVVSTCA9IGFjdGl2ZUZy
YW1lLT5zY3JpcHQoKS0+c291cmNlVVJMKCk7CisgICAgaWYgKHNvdXJjZVVSTCAmJiBzb3VyY2VV
UkwtPmlzTnVsbCgpICYmICFhY3RpdmVQcm94eS0+dGltZXJDYWxsYmFjaygpKSB7CiAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIDxhIGhyZWY9ImphdmFzY3JpcHQ6d2luZG93Lm9wZW4oJy4uLicpPiBj
YXNlIC0+IHdlIGxldCBpdCB0aHJvdWdoLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0yMDEsNyArMjA4LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
cwogYm9vbCBTY3JpcHRDb250cm9sbGVyOjphbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PwotICAgIHJldHVybiBwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJj
ZUNvZGU+JiBzb3VyY2VzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhib29sIHByb2Nlc3NpbmdUaW1lckNhbGxiYWNr
KSB7IG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2sgPSBwcm9jZXNzaW5nVGltZXJDYWxsYmFjazsg
fQogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHRoZSBwYXJhbWV0ZXIgd29y
bGQgYXQgYWxsLgogICAgIC8vIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81
NDE4MgotICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKERPTVdyYXBwZXJXb3JsZCogd29y
bGQgPSAwKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
ICAgICBib29sIGFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQpIHsgbV9wYXVzZWQgPSBwYXVzZWQ7IH0KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMiAr
OTIsMTAgQEAgdm9pZCB0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3kodjg6OkhhbmRsZQogICAgIGlm
ICghbmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1ZS0+SXNVbmRlZmluZWQoKSkKICAgICAg
ICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsK
IH0KLSAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIEZyYW1lKiBm
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIHJl
dHVybiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwor
ICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0K
IAogRnJhbWUqIGNhbGxpbmdPckVudGVyZWRGcmFtZSgpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2NDI2OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHN0YXRpYyBib29sIGFsbG93UG9wVXAoKQog
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4
dCgpOwogCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBpZiAoZnJhbWUtPnNjcmlwdCgpLT5wcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICBpZiAoU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwogICAgIHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5n
cy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzAsNyArMTEzMCw3IEBAIGJvb2wgRnJhbWVM
b2FkZXI6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXIKICAgICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1l
LT50cmVlKCktPnRvcCgpOwogICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2Ny
aXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJ
ZiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkLCBhIHVzZXIgZ2VzdHVyZSBtdXN0IGhhdmUgaW5pdGlh
dGVkIHRoZSBuYXZpZ2F0aW9uLgotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3Np
bmdVc2VyR2VzdHVyZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7IC8vIEZJWE1FOiBVc2UgcGFn
ZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLgorICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsgLy8gRklYTUU6IFVzZSBwYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUuCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlc2V0TXVsdGlwbGVGb3JtU3VibWlz
c2lvblByb3RlY3Rpb24oKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQ2NDUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0wNCAg
Sm9obm55IERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSB0aGUgU2NyaXB0Q29udHJvbGxlcjo6cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlIHRvIHN0YXRpYyBtZXRob2QKKyAgICAgICAgYW5kIHVzZSBkeW5h
bWljKEpTQyBiaW5kaW5nKS9lbnRlcmVkKFY4IGJpbmRpbmcpIGZyYW1lIHRvIGNoZWNrIHRoZSB1
c2VyIGdlc3R1cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MjgyNworCisgICAgICAgICogZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlm
cmFtZS1zY3JpcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9w
b3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1sOiBBZGRlZC4KKwogMjAxMC0wOC0w
NCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuIENocm9taXVtIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZS4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9j
a2VkLWZyb20taWZyYW1lLXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorCitXaGVuIGNhbGxpbmcgc2Ny
aXB0IHRvIG9wZW4gYSB3aW5kb3cgd2l0aG91dCB1c2VyIGdlc3R1cmUgZnJvbSB0aGUgZW5jbG9z
aW5nIGlmcmFtZSwgd2Via2l0IHNob3VsZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5v
dCBpbml0aWF0ZWQgYnkgdXNlci4gVGhpcyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgyNy4KK1BBU1NFRApJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZy
b20taWZyYW1lLXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodHJ1ZSk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKHRydWUpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAvLyBSZWNvcmQg
Y3VycmVudCB3aW5kb3cgY291bnQuCisgICAgd2luZG93LndpbmRvd0NvdW50ID0gd2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyLndpbmRvd0NvdW50KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIud2luZG93Q291bnQoKSA9PSB3aW5kb3cud2luZG93Q291bnQpCisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIlBBU1NFRCI7
CisgICAgLy8gQ2xvc2UgdGhlIHRlc3QuCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKTsiPgor
PGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLEkgZGlkIG9wZW4gdGhlIHdpbmRvdzxzY3JpcHQ+
d2luZG93Lm9wZW4oJ2Fib3V0OmJsYW5rJywnX2JsYW5rJywgJ2hlaWdodD02MDAsd2lkdGg9NzIw
Jyk7PC9zY3JpcHQ+Ij48L2lmcmFtZT48YnI+CitXaGVuIGNhbGxpbmcgc2NyaXB0IHRvIG9wZW4g
YSB3aW5kb3cgd2l0aG91dCB1c2VyIGdlc3R1cmUgZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwg
d2Via2l0IHNob3VsZCB0ZXN0IG91dCB0aGF0IHRoZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQg
YnkgdXNlci4gVGhpcyBpcyBhIHRlc3QgY2FzZSBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MjgyNy4KKzxkaXYgaWQ9ImNvbnNvbGUiPkZBSUxFRDwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63525</attachid>
            <date>2010-08-04 18:18:42 -0700</date>
            <delta_ts>2010-08-05 20:21:05 -0700</delta_ts>
            <desc>patch v3 to remove strange character in previous patch</desc>
            <filename>patch_v3.txt</filename>
            <type>text/plain</type>
            <size>21507</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDY0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDgtMDQgIEpvaG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFu
Z2UgdGhlIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSB0byBzdGF0aWMg
bWV0aG9kCisgICAgICAgIGFuZCB1c2UgZHluYW1pYyhKU0MgYmluZGluZykvZW50ZXJlZChWOCBi
aW5kaW5nKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0dXJlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OmRvbVdpbmRvd0FsbG93UG9wVXApOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RvY3VtZW50OjpzZXRMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXZpZ2F0ZUlmQWxsb3dl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhE
eW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZmVySGlk
ZGVuRGVwZW5kZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphbGxvd1BvcFVwKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKToKKwogMjAxMC0wOC0wMyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVHVybiBvbiBQTEFURk9STV9TVFJBVEVHSUVTIG9uIFdpbmRvd3MKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUub3JkZXIJ
KHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkp
CkBAIC03MzQwLDggKzczNDAsOCBAQCBfX1pON1dlYkNvcmUyN0pTSFRNTE1lZGlhRWxlbWVudFBy
b3RvdHlwCiBfX1pOSzdXZWJDb3JlMThKU0hUTUxBdWRpb0VsZW1lbnQ5Y2xhc3NJbmZvRXYKIF9f
Wk43V2ViQ29yZTIxanNIVE1MTWVkaWFFbGVtZW50U3JjRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdK
U1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTM5anNIVE1MTWVkaWFFbGVt
ZW50UHJvdG90eXBlRnVuY3Rpb25Mb2FkRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RF
TlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMjFwcm9jZXNzaW5nVXNl
ckdlc3R1cmVFUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk5LN1dlYkNvcmUxNlNjcmlwdENvbnRyb2xs
ZXIyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUVQTlNfMTVET01XcmFwcGVyV29ybGRFCitfX1pON1dl
YkNvcmUyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CitfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRy
b2xsZXIyMXByb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CiBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVs
ZW1lbnQ0bG9hZEViUmkKIF9fWk43V2ViQ29yZTExTWVkaWFQbGF5ZXJEMEV2CiBfX1pON1dlYkNv
cmUxOE1lZGlhUGxheWVyUHJpdmF0ZUQwRXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzksMTAgKzY3OSw5IEBAIEZyYW1lKiB0b0R5
bmFtaWNGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogfQogCi1ib29sIHBy
b2Nlc3NpbmdVc2VyR2VzdHVyZShFeGVjU3RhdGUqIGV4ZWMpCitib29sIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7Ci0g
ICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpOwogfQogCiBLVVJMIGNvbXBsZXRlVVJMKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgRnJhbWUqIHRvTGV4aWNhbEZyYW1lKEpTQzo6RXhlY1N0YXRlKik7CiAgICAg
RnJhbWUqIHRvRHluYW1pY0ZyYW1lKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgYm9vbCBwcm9jZXNz
aW5nVXNlckdlc3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBib29sIHByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpOwogICAgIEtVUkwgY29tcGxldGVVUkwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHJlbGF0aXZlVVJMKTsKICAgICAKICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNjQyNjgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0
ZSoKIAogICAgIGlmICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSB8fCBhbGxvd3NBY2Nlc3NG
cm9tKGV4ZWMpKSB7CiAgICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRo
aXMgSlMgd2FzIGNhbGxlZCB2aWEgYSB1c2VyIGdlc3R1cmUKLSAgICAgICAgZnJhbWUtPnJlZGly
ZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLCBsZXhpY2FsRnJhbWUt
PmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksICFsZXhpY2FsRnJhbWUtPnNjcmlwdCgpLT5h
bnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UsIHByb2Nlc3NpbmdVc2VyR2Vz
dHVyZShleGVjKSk7CisgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVs
ZUxvY2F0aW9uQ2hhbmdlKHVybCwgbGV4aWNhbEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpLCAhbGV4aWNhbEZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCksIGZhbHNlLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7CiAgICAgfQogfQogCkBA
IC03NDcsNyArNzQ3LDcgQEAgc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRXhlY1N0YXRlKiBl
eAogCiAgICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IG5ld1dpbmRvdy0+YWxs
b3dzQWNjZXNzRnJvbShleGVjKSkgewogICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTCA9IHVybC5p
c0VtcHR5KCkgPyBLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoZXhlYywg
dXJsKTsKLSAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShl
eGVjKTsKKyAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OwogCiAgICAgICAgIGlmIChjcmVhdGVkKQogICAgICAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigp
LT5jaGFuZ2VMb2NhdGlvbihjb21wbGV0ZWRVUkwsIHJlZmVycmVyLCBmYWxzZSwgZmFsc2UsIHVz
ZXJHZXN0dXJlKTsKQEAgLTc1OCwxMCArNzU4LDEwIEBAIHN0YXRpYyBGcmFtZSogY3JlYXRlV2lu
ZG93KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gbmV3RnJhbWU7CiB9CiAKLXN0YXRpYyBib29s
IGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUqIGFjdGl2ZUZyYW1lLCBFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgYm9vbCBkb21XaW5kb3dBbGxvd1BvcFVwKEZyYW1lKiBhY3RpdmVGcmFtZSkKIHsK
ICAgICBBU1NFUlQoYWN0aXZlRnJhbWUpOwotICAgIGlmIChhY3RpdmVGcmFtZS0+c2NyaXB0KCkt
PnByb2Nlc3NpbmdVc2VyR2VzdHVyZShjdXJyZW50V29ybGQoZXhlYykpKQorICAgIGlmIChTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIERPTVdpbmRvdzo6YWxsb3dQb3BVcChhY3RpdmVGcmFtZSk7CiB9CkBA
IC03ODYsNyArNzg2LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4
ZQogCiAgICAgLy8gQmVjYXVzZSBGcmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVt
cHR5IHN0cmluZ3MsIHdlIG11c3QgY2hlY2sgZm9yIGVtcHR5IGZyYW1lbmFtZXMuCiAgICAgLy8g
T3RoZXJ3aXNlLCBpbGxlZ2l0aW1hdGUgd2luZG93Lm9wZW4oKSBjYWxscyB3aXRoIG5vIG5hbWUg
d2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFkb21X
aW5kb3dBbGxvd1BvcFVwKGR5bmFtaWNGcmFtZSwgZXhlYykgJiYgKGZyYW1lTmFtZS5pc0VtcHR5
KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1lKSkpCisgICAgaWYgKCFkb21XaW5k
b3dBbGxvd1BvcFVwKGR5bmFtaWNGcmFtZSkgJiYgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZy
YW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1lKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgLy8gR2V0IHRoZSB0YXJnZXQgZnJhbWUgZm9yIHRoZSBzcGVjaWFsIGNhc2Vz
IG9mIF90b3AgYW5kIF9wYXJlbnQuICBJbiB0aG9zZQpAQCAtODEwLDcgKzgxMCw3IEBAIEpTVmFs
dWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGUKIAogICAgICAgICBjb25zdCBKU0RP
TVdpbmRvdyogdGFyZ2V0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lLCBjdXJyZW50V29y
bGQoZXhlYykpOwogICAgICAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc0VtcHR5KCkgJiYgKCFwcm90
b2NvbElzSmF2YVNjcmlwdChjb21wbGV0ZWRVUkwpIHx8ICh0YXJnZXRlZFdpbmRvdyAmJiB0YXJn
ZXRlZFdpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkpKSB7Ci0gICAgICAgICAgICBib29s
IHVzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpOworICAgICAgICAgICAg
Ym9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogCiAgICAgICAgICAg
ICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMgdGhlIGR5bmFtaWNHbG9iYWxP
YmplY3QgdG8KICAgICAgICAgICAgIC8vIGRldGVybWluZSB0aGUgb3V0Z29pbmdSZWZlcnJlci4g
IFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yCkBAIC04NTYsNyArODU2LDcgQEAgSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgIGlmICghZHluYW1pY0ZyYW1lKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlmICghRE9NV2luZG93OjpjYW5T
aG93TW9kYWxEaWFsb2dOb3coZnJhbWUpIHx8ICFkb21XaW5kb3dBbGxvd1BvcFVwKGR5bmFtaWNG
cmFtZSwgZXhlYykpCisgICAgaWYgKCFET01XaW5kb3c6OmNhblNob3dNb2RhbERpYWxvZ05vdyhm
cmFtZSkgfHwgIWRvbVdpbmRvd0FsbG93UG9wVXAoZHluYW1pY0ZyYW1lKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJl
czsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgSlNEb2N1bWVudDo6c2V0TG9jYXRp
b24oRXhlY1N0YXRlKiAKICAgICBpZiAoYWN0aXZlRnJhbWUpCiAgICAgICAgIHN0ciA9IGFjdGl2
ZUZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHIpLnN0cmluZygpOwogCi0gICAgYm9v
bCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKGN1cnJlbnRXb3JsZChleGVjKSk7CisgICAgYm9vbCB1c2VyR2VzdHVyZSA9IFNjcmlwdENv
bnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgIGZyYW1lLT5yZWRpcmVjdFNj
aGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHN0ciwgYWN0aXZlRnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCksICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJ
c1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSwgdXNlckdlc3R1cmUpOwogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDY0MjY4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHN0YXRpYyB2b2lkIG5hdmlnYXRlSWZBbGxvd2VkKEV4
ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlw
dCh1cmwpIHx8IGFsbG93c0FjY2Vzc0Zyb21GcmFtZShleGVjLCBmcmFtZSkpCi0gICAgICAgIGZy
YW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHVybC5zdHJp
bmcoKSwgbGV4aWNhbEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLCBsb2NrSGlz
dG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpKTsK
KyAgICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFu
Z2UodXJsLnN0cmluZygpLCBsZXhpY2FsRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVy
KCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSk7CiB9CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SHJlZihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCkBAIC0zMjUsNyArMzI1LDcgQEAgSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZWxv
YWQoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlm
ICghcHJvdG9jb2xJc0phdmFTY3JpcHQoZnJhbWUtPmxvYWRlcigpLT51cmwoKSkpCi0gICAgICAg
IGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2gocHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKGV4ZWMpKTsKKyAgICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNj
aGVkdWxlUmVmcmVzaChwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7CiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTQgKzI0NCwyNiBAQCBpbnQgU2NyaXB0
Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGluZU51CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKERPTVdyYXBwZXJXb3JsZCog
d29ybGQpIGNvbnN0Citib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpCiB7Ci0gICAgaWYgKG1fYWxsb3dQb3B1cHNGcm9tUGx1Z2luIHx8IGlzSmF2YVNjcmlwdEFu
Y2hvck5hdmlnYXRpb24oKSkKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmN1cnJlbnRTdGF0ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IGV4ZWMgPyB0b0R5bmFt
aWNGcmFtZShleGVjKSA6IDA7CisgICAgLy8gTm8gc2NyaXB0IGlzIHJ1bm5pbmcsIHNvIGl0IGlz
IHVzZXItaW5pdGlhdGVkIHVubGVzcyB0aGUgZ2VzdHVyZSBzdGFjaworICAgIC8vIGV4cGxpY2l0
bHkgc2F5cyBpdCBpcyBub3QuCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yOjpnZXRVc2VyR2VzdHVyZVN0YXRlKCkgIT0gRGVmaW5pdGVseU5vdFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZTsKKworICAgIC8vIEZJWE1FOiBXZSBjaGVjayB0aGUgcGx1Z2lu
IHBvcHVwIGZsYWcgYW5kIGphdmFzY3JpcHQgYW5jaG9yIG5hdmlnYXRpb24KKyAgICAvLyBmcm9t
IHRoZSBkeW5hbWljIGZyYW1lIGJlY3Vhc2UgdGhleSBzaG91bGQgb25seSBiZSBpbml0aWF0ZWQg
b24gdGhlCisgICAgLy8gZHluYW1pYyBmcmFtZSBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4gaWYg
dGhleSBkbyBoYXBwZW4uCisgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9
IGZyYW1lLT5zY3JpcHQoKTsKKyAgICBBU1NFUlQoc2NyaXB0Q29udHJvbGxlcik7CisgICAgaWYg
KHNjcmlwdENvbnRyb2xsZXItPmFsbG93UG9wdXBzRnJvbVBsdWdpbigpIHx8IHNjcmlwdENvbnRy
b2xsZXItPmlzSmF2YVNjcmlwdEFuY2hvck5hdmlnYXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBJZiBhIERPTSBldmVudCBpcyBiZWluZyBwcm9jZXNzZWQsIGNoZWNrIHRo
YXQgaXQgd2FzIGluaXRpYXRlZCBieSB0aGUgdXNlcgogICAgIC8vIGFuZCB0aGF0IGl0IGlzIGlu
IHRoZSB3aGl0ZWxpc3Qgb2YgZXZlbnQgdHlwZXMgYWxsb3dlZCB0byBnZW5lcmF0ZSBwb3AtdXBz
LgotICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGwo
d29ybGQpKQorICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IHNjcmlwdENvbnRyb2xs
ZXItPmV4aXN0aW5nV2luZG93U2hlbGwoY3VycmVudFdvcmxkKGV4ZWMpKSkKICAgICAgICAgaWYg
KEV2ZW50KiBldmVudCA9IHNoZWxsLT53aW5kb3coKS0+Y3VycmVudEV2ZW50KCkpCiAgICAgICAg
ICAgICByZXR1cm4gZXZlbnQtPmZyb21Vc2VyR2VzdHVyZSgpOwogCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzEx
MCw3IEBAIHB1YmxpYzoKICAgICBpbnQgZXZlbnRIYW5kbGVyTGluZU51bWJlcigpIGNvbnN0Owog
ICAgIAogICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soYm9vbCBiKSB7IG1fcHJv
Y2Vzc2luZ1RpbWVyQ2FsbGJhY2sgPSBiOyB9Ci0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1
cmUoRE9NV3JhcHBlcldvcmxkKikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7CiAgICAgYm9vbCBhbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBj
b25zdDsKIAogICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc0Zyb21DdXJyZW50T3JpZ2luKEZyYW1l
Kik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTk1MSw3ICsxOTUxLDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOZWVkc1VzZXJHZXN0dXJlQ2hlY2sifSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFt
SW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gInByb2Nl
c3NpbmdVc2VyR2VzdHVyZShleGVjKSI7CisgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rp
b25TdHJpbmcgLj0gInByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpIjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICRwYXJhbUluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgIH0KIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lv
biA2NDI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbnQgaW50QXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQz
MihleGVjKTsKIAotICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFt
aWNGcmFtZSwgaW50QXJnLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZXhlYykpOworICAgIGltcC0+
d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogCiAgICAgaW50IG9wdGlvbmFsQXJnID0gZXhlYy0+YXJndW1l
bnQoMSkudG9JbnQzMihleGVjKTsKIAotICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJH
ZXN0dXJlQVNBRChkeW5hbWljRnJhbWUsIGludEFyZywgb3B0aW9uYWxBcmcsIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZShleGVjKSk7CisgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1
cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2MCwxOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OnVwZGF0ZVBsYXRmb3JtU2NyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBTY3Jp
cHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKikgY29u
c3QKK2Jvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKIHsKKyAg
ICBGcmFtZSogYWN0aXZlRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENv
bnRleHQoKTsKICAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywgc28gaXQgaXMgdXNlci1pbml0
aWF0ZWQgdW5sZXNzIHRoZSBnZXN0dXJlIHN0YWNrCiAgICAgLy8gZXhwbGljaXRseSBzYXlzIGl0
IGlzIG5vdC4KLSAgICBpZiAoIW1fcHJveHktPmV4ZWN1dGluZ1NjcmlwdCgpKQorICAgIGlmICgh
YWN0aXZlRnJhbWUpCiAgICAgICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Z2V0VXNl
ckdlc3R1cmVTdGF0ZSgpICE9IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdlc3R1cmU7CiAK
KyAgICBWOFByb3h5KiBhY3RpdmVQcm94eSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+cHJveHko
KTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiB2OENvbnRleHQgPSBtX3Byb3h5LT5tYWluV29ybGRDb250ZXh0KCk7CisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6bWFpbldvcmxkQ29u
dGV4dChhY3RpdmVGcmFtZSk7CiAgICAgLy8gRklYTUU6IGZpbmQgYWxsIGNhc2VzIGNvbnRleHQg
Y2FuIGJlIGVtcHR5OgogICAgIC8vICAxKSBKUyBpcyBkaXNhYmxlZDsKICAgICAvLyAgMikgcGFn
ZSBpcyBOVUxMOwpAQCAtMTg4LDcgKzE5MSwxMSBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnBy
b2Nlc3NpbmdVc2VyR2VzCiAgICAgICAgIC8vIEV2ZW50Ojpmcm9tVXNlckdlc3R1cmUgd2lsbCBy
ZXR1cm4gZmFsc2Ugd2hlbiBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkgcmV0dXJucyBmYWxzZS4KICAgICAgICAgcmV0dXJuIGV2ZW50LT5mcm9tVXNlckdlc3R1
cmUoKTsKICAgICB9Ci0gICAgaWYgKG1fc291cmNlVVJMICYmIG1fc291cmNlVVJMLT5pc051bGwo
KSAmJiAhbV9wcm94eS0+dGltZXJDYWxsYmFjaygpKSB7CisgICAgLy8gRklYTUU6IFdlIGNoZWNr
IHRoZSBqYXZhc2NyaXB0IGFuY2hvciBuYXZpZ2F0aW9uIGZyb20gdGhlIGxhc3QgZW50ZXJlZAor
ICAgIC8vIGZyYW1lIGJlY3Vhc2UgaXQgc2hvdWxkIG9ubHkgYmUgaW5pdGlhdGVkIG9uIHRoZSBs
YXN0IGVudGVyZWQgZnJhbWUgaW4KKyAgICAvLyB3aGljaCBleGVjdXRpb24gYmVnYW4gaWYgaXQg
ZG9lcyBoYXBwZW4uICAgIAorICAgIGNvbnN0IFN0cmluZyogc291cmNlVVJMID0gYWN0aXZlRnJh
bWUtPnNjcmlwdCgpLT5zb3VyY2VVUkwoKTsKKyAgICBpZiAoc291cmNlVVJMICYmIHNvdXJjZVVS
TC0+aXNOdWxsKCkgJiYgIWFjdGl2ZVByb3h5LT50aW1lckNhbGxiYWNrKCkpIHsKICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgPGEgaHJlZj0iamF2YXNjcmlwdDp3aW5kb3cub3BlbignLi4uJyk+IGNh
c2UgLT4gd2UgbGV0IGl0IHRocm91Z2guCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTIwMSw3ICsyMDgsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
CiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGlzIHRoaXMgcmlnaHQ/Ci0gICAgcmV0dXJuIHByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpOworICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNz
aW5nVXNlckdlc3R1cmUoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4mIHNvdXJjZXMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gNjQyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2sp
IHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nlc3NpbmdUaW1lckNhbGxiYWNrOyB9
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhlIHBhcmFtZXRlciB3b3Js
ZCBhdCBhbGwuCiAgICAgLy8gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzU0
MTgyCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCA9IDApIGNvbnN0OworICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwog
ICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3Q7CiAKICAgICB2
b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX3BhdXNlZCA9IHBhdXNlZDsgfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDY0MjY4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEyICs5
MiwxMCBAQCB2b2lkIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeSh2ODo6SGFuZGxlCiAgICAgaWYg
KCFuZXdWYWx1ZS0+SXNOdWxsKCkgJiYgIW5ld1ZhbHVlLT5Jc1VuZGVmaW5lZCgpKQogICAgICAg
ICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KG9iamVjdCwgbmV3VmFsdWUsIGNhY2hlSW5kZXgpOwog
fQotICAgIAogCiBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7Ci0gICAgRnJhbWUqIGZy
YW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgcmV0
dXJuIGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Cisg
ICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogfQog
CiBGcmFtZSogY2FsbGluZ09yRW50ZXJlZEZyYW1lKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0MjY4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgc3RhdGljIGJvb2wgYWxsb3dQb3BVcCgpCiAg
ICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0
KCk7CiAKICAgICBBU1NFUlQoZnJhbWUpOwotICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKQorICAgIGlmIChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdz
LT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2NDI2OCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzMCw3ICsxMTMwLDcgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cgogICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUt
PnRyZWUoKS0+dG9wKCk7CiAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3Jp
cHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElm
IEphdmFTY3JpcHQgaXMgZGlzYWJsZWQsIGEgdXNlciBnZXN0dXJlIG11c3QgaGF2ZSBpbml0aWF0
ZWQgdGhlIG5hdmlnYXRpb24uCi0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6IFVzZSBwYWdl
SXNQcm9jZXNzaW5nVXNlckdlc3R1cmUuCisgICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpOyAvLyBGSVhNRTogVXNlIHBhZ2VJc1Byb2Nlc3NpbmdVc2Vy
R2VzdHVyZS4KIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNz
aW9uUHJvdGVjdGlvbigpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDY0NSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA4LTA0ICBK
b2hubnkgRGluZyAgPGpuZEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIHRoZSBTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUgdG8gc3RhdGljIG1ldGhvZAorICAgICAgICBhbmQgdXNlIGR5bmFt
aWMoSlNDIGJpbmRpbmcpL2VudGVyZWQoVjggYmluZGluZykgZnJhbWUgdG8gY2hlY2sgdGhlIHVz
ZXIgZ2VzdHVyZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQyODI3CisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZy
YW1lLXNjcmlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Bv
cHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTA0
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCBy
ZXZpZXdlZC4gQ2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2Nr
ZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJhbWUtc2NyaXB0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisKK1doZW4gY2FsbGluZyBzY3Jp
cHQgdG8gb3BlbiBhIHdpbmRvdyB3aXRob3V0IHVzZXIgZ2VzdHVyZSBmcm9tIHRoZSBlbmNsb3Np
bmcgaWZyYW1lLCB3ZWJraXQgc2hvdWxkIHRlc3Qgb3V0IHRoYXQgdGhlIG9wZW5pbmcgaXMgbm90
IGluaXRpYXRlZCBieSB1c2VyLiBUaGlzIGlzIGEgdGVzdCBjYXNlIGZvciBidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyODI3LgorUEFTU0VECkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJv
bS1pZnJhbWUtc2NyaXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2FuT3BlbldpbmRvd3MoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5zZXRQb3B1cEJsb2NraW5nRW5hYmxlZCh0cnVlKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5zZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUodHJ1ZSk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIC8vIFJlY29yZCBj
dXJyZW50IHdpbmRvdyBjb3VudC4KKyAgICB3aW5kb3cud2luZG93Q291bnQgPSB3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIud2luZG93Q291bnQoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci53aW5kb3dDb3VudCgpID09IHdpbmRvdy53aW5kb3dDb3VudCkKKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiUEFTU0VEIjsK
KyAgICAvLyBDbG9zZSB0aGUgdGVzdC4KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyI+Cis8
aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0bWwsSSBkaWQgb3BlbiB0aGUgd2luZG93PHNjcmlwdD53
aW5kb3cub3BlbignYWJvdXQ6YmxhbmsnLCdfYmxhbmsnLCAnaGVpZ2h0PTYwMCx3aWR0aD03MjAn
KTs8L3NjcmlwdD4iPjwvaWZyYW1lPjxicj4KK1doZW4gY2FsbGluZyBzY3JpcHQgdG8gb3BlbiBh
IHdpbmRvdyB3aXRob3V0IHVzZXIgZ2VzdHVyZSBmcm9tIHRoZSBlbmNsb3NpbmcgaWZyYW1lLCB3
ZWJraXQgc2hvdWxkIHRlc3Qgb3V0IHRoYXQgdGhlIG9wZW5pbmcgaXMgbm90IGluaXRpYXRlZCBi
eSB1c2VyLiBUaGlzIGlzIGEgdGVzdCBjYXNlIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyODI3LgorPGRpdiBpZD0iY29uc29sZSI+RkFJTEVEPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+
</data>
<flag name="review"
          id="51903"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="51902"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64006</attachid>
            <date>2010-08-10 06:03:26 -0700</date>
            <delta_ts>2010-08-10 11:05:36 -0700</delta_ts>
            <desc>patch v3 to resolve conflicts</desc>
            <filename>patch002.txt</filename>
            <type>text/plain</type>
            <size>20669</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTA2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMDgtMTAgIEpvaG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFu
Z2UgdGhlIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSB0byBzdGF0aWMg
bWV0aG9kCisgICAgICAgIGFuZCB1c2UgZHluYW1pYyhKU0MgYmluZGluZykvZW50ZXJlZChWOCBi
aW5kaW5nKSBmcmFtZSB0byBjaGVjayB0aGUgdXNlciBnZXN0dXJlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcuCisKKyAgICAgICAgVGVzdDog
ZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OmRvbVdpbmRvd0FsbG93UG9wVXApOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RvY3VtZW50OjpzZXRMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXZpZ2F0ZUlmQWxsb3dl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpyZWxvYWQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhE
eW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ojo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKToKKwogMjAxMC0wOC0xMCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZl
c3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lm9yZGVyCShyZXZpc2lvbiA2NTA2MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5vcmRlcgkod29ya2lu
ZyBjb3B5KQpAQCAtNzM0MCw4ICs3MzQwLDggQEAgX19aTjdXZWJDb3JlMjdKU0hUTUxNZWRpYUVs
ZW1lbnRQcm90b3R5cAogX19aTks3V2ViQ29yZTE4SlNIVE1MQXVkaW9FbGVtZW50OWNsYXNzSW5m
b0V2CiBfX1pON1dlYkNvcmUyMWpzSFRNTE1lZGlhRWxlbWVudFNyY0VQTjNKU0M5RXhlY1N0YXRl
RU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUzOWpzSFRNTE1l
ZGlhRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uTG9hZEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpT
T2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2ViQ29yZTIxcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlRVBOM0pTQzlFeGVjU3RhdGVFCi1fX1pOSzdXZWJDb3JlMTZTY3JpcHRD
b250cm9sbGVyMjFwcm9jZXNzaW5nVXNlckdlc3R1cmVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQor
X19aTjdXZWJDb3JlMjFwcm9jZXNzaW5nVXNlckdlc3R1cmVFdgorX19aTjdXZWJDb3JlMTZTY3Jp
cHRDb250cm9sbGVyMjFwcm9jZXNzaW5nVXNlckdlc3R1cmVFdgAKIF9fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDRsb2FkRWJSaQogX19aTjdXZWJDb3JlMTFNZWRpYVBsYXllckQwRXYKIF9f
Wk43V2ViQ29yZTE4TWVkaWFQbGF5ZXJQcml2YXRlRDBFdgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNjUwNjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3OSwxMCArNjc5LDkgQEAgRnJh
bWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gYXNKU0RPTVdp
bmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CiB9CiAK
LWJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKEV4ZWNTdGF0ZSogZXhlYykKK2Jvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0b0R5bmFtaWNGcmFtZShl
eGVjKTsKLSAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5nVXNl
ckdlc3R1cmUoY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxl
cjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAKIEtVUkwgY29tcGxldGVVUkwoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlVVJMKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiA2NTA2MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw3ICszMTMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBGcmFtZSogdG9MZXhpY2FsRnJhbWUoSlNDOjpFeGVjU3RhdGUq
KTsKICAgICBGcmFtZSogdG9EeW5hbWljRnJhbWUoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBib29s
IHByb2Nlc3NpbmdVc2VyR2VzdHVyZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIGJvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgS1VSTCBjb21wbGV0ZVVSTChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOwogICAgIAogICAgIGlubGluZSBKU0M6OkpTVmFs
dWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2NTA2
MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24o
RXhlY1N0YXRlKgogCiAgICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IGFsbG93
c0FjY2Vzc0Zyb20oZXhlYykpIHsKICAgICAgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0
ZW0gaWYgdGhpcyBKUyB3YXMgY2FsbGVkIHZpYSBhIHVzZXIgZ2VzdHVyZQotICAgICAgICBmcmFt
ZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwsIGxleGlj
YWxGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgIWxleGljYWxGcmFtZS0+c2Ny
aXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSwgcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKGV4ZWMpKTsKKyAgICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCkt
PnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLCBsZXhpY2FsRnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCksICFsZXhpY2FsRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSwgZmFsc2UsIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKTsKICAgICB9
CiB9CiAKQEAgLTc0Miw3ICs3NDIsNyBAQCBzdGF0aWMgRnJhbWUqIGNyZWF0ZVdpbmRvdyhFeGVj
U3RhdGUqIGV4CiAKICAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkgfHwgbmV3V2lu
ZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSB7CiAgICAgICAgIEtVUkwgY29tcGxldGVkVVJM
ID0gdXJsLmlzRW1wdHkoKSA/IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikgOiBjb21wbGV0ZVVS
TChleGVjLCB1cmwpOwotICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKGV4ZWMpOworICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCk7CiAKICAgICAgICAgaWYgKGNyZWF0ZWQpCiAgICAgICAgICAgICBuZXdGcmFtZS0+
bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVSTCwgcmVmZXJyZXIsIGZhbHNlLCBm
YWxzZSwgdXNlckdlc3R1cmUpOwpAQCAtNzUzLDEwICs3NTMsMTAgQEAgc3RhdGljIEZyYW1lKiBj
cmVhdGVXaW5kb3coRXhlY1N0YXRlKiBleAogICAgIHJldHVybiBuZXdGcmFtZTsKIH0KIAotc3Rh
dGljIGJvb2wgZG9tV2luZG93QWxsb3dQb3BVcChGcmFtZSogYWN0aXZlRnJhbWUsIEV4ZWNTdGF0
ZSogZXhlYykKK3N0YXRpYyBib29sIGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUqIGFjdGl2ZUZy
YW1lKQogewogICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7Ci0gICAgaWYgKGFjdGl2ZUZyYW1lLT5z
Y3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGN1cnJlbnRXb3JsZChleGVjKSkpCisgICAg
aWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gRE9NV2luZG93OjphbGxvd1BvcFVwKGFjdGl2ZUZyYW1l
KTsKIH0KQEAgLTc4MSw3ICs3ODEsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNT
dGF0ZSogZXhlCiAKICAgICAvLyBCZWNhdXNlIEZyYW1lVHJlZTo6ZmluZCgpIHJldHVybnMgdHJ1
ZSBmb3IgZW1wdHkgc3RyaW5ncywgd2UgbXVzdCBjaGVjayBmb3IgZW1wdHkgZnJhbWVuYW1lcy4K
ICAgICAvLyBPdGhlcndpc2UsIGlsbGVnaXRpbWF0ZSB3aW5kb3cub3BlbigpIGNhbGxzIHdpdGgg
bm8gbmFtZSB3aWxsIHBhc3MgcmlnaHQgdGhyb3VnaCB0aGUgcG9wdXAgYmxvY2tlci4KLSAgICBp
ZiAoIWRvbVdpbmRvd0FsbG93UG9wVXAoZHluYW1pY0ZyYW1lLCBleGVjKSAmJiAoZnJhbWVOYW1l
LmlzRW1wdHkoKSB8fCAhZnJhbWUtPnRyZWUoKS0+ZmluZChmcmFtZU5hbWUpKSkKKyAgICBpZiAo
IWRvbVdpbmRvd0FsbG93UG9wVXAoZHluYW1pY0ZyYW1lKSAmJiAoZnJhbWVOYW1lLmlzRW1wdHko
KSB8fCAhZnJhbWUtPnRyZWUoKS0+ZmluZChmcmFtZU5hbWUpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICAvLyBHZXQgdGhlIHRhcmdldCBmcmFtZSBmb3IgdGhlIHNwZWNp
YWwgY2FzZXMgb2YgX3RvcCBhbmQgX3BhcmVudC4gIEluIHRob3NlCkBAIC04MDUsNyArODA1LDcg
QEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUqIGV4ZQogCiAgICAgICAgIGNv
bnN0IEpTRE9NV2luZG93KiB0YXJnZXRlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUsIGN1
cnJlbnRXb3JsZChleGVjKSk7CiAgICAgICAgIGlmICghY29tcGxldGVkVVJMLmlzRW1wdHkoKSAm
JiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KGNvbXBsZXRlZFVSTCkgfHwgKHRhcmdldGVkV2luZG93
ICYmIHRhcmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkpIHsKLSAgICAgICAg
ICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZXhlYyk7CisgICAg
ICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAKICAg
ICAgICAgICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUgZHluYW1p
Y0dsb2JhbE9iamVjdCB0bwogICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvdXRnb2luZ1Jl
ZmVycmVyLiAgV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IKQEAgLTg1MSw3ICs4NTEsNyBAQCBK
U1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coRXhlCiAgICAgaWYgKCFkeW5hbWlj
RnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaWYgKCFET01XaW5k
b3c6OmNhblNob3dNb2RhbERpYWxvZ05vdyhmcmFtZSkgfHwgIWRvbVdpbmRvd0FsbG93UG9wVXAo
ZHluYW1pY0ZyYW1lLCBleGVjKSkKKyAgICBpZiAoIURPTVdpbmRvdzo6Y2FuU2hvd01vZGFsRGlh
bG9nTm93KGZyYW1lKSB8fCAhZG9tV2luZG93QWxsb3dQb3BVcChkeW5hbWljRnJhbWUpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IGZlYXR1cmVzOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiA2NTA2MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RvY3VtZW50Ojpz
ZXRMb2NhdGlvbihFeGVjU3RhdGUqIAogICAgIGlmIChhY3RpdmVGcmFtZSkKICAgICAgICAgc3Ry
ID0gYWN0aXZlRnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cikuc3RyaW5nKCk7CiAK
LSAgICBib29sIHVzZXJHZXN0dXJlID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUoY3VycmVudFdvcmxkKGV4ZWMpKTsKKyAgICBib29sIHVzZXJHZXN0dXJlID0g
U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgZnJhbWUtPnJl
ZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uoc3RyLCBhY3RpdmVGcmFt
ZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgIWFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+
YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gNjUwNjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIHZvaWQgbmF2aWdhdGVJZkFs
bG93ZWQoRXhlY1N0YXRlKgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXByb3RvY29sSXNK
YXZhU2NyaXB0KHVybCkgfHwgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIGZyYW1lKSkKLSAg
ICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2Uo
dXJsLnN0cmluZygpLCBsZXhpY2FsRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCks
IGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBwcm9jZXNzaW5nVXNlckdlc3R1cmUo
ZXhlYykpOworICAgICAgICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2Nh
dGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIGxleGljYWxGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5n
UmVmZXJyZXIoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpKTsKIH0KIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTMyNSw3ICszMjUsNyBAQCBKU1ZhbHVlIEpTTG9jYXRp
b246OnJlbG9hZChFeGVjU3RhdGUqIGV4CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgaWYgKCFwcm90b2NvbElzSmF2YVNjcmlwdChmcmFtZS0+bG9hZGVyKCktPnVybCgpKSkK
LSAgICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaChwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoZXhlYykpOworICAgICAgICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVs
ZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2NTA2MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxNCArMjQ0LDI2IEBAIGlu
dCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnUKICAgICByZXR1cm4gMDsKIH0K
IAotYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCkgY29uc3QKK2Jvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCkKIHsKLSAgICBpZiAobV9hbGxvd1BvcHVwc0Zyb21QbHVnaW4gfHwgaXNKYXZh
U2NyaXB0QW5jaG9yTmF2aWdhdGlvbigpKQorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCk7CisgICAgRnJhbWUqIGZyYW1lID0gZXhlYyA/
IHRvRHluYW1pY0ZyYW1lKGV4ZWMpIDogMDsKKyAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywg
c28gaXQgaXMgdXNlci1pbml0aWF0ZWQgdW5sZXNzIHRoZSBnZXN0dXJlIHN0YWNrCisgICAgLy8g
ZXhwbGljaXRseSBzYXlzIGl0IGlzIG5vdC4KKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gVXNlckdlc3R1cmVJbmRpY2F0b3I6OmdldFVzZXJHZXN0dXJlU3RhdGUoKSAhPSBEZWZpbml0
ZWx5Tm90UHJvY2Vzc2luZ1VzZXJHZXN0dXJlOworCisgICAgLy8gRklYTUU6IFdlIGNoZWNrIHRo
ZSBwbHVnaW4gcG9wdXAgZmxhZyBhbmQgamF2YXNjcmlwdCBhbmNob3IgbmF2aWdhdGlvbgorICAg
IC8vIGZyb20gdGhlIGR5bmFtaWMgZnJhbWUgYmVjdWFzZSB0aGV5IHNob3VsZCBvbmx5IGJlIGlu
aXRpYXRlZCBvbiB0aGUKKyAgICAvLyBkeW5hbWljIGZyYW1lIGluIHdoaWNoIGV4ZWN1dGlvbiBi
ZWdhbiBpZiB0aGV5IGRvIGhhcHBlbi4KKyAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250
cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOworICAgIEFTU0VSVChzY3JpcHRDb250cm9sbGVyKTsK
KyAgICBpZiAoc2NyaXB0Q29udHJvbGxlci0+YWxsb3dQb3B1cHNGcm9tUGx1Z2luKCkgfHwgc2Ny
aXB0Q29udHJvbGxlci0+aXNKYXZhU2NyaXB0QW5jaG9yTmF2aWdhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIGEgRE9NIGV2ZW50IGlzIGJlaW5nIHByb2Nlc3NlZCwg
Y2hlY2sgdGhhdCBpdCB3YXMgaW5pdGlhdGVkIGJ5IHRoZSB1c2VyCiAgICAgLy8gYW5kIHRoYXQg
aXQgaXMgaW4gdGhlIHdoaXRlbGlzdCBvZiBldmVudCB0eXBlcyBhbGxvd2VkIHRvIGdlbmVyYXRl
IHBvcC11cHMuCi0gICAgaWYgKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0gZXhpc3RpbmdXaW5k
b3dTaGVsbCh3b3JsZCkpCisgICAgaWYgKEpTRE9NV2luZG93U2hlbGwqIHNoZWxsID0gc2NyaXB0
Q29udHJvbGxlci0+ZXhpc3RpbmdXaW5kb3dTaGVsbChjdXJyZW50V29ybGQoZXhlYykpKQogICAg
ICAgICBpZiAoRXZlbnQqIGV2ZW50ID0gc2hlbGwtPndpbmRvdygpLT5jdXJyZW50RXZlbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiBldmVudC0+ZnJvbVVzZXJHZXN0dXJlKCk7CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiA2NTA2MSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIGludCBldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkg
Y29uc3Q7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhib29sIGIp
IHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IGI7IH0KLSAgICBib29sIHByb2Nlc3NpbmdV
c2VyR2VzdHVyZShET01XcmFwcGVyV29ybGQqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICBib29sIGFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzRnJvbUN1cnJlbnRPcmln
aW4oRnJhbWUqKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gNjUwNjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTkzLDcgKzE5OTMsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5lZWRzVXNlckdlc3R1cmVDaGVj
ayJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiwgIiBp
ZiAkcGFyYW1JbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyAu
PSAicHJvY2Vzc2luZ1VzZXJHZXN0dXJlKGV4ZWMpIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICRmdW5jdGlvblN0cmluZyAuPSAicHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkiOwogICAgICAgICAg
ICAgICAgICAgICAgICAgJHBhcmFtSW5kZXgrKzsKICAgICAgICAgICAgICAgICAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJ
KHJldmlzaW9uIDY1MDYxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwNSw3ICsxMTA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50
QXJnLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoZXhlYykpOworICAgIGltcC0+d2l0aER5bmFtaWNG
cmFtZUFuZFVzZXJHZXN0dXJlKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtMTEzMyw3ICsxMTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGltcC0+d2l0aER5bmFtaWNGcmFt
ZUFuZFVzZXJHZXN0dXJlQVNBRChkeW5hbWljRnJhbWUsIGludEFyZywgb3B0aW9uYWxBcmcsIHBy
b2Nlc3NpbmdVc2VyR2VzdHVyZShleGVjKSk7CisgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5k
VXNlckdlc3R1cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjUwNjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2MCwxOCBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU2NyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
Ym9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldv
cmxkKikgY29uc3QKK2Jvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCkKIHsKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9y
RW50ZXJlZENvbnRleHQoKTsKICAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywgc28gaXQgaXMg
dXNlci1pbml0aWF0ZWQgdW5sZXNzIHRoZSBnZXN0dXJlIHN0YWNrCiAgICAgLy8gZXhwbGljaXRs
eSBzYXlzIGl0IGlzIG5vdC4KLSAgICBpZiAoIW1fcHJveHktPmV4ZWN1dGluZ1NjcmlwdCgpKQor
ICAgIGlmICghYWN0aXZlRnJhbWUpCiAgICAgICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRv
cjo6Z2V0VXNlckdlc3R1cmVTdGF0ZSgpICE9IERlZmluaXRlbHlOb3RQcm9jZXNzaW5nVXNlckdl
c3R1cmU7CiAKKyAgICBWOFByb3h5KiBhY3RpdmVQcm94eSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQo
KS0+cHJveHkoKTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBtX3Byb3h5LT5tYWluV29ybGRDb250ZXh0
KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6bWFp
bldvcmxkQ29udGV4dChhY3RpdmVGcmFtZSk7CiAgICAgLy8gRklYTUU6IGZpbmQgYWxsIGNhc2Vz
IGNvbnRleHQgY2FuIGJlIGVtcHR5OgogICAgIC8vICAxKSBKUyBpcyBkaXNhYmxlZDsKICAgICAv
LyAgMikgcGFnZSBpcyBOVUxMOwpAQCAtMTg4LDcgKzE5MSwxMSBAQCBib29sIFNjcmlwdENvbnRy
b2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgICAgIC8vIEV2ZW50Ojpmcm9tVXNlckdlc3R1
cmUgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgcmV0dXJucyBmYWxzZS4KICAgICAgICAgcmV0dXJuIGV2ZW50LT5mcm9t
VXNlckdlc3R1cmUoKTsKICAgICB9Ci0gICAgaWYgKG1fc291cmNlVVJMICYmIG1fc291cmNlVVJM
LT5pc051bGwoKSAmJiAhbV9wcm94eS0+dGltZXJDYWxsYmFjaygpKSB7CisgICAgLy8gRklYTUU6
IFdlIGNoZWNrIHRoZSBqYXZhc2NyaXB0IGFuY2hvciBuYXZpZ2F0aW9uIGZyb20gdGhlIGxhc3Qg
ZW50ZXJlZAorICAgIC8vIGZyYW1lIGJlY3Vhc2UgaXQgc2hvdWxkIG9ubHkgYmUgaW5pdGlhdGVk
IG9uIHRoZSBsYXN0IGVudGVyZWQgZnJhbWUgaW4KKyAgICAvLyB3aGljaCBleGVjdXRpb24gYmVn
YW4gaWYgaXQgZG9lcyBoYXBwZW4uICAgIAorICAgIGNvbnN0IFN0cmluZyogc291cmNlVVJMID0g
YWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5zb3VyY2VVUkwoKTsKKyAgICBpZiAoc291cmNlVVJMICYm
IHNvdXJjZVVSTC0+aXNOdWxsKCkgJiYgIWFjdGl2ZVByb3h5LT50aW1lckNhbGxiYWNrKCkpIHsK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgPGEgaHJlZj0iamF2YXNjcmlwdDp3aW5kb3cub3Blbign
Li4uJyk+IGNhc2UgLT4gd2UgbGV0IGl0IHRocm91Z2guCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTIwMSw3ICsyMDgsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3Np
bmdVc2VyR2VzCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGlzIHRoaXMgcmlnaHQ/Ci0gICAgcmV0
dXJuIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVy
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2Ny
aXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gNjUwNjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFByb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGJvb2wgcHJvY2Vzc2luZ1RpbWVy
Q2FsbGJhY2spIHsgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayA9IHByb2Nlc3NpbmdUaW1lckNh
bGxiYWNrOyB9CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhlIHBhcmFt
ZXRlciB3b3JsZCBhdCBhbGwuCiAgICAgLy8gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzU0MTgyCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCA9IDApIGNvbnN0OworICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpOwogICAgIGJvb2wgYW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX3BhdXNlZCA9IHBhdXNlZDsg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9W
OEJpbmRpbmdTdGF0ZS5jcHAJKHJldmlzaW9uIDY1MDYxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDggKzgxLDcgQEAgdm9pZCBTdGF0ZTxWOEJpbmRpbmc+OjppbW1lZGlhdGVseVJlcG9ydAogCiBi
b29sIFN0YXRlPFY4QmluZGluZz46OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7Ci0gICAgRnJh
bWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0g
ICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CisgICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiA2NTA2MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEyOSw3ICsxMTI5LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6aXNQcm9j
ZXNzaW5nVXNlckdlc3R1cgogICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+dG9w
KCk7CiAgICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIEphdmFTY3JpcHQg
aXMgZGlzYWJsZWQsIGEgdXNlciBnZXN0dXJlIG11c3QgaGF2ZSBpbml0aWF0ZWQgdGhlIG5hdmln
YXRpb24uCi0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsgLy8gRklYTUU6IFVzZSBwYWdlSXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUuCisgICAgcmV0dXJuIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpOyAvLyBGSVhNRTogVXNlIHBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZS4KIH0K
IAogdm9pZCBGcmFtZUxvYWRlcjo6cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlv
bigpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTA2MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA4LTEwICBKb2hubnkgRGluZyAg
PGpuZEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hhbmdlIHRoZSBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUgdG8gc3RhdGljIG1ldGhvZAorICAgICAgICBhbmQgdXNlIGR5bmFtaWMoSlNDIGJpbmRp
bmcpL2VudGVyZWQoVjggYmluZGluZykgZnJhbWUgdG8gY2hlY2sgdGhlIHVzZXIgZ2VzdHVyZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyODI3CisK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQt
ZnJvbS1pZnJhbWUtc2NyaXB0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTEwICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NrZWQtZnJvbS1pZnJh
bWUtc2NyaXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2VkLWZyb20taWZy
YW1lLXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorCitX
aGVuIGNhbGxpbmcgc2NyaXB0IHRvIG9wZW4gYSB3aW5kb3cgd2l0aG91dCB1c2VyIGdlc3R1cmUg
ZnJvbSB0aGUgZW5jbG9zaW5nIGlmcmFtZSwgd2Via2l0IHNob3VsZCB0ZXN0IG91dCB0aGF0IHRo
ZSBvcGVuaW5nIGlzIG5vdCBpbml0aWF0ZWQgYnkgdXNlci4gVGhpcyBpcyBhIHRlc3QgY2FzZSBm
b3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjgyNy4KK1BB
U1NFRApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlm
cmFtZS1zY3JpcHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9w
b3B1cC1ibG9ja2VkLWZyb20taWZyYW1lLXNjcmlwdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tlZC1mcm9tLWlmcmFtZS1zY3JpcHQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodHJ1ZSk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNv
bXBsZXRlKHRydWUpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAvLyBSZWNvcmQgY3VycmVudCB3aW5kb3cgY291bnQuCisgICAgd2luZG93LndpbmRvd0Nv
dW50ID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndpbmRvd0NvdW50KCk7Cit9CitmdW5j
dGlvbiB0ZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLndpbmRvd0NvdW50KCkgPT0gd2luZG93LndpbmRvd0Nv
dW50KQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4
dCA9ICJQQVNTRUQiOworICAgIC8vIENsb3NlIHRoZSB0ZXN0LgorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJ0ZXN0KCk7Ij4KKzxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCxJIGRpZCBvcGVuIHRoZSB3
aW5kb3c8c2NyaXB0PndpbmRvdy5vcGVuKCdhYm91dDpibGFuaycsJ19ibGFuaycsICdoZWlnaHQ9
NjAwLHdpZHRoPTcyMCcpOzwvc2NyaXB0PiI+PC9pZnJhbWU+PGJyPgorV2hlbiBjYWxsaW5nIHNj
cmlwdCB0byBvcGVuIGEgd2luZG93IHdpdGhvdXQgdXNlciBnZXN0dXJlIGZyb20gdGhlIGVuY2xv
c2luZyBpZnJhbWUsIHdlYmtpdCBzaG91bGQgdGVzdCBvdXQgdGhhdCB0aGUgb3BlbmluZyBpcyBu
b3QgaW5pdGlhdGVkIGJ5IHVzZXIuIFRoaXMgaXMgYSB0ZXN0IGNhc2UgZm9yIGJ1ZyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4MjcuCis8ZGl2IGlkPSJjb25zb2xl
Ij5GQUlMRUQ8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="52492"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>