<?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>14272</bug_id>
          
          <creation_ts>2007-06-21 00:09:23 -0700</creation_ts>
          <short_desc>Cannot change the height of the Web Inspector when docked on Windows</short_desc>
          <delta_ts>2009-07-17 17:11:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14282</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Niels Leenheer (HTML5test)">info</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>dev+webkit</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>6934</commentid>
    <comment_count>0</comment_count>
    <who name="Niels Leenheer (HTML5test)">info</who>
    <bug_when>2007-06-21 00:09:23 -0700</bug_when>
    <thetext>There is currently no way to change the height of the inspector when it is docked to the inspected page. There is no resize widget and when I also can&apos;t resize the it by dragging the edge of the inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6470</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-06-24 11:43:10 -0700</bug_when>
    <thetext>This is the Windows version of this bug. The Mac version is bug 14282.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68599</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-01-29 10:55:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/5712795&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88417</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-08-13 11:31:39 -0700</bug_when>
    <thetext>The Mac and cross platform code landed in r35719.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131057</commentid>
    <comment_count>4</comment_count>
      <attachid>32606</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-10 20:30:47 -0700</bug_when>
    <thetext>Created attachment 32606
Height Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131316</commentid>
    <comment_count>5</comment_count>
      <attachid>32606</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-13 07:59:25 -0700</bug_when>
    <thetext>Comment on attachment 32606
Height Patch

It&apos;s really great to see this getting fixed!

I have a few comments about the general approach to this fix:

I think it&apos;s not good to be duplicating more code from WebKit/mac in WebKit/win. A much better way to fix this would be to move most of the WebKit/mac code down into WebCore, where it can be shared by WebKit/win. The idea would be to have all the logic down in WebCore, and only call up to WebKit when absolutely necessary. A rough division of responsibility would be:

WebCore:
 * Calculates new window sizes
 * Saves/restores window size preference

WebKit:
 * Actually resizes the windows to the dimensions specified by WebCore

So I think you should redo this in at least two parts:

1) Move most WebKit/mac logic related to the window size down to WebCore
2) Add in the WebKit/win bits

Please feel free to ask more questions here in the bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131444</commentid>
    <comment_count>6</comment_count>
      <attachid>32688</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-13 16:59:30 -0700</bug_when>
    <thetext>Created attachment 32688
Cross Platform Fix + Refactoring

Updated patch taking Adam&apos;s feedback into account, moving more logic into InspectorController and away from the clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131560</commentid>
    <comment_count>7</comment_count>
      <attachid>32688</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-14 08:01:09 -0700</bug_when>
    <thetext>Comment on attachment 32688
Cross Platform Fix + Refactoring

&gt; +        * inspector/InspectorController.cpp: Moved resizing logic from InspectorClient to here

That should be &quot;WebInspectorClient.mm&quot;, not &quot;InspectorClient&quot;.

&gt; +    virtual long getInspectedWebViewHeight() = 0;

We normally only prefix function names with &quot;get&quot; if they return their result through an out-parameter. Since that is not the case here, I&apos;d just call this &quot;inspectedWebViewHeight()&quot;. Since WebCore doesn&apos;t really know what a &quot;WebView&quot; is, I&apos;d also rename it to &quot;inspectedPageHeight()&quot;. But this function doesn&apos;t return the height of the inspected page. It returns the height the page would be if the Inspector weren&apos;t docked. We should either rename the function to indicate that, or make it truly return the inspected page&apos;s height and make InspectorController responsible for adding in the docked Inspector&apos;s height. The latter option seems conceptually simpler to me.

&gt; @@ -188,6 +191,12 @@ InspectorController::InspectorController
&gt;      ASSERT_ARG(page, page);
&gt;      ASSERT_ARG(client, client);
&gt;      ++s_inspectorControllerCount;
&gt; +
&gt; +    // Set the initial attached height to the users preferred attached height
&gt; +    // It might not start out attached, but this variable needs to be populated before
&gt; +    // it could be attached

Typo: &quot;users&quot; should be &quot;user&apos;s&quot;. You should also end your sentences with periods.

&gt; +    long attachedHeight = round(max(static_cast&lt;float&gt;(250.0), 
&gt; +        static_cast&lt;float&gt;(min(static_cast&lt;float&gt;(height), 
&gt; +        static_cast&lt;float&gt;(m_client-&gt;getInspectedWebViewHeight() * .75)))));

You should put the constants into named variables. I think that would reduce the need for casting, too:

static const minimumAttachedHeight = 250;
static const maximumAttachedHeightRatio = 0.75;

setAttachedWindowHeight(height)
{
    long attachedHeight = round(max(minimumAttachedHeight, min(static_cast&lt;float&gt;(height), maximumAttachedHeightRatio * inspectedPageHeight())));
}

Why is defaultAttachedHeight unsigned when we&apos;re using long elsewhere?

&gt; +    // Save a preference for the users preferred attached height
&gt; +    Setting heightSetting;
&gt; +    heightSetting.set(attachedHeight);
&gt; +    setSetting(inspectorAttachedHeightName, heightSetting);

It would probably be better to add an explicit Setting constructor that takes a long.

&gt; +++ WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp	(working copy)
&gt; @@ -112,6 +112,17 @@ String InspectorClient::hiddenPanels()
&gt;      notImplemented();
&gt;      return String();
&gt;  }
&gt; +    
&gt; +long getInspectedWebViewHeight()
&gt; +{
&gt; +    notImplemented();
&gt; +    return 0;
&gt; +}
&gt; +    
&gt; +void setInitialAttachedHeight(long height)
&gt; +{
&gt; +    notImplemented();
&gt; +}

These function names need to be prefixed with &quot;InspectorClient::&quot;. (Ditto for the other platforms, though the prefix will be different for each.)

&gt; @@ -69,6 +72,7 @@ public:
&gt;  private:
&gt;      void updateWindowTitle() const;
&gt;  
&gt; +    long m_initialAttachedHeight;

It looks like this member doesn&apos;t get initialized by the constructor.

&gt; +- (long)getInspectedWebViewHeight
&gt; +{
&gt; +    ASSERT(_attachedToInspectedWebView);
&gt; +    
&gt; +    // For calculations, we want the height of the frame view and the height of the attached inspector
&gt; +    // to calculate the correct bounds

This comment doesn&apos;t really make sense to me as written. But if we either rename the function or change its behavior as described above, you probably won&apos;t need a comment at all.

&gt; @@ -332,7 +363,7 @@ void WebInspectorClient::updateWindowTit
&gt;  
&gt;          _attachedToInspectedWebView = YES;
&gt;  
&gt; -        [self setAttachedWindowHeight:[[NSUserDefaults standardUserDefaults] integerForKey:WebKitInspectorAttachedViewHeightKey]];
&gt; +        [self setAttachedWindowHeight:_attachedHeight];

I think you can get rid of the definition of WebKitInspectorAttachedViewHeightKey now.

Should we migrate the old NSUserDefaults-style preference to the new InspectorController::Setting-style preference?

&gt; @@ -381,23 +412,21 @@ void WebInspectorClient::updateWindowTit
&gt;  
&gt;  - (void)setAttachedWindowHeight:(unsigned)height
&gt;  {
&gt; -    [[NSUserDefaults standardUserDefaults] setInteger:height forKey:WebKitInspectorAttachedViewHeightKey];
&gt; -
&gt;      if (!_attachedToInspectedWebView)
&gt;          return;
&gt; -
&gt; -    WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView];
&gt; -    NSRect frameViewRect = [frameView frame];
&gt; -
&gt; -    CGFloat attachedHeight = round(MAX(250.0, MIN(height, (NSHeight([_inspectedWebView frame]) * 0.75))));
&gt; -
&gt; +    
&gt; +    _attachedHeight = height;

Why do we need to store this value? Can&apos;t we just calculate it by querying the bounds of the Inspector window?

&gt; @@ -76,6 +74,7 @@ WebInspectorClient::WebInspectorClient(W
&gt;      , m_webViewHwnd(0)
&gt;      , m_shouldAttachWhenShown(false)
&gt;      , m_attached(false)
&gt; +    , m_attachedHeight(0)

You&apos;re leaving m_attachedParentHeight uninitialized here.

&gt;  void WebInspectorClient::setAttachedWindowHeight(unsigned height)
&gt;  {
&gt; -    // FIXME: implement this.
&gt; +    RECT inspectedRect;
&gt; +    GetClientRect(m_inspectedWebViewHwnd, &amp;inspectedRect);
&gt; +
&gt; +    int webViewX = inspectedRect.left;
&gt; +    int webViewY = m_attachedParentHeight - height;
&gt; +    int webViewWidth = inspectedRect.right - inspectedRect.left;
&gt; +    int webViewHeight = height;
&gt; +
&gt; +    m_attachedHeight = height;

Why do we need to store this value? Can&apos;t we just calculate it by querying the client rect of the Inspector window?

&gt; +    SendMessage(m_inspectedWebViewHwnd, WM_SETREDRAW, FALSE, NULL);
&gt; +    SendMessage(m_webViewHwnd, WM_SETREDRAW, FALSE, NULL);

We use 0 instead of NULL in C++ files. (This comment applies elsewhere in this patch.)

Should we be doing this WM_SETREDRAW stuff in onWebViewWindowPosChanging, too?

&gt; +    ::SetWindowPos(m_inspectedWebViewHwnd, 0, webViewX, inspectedRect.top, webViewWidth, m_attachedParentHeight, SWP_NOZORDER);
&gt; +    ::SetWindowPos(m_webViewHwnd, 0, webViewX, webViewY, webViewWidth, webViewHeight, SWP_NOZORDER);

You should remove the &quot;::&quot; prefixes here, or add them to the other Win32 API calls in this function (whatever is consistent with the rest of the file). In general, in new code you should leave them off.

&gt; @@ -410,12 +440,16 @@ void WebInspectorClient::onWebViewWindow
&gt;      WINDOWPOS* windowPos = reinterpret_cast&lt;WINDOWPOS*&gt;(lParam);
&gt;      ASSERT_ARG(lParam, windowPos);
&gt;  
&gt; +    // Cache this value because GetClientRect doesn&apos;t give the correct parent height
&gt; +    // And whenever the height updates and an inspector is attached, this function will be called first.
&gt; +    m_attachedParentHeight = windowPos-&gt;cy;

Why do we need to store this value? Can&apos;t we calculate it by getting the client rects of the inspected WebView and the Inspector, and adding their heights?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131793</commentid>
    <comment_count>8</comment_count>
      <attachid>32761</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-14 19:55:16 -0700</bug_when>
    <thetext>Created attachment 32761
Take 3

Fixes comments made by aroben about previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131939</commentid>
    <comment_count>9</comment_count>
      <attachid>32761</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-15 10:19:02 -0700</bug_when>
    <thetext>Comment on attachment 32761
Take 3

The improvements here look really good.

&gt; +    virtual long inspectorPageHeight() = 0;

Do we really need the client to give us this information? I think m_page-&gt;mainFrame()-&gt;view()-&gt;visibleHeight() would give us the same information.

&gt; +    virtual long inspectedPageHeight() = 0;

For the same reason, it seems like we don&apos;t need inspectedPageHeight(), either. We can do the same thing as above, but use m_inspectedPage instead of m_page.

&gt; +    static const float minimumAttachedHeight = 250.0;
&gt; +    static const float maximumAttachedHeightRatio = 0.75;

I think you should move these up next to defaultAttachedHeight.

&gt; +    long attachedHeight = round(max(minimumAttachedHeight, 
&gt; +        min(static_cast&lt;float&gt;(height), (m_client-&gt;inspectedPageHeight() + m_client-&gt;inspectorPageHeight()) * maximumAttachedHeightRatio)));
&gt; +
&gt; +    // Save a preference for the user&apos;s preferred attached height and pass it to the client
&gt; +    setSetting(inspectorAttachedHeightName, Setting(attachedHeight));
&gt; +    m_client-&gt;setInitialAttachedHeight(attachedHeight);
&gt; +
&gt; +    m_client-&gt;setAttachedWindowHeight(attachedHeight);

It seems bad that we have to call both of these functions one after the other.

I think that we can get rid of setInitialAttachedHeight completely. I think the way this should work is:

1) Whenever the Inspector becomes attached (either because it is being shown for the first time and is starting out attached, or because the user clicked the button to attach it), the client should set the height of the Inspector to the value stored in the settings (so the client would ask the InspectorController for that height value)
2) Whenever the height of the attached Inspector changes, the InspectorController saves the new height to settings and calls InspectorClient::setAttachedWindowHeight, and the client obliges.

So there&apos;s no need for the whole &quot;initial attached height&quot; concept here. That will let the clients get rid of their m_initialAttachedHeight members.

&gt;  private:
&gt;      void updateWindowTitle() const;
&gt;  
&gt; +    long m_initialAttachedHeight;

You still aren&apos;t initializing this in the constructor (in WebInspectorClient.mm). But as I explained above, I think we can get rid of this entirely.

&gt;  void WebInspectorClient::setAttachedWindowHeight(unsigned height)
&gt;  {
&gt; -    // FIXME: implement this.
&gt; +    if (!m_attached)
&gt; +        return;
&gt; +
&gt; +    RECT inspectedRect;
&gt; +    GetClientRect(m_inspectedWebViewHwnd, &amp;inspectedRect);
&gt; +
&gt; +    int webViewWidth = inspectedRect.right - inspectedRect.left;
&gt; +    int totalHeight = inspectedPageHeight() + inspectorPageHeight();
&gt; +
&gt; +    SetWindowPos(m_webViewHwnd, 0, 0, totalHeight - height, webViewWidth, height, SWP_NOZORDER);
&gt; +    SetWindowPos(m_inspectedWebViewHwnd, 0, 0, 0, webViewWidth, totalHeight, SWP_NOZORDER);
&gt; +    
&gt; +    RedrawWindow(m_webViewHwnd, 0, 0, RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW); 
&gt; +    RedrawWindow(m_inspectedWebViewHwnd, 0, 0, RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
&gt;  }

I guess you decided we don&apos;t need the WM_SETREDRAW stuff after all?

I think after making the changes I described above, we won&apos;t need any new InspectorClient functions at all! That should make the patch a lot smaller and simpler. Sorry my thinking on this wasn&apos;t clearer before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132038</commentid>
    <comment_count>10</comment_count>
      <attachid>32812</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-15 14:22:55 -0700</bug_when>
    <thetext>Created attachment 32812
Attach Bug

To get bug: 
1) Open web inspector, and get it in attached mode.
2) Detach it, and resize the window vertically when it is in detached mode.
3) Re-attach it.

You will see it down too far on the screen, the whole inspector won&apos;t be showing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132039</commentid>
    <comment_count>11</comment_count>
      <attachid>32813</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-15 14:25:15 -0700</bug_when>
    <thetext>Created attachment 32813
Attach Bug

To reproduce bug:

1) Open inspector, and attach it.
2) Detach it, and resize the detached inspector window.
3) Re-attach it, it will be too far down on the screen, the whole inspector won&apos;t be visible until you resize the whole window (the inspected web view + inspector).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132291</commentid>
    <comment_count>12</comment_count>
      <attachid>32883</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-16 10:12:39 -0700</bug_when>
    <thetext>Created attachment 32883
Re-attaching Bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132333</commentid>
    <comment_count>13</comment_count>
      <attachid>32889</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-16 13:45:58 -0700</bug_when>
    <thetext>Created attachment 32889
Fixed Reattach Bug - No variable Caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132344</commentid>
    <comment_count>14</comment_count>
      <attachid>32889</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-16 14:30:26 -0700</bug_when>
    <thetext>Comment on attachment 32889
Fixed Reattach Bug - No variable Caching

&gt; +long InspectorController::constrainedAttachedWindowHeight(long preferredHeight, long totalWindowHeight)
&gt; +{
&gt; +    if (preferredHeight == 0) {

We normally write this as if (!preferredHeight).

&gt; @@ -323,7 +320,8 @@ void WebInspectorClient::updateWindowTit
&gt;  
&gt;      if (_shouldAttach) {
&gt;          WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView];
&gt; -
&gt; +        NSRect frameViewRect = [frameView frame];

I don&apos;t think this local variable is really useful.

&gt; @@ -331,8 +329,8 @@ void WebInspectorClient::updateWindowTit
&gt;          [frameView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable | NSViewMinYMargin)];
&gt;  
&gt;          _attachedToInspectedWebView = YES;
&gt; -
&gt; -        [self setAttachedWindowHeight:[[NSUserDefaults standardUserDefaults] integerForKey:WebKitInspectorAttachedViewHeightKey]];
&gt; +        
&gt; +        [self setAttachedWindowHeight:[_inspectedWebView page]-&gt;inspectorController()-&gt;constrainedAttachedWindowHeight(0, NSHeight(frameViewRect))];

Why do both InspectorClient implementations have to call setAttachedWindowHeight themselves? Can&apos;t the InspectorController make this call for us (passing in the height of the inspected page from before InspectorClient::attachWindow was called)? If InspectorController did it for us, we could get rid of the constrainedAttachedWindowHeight function.

&gt; @@ -240,6 +238,16 @@ void WebInspectorClient::attachWindow()
&gt;  
&gt;      closeWindowWithoutNotifications();
&gt;      showWindowWithoutNotifications();
&gt; +
&gt; +    HWND hostWindow;
&gt; +    if (SUCCEEDED(m_inspectedWebView-&gt;hostWindow((OLE_HANDLE*)&amp;hostWindow)))

Please use reinterpret_cast instead of a C-style cast.

&gt; +        SendMessage(hostWindow, WM_SIZE, 0, 0);     // Make sure we have the correct size

What happens if you omit this SendMessage call?

&gt; +    RECT hostWindowRect;
&gt; +    GetClientRect(hostWindow, &amp;hostWindowRect);
&gt; +
&gt; +    // This re-constrains our attached height, in case while the inspector was detached, they resized the inspected window,
&gt; +    // and drawing it at the size it used to be could lead to the inspector taking up the whole window or more

Please put a period at the end of this comment.

&gt;  void WebInspectorClient::setAttachedWindowHeight(unsigned height)
&gt;  {
&gt; -    // FIXME: implement this.
&gt; +    if (!m_attached)
&gt; +        return;
&gt; +
&gt; +    HWND hostWindow;
&gt; +    if (!SUCCEEDED(m_inspectedWebView-&gt;hostWindow((OLE_HANDLE*)&amp;hostWindow)))

You should use reinterpret_cast here, and FAILED() instead of !SUCCEEDED().

&gt; +        return;
&gt; +
&gt; +    RECT hostWindowRect;
&gt; +    GetClientRect(hostWindow, &amp;hostWindowRect);
&gt; +
&gt; +    RECT inspectedRect;
&gt; +    GetClientRect(m_inspectedWebViewHwnd, &amp;inspectedRect);
&gt; +
&gt; +    int totalHeight = hostWindowRect.bottom - hostWindowRect.top;
&gt; +    int webViewWidth = inspectedRect.right - inspectedRect.left;
&gt; +
&gt; +    SetWindowPos(m_webViewHwnd, 0, 0, totalHeight - height, webViewWidth, height, SWP_NOZORDER);
&gt; +    SetWindowPos(m_inspectedWebViewHwnd, 0, 0, 0, webViewWidth, totalHeight, SWP_NOZORDER);

This doesn&apos;t seem right. Shouldn&apos;t the height of m_inspectedWebViewHwnd be set to totalHeight - height?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132411</commentid>
    <comment_count>15</comment_count>
      <attachid>32903</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-16 17:08:32 -0700</bug_when>
    <thetext>Created attachment 32903
Resize Attached Inspector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132657</commentid>
    <comment_count>16</comment_count>
      <attachid>32903</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-17 12:09:00 -0700</bug_when>
    <thetext>Comment on attachment 32903
Resize Attached Inspector

&gt; +    int inspectedHeight = m_inspectedPage-&gt;mainFrame()-&gt;view()-&gt;visibleHeight();

There seems to be a mix of &quot;long&quot;, &quot;int&quot;, and &quot;unsigned&quot; when talking about attached window heights. It would be good to use a single type as much as possible.

&quot;inspectedHeight&quot; is a confusing name. We aren&apos;t inspecting the height, we&apos;re inspecting the page. &quot;inspectedPageHeight&quot; would be better.

&gt;      m_client-&gt;attachWindow();
&gt; +    
&gt; +    Setting attachedHeight = setting(inspectorAttachedHeightName);
&gt; +    int preferredHeight = attachedHeight.type() == Setting::IntegerType ? attachedHeight.integerValue() : defaultAttachedHeight;
&gt; +    m_client-&gt;setAttachedWindowHeight(constrainedAttachedWindowHeight(preferredHeight, inspectedHeight));

It would be good to add a comment here about how we have to reconstrain the height based on the current height of the inspected page.

&gt; +long InspectorController::constrainedAttachedWindowHeight(long preferredHeight, long totalWindowHeight)

This can just be a static helper function. It doesn&apos;t need to be a member of the InspectorController class.

&gt; +    // Save a preference for the user&apos;s preferred attached height and pass it to the client
&gt; +    setSetting(inspectorAttachedHeightName, Setting(attachedHeight));

We aren&apos;t saving the preferred height, we&apos;re saving the constrained height. I don&apos;t think this comment is needed at all, though.

&gt;  void InspectorController::showWindow()
&gt;  {
&gt;      ASSERT(enabled());
&gt; +    
&gt; +    int inspectedHeight = m_inspectedPage-&gt;mainFrame()-&gt;view()-&gt;visibleHeight();
&gt; +    
&gt;      m_client-&gt;showWindow();
&gt; +    
&gt; +    Setting attachedHeight = setting(inspectorAttachedHeightName);
&gt; +    int preferredHeight = attachedHeight.type() == Setting::IntegerType ? attachedHeight.integerValue() : defaultAttachedHeight;
&gt; +    m_client-&gt;setAttachedWindowHeight(constrainedAttachedWindowHeight(preferredHeight, inspectedHeight));
&gt;  }

We only need to do this if we&apos;re going to start out attached, right? Again, I think a comment would be useful. It might also be worth adding a FIXME about how it&apos;s strange that we have to do this both here and in attachWindow; we should only have to do it once. It might be that we can fix this eventually by moving more code down into WebCore, but we don&apos;t have to do that now.

&gt; @@ -323,7 +320,7 @@ void WebInspectorClient::updateWindowTit
&gt;  
&gt;      if (_shouldAttach) {
&gt;          WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView];
&gt; -
&gt; +        

Please undo this whitespace change.

&gt;  - (void)setAttachedWindowHeight:(unsigned)height
&gt;  {
&gt; -    [[NSUserDefaults standardUserDefaults] setInteger:height forKey:WebKitInspectorAttachedViewHeightKey];
&gt; -
&gt;      if (!_attachedToInspectedWebView)
&gt;          return;
&gt; -
&gt; -    WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView];
&gt; -    NSRect frameViewRect = [frameView frame];
&gt; -
&gt; -    CGFloat attachedHeight = round(MAX(250.0, MIN(height, (NSHeight([_inspectedWebView frame]) * 0.75))));
&gt; -
&gt; +    

Please remove the whitespace on this line.

&gt;  void WebInspectorClient::setAttachedWindowHeight(unsigned height)
&gt;  {
&gt; -    // FIXME: implement this.
&gt; +    if (!m_attached)
&gt; +        return;
&gt; +
&gt; +    HWND hostWindow;
&gt; +    if (!SUCCEEDED(m_inspectedWebView-&gt;hostWindow((OLE_HANDLE*)&amp;hostWindow)))
&gt; +        return;
&gt; +
&gt; +    RECT hostWindowRect;
&gt; +    GetClientRect(hostWindow, &amp;hostWindowRect);
&gt; +
&gt; +    RECT inspectedRect;
&gt; +    GetClientRect(m_inspectedWebViewHwnd, &amp;inspectedRect);
&gt; +
&gt; +    int totalHeight = hostWindowRect.bottom - hostWindowRect.top;
&gt; +    int webViewWidth = inspectedRect.right - inspectedRect.left;
&gt; +
&gt; +    SetWindowPos(m_webViewHwnd, 0, 0, totalHeight - height, webViewWidth, height, SWP_NOZORDER);
&gt; +    SetWindowPos(m_inspectedWebViewHwnd, 0, 0, 0, webViewWidth, totalHeight, SWP_NOZORDER);

Please add a comment here explaining why totalHeight is the right height to set m_inspectedWebViewHwnd to.

So close! I&apos;m really happy with how this is shaping up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132694</commentid>
    <comment_count>17</comment_count>
      <attachid>32968</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-17 14:12:39 -0700</bug_when>
    <thetext>Created attachment 32968
Resize Attach Height</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132759</commentid>
    <comment_count>18</comment_count>
      <attachid>32968</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-17 16:13:40 -0700</bug_when>
    <thetext>Comment on attachment 32968
Resize Attach Height

&gt;  void InspectorController::showWindow()
&gt;  {
&gt;      ASSERT(enabled());
&gt; +
&gt; +    unsigned inspectedPageHeight = m_inspectedPage-&gt;mainFrame()-&gt;view()-&gt;visibleHeight();
&gt; +
&gt;      m_client-&gt;showWindow();
&gt; +
&gt; +    Setting attachedHeight = setting(inspectorAttachedHeightName);
&gt; +    unsigned preferredHeight = attachedHeight.type() == Setting::IntegerType ? attachedHeight.integerValue() : defaultAttachedHeight;
&gt; +
&gt; +    // This call might not go through (if the window starts out detached), but if the window is initially created attached,
&gt; +    // InspectorController::attachWindow is never called, so we need to make sure to set the attachedWindowHeight.
&gt; +    m_client-&gt;setAttachedWindowHeight(constrainedAttachedWindowHeight(preferredHeight, inspectedPageHeight));

I think it&apos;s worth adding a FIXME here about cleaning this up so we can share this logic with attachWindow.

This turned out really nicely. Thanks for doing all those revisions and working out the bugs!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132784</commentid>
    <comment_count>19</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-17 17:10:46 -0700</bug_when>
    <thetext>Committed in revision 46071.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32606</attachid>
            <date>2009-07-10 20:30:47 -0700</date>
            <delta_ts>2009-07-13 16:59:30 -0700</delta_ts>
            <desc>Height Patch</desc>
            <filename>ChangeAttachHeight.patch</filename>
            <type>text/plain</type>
            <size>4653</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NTc0MykKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDctMTAgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3
ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIDxyZGFyOi8vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRoZSBoZWln
aHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEltcGxlbWVudGVkIHRoZSBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0IG9uIFdpbmRvd3MgYW5k
IHNhdmVkIHRoZSB2YWx1ZQorICAgICAgICBpbiBhIHByZWZlcmVuY2UgdG8gbGV0IHRoZSBvbldl
YlZpZXdXaW5kb3dQb3NDaGFuZ2luZyB0byBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgaW5zcGVj
dG9yCisgICAgICAgIGFuZCB0byByZW1lbWJlciB0aGUgdXNlcidzIHByZWZlcnJlZCBoZWlnaHQg
b2YgdGhlIGRvY2tlZCBpbnNwZWN0b3IuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmll
d1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuaDoKKwogMjAwOS0wNy0xMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcgd2l0aCB0aGUgcG93ZXIgb2YgR3Jh
eXNrdWxsLgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNDU2ODkpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcg
QEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWROYW1lID0gImluc3BlY3RvclN0YXJ0c0F0dGFjaGVkIjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAi
aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwogCiBzdGF0aWMgTFBDVFNUUiBrV2ViSW5zcGVjdG9y
V2luZG93Q2xhc3NOYW1lID0gVEVYVCgiV2ViSW5zcGVjdG9yV2luZG93Q2xhc3MiKTsKIHN0YXRp
YyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKQEAgLTI1NSw3ICsyNTYsMjkgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudCB0aGlzLgorICAgIFJFQ1QgaW5zcGVjdGVkUmVjdDsKKyAgICBHZXRD
bGllbnRSZWN0KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsICZpbnNwZWN0ZWRSZWN0KTsKKworICAg
IGludCB3ZWJWaWV3WCA9IGluc3BlY3RlZFJlY3QubGVmdDsKKyAgICBpbnQgd2ViVmlld1kgPSBt
X2F0dGFjaGVkUGFyZW50SGVpZ2h0IC0gaGVpZ2h0OworICAgIGludCB3ZWJWaWV3V2lkdGggPSBp
bnNwZWN0ZWRSZWN0LnJpZ2h0IC0gaW5zcGVjdGVkUmVjdC5sZWZ0OworICAgIGludCB3ZWJWaWV3
SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyBoZWln
aHRTZXR0aW5nOworICAgIGhlaWdodFNldHRpbmcuc2V0KHN0YXRpY19jYXN0PGxvbmc+KGhlaWdo
dCkpOworICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBoZWlnaHRTZXR0aW5n
KTsKKworICAgIFNlbmRNZXNzYWdlKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIFdNX1NFVFJFRFJB
VywgRkFMU0UsIE5VTEwpOworICAgIFNlbmRNZXNzYWdlKG1fd2ViVmlld0h3bmQsIFdNX1NFVFJF
RFJBVywgRkFMU0UsIE5VTEwpOworCisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRXZWJW
aWV3SHduZCwgMCwgd2ViVmlld1gsIGluc3BlY3RlZFJlY3QudG9wLCB3ZWJWaWV3V2lkdGgsIG1f
YXR0YWNoZWRQYXJlbnRIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3Mo
bV93ZWJWaWV3SHduZCwgMCwgd2ViVmlld1gsIHdlYlZpZXdZLCB3ZWJWaWV3V2lkdGgsIHdlYlZp
ZXdIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisKKyAgICBTZW5kTWVzc2FnZShtX2luc3BlY3RlZFdl
YlZpZXdId25kLCBXTV9TRVRSRURSQVcsIFRSVUUsIE5VTEwpOworICAgIFNlbmRNZXNzYWdlKG1f
d2ViVmlld0h3bmQsIFdNX1NFVFJFRFJBVywgVFJVRSwgTlVMTCk7CisKKyAgICBSZWRyYXdXaW5k
b3cobV93ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4g
fCBSRFdfVVBEQVRFTk9XKTsKKyAgICBSZWRyYXdXaW5kb3cobV9pbnNwZWN0ZWRXZWJWaWV3SHdu
ZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9X
KTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKikKQEAgLTQx
MCwxMiArNDMzLDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3cK
ICAgICBXSU5ET1dQT1MqIHdpbmRvd1BvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4o
bFBhcmFtKTsKICAgICBBU1NFUlRfQVJHKGxQYXJhbSwgd2luZG93UG9zKTsKIAorICAgIC8vIENh
Y2hlIHRoaXMgdmFsdWUgYmVjYXVzZSBHZXRDbGllbnRSZWN0IGRvZXNuJ3QgZ2l2ZSB0aGUgY29y
cmVjdCBwYXJlbnQgaGVpZ2h0CisgICAgLy8gQW5kIHdoZW5ldmVyIHRoZSBoZWlnaHQgdXBkYXRl
cyBhbmQgYW4gaW5zcGVjdG9yIGlzIGF0dGFjaGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs
bGVkIGZpcnN0LgorICAgIG1fYXR0YWNoZWRQYXJlbnRIZWlnaHQgPSB3aW5kb3dQb3MtPmN5Owor
CiAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQogICAgICAgICByZXR1cm47
CiAKLSAgICB3aW5kb3dQb3MtPmN5IC09IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0ZWRXZWJW
aWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhpbnNwZWN0b3JBdHRh
Y2hlZEhlaWdodE5hbWUpOworICAgIGxvbmcgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudHlwZSgp
ID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkludGVnZXJUeXBlID8gYXR0YWNoZWRI
ZWlnaHQuaW50ZWdlclZhbHVlKCkgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisKKyAgICB3aW5k
b3dQb3MtPmN5IC09IGhlaWdodDsKIAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQs
IDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9z
LT5jeCwgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2lu
ZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2lu
ZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogfQogCiBz
dGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhXTkQgaHduZCwgVUlO
VCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCkluZGV4OiBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHJldmlzaW9uIDQ1NTI2KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCBwcml2YXRlOgogICAgIEhXTkQgbV9od25kOwogICAg
IENPTVB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgSFdORCBtX3dlYlZpZXdId25kOworICAg
IHVuc2lnbmVkIG1fYXR0YWNoZWRQYXJlbnRIZWlnaHQ7CiAKICAgICBib29sIG1fc2hvdWxkQXR0
YWNoV2hlblNob3duOwogICAgIGJvb2wgbV9hdHRhY2hlZDsK
</data>
<flag name="review"
          id="17020"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32688</attachid>
            <date>2009-07-13 16:59:30 -0700</date>
            <delta_ts>2009-07-14 19:55:16 -0700</delta_ts>
            <desc>Cross Platform Fix + Refactoring</desc>
            <filename>Inspector_attach_crossplatform.patch</filename>
            <type>text/plain</type>
            <size>21280</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDctMTMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisKKyAgICAgICAgTW92
ZWQgY29kZSBmb3IgY2FsY3VsYXRpb24gb2YgaW5zcGVjdG9yIHNpemUgYW5kIHN0b3Jpbmcgb2Yg
cHJlZmVyZW5jZXMgaW50byB0aGUgY3Jvc3MgcGxhdGZvcm0KKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaDogQWRkZWQg
bmV3IG5lZWRlZCBmdW5jdGlvbnMKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6IE1vdmVkIHJlc2l6aW5nIGxvZ2ljIGZyb20gSW5zcGVjdG9yQ2xpZW50IHRvIGhl
cmUKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRy
b2xsZXIpOiAKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6IEFkZGVk
IG5ldyBmdW5jdGlvbnMgdG8gcHJldmVudCBjb21waWxhdGlvbiBlcnJvcnMKKyAgICAgICAgKFdl
YkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpnZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNo
ZWRIZWlnaHQpOgorCiAyMDA5LTA3LTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2aW4gRGVja2VyLgpJbmRleDogV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgJKHJldmlzaW9uIDQ1NzgxKQorKysgV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgPSAwOwogCisgICAg
dmlydHVhbCBsb25nIGdldEluc3BlY3RlZFdlYlZpZXdIZWlnaHQoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCkgPSAwOworCiAgICAg
dmlydHVhbCB2b2lkIHNob3dXaW5kb3coKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlV2lu
ZG93KCkgPSAwOwogCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gNDU3ODEpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOSBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgVXNlckluaXRpYXRlZFByCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJFbmFibGVkU2V0dGluZ05hbWUg
PSAiZGVidWdnZXJFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwcm9maWxlckVu
YWJsZWRTZXR0aW5nTmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhl
aWdodCI7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAz
MDA7CiAKIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWVOb2RlKQog
ewpAQCAtMTg4LDYgKzE5MSwxMiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250
cm9sbGVyCiAgICAgQVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKICAgICBBU1NFUlRfQVJHKGNsaWVu
dCwgY2xpZW50KTsKICAgICArK3NfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50OworCisgICAgLy8g
U2V0IHRoZSBpbml0aWFsIGF0dGFjaGVkIGhlaWdodCB0byB0aGUgdXNlcnMgcHJlZmVycmVkIGF0
dGFjaGVkIGhlaWdodAorICAgIC8vIEl0IG1pZ2h0IG5vdCBzdGFydCBvdXQgYXR0YWNoZWQsIGJ1
dCB0aGlzIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBiZWZvcmUKKyAgICAvLyBpdCBj
b3VsZCBiZSBhdHRhY2hlZAorICAgIFNldHRpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgbV9jbGllbnQtPnNldEluaXRpYWxBdHRh
Y2hlZEhlaWdodChhdHRhY2hlZEhlaWdodC50eXBlKCkgPT0gU2V0dGluZzo6SW50ZWdlclR5cGUg
PyBhdHRhY2hlZEhlaWdodC5pbnRlZ2VyVmFsdWUoKSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodCk7
CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKQEAgLTQ3
OSw3ICs0ODgsMTcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbgog
ewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jbGllbnQtPnNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CisKKyAgICBsb25nIGF0dGFjaGVkSGVpZ2h0
ID0gcm91bmQobWF4KHN0YXRpY19jYXN0PGZsb2F0PigyNTAuMCksIAorICAgICAgICBzdGF0aWNf
Y2FzdDxmbG9hdD4obWluKHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQpLCAKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5nZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KCkgKiAu
NzUpKSkpKTsKKworICAgIC8vIFNhdmUgYSBwcmVmZXJlbmNlIGZvciB0aGUgdXNlcnMgcHJlZmVy
cmVkIGF0dGFjaGVkIGhlaWdodAorICAgIFNldHRpbmcgaGVpZ2h0U2V0dGluZzsKKyAgICBoZWln
aHRTZXR0aW5nLnNldChhdHRhY2hlZEhlaWdodCk7CisgICAgc2V0U2V0dGluZyhpbnNwZWN0b3JB
dHRhY2hlZEhlaWdodE5hbWUsIGhlaWdodFNldHRpbmcpOworCisgICAgbV9jbGllbnQtPnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjp0b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCkKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCShyZXZpc2lvbiA0NTc4MSkKKysrIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDksNiArNDQ5LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAorICAgIHZpcnR1
YWwgbG9uZyBnZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZykgeyB9CisKICAgICB2aXJ0
dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
IHsgfQogCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNDU4NDYpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA3LTEzICBCcmlhbiBXZWluc3Rl
aW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjog
Q2Fubm90IGNoYW5nZSB0aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQy
NzIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3
MgorCisgICAgICAgIEFkZGVkIHN0dWIgZnVuY3Rpb25zIGZvciBndGsuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpn
ZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6c2V0SW5pdGlhbEF0
dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRH
dGsuaDoKKwogMjAwOS0wNy0xMyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3Jv
bmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBVbnJldmlld2VkLiBMYXRlIE5FV1MgZmls
ZSBmb3IgMS4xLjExLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gNDU3ODEpCisrKyBXZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsMTcgQEAgU3RyaW5nIEluc3BlY3RvckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KKyAgICAKK2xvbmcgZ2V0
SW5zcGVjdGVkV2ViVmlld0hlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyAgICAKK3ZvaWQgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVp
Z2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CiAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50
OjpzaG93V2luZG93KCkKIHsKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRHdGsuaAkocmV2aXNpb24gNDU3ODEpCisrKyBXZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJp
bmcgaGlkZGVuUGFuZWxzKCk7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGxvbmcgZ2V0SW5z
cGVjdGVkV2ViVmlld0hlaWdodCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbEF0
dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dp
bmRvdygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA0NTg0NikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMDktMDctMTMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRoZSBo
ZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisKKyAgICAgICAgUmVmYWN0
b3JlZCBtYWMgY29kZSB0byBkbyBJbnNwZWN0b3Igc2l6ZSBjYWxjdWxhdGlvbnMgaW5zaWRlIG9m
IEluc3BlY3RvckNvbnRyb2xsZXIsIGFuZCB1c2UgSW5zcGVjdG9yQ29udHJvbGxlcgorICAgICAg
ICB0byBzdG9yZSB0aGUgdXNlcnMgcHJlZmVycmVkIHNpemUgZm9yIGFuIGF0dGFjaGVkIHdpbmRv
dywgaW5zdGVhZCBvZiBOU1VzZXJEZWZhdWx0cy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmdldEluc3BlY3RlZFdlYlZpZXdIZWlnaHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQp
OgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEluaXRpYWxBdHRh
Y2hlZEhlaWdodDpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBn
ZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlciBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDpdKToKKwogMjAwOS0wNy0xMyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLCBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTc4MSkKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxv
Y2FsaXplZFN0cmluZ3NVUkwoKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRl
blBhbmVscygpOworICAgIAorICAgIHZpcnR1YWwgbG9uZyBnZXRJbnNwZWN0ZWRXZWJWaWV3SGVp
Z2h0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhl
aWdodCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwogICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpOwpAQCAtNjksNiArNzIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKSBjb25zdDsKIAorICAgIGxvbmcgbV9pbml0aWFsQXR0
YWNoZWRIZWlnaHQ7CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJJ
bnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiBtX3dpbmRvd0NvbnRyb2xsZXI7CiAgICAgV2ViQ29y
ZTo6U3RyaW5nIG1faW5zcGVjdGVkVVJMOwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDQ1NzgxKQorKysgV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvclN0YXJ0
cwogICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIFdlYlZpZXcgKl93ZWJWaWV3
OwogICAgIFdlYk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworICAgIGxvbmcgX2F0
dGFjaGVkSGVpZ2h0OwogICAgIEJPT0wgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3OwogICAg
IEJPT0wgX3Nob3VsZEF0dGFjaDsKICAgICBCT09MIF92aXNpYmxlOwpAQCAtNTcsNiArNTgsOCBA
QCBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yU3RhcnRzCiB9CiAtIChpZClpbml0
V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAoQk9PTClpbnNwZWN0
b3JWaXNpYmxlOworLSAobG9uZylnZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0OworLSAodm9pZClz
ZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQ6KGxvbmcpaGVpZ2h0OwogLSAoV2ViVmlldyAqKXdlYlZp
ZXc7CiAtICh2b2lkKWF0dGFjaDsKIC0gKHZvaWQpZGV0YWNoOwpAQCAtODAsOCArODMsMTEgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3RybwogCiBQYWdlKiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQogewotICAgIGlmICghbV93aW5kb3dDb250cm9sbGVy
KQorICAgIGlmICghbV93aW5kb3dDb250cm9sbGVyKSB7CiAgICAgICAgIG1fd2luZG93Q29udHJv
bGxlci5hZG9wdE5TKFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhJbnNwZWN0ZWRXZWJWaWV3Om1fd2ViVmlld10pOworICAgICAgICBbbV93aW5kb3dDb250cm9s
bGVyLmdldCgpIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodDptX2luaXRpYWxBdHRhY2hlZEhlaWdo
dF07CisgICAgfQorICAgIAogCiAgICAgcmV0dXJuIGNvcmUoW21fd2luZG93Q29udHJvbGxlci5n
ZXQoKSB3ZWJWaWV3XSk7CiB9CkBAIC0xMDIsNiArMTA4LDE2IEBAIFN0cmluZyBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGRlblBhbmVscygKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK2xvbmcg
V2ViSW5zcGVjdG9yQ2xpZW50OjpnZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KCkgCit7CisgICAg
cmV0dXJuIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZ2V0SW5zcGVjdGVkV2ViVmlld0hlaWdo
dF07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRIZWln
aHQobG9uZyBoZWlnaHQpIAoreworICAgIG1faW5pdGlhbEF0dGFjaGVkSGVpZ2h0ID0gaGVpZ2h0
OworfQorCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvdygpCiB7CiAgICAgdXBk
YXRlV2luZG93VGl0bGUoKTsKQEAgLTIzMSw2ICsyNDcsMjEgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OnVwZGF0ZVdpbmRvd1RpdAogICAgIHJldHVybiBfd2ViVmlldzsKIH0KIAorLSAodm9p
ZClzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQ6KGxvbmcpaGVpZ2h0Cit7CisgICAgX2F0dGFjaGVk
SGVpZ2h0ID0gaGVpZ2h0OworfQorCistIChsb25nKWdldEluc3BlY3RlZFdlYlZpZXdIZWlnaHQK
K3sKKyAgICBBU1NFUlQoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KTsKKyAgICAKKyAgICAv
LyBGb3IgY2FsY3VsYXRpb25zLCB3ZSB3YW50IHRoZSBoZWlnaHQgb2YgdGhlIGZyYW1lIHZpZXcg
YW5kIHRoZSBoZWlnaHQgb2YgdGhlIGF0dGFjaGVkIGluc3BlY3RvcgorICAgIC8vIHRvIGNhbGN1
bGF0ZSB0aGUgY29ycmVjdCBib3VuZHMKKyAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtb
X2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddOworICAgIHJldHVybiBOU0hl
aWdodChbZnJhbWVWaWV3IGZyYW1lXSkgKyBfYXR0YWNoZWRIZWlnaHQ7Cit9CisKIC0gKE5TV2lu
ZG93ICopd2luZG93CiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzdXBlciB3aW5kb3ddOwpA
QCAtMzMyLDcgKzM2Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXQKIAogICAgICAgICBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcgPSBZRVM7CiAKLSAgICAg
ICAgW3NlbGYgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZFZpZXdI
ZWlnaHRLZXldXTsKKyAgICAgICAgW3NlbGYgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6X2F0dGFj
aGVkSGVpZ2h0XTsKICAgICB9IGVsc2UgewogICAgICAgICBfYXR0YWNoZWRUb0luc3BlY3RlZFdl
YlZpZXcgPSBOTzsKIApAQCAtMzgxLDIzICs0MTIsMjEgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OnVwZGF0ZVdpbmRvd1RpdAogCiAtICh2b2lkKXNldEF0dGFjaGVkV2luZG93SGVpZ2h0Oih1
bnNpZ25lZCloZWlnaHQKIHsKLSAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSBzZXRJbnRlZ2VyOmhlaWdodCBmb3JLZXk6V2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRWaWV3
SGVpZ2h0S2V5XTsKLQogICAgIGlmICghX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtbX2luc3BlY3Rl
ZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddOwotICAgIE5TUmVjdCBmcmFtZVZpZXdSZWN0
ID0gW2ZyYW1lVmlldyBmcmFtZV07Ci0KLSAgICBDR0Zsb2F0IGF0dGFjaGVkSGVpZ2h0ID0gcm91
bmQoTUFYKDI1MC4wLCBNSU4oaGVpZ2h0LCAoTlNIZWlnaHQoW19pbnNwZWN0ZWRXZWJWaWV3IGZy
YW1lXSkgKiAwLjc1KSkpKTsKLQorICAgIAorICAgIF9hdHRhY2hlZEhlaWdodCA9IGhlaWdodDsK
KyAgICAKICAgICAvLyBTZXR0aW5nIHRoZSBoZWlnaHQgYmFzZWQgb24gdGhlIGRpZmZlcmVuY2Ug
aXMgZG9uZSB0byB3b3JrIHdpdGgKICAgICAvLyBTYWZhcmkncyBmaW5kIGJhbm5lci4gVGhpcyBh
c3N1bWVzIHRoZSBwcmV2aW91cyBoZWlnaHQgaXMgdGhlIFkgb3JpZ2luLgotICAgIENHRmxvYXQg
aGVpZ2h0RGlmZmVyZW5jZSA9IChOU01pblkoZnJhbWVWaWV3UmVjdCkgLSBhdHRhY2hlZEhlaWdo
dCk7CisgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNwZWN0ZWRXZWJWaWV3IG1h
aW5GcmFtZV0gZnJhbWVWaWV3XTsKKyAgICBOU1JlY3QgZnJhbWVWaWV3UmVjdCA9IFtmcmFtZVZp
ZXcgZnJhbWVdOworICAgIAorICAgIENHRmxvYXQgaGVpZ2h0RGlmZmVyZW5jZSA9IChOU01pblko
ZnJhbWVWaWV3UmVjdCkgLSBoZWlnaHQpOwogICAgIGZyYW1lVmlld1JlY3Quc2l6ZS5oZWlnaHQg
Kz0gaGVpZ2h0RGlmZmVyZW5jZTsKLSAgICBmcmFtZVZpZXdSZWN0Lm9yaWdpbi55ID0gYXR0YWNo
ZWRIZWlnaHQ7CisgICAgZnJhbWVWaWV3UmVjdC5vcmlnaW4ueSA9IGhlaWdodDsKIAotICAgIFtf
d2ViVmlldyBzZXRGcmFtZTpOU01ha2VSZWN0KDAuMCwgMC4wLCBOU1dpZHRoKGZyYW1lVmlld1Jl
Y3QpLCBhdHRhY2hlZEhlaWdodCldOworICAgIFtfd2ViVmlldyBzZXRGcmFtZTpOU01ha2VSZWN0
KDAuMCwgMC4wLCBOU1dpZHRoKGZyYW1lVmlld1JlY3QpLCBoZWlnaHQpXTsKICAgICBbZnJhbWVW
aWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwogfQogCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1ODQ2KQor
KysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDA5LTA3LTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggb2YgPHJkYXI6
Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0aGUgaGVpZ2h0IG9mIHRoZSBk
b2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEFkZGVkIHN0dWIgZnVuY3Rpb25z
IGZvciBxdC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEluc3BlY3RlZFdlYlZpZXdIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oOgorCiAyMDA5LTA3LTEzICBTaW1vbiBIYXVzbWFu
biAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5
YSBIaWRheWF0LgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50UXQuY3BwCShyZXZpc2lvbiA0NTc4MSkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTcg
QEAgU3RyaW5nIEluc3BlY3RvckNsaWVudFF0OjpoaWRkZW5QYW5lbHMoKQogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KIAorbG9uZyBnZXRJbnNwZWN0ZWRXZWJWaWV3SGVpZ2h0KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorICAgIAordm9pZCBzZXRJbml0aWFs
QXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyAgICAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNob3dXaW5kb3coKQogewogICAgIGlmICgh
bV93ZWJQYWdlKQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudFF0LmgJKHJldmlzaW9uIDQ1NzgxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJM
KCk7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIGxvbmcgZ2V0SW5zcGVjdGVkV2ViVmlld0hlaWdodCgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KTsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VXaW5kb3coKTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg0NikKKysrIFdlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMDctMTMgIEJyaWFu
IFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5
NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRoZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVj
dG9yICgxNDI3MikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MjcyCisKKyAgICAgICAgSW1wbGVtZW50ZWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQg
dG8gcmVzaXplIGFuZCByZWRyYXcgdGhlIGluc3BlY3RvciwgYW5kIHVzZWQgc3RvcmVkIHByZWZl
cmVuY2VzCisgICAgICAgIGluIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gcmVtZW1iZXIgdXNlcidz
IHByZWZlcnJlZCBoZWlnaHQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JD
bGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpnZXRJbnNwZWN0ZWRXZWJWaWV3
SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6c2V0SW5pdGlhbEF0dGFjaGVk
SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQb3ND
aGFuZ2luZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lmg6
CisKIDIwMDktMDctMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0NTc4MSkKKysr
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBzdGF0aWMgTFBDVFNUUiBrV2ViSW5zcGVjdG9yV2lu
ZG93Q2xhc3NOCiBzdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiBzdGF0aWMgTFBD
VFNUUiBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AgPSBURVhUKCJXZWJJbnNwZWN0b3JQb2ludGVy
Iik7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7
Ci0KIHN0YXRpYyBjb25zdCBJbnRSZWN0JiBkZWZhdWx0V2luZG93UmVjdCgpCiB7CiAgICAgc3Rh
dGljIEludFJlY3QgcmVjdCg2MCwgMjAwLCA3NTAsIDY1MCk7CkBAIC03Niw2ICs3NCw3IEBAIFdl
Ykluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFcKICAgICAsIG1fd2ViVmlld0h3
bmQoMCkKICAgICAsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQogICAgICwgbV9hdHRh
Y2hlZChmYWxzZSkKKyAgICAsIG1fYXR0YWNoZWRIZWlnaHQoMCkKIHsKICAgICBBU1NFUlQobV9p
bnNwZWN0ZWRXZWJWaWV3KTsKIApAQCAtMjQyLDYgKzI0MSwxNyBAQCB2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6YXR0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlv
bnMoKTsKIH0KIAorbG9uZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmdldEluc3BlY3RlZFdlYlZpZXdI
ZWlnaHQoKSAKK3sKKyAgICBBU1NFUlQobV9hdHRhY2hlZCk7CisgICAgcmV0dXJuIG1fYXR0YWNo
ZWRQYXJlbnRIZWlnaHQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFs
QXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9hdHRhY2hlZEhlaWdodCA9IGhl
aWdodDsKK30KKwogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAg
ICAgaWYgKCFtX2F0dGFjaGVkKQpAQCAtMjU1LDcgKzI2NSwyNyBAQCB2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6ZGV0YWNoV2luZG93KCkKIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMuCisgICAgUkVDVCBpbnNwZWN0ZWRSZWN0OworICAgIEdldENsaWVudFJlY3Qo
bV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgJmluc3BlY3RlZFJlY3QpOworCisgICAgaW50IHdlYlZp
ZXdYID0gaW5zcGVjdGVkUmVjdC5sZWZ0OworICAgIGludCB3ZWJWaWV3WSA9IG1fYXR0YWNoZWRQ
YXJlbnRIZWlnaHQgLSBoZWlnaHQ7CisgICAgaW50IHdlYlZpZXdXaWR0aCA9IGluc3BlY3RlZFJl
Y3QucmlnaHQgLSBpbnNwZWN0ZWRSZWN0LmxlZnQ7CisgICAgaW50IHdlYlZpZXdIZWlnaHQgPSBo
ZWlnaHQ7CisKKyAgICBtX2F0dGFjaGVkSGVpZ2h0ID0gaGVpZ2h0OworCisgICAgU2VuZE1lc3Nh
Z2UobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgV01fU0VUUkVEUkFXLCBGQUxTRSwgTlVMTCk7Cisg
ICAgU2VuZE1lc3NhZ2UobV93ZWJWaWV3SHduZCwgV01fU0VUUkVEUkFXLCBGQUxTRSwgTlVMTCk7
CisKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAwLCB3ZWJWaWV3
WCwgaW5zcGVjdGVkUmVjdC50b3AsIHdlYlZpZXdXaWR0aCwgbV9hdHRhY2hlZFBhcmVudEhlaWdo
dCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCB3
ZWJWaWV3WCwgd2ViVmlld1ksIHdlYlZpZXdXaWR0aCwgd2ViVmlld0hlaWdodCwgU1dQX05PWk9S
REVSKTsKKworICAgIFNlbmRNZXNzYWdlKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIFdNX1NFVFJF
RFJBVywgVFJVRSwgTlVMTCk7CisgICAgU2VuZE1lc3NhZ2UobV93ZWJWaWV3SHduZCwgV01fU0VU
UkVEUkFXLCBUUlVFLCBOVUxMKTsKKworICAgIFJlZHJhd1dpbmRvdyhtX3dlYlZpZXdId25kLCAw
LCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwor
ICAgIFJlZHJhd1dpbmRvdyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAwLCAwLCBSRFdfSU5WQUxJ
REFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwogfQogCiB2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqKQpAQCAtNDEwLDEyICs0NDAsMTYgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvdwogICAgIFdJTkRPV1BPUyogd2lu
ZG93UG9zID0gcmVpbnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOwogICAgIEFTU0VS
VF9BUkcobFBhcmFtLCB3aW5kb3dQb3MpOwogCisgICAgLy8gQ2FjaGUgdGhpcyB2YWx1ZSBiZWNh
dXNlIEdldENsaWVudFJlY3QgZG9lc24ndCBnaXZlIHRoZSBjb3JyZWN0IHBhcmVudCBoZWlnaHQK
KyAgICAvLyBBbmQgd2hlbmV2ZXIgdGhlIGhlaWdodCB1cGRhdGVzIGFuZCBhbiBpbnNwZWN0b3Ig
aXMgYXR0YWNoZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisgICAgbV9h
dHRhY2hlZFBhcmVudEhlaWdodCA9IHdpbmRvd1Bvcy0+Y3k7CisKICAgICBpZiAod2luZG93UG9z
LT5mbGFncyAmIFNXUF9OT1NJWkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdpbmRvd1Bvcy0+
Y3kgLT0gZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIHdpbmRvd1Bvcy0+Y3kgLT0gbV9hdHRh
Y2hlZEhlaWdodDsKIAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRv
d1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgZGVm
YXVsdEF0dGFjaGVkSGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1f
d2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5j
eSwgd2luZG93UG9zLT5jeCwgbV9hdHRhY2hlZEhlaWdodCwgU1dQX05PWk9SREVSKTsKIH0KIAog
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJ
TlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpJbmRleDogV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTc4MSkK
KysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAKKyAgICB2aXJ0dWFsIGxvbmcgZ2V0SW5zcGVjdGVk
V2ViVmlld0hlaWdodCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRIZWln
aHQobG9uZyBoZWlnaHQpOworCiAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJs
ZSgpOwpAQCAtOTIsOSArOTUsMTEgQEAgcHJpdmF0ZToKICAgICBIV05EIG1faHduZDsKICAgICBD
T01QdHI8V2ViVmlldz4gbV93ZWJWaWV3OwogICAgIEhXTkQgbV93ZWJWaWV3SHduZDsKKyAgICB1
bnNpZ25lZCBtX2F0dGFjaGVkUGFyZW50SGVpZ2h0OwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNoZWQ7CisgICAgbG9uZyBtX2F0dGFjaGVkSGVp
Z2h0OwogCiAgICAgT3duUHRyPFdlYk5vZGVIaWdobGlnaHQ+IG1faGlnaGxpZ2h0OwogCkluZGV4
OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQ1ODQ2KQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDA5LTA3LTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0
aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEFk
ZGVkIHN0dWIgZnVuY3Rpb25zIGZvciB3eC4KKworICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5zcGVjdGVkV2ViVmll
d0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQpOgor
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaDoKKwogMjAwOS0wNy0x
MiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAogICAgICAgICBTcGVjdWxh
dGl2ZSBidWlsZCBmaXggYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDU3
ODYuCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3gu
Y3BwCShyZXZpc2lvbiA0NTc4MSkKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTcgQEAgU3RyaW5nIElu
c3BlY3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQorICAgIAorbG9uZyBnZXRJbnNwZWN0ZWRXZWJWaWV3SGVp
Z2h0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorICAgIAor
dm9pZCBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KIAogdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2hvd1dpbmRvdygpCiB7
CkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgJKHJl
dmlzaW9uIDQ1NzgxKQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgaGlk
ZGVuUGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCBsb25nIGdldEluc3BlY3RlZFdlYlZpZXdI
ZWlnaHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KGxvbmcg
aGVpZ2h0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93KCk7Cg==
</data>
<flag name="review"
          id="17074"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32761</attachid>
            <date>2009-07-14 19:55:16 -0700</date>
            <delta_ts>2009-07-15 14:22:55 -0700</delta_ts>
            <desc>Take 3</desc>
            <filename>Inspector_attach_function_rename.patch</filename>
            <type>text/plain</type>
            <size>24003</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDctMTQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisKKyAgICAgICAgTW92
ZWQgcHJlZmVyZW5jZSBzZXR0aW5nIGZvciBhdHRhY2hlZCBpbnNwZWN0b3IgaGVpZ2h0IGFuZCBp
bnNwZWN0b3IgaGVpZ2h0IGNhbGN1bGF0aW9uIGZyb20KKyAgICAgICAgV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tIGludG8gSW5zcGVjdG9yQ29udHJvbGxlci5jcHAsIHRvIG1ha2UgdGhpcyBjb2RlIGNy
b3NzLXBsYXRmb3JtIGFuZCBlbmFibGUKKyAgICAgICAgV2luZG93cyByZXNpemluZyBvZiBhdHRh
Y2hlZCBpbnNwZWN0b3IuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCk6IENhbGN1bGF0ZSBBdHRhY2hlZCBJbnNwZWN0b3IgSGVpZ2h0IGFuZCBzYXZlIFByZWZlcm5j
ZQorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTZXR0aW5nKToKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdG9yUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUlu
c3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUluc3BlY3RvckNsaWVudDo6c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KToKKwogMjAwOS0w
Ny0xNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCShy
ZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0
cmluZyBoaWRkZW5QYW5lbHMoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdG9yUGFn
ZUhlaWdodCgpID0gMDsKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMSBA
QCBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlckluaXRpYXRlZFByCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJFbmFi
bGVkU2V0dGluZ05hbWUgPSAiZGVidWdnZXJFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbGFzdEFjdGl2
ZVBhbmVsU2V0dGluZ05hbWUgPSAibGFzdEFjdGl2ZVBhbmVsIjsKIAorc3RhdGljIGNvbnN0IGxv
bmcgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOworCiBib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIE5vZGUqIGZyYW1lTm9kZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwg
ZnJhbWVOb2RlKTsKQEAgLTE4OSw2ICsxOTIsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcgogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJU
X0FSRyhjbGllbnQsIGNsaWVudCk7CiAgICAgKytzX2luc3BlY3RvckNvbnRyb2xsZXJDb3VudDsK
KworICAgIC8vIFNldCB0aGUgaW5pdGlhbCBhdHRhY2hlZCBoZWlnaHQgdG8gdGhlIHVzZXIncyBw
cmVmZXJyZWQgYXR0YWNoZWQgaGVpZ2h0LgorICAgIC8vIEl0IG1pZ2h0IG5vdCBzdGFydCBvdXQg
YXR0YWNoZWQsIGJ1dCB0aGlzIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBiZWZvcmUK
KyAgICAvLyBpdCBjb3VsZCBiZSBhdHRhY2hlZC4KKyAgICBTZXR0aW5nIGF0dGFjaGVkSGVpZ2h0
ID0gc2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIG1fY2xpZW50LT5z
ZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQoYXR0YWNoZWRIZWlnaHQudHlwZSgpID09IFNldHRpbmc6
OkludGVnZXJUeXBlID8gYXR0YWNoZWRIZWlnaHQuaW50ZWdlclZhbHVlKCkgOiBkZWZhdWx0QXR0
YWNoZWRIZWlnaHQpOwogfQogCiBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJv
bGxlcigpCkBAIC00ODUsNyArNDk0LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QXR0YWNoZWRXaW4KIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworCisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wOworICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7CisKKyAgICBsb25n
IGF0dGFjaGVkSGVpZ2h0ID0gcm91bmQobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgCisgICAg
ICAgIG1pbihzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0KSwgKG1fY2xpZW50LT5pbnNwZWN0ZWRQ
YWdlSGVpZ2h0KCkgKyBtX2NsaWVudC0+aW5zcGVjdG9yUGFnZUhlaWdodCgpKSAqIG1heGltdW1B
dHRhY2hlZEhlaWdodFJhdGlvKSkpOworCisgICAgLy8gU2F2ZSBhIHByZWZlcmVuY2UgZm9yIHRo
ZSB1c2VyJ3MgcHJlZmVycmVkIGF0dGFjaGVkIGhlaWdodCBhbmQgcGFzcyBpdCB0byB0aGUgY2xp
ZW50CisgICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFNldHRpbmco
YXR0YWNoZWRIZWlnaHQpKTsKKyAgICBtX2NsaWVudC0+c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0
KGF0dGFjaGVkSGVpZ2h0KTsKKworICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dChhdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVM
YXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYg
KzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3NpbXBsZUNvbnRlbnQubV9ib29sZWFu
ID0gdmFsdWU7CiAgICAgICAgIH0KIAorICAgICAgICBleHBsaWNpdCBTZXR0aW5nKGxvbmcgdmFs
dWUpCisgICAgICAgICAgICA6IG1fdHlwZShJbnRlZ2VyVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9zaW1wbGVDb250ZW50Lm1faW50ZWdlciA9IHZhbHVlOworICAgICAgICB9CisKICAg
ICAgICAgZXhwbGljaXQgU2V0dGluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAg
OiBtX3R5cGUoU3RyaW5nVHlwZSkKICAgICAgICAgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHJldmlzaW9uIDQ1ODg3KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1MCw2ICs0NTAsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJp
bmcgaGlkZGVuUGFuZWxzKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAorICAgIHZpcnR1YWwgbG9u
ZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgbG9uZyBp
bnNwZWN0ZWRQYWdlSGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZykgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dp
bmRvdygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpIHsgfQogCkluZGV4OiBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDA5LTA3LTE0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0
aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEFk
ZCBndGsgc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3Bl
Y3RvclBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3Bl
Y3RlZFBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnNldElu
aXRpYWxBdHRhY2hlZEhlaWdodCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50R3RrLmg6CisKIDIwMDktMDctMTMgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gTGF0ZSBO
RVdTIGZpbGUgZm9yIDEuMS4xMS4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsNiArMTEzLDIzIEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygp
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCitsb25nIEluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yUGFnZUhlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKyAgICAKK2xvbmcgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdlSGVpZ2h0KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorICAgIAordm9pZCBJbnNw
ZWN0b3JDbGllbnQ6OnNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRv
dygpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKIAogICAgICAgICB2aXJ0dWFsIFdl
YkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
bG9uZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCk7CisgICAgICAgIHZpcnR1YWwgbG9uZyBpbnNwZWN0
ZWRQYWdlSGVpZ2h0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1
ODg3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAwOS0wNy0xNCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
ZCBzaXplIGNhbGN1bGF0aW9uIGNvZGUgZnJvbSBbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxl
ciBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHRdIGludG8KKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgdG8gbWFrZSBpdCBjcm9zcyBwbGF0Zm9ybSwgYW5kIHVzZSBJbnNwZWN0b3JDb250
cm9sbGVyIHRvIHN0b3JlIHRoZSAKKyAgICAgICAgdXNlcidzIHByZWZlcnJlZCBzaXplIGZvciBh
biBhdHRhY2hlZCB3aW5kb3csIGluc3RlYWQgb2YgTlNVc2VyRGVmYXVsdHMuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGll
bnQ6OmNyZWF0ZVBhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JQ
YWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZUhl
aWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEluaXRpYWxBdHRhY2hlZEhl
aWdodCk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0SW5pdGlh
bEF0dGFjaGVkSGVpZ2h0Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9s
bGVyIGluc3BlY3RlZFBhZ2VIZWlnaHRdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlciBpbnNwZWN0b3JQYWdlSGVpZ2h0XSk6CisgICAgICAgICgtW1dlYkluc3BlY3Rv
cldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9y
V2luZG93Q29udHJvbGxlciBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDpdKToKKwogMjAwOS0wNy0x
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLCBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTg4NykKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0
cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmlu
ZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhl
aWdodCgpOworICAgIHZpcnR1YWwgbG9uZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
OwpAQCAtNjksNiArNzMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2lu
ZG93VGl0bGUoKSBjb25zdDsKIAorICAgIGxvbmcgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQ7CiAg
ICAgV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyPiBtX3dpbmRvd0NvbnRyb2xsZXI7CiAgICAgV2ViQ29yZTo6U3RyaW5nIG1faW5z
cGVjdGVkVVJMOwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvclN0YXJ0cwogICAgIFdlYlZpZXcg
Kl9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIFdlYlZpZXcgKl93ZWJWaWV3OwogICAgIFdlYk5vZGVI
aWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworICAgIGxvbmcgX2luaXRpYWxBdHRhY2hlZEhl
aWdodDsKICAgICBCT09MIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldzsKICAgICBCT09MIF9z
aG91bGRBdHRhY2g7CiAgICAgQk9PTCBfdmlzaWJsZTsKQEAgLTU3LDYgKzU4LDkgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvclN0YXJ0cwogfQogLSAoaWQpaW5pdFdpdGhJbnNw
ZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKEJPT0wpaW5zcGVjdG9yVmlzaWJs
ZTsKKy0gKGxvbmcpaW5zcGVjdGVkUGFnZUhlaWdodDsKKy0gKGxvbmcpaW5zcGVjdG9yUGFnZUhl
aWdodDsKKy0gKHZvaWQpc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0Oihsb25nKWhlaWdodDsKIC0g
KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZClhdHRhY2g7CiAtICh2b2lkKWRldGFjaDsKQEAg
LTgwLDggKzg0LDExIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm8K
IAogUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKIHsKLSAgICBpZiAoIW1f
d2luZG93Q29udHJvbGxlcikKKyAgICBpZiAoIW1fd2luZG93Q29udHJvbGxlcikgewogICAgICAg
ICBtX3dpbmRvd0NvbnRyb2xsZXIuYWRvcHROUyhbW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzptX3dlYlZpZXddKTsKKyAgICAgICAg
W21fd2luZG93Q29udHJvbGxlci5nZXQoKSBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQ6bV9pbml0
aWFsQXR0YWNoZWRIZWlnaHRdOworICAgIH0KKyAgICAKIAogICAgIHJldHVybiBjb3JlKFttX3dp
bmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOwogfQpAQCAtMTAyLDYgKzEwOSwyNSBAQCBT
dHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoCiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCitsb25nIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yUGFnZUhlaWdodCgp
Cit7CisgICAgcmV0dXJuIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaW5zcGVjdG9yUGFnZUhl
aWdodF07Cit9CisKK2xvbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdlSGVpZ2h0
KCkgCit7CisgICAgcmV0dXJuIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaW5zcGVjdGVkUGFn
ZUhlaWdodF07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNo
ZWRIZWlnaHQobG9uZyBoZWlnaHQpIAoreworICAgIG1faW5pdGlhbEF0dGFjaGVkSGVpZ2h0ID0g
aGVpZ2h0OworICAgIAorICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBiZWZvcmUgbV93aW5kb3dD
b250cm9sbGVyIGlzIGludGlhbGl6ZWQsIHNvIG51bGwgY2hlY2sgYmVmb3JlIGNhbGxpbmcKKyAg
ICBpZiAobV93aW5kb3dDb250cm9sbGVyKQorICAgICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdl
dCgpIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodDpoZWlnaHRdOworfQorCiB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6c2hvd1dpbmRvdygpCiB7CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKQEAg
LTE1Miw5ICsxNzgsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0
CiAKICNwcmFnbWEgbWFyayAtCiAKLSNkZWZpbmUgV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRLZXkg
QCJXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZCIKLSNkZWZpbmUgV2ViS2l0SW5zcGVjdG9yQXR0YWNo
ZWRWaWV3SGVpZ2h0S2V5IEAiV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRWaWV3SGVpZ2h0IgotCiBA
aW1wbGVtZW50YXRpb24gV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcgogLSAoaWQpaW5pdAog
ewpAQCAtMjMxLDYgKzI1NCwyNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2lu
ZG93VGl0CiAgICAgcmV0dXJuIF93ZWJWaWV3OwogfQogCistICh2b2lkKXNldEluaXRpYWxBdHRh
Y2hlZEhlaWdodDoobG9uZyloZWlnaHQKK3sKKyAgICBfaW5pdGlhbEF0dGFjaGVkSGVpZ2h0ID0g
aGVpZ2h0OworfQorCistIChsb25nKWluc3BlY3RlZFBhZ2VIZWlnaHQKK3sKKyAgICBBU1NFUlQo
X2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KTsKKyAgICAKKyAgICBXZWJGcmFtZVZpZXcgKmZy
YW1lVmlldyA9IFtbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddOworICAg
IHJldHVybiBOU0hlaWdodChbZnJhbWVWaWV3IGZyYW1lXSk7Cit9CisgICAgCistKGxvbmcpaW5z
cGVjdG9yUGFnZUhlaWdodAoreworICAgIEFTU0VSVChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZp
ZXcpOworCisgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW193ZWJWaWV3IG1haW5GcmFt
ZV0gZnJhbWVWaWV3XTsKKyAgICByZXR1cm4gTlNIZWlnaHQoW2ZyYW1lVmlldyBmcmFtZV0pOwor
fQorCiAtIChOU1dpbmRvdyAqKXdpbmRvdwogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc3Vw
ZXIgd2luZG93XTsKQEAgLTMzMiw3ICszNzYsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dXBkYXRlV2luZG93VGl0CiAKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0g
WUVTOwogCi0gICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0OltbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6V2ViS2l0SW5zcGVjdG9y
QXR0YWNoZWRWaWV3SGVpZ2h0S2V5XV07CisgICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0Ol9pbml0aWFsQXR0YWNoZWRIZWlnaHRdOwogICAgIH0gZWxzZSB7CiAgICAgICAgIF9h
dHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldyA9IE5POwogCkBAIC0zODEsMjMgKzQyNSwxOSBAQCB2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0CiAKIC0gKHZvaWQpc2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVkKWhlaWdodAogewotICAgIFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEludGVnZXI6aGVpZ2h0IGZvcktleTpXZWJLaXRJ
bnNwZWN0b3JBdHRhY2hlZFZpZXdIZWlnaHRLZXldOwotCiAgICAgaWYgKCFfYXR0YWNoZWRUb0lu
c3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lVmlldyAqZnJh
bWVWaWV3ID0gW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld107Ci0gICAg
TlNSZWN0IGZyYW1lVmlld1JlY3QgPSBbZnJhbWVWaWV3IGZyYW1lXTsKLQotICAgIENHRmxvYXQg
YXR0YWNoZWRIZWlnaHQgPSByb3VuZChNQVgoMjUwLjAsIE1JTihoZWlnaHQsIChOU0hlaWdodChb
X2luc3BlY3RlZFdlYlZpZXcgZnJhbWVdKSAqIDAuNzUpKSkpOwotCisgICAgCiAgICAgLy8gU2V0
dGluZyB0aGUgaGVpZ2h0IGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGlzIGRvbmUgdG8gd29yayB3
aXRoCiAgICAgLy8gU2FmYXJpJ3MgZmluZCBiYW5uZXIuIFRoaXMgYXNzdW1lcyB0aGUgcHJldmlv
dXMgaGVpZ2h0IGlzIHRoZSBZIG9yaWdpbi4KLSAgICBDR0Zsb2F0IGhlaWdodERpZmZlcmVuY2Ug
PSAoTlNNaW5ZKGZyYW1lVmlld1JlY3QpIC0gYXR0YWNoZWRIZWlnaHQpOworICAgIFdlYkZyYW1l
VmlldyAqZnJhbWVWaWV3ID0gW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmll
d107CisgICAgTlNSZWN0IGZyYW1lVmlld1JlY3QgPSBbZnJhbWVWaWV3IGZyYW1lXTsKKyAgICAK
KyAgICBDR0Zsb2F0IGhlaWdodERpZmZlcmVuY2UgPSAoTlNNaW5ZKGZyYW1lVmlld1JlY3QpIC0g
aGVpZ2h0KTsKICAgICBmcmFtZVZpZXdSZWN0LnNpemUuaGVpZ2h0ICs9IGhlaWdodERpZmZlcmVu
Y2U7Ci0gICAgZnJhbWVWaWV3UmVjdC5vcmlnaW4ueSA9IGF0dGFjaGVkSGVpZ2h0OworICAgIGZy
YW1lVmlld1JlY3Qub3JpZ2luLnkgPSBoZWlnaHQ7CiAKLSAgICBbX3dlYlZpZXcgc2V0RnJhbWU6
TlNNYWtlUmVjdCgwLjAsIDAuMCwgTlNXaWR0aChmcmFtZVZpZXdSZWN0KSwgYXR0YWNoZWRIZWln
aHQpXTsKKyAgICBbX3dlYlZpZXcgc2V0RnJhbWU6TlNNYWtlUmVjdCgwLjAsIDAuMCwgTlNXaWR0
aChmcmFtZVZpZXdSZWN0KSwgaGVpZ2h0KV07CiAgICAgW2ZyYW1lVmlldyBzZXRGcmFtZTpmcmFt
ZVZpZXdSZWN0XTsKIH0KIApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNCAgQnJpYW4g
V2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEyNzk1
PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0
b3IgKDE0MjcyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyNzIKKworICAgICAgICBBZGQgcXQgc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdGVkUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnRRdDo6c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oOgorCiAyMDA5LTA3LTE0ICBB
ZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgWmFjayBSdXNpbi4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmNwcAkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiAr
MTIwLDIzIEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvclBh
Z2VIZWlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2xvbmcgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RlZFBhZ2VIZWlnaHQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckNs
aWVudFF0OjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNob3dXaW5k
b3coKQogewogICAgIGlmICghbV93ZWJQYWdlKQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBTdHJpbmcg
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBh
bmVscygpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBhZ2VIZWln
aHQoKTsKKyAgICAgICAgdmlydHVhbCBsb25nIGluc3BlY3RlZFBhZ2VIZWlnaHQoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCk7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDA5LTA3LTE0ICBCcmlh
biBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3
OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3Bl
Y3RvciAoMTQyNzIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI3MgorCisgICAgICAgIEltcGxlbWVudGVkIHJlc2l6aW5nIG9mIGluc3BlY3RvciB3
aW5kb3cgd2hlbiBpdCBpcyBpbiBhdHRhY2hlZCBtb2RlLiBJbXBsZW1lbnRlZCBzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodAorICAgICAgICB0byBzZXQgd2luZG93IHNpemVzIGFuZCByZWRyYXcgdGhl
IGluc3BlY3RvciBhbmQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldywgYW5kIHVzZWQgc3RvcmVkIHBy
ZWZlcmVuY2VzCisgICAgICAgIGluIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIHRvIHJlbWVtYmVy
IHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5z
cGVjdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFn
ZUhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvclBhZ2VIZWln
aHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRIZWln
aHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bv
c0NoYW5naW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
aDoKKwogMjAwOS0wNy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9uIDQ1ODg3KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBAIHN0YXRpYyBMUENUU1RSIGtXZWJJbnNwZWN0b3JX
aW5kb3dDbGFzc04KIHN0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKIHN0YXRpYyBM
UENUU1RSIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCA9IFRFWFQoIldlYkluc3BlY3RvclBvaW50
ZXIiKTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMw
MDsKLQogc3RhdGljIGNvbnN0IEludFJlY3QmIGRlZmF1bHRXaW5kb3dSZWN0KCkKIHsKICAgICBz
dGF0aWMgSW50UmVjdCByZWN0KDYwLCAyMDAsIDc1MCwgNjUwKTsKQEAgLTc2LDYgKzc0LDcgQEAg
V2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoVwogICAgICwgbV93ZWJWaWV3
SHduZCgwKQogICAgICwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24oZmFsc2UpCiAgICAgLCBtX2F0
dGFjaGVkKGZhbHNlKQorICAgICwgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQoMCkKIHsKICAgICBB
U1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIApAQCAtMjQyLDYgKzI0MSwzMyBAQCB2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAorbG9uZyBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBh
Z2VIZWlnaHQoKSAKK3sKKyAgICBBU1NFUlQobV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKG1faW5z
cGVjdGVkV2ViVmlld0h3bmQpOworCisgICAgUkVDVCBpbnNwZWN0ZWRSZWN0OworICAgIEdldENs
aWVudFJlY3QobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgJmluc3BlY3RlZFJlY3QpOworCisgICAg
cmV0dXJuIGluc3BlY3RlZFJlY3QuYm90dG9tIC0gaW5zcGVjdGVkUmVjdC50b3A7Cit9CisKK2xv
bmcgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JQYWdlSGVpZ2h0KCkKK3sKKyAgICBBU1NF
UlQobV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKG1fd2ViVmlld0h3bmQpOworCisgICAgUkVDVCBp
bnNwZWN0ZWRSZWN0OworICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3SHduZCwgJmluc3BlY3Rl
ZFJlY3QpOworCisgICAgcmV0dXJuIGluc3BlY3RlZFJlY3QuYm90dG9tIC0gaW5zcGVjdGVkUmVj
dC50b3A7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQgPSBoZWln
aHQ7Cit9CisKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewogICAg
IGlmICghbV9hdHRhY2hlZCkKQEAgLTI1NSw3ICsyODEsMjAgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmRldGFjaFdpbmRvdygpCiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0aGlzLgorICAgIGlmICghbV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UkVDVCBpbnNwZWN0ZWRSZWN0OworICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRXZWJWaWV3
SHduZCwgJmluc3BlY3RlZFJlY3QpOworCisgICAgaW50IHdlYlZpZXdXaWR0aCA9IGluc3BlY3Rl
ZFJlY3QucmlnaHQgLSBpbnNwZWN0ZWRSZWN0LmxlZnQ7CisgICAgaW50IHRvdGFsSGVpZ2h0ID0g
aW5zcGVjdGVkUGFnZUhlaWdodCgpICsgaW5zcGVjdG9yUGFnZUhlaWdodCgpOworCisgICAgU2V0
V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJW
aWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRXZWJWaWV3SHduZCwgMCwgMCwgMCwgd2ViVmlld1dpZHRoLCB0b3RhbEhlaWdodCwgU1dQ
X05PWk9SREVSKTsKKyAgICAKKyAgICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwg
UkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAg
UmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRF
IHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKIHZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCkBAIC0zNTAsNiArMzg5LDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRobwogICAgIFNob3dXaW5kb3cobV9od25kLCBT
V19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVlOworICAgIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KG1faW5pdGlhbEF0dGFjaGVkSGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSBldmVy
eXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3NpdGlvbi4KICAgICBTZW5kTWVzc2FnZShob3N0
V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKQEAgLTQxMyw5ICs0NTMsMTEgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvdwogICAgIGlmICh3aW5kb3dQb3MtPmZsYWdzICYg
U1dQX05PU0laRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd2luZG93UG9zLT5jeSAtPSBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgbG9uZyBpbnNwZWN0b3JIZWlnaHQgPSBpbnNwZWN0b3JQ
YWdlSGVpZ2h0KCk7CisKKyAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKIAot
ICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93
UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgZGVmYXVsdEF0dGFjaGVkSGVp
Z2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCB3
aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gs
IGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsKIH0KIAogc3RhdGljIExSRVNVTFQgQ0FM
TEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBh
bmVscygpOwogCisgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBhZ2VIZWlnaHQoKTsKKyAgICB2
aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOworCiAgICAgdmlydHVhbCB2b2lkIHNo
b3dXaW5kb3coKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICB2aXJ0dWFs
IGJvb2wgd2luZG93VmlzaWJsZSgpOwpAQCAtOTUsNiArOTksNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNoZWQ7CisgICAg
bG9uZyBtX2luaXRpYWxBdHRhY2hlZEhlaWdodDsKIAogICAgIE93blB0cjxXZWJOb2RlSGlnaGxp
Z2h0PiBtX2hpZ2hsaWdodDsKIApJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93eC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNCAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEy
Nzk1PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNw
ZWN0b3IgKDE0MjcyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQyNzIKKworICAgICAgICBBZGQgd3ggc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0ZWRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudFd4OjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaDoKKwogMjAwOS0wNy0xMiAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2
ZSBidWlsZCBmaXggYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDU3ODYu
CkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3Bw
CShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNs
aWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMjMgQEAgU3RyaW5nIEluc3Bl
Y3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQorICAgIAorbG9uZyBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVj
dG9yUGFnZUhlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworbG9uZyBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdGVkUGFnZUhlaWdodCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50V3g6OnNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQogCiB2b2lkIEluc3BlY3RvckNsaWVudFd4OjpzaG93V2lu
ZG93KCkKIHsKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guaAkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgdmlydHVhbCBT
dHJpbmcgaGlkZGVuUGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBh
Z2VIZWlnaHQoKTsKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5k
b3coKTsK
</data>
<flag name="review"
          id="17134"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32812</attachid>
            <date>2009-07-15 14:22:55 -0700</date>
            <delta_ts>2009-07-15 14:25:15 -0700</delta_ts>
            <desc>Attach Bug</desc>
            <filename>Inspector_attach_function_rename.patch</filename>
            <type>text/plain</type>
            <size>24003</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDctMTQgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisKKyAgICAgICAgTW92
ZWQgcHJlZmVyZW5jZSBzZXR0aW5nIGZvciBhdHRhY2hlZCBpbnNwZWN0b3IgaGVpZ2h0IGFuZCBp
bnNwZWN0b3IgaGVpZ2h0IGNhbGN1bGF0aW9uIGZyb20KKyAgICAgICAgV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tIGludG8gSW5zcGVjdG9yQ29udHJvbGxlci5jcHAsIHRvIG1ha2UgdGhpcyBjb2RlIGNy
b3NzLXBsYXRmb3JtIGFuZCBlbmFibGUKKyAgICAgICAgV2luZG93cyByZXNpemluZyBvZiBhdHRh
Y2hlZCBpbnNwZWN0b3IuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCk6IENhbGN1bGF0ZSBBdHRhY2hlZCBJbnNwZWN0b3IgSGVpZ2h0IGFuZCBzYXZlIFByZWZlcm5j
ZQorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTZXR0aW5nKToKKyAgICAgICAg
KiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdG9yUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUlu
c3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUluc3BlY3RvckNsaWVudDo6c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KToKKwogMjAwOS0w
Ny0xNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCShy
ZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0
cmluZyBoaWRkZW5QYW5lbHMoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdG9yUGFn
ZUhlaWdodCgpID0gMDsKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMSBA
QCBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlckluaXRpYXRlZFByCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJj
ZVRyYWNraW5nRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVidWdnZXJFbmFi
bGVkU2V0dGluZ05hbWUgPSAiZGVidWdnZXJFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBwcm9maWxlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbGFzdEFjdGl2
ZVBhbmVsU2V0dGluZ05hbWUgPSAibGFzdEFjdGl2ZVBhbmVsIjsKIAorc3RhdGljIGNvbnN0IGxv
bmcgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOworCiBib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIE5vZGUqIGZyYW1lTm9kZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwg
ZnJhbWVOb2RlKTsKQEAgLTE4OSw2ICsxOTIsMTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcgogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJU
X0FSRyhjbGllbnQsIGNsaWVudCk7CiAgICAgKytzX2luc3BlY3RvckNvbnRyb2xsZXJDb3VudDsK
KworICAgIC8vIFNldCB0aGUgaW5pdGlhbCBhdHRhY2hlZCBoZWlnaHQgdG8gdGhlIHVzZXIncyBw
cmVmZXJyZWQgYXR0YWNoZWQgaGVpZ2h0LgorICAgIC8vIEl0IG1pZ2h0IG5vdCBzdGFydCBvdXQg
YXR0YWNoZWQsIGJ1dCB0aGlzIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBiZWZvcmUK
KyAgICAvLyBpdCBjb3VsZCBiZSBhdHRhY2hlZC4KKyAgICBTZXR0aW5nIGF0dGFjaGVkSGVpZ2h0
ID0gc2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIG1fY2xpZW50LT5z
ZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQoYXR0YWNoZWRIZWlnaHQudHlwZSgpID09IFNldHRpbmc6
OkludGVnZXJUeXBlID8gYXR0YWNoZWRIZWlnaHQuaW50ZWdlclZhbHVlKCkgOiBkZWZhdWx0QXR0
YWNoZWRIZWlnaHQpOwogfQogCiBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJv
bGxlcigpCkBAIC00ODUsNyArNDk0LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QXR0YWNoZWRXaW4KIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworCisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wOworICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7CisKKyAgICBsb25n
IGF0dGFjaGVkSGVpZ2h0ID0gcm91bmQobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgCisgICAg
ICAgIG1pbihzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0KSwgKG1fY2xpZW50LT5pbnNwZWN0ZWRQ
YWdlSGVpZ2h0KCkgKyBtX2NsaWVudC0+aW5zcGVjdG9yUGFnZUhlaWdodCgpKSAqIG1heGltdW1B
dHRhY2hlZEhlaWdodFJhdGlvKSkpOworCisgICAgLy8gU2F2ZSBhIHByZWZlcmVuY2UgZm9yIHRo
ZSB1c2VyJ3MgcHJlZmVycmVkIGF0dGFjaGVkIGhlaWdodCBhbmQgcGFzcyBpdCB0byB0aGUgY2xp
ZW50CisgICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFNldHRpbmco
YXR0YWNoZWRIZWlnaHQpKTsKKyAgICBtX2NsaWVudC0+c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0
KGF0dGFjaGVkSGVpZ2h0KTsKKworICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dChhdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVM
YXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYg
KzExMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3NpbXBsZUNvbnRlbnQubV9ib29sZWFu
ID0gdmFsdWU7CiAgICAgICAgIH0KIAorICAgICAgICBleHBsaWNpdCBTZXR0aW5nKGxvbmcgdmFs
dWUpCisgICAgICAgICAgICA6IG1fdHlwZShJbnRlZ2VyVHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9zaW1wbGVDb250ZW50Lm1faW50ZWdlciA9IHZhbHVlOworICAgICAgICB9CisKICAg
ICAgICAgZXhwbGljaXQgU2V0dGluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAg
OiBtX3R5cGUoU3RyaW5nVHlwZSkKICAgICAgICAgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHJldmlzaW9uIDQ1ODg3KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1MCw2ICs0NTAsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJp
bmcgaGlkZGVuUGFuZWxzKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KIAorICAgIHZpcnR1YWwgbG9u
ZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgbG9uZyBp
bnNwZWN0ZWRQYWdlSGVpZ2h0KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZykgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dp
bmRvdygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpIHsgfQogCkluZGV4OiBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDA5LTA3LTE0ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0
aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEFk
ZCBndGsgc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3Bl
Y3RvclBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3Bl
Y3RlZFBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnNldElu
aXRpYWxBdHRhY2hlZEhlaWdodCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50R3RrLmg6CisKIDIwMDktMDctMTMgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gTGF0ZSBO
RVdTIGZpbGUgZm9yIDEuMS4xMS4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsNiArMTEzLDIzIEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygp
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCitsb25nIEluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yUGFnZUhlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKyAgICAKK2xvbmcgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdlSGVpZ2h0KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorICAgIAordm9pZCBJbnNw
ZWN0b3JDbGllbnQ6OnNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRv
dygpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKIAogICAgICAgICB2aXJ0dWFsIFdl
YkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
bG9uZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCk7CisgICAgICAgIHZpcnR1YWwgbG9uZyBpbnNwZWN0
ZWRQYWdlSGVpZ2h0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1
ODg3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAwOS0wNy0xNCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
ZCBzaXplIGNhbGN1bGF0aW9uIGNvZGUgZnJvbSBbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxl
ciBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHRdIGludG8KKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgdG8gbWFrZSBpdCBjcm9zcyBwbGF0Zm9ybSwgYW5kIHVzZSBJbnNwZWN0b3JDb250
cm9sbGVyIHRvIHN0b3JlIHRoZSAKKyAgICAgICAgdXNlcidzIHByZWZlcnJlZCBzaXplIGZvciBh
biBhdHRhY2hlZCB3aW5kb3csIGluc3RlYWQgb2YgTlNVc2VyRGVmYXVsdHMuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGll
bnQ6OmNyZWF0ZVBhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JQ
YWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZUhl
aWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEluaXRpYWxBdHRhY2hlZEhl
aWdodCk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0SW5pdGlh
bEF0dGFjaGVkSGVpZ2h0Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9s
bGVyIGluc3BlY3RlZFBhZ2VIZWlnaHRdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlciBpbnNwZWN0b3JQYWdlSGVpZ2h0XSk6CisgICAgICAgICgtW1dlYkluc3BlY3Rv
cldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9y
V2luZG93Q29udHJvbGxlciBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDpdKToKKwogMjAwOS0wNy0x
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLCBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTg4NykKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0
cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmlu
ZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhl
aWdodCgpOworICAgIHZpcnR1YWwgbG9uZyBpbnNwZWN0b3JQYWdlSGVpZ2h0KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
OwpAQCAtNjksNiArNzMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2lu
ZG93VGl0bGUoKSBjb25zdDsKIAorICAgIGxvbmcgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQ7CiAg
ICAgV2ViVmlldyAqbV93ZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyPiBtX3dpbmRvd0NvbnRyb2xsZXI7CiAgICAgV2ViQ29yZTo6U3RyaW5nIG1faW5z
cGVjdGVkVVJMOwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQubW0JKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvclN0YXJ0cwogICAgIFdlYlZpZXcg
Kl9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIFdlYlZpZXcgKl93ZWJWaWV3OwogICAgIFdlYk5vZGVI
aWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworICAgIGxvbmcgX2luaXRpYWxBdHRhY2hlZEhl
aWdodDsKICAgICBCT09MIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldzsKICAgICBCT09MIF9z
aG91bGRBdHRhY2g7CiAgICAgQk9PTCBfdmlzaWJsZTsKQEAgLTU3LDYgKzU4LDkgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvclN0YXJ0cwogfQogLSAoaWQpaW5pdFdpdGhJbnNw
ZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKEJPT0wpaW5zcGVjdG9yVmlzaWJs
ZTsKKy0gKGxvbmcpaW5zcGVjdGVkUGFnZUhlaWdodDsKKy0gKGxvbmcpaW5zcGVjdG9yUGFnZUhl
aWdodDsKKy0gKHZvaWQpc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0Oihsb25nKWhlaWdodDsKIC0g
KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZClhdHRhY2g7CiAtICh2b2lkKWRldGFjaDsKQEAg
LTgwLDggKzg0LDExIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm8K
IAogUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKIHsKLSAgICBpZiAoIW1f
d2luZG93Q29udHJvbGxlcikKKyAgICBpZiAoIW1fd2luZG93Q29udHJvbGxlcikgewogICAgICAg
ICBtX3dpbmRvd0NvbnRyb2xsZXIuYWRvcHROUyhbW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzptX3dlYlZpZXddKTsKKyAgICAgICAg
W21fd2luZG93Q29udHJvbGxlci5nZXQoKSBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQ6bV9pbml0
aWFsQXR0YWNoZWRIZWlnaHRdOworICAgIH0KKyAgICAKIAogICAgIHJldHVybiBjb3JlKFttX3dp
bmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOwogfQpAQCAtMTAyLDYgKzEwOSwyNSBAQCBT
dHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoCiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCitsb25nIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yUGFnZUhlaWdodCgp
Cit7CisgICAgcmV0dXJuIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaW5zcGVjdG9yUGFnZUhl
aWdodF07Cit9CisKK2xvbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdlSGVpZ2h0
KCkgCit7CisgICAgcmV0dXJuIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaW5zcGVjdGVkUGFn
ZUhlaWdodF07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNo
ZWRIZWlnaHQobG9uZyBoZWlnaHQpIAoreworICAgIG1faW5pdGlhbEF0dGFjaGVkSGVpZ2h0ID0g
aGVpZ2h0OworICAgIAorICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBiZWZvcmUgbV93aW5kb3dD
b250cm9sbGVyIGlzIGludGlhbGl6ZWQsIHNvIG51bGwgY2hlY2sgYmVmb3JlIGNhbGxpbmcKKyAg
ICBpZiAobV93aW5kb3dDb250cm9sbGVyKQorICAgICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdl
dCgpIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodDpoZWlnaHRdOworfQorCiB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6c2hvd1dpbmRvdygpCiB7CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKQEAg
LTE1Miw5ICsxNzgsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0
CiAKICNwcmFnbWEgbWFyayAtCiAKLSNkZWZpbmUgV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRLZXkg
QCJXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZCIKLSNkZWZpbmUgV2ViS2l0SW5zcGVjdG9yQXR0YWNo
ZWRWaWV3SGVpZ2h0S2V5IEAiV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRWaWV3SGVpZ2h0IgotCiBA
aW1wbGVtZW50YXRpb24gV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcgogLSAoaWQpaW5pdAog
ewpAQCAtMjMxLDYgKzI1NCwyNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2lu
ZG93VGl0CiAgICAgcmV0dXJuIF93ZWJWaWV3OwogfQogCistICh2b2lkKXNldEluaXRpYWxBdHRh
Y2hlZEhlaWdodDoobG9uZyloZWlnaHQKK3sKKyAgICBfaW5pdGlhbEF0dGFjaGVkSGVpZ2h0ID0g
aGVpZ2h0OworfQorCistIChsb25nKWluc3BlY3RlZFBhZ2VIZWlnaHQKK3sKKyAgICBBU1NFUlQo
X2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KTsKKyAgICAKKyAgICBXZWJGcmFtZVZpZXcgKmZy
YW1lVmlldyA9IFtbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddOworICAg
IHJldHVybiBOU0hlaWdodChbZnJhbWVWaWV3IGZyYW1lXSk7Cit9CisgICAgCistKGxvbmcpaW5z
cGVjdG9yUGFnZUhlaWdodAoreworICAgIEFTU0VSVChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZp
ZXcpOworCisgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW193ZWJWaWV3IG1haW5GcmFt
ZV0gZnJhbWVWaWV3XTsKKyAgICByZXR1cm4gTlNIZWlnaHQoW2ZyYW1lVmlldyBmcmFtZV0pOwor
fQorCiAtIChOU1dpbmRvdyAqKXdpbmRvdwogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc3Vw
ZXIgd2luZG93XTsKQEAgLTMzMiw3ICszNzYsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dXBkYXRlV2luZG93VGl0CiAKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0g
WUVTOwogCi0gICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0OltbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6V2ViS2l0SW5zcGVjdG9y
QXR0YWNoZWRWaWV3SGVpZ2h0S2V5XV07CisgICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0Ol9pbml0aWFsQXR0YWNoZWRIZWlnaHRdOwogICAgIH0gZWxzZSB7CiAgICAgICAgIF9h
dHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldyA9IE5POwogCkBAIC0zODEsMjMgKzQyNSwxOSBAQCB2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0CiAKIC0gKHZvaWQpc2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVkKWhlaWdodAogewotICAgIFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEludGVnZXI6aGVpZ2h0IGZvcktleTpXZWJLaXRJ
bnNwZWN0b3JBdHRhY2hlZFZpZXdIZWlnaHRLZXldOwotCiAgICAgaWYgKCFfYXR0YWNoZWRUb0lu
c3BlY3RlZFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lVmlldyAqZnJh
bWVWaWV3ID0gW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld107Ci0gICAg
TlNSZWN0IGZyYW1lVmlld1JlY3QgPSBbZnJhbWVWaWV3IGZyYW1lXTsKLQotICAgIENHRmxvYXQg
YXR0YWNoZWRIZWlnaHQgPSByb3VuZChNQVgoMjUwLjAsIE1JTihoZWlnaHQsIChOU0hlaWdodChb
X2luc3BlY3RlZFdlYlZpZXcgZnJhbWVdKSAqIDAuNzUpKSkpOwotCisgICAgCiAgICAgLy8gU2V0
dGluZyB0aGUgaGVpZ2h0IGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGlzIGRvbmUgdG8gd29yayB3
aXRoCiAgICAgLy8gU2FmYXJpJ3MgZmluZCBiYW5uZXIuIFRoaXMgYXNzdW1lcyB0aGUgcHJldmlv
dXMgaGVpZ2h0IGlzIHRoZSBZIG9yaWdpbi4KLSAgICBDR0Zsb2F0IGhlaWdodERpZmZlcmVuY2Ug
PSAoTlNNaW5ZKGZyYW1lVmlld1JlY3QpIC0gYXR0YWNoZWRIZWlnaHQpOworICAgIFdlYkZyYW1l
VmlldyAqZnJhbWVWaWV3ID0gW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmll
d107CisgICAgTlNSZWN0IGZyYW1lVmlld1JlY3QgPSBbZnJhbWVWaWV3IGZyYW1lXTsKKyAgICAK
KyAgICBDR0Zsb2F0IGhlaWdodERpZmZlcmVuY2UgPSAoTlNNaW5ZKGZyYW1lVmlld1JlY3QpIC0g
aGVpZ2h0KTsKICAgICBmcmFtZVZpZXdSZWN0LnNpemUuaGVpZ2h0ICs9IGhlaWdodERpZmZlcmVu
Y2U7Ci0gICAgZnJhbWVWaWV3UmVjdC5vcmlnaW4ueSA9IGF0dGFjaGVkSGVpZ2h0OworICAgIGZy
YW1lVmlld1JlY3Qub3JpZ2luLnkgPSBoZWlnaHQ7CiAKLSAgICBbX3dlYlZpZXcgc2V0RnJhbWU6
TlNNYWtlUmVjdCgwLjAsIDAuMCwgTlNXaWR0aChmcmFtZVZpZXdSZWN0KSwgYXR0YWNoZWRIZWln
aHQpXTsKKyAgICBbX3dlYlZpZXcgc2V0RnJhbWU6TlNNYWtlUmVjdCgwLjAsIDAuMCwgTlNXaWR0
aChmcmFtZVZpZXdSZWN0KSwgaGVpZ2h0KV07CiAgICAgW2ZyYW1lVmlldyBzZXRGcmFtZTpmcmFt
ZVZpZXdSZWN0XTsKIH0KIApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNCAgQnJpYW4g
V2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEyNzk1
PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0
b3IgKDE0MjcyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyNzIKKworICAgICAgICBBZGQgcXQgc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdGVkUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnRRdDo6c2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oOgorCiAyMDA5LTA3LTE0ICBB
ZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgWmFjayBSdXNpbi4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmNwcAkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiAr
MTIwLDIzIEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvclBh
Z2VIZWlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2xvbmcgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RlZFBhZ2VIZWlnaHQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckNs
aWVudFF0OjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNob3dXaW5k
b3coKQogewogICAgIGlmICghbV93ZWJQYWdlKQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBTdHJpbmcg
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBh
bmVscygpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBhZ2VIZWln
aHQoKTsKKyAgICAgICAgdmlydHVhbCBsb25nIGluc3BlY3RlZFBhZ2VIZWlnaHQoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCk7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDA5LTA3LTE0ICBCcmlh
biBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3
OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0aGUgaGVpZ2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3Bl
Y3RvciAoMTQyNzIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI3MgorCisgICAgICAgIEltcGxlbWVudGVkIHJlc2l6aW5nIG9mIGluc3BlY3RvciB3
aW5kb3cgd2hlbiBpdCBpcyBpbiBhdHRhY2hlZCBtb2RlLiBJbXBsZW1lbnRlZCBzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodAorICAgICAgICB0byBzZXQgd2luZG93IHNpemVzIGFuZCByZWRyYXcgdGhl
IGluc3BlY3RvciBhbmQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldywgYW5kIHVzZWQgc3RvcmVkIHBy
ZWZlcmVuY2VzCisgICAgICAgIGluIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIHRvIHJlbWVtYmVy
IHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5z
cGVjdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFn
ZUhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvclBhZ2VIZWln
aHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRIZWln
aHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bv
c0NoYW5naW5nKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
aDoKKwogMjAwOS0wNy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHJldmlzaW9uIDQ1ODg3KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBAIHN0YXRpYyBMUENUU1RSIGtXZWJJbnNwZWN0b3JX
aW5kb3dDbGFzc04KIHN0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKIHN0YXRpYyBM
UENUU1RSIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCA9IFRFWFQoIldlYkluc3BlY3RvclBvaW50
ZXIiKTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMw
MDsKLQogc3RhdGljIGNvbnN0IEludFJlY3QmIGRlZmF1bHRXaW5kb3dSZWN0KCkKIHsKICAgICBz
dGF0aWMgSW50UmVjdCByZWN0KDYwLCAyMDAsIDc1MCwgNjUwKTsKQEAgLTc2LDYgKzc0LDcgQEAg
V2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoVwogICAgICwgbV93ZWJWaWV3
SHduZCgwKQogICAgICwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24oZmFsc2UpCiAgICAgLCBtX2F0
dGFjaGVkKGZhbHNlKQorICAgICwgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQoMCkKIHsKICAgICBB
U1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIApAQCAtMjQyLDYgKzI0MSwzMyBAQCB2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5v
dGlmaWNhdGlvbnMoKTsKIH0KIAorbG9uZyBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBh
Z2VIZWlnaHQoKSAKK3sKKyAgICBBU1NFUlQobV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKG1faW5z
cGVjdGVkV2ViVmlld0h3bmQpOworCisgICAgUkVDVCBpbnNwZWN0ZWRSZWN0OworICAgIEdldENs
aWVudFJlY3QobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgJmluc3BlY3RlZFJlY3QpOworCisgICAg
cmV0dXJuIGluc3BlY3RlZFJlY3QuYm90dG9tIC0gaW5zcGVjdGVkUmVjdC50b3A7Cit9CisKK2xv
bmcgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JQYWdlSGVpZ2h0KCkKK3sKKyAgICBBU1NF
UlQobV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKG1fd2ViVmlld0h3bmQpOworCisgICAgUkVDVCBp
bnNwZWN0ZWRSZWN0OworICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3SHduZCwgJmluc3BlY3Rl
ZFJlY3QpOworCisgICAgcmV0dXJuIGluc3BlY3RlZFJlY3QuYm90dG9tIC0gaW5zcGVjdGVkUmVj
dC50b3A7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRJbml0aWFsQXR0YWNoZWRI
ZWlnaHQobG9uZyBoZWlnaHQpCit7CisgICAgbV9pbml0aWFsQXR0YWNoZWRIZWlnaHQgPSBoZWln
aHQ7Cit9CisKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewogICAg
IGlmICghbV9hdHRhY2hlZCkKQEAgLTI1NSw3ICsyODEsMjAgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmRldGFjaFdpbmRvdygpCiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0aGlzLgorICAgIGlmICghbV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UkVDVCBpbnNwZWN0ZWRSZWN0OworICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRXZWJWaWV3
SHduZCwgJmluc3BlY3RlZFJlY3QpOworCisgICAgaW50IHdlYlZpZXdXaWR0aCA9IGluc3BlY3Rl
ZFJlY3QucmlnaHQgLSBpbnNwZWN0ZWRSZWN0LmxlZnQ7CisgICAgaW50IHRvdGFsSGVpZ2h0ID0g
aW5zcGVjdGVkUGFnZUhlaWdodCgpICsgaW5zcGVjdG9yUGFnZUhlaWdodCgpOworCisgICAgU2V0
V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJW
aWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRXZWJWaWV3SHduZCwgMCwgMCwgMCwgd2ViVmlld1dpZHRoLCB0b3RhbEhlaWdodCwgU1dQ
X05PWk9SREVSKTsKKyAgICAKKyAgICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwg
UkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAg
UmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRF
IHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKIHZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCkBAIC0zNTAsNiArMzg5LDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRobwogICAgIFNob3dXaW5kb3cobV9od25kLCBT
V19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVlOworICAgIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KG1faW5pdGlhbEF0dGFjaGVkSGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSBldmVy
eXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3NpdGlvbi4KICAgICBTZW5kTWVzc2FnZShob3N0
V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKQEAgLTQxMyw5ICs0NTMsMTEgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvdwogICAgIGlmICh3aW5kb3dQb3MtPmZsYWdzICYg
U1dQX05PU0laRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd2luZG93UG9zLT5jeSAtPSBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgbG9uZyBpbnNwZWN0b3JIZWlnaHQgPSBpbnNwZWN0b3JQ
YWdlSGVpZ2h0KCk7CisKKyAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKIAot
ICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93
UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgZGVmYXVsdEF0dGFjaGVkSGVp
Z2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCB3
aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gs
IGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsKIH0KIAogc3RhdGljIExSRVNVTFQgQ0FM
TEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBh
bmVscygpOwogCisgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBhZ2VIZWlnaHQoKTsKKyAgICB2
aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOworCiAgICAgdmlydHVhbCB2b2lkIHNo
b3dXaW5kb3coKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICB2aXJ0dWFs
IGJvb2wgd2luZG93VmlzaWJsZSgpOwpAQCAtOTUsNiArOTksNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNoZWQ7CisgICAg
bG9uZyBtX2luaXRpYWxBdHRhY2hlZEhlaWdodDsKIAogICAgIE93blB0cjxXZWJOb2RlSGlnaGxp
Z2h0PiBtX2hpZ2hsaWdodDsKIApJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93eC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNCAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEy
Nzk1PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNw
ZWN0b3IgKDE0MjcyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQyNzIKKworICAgICAgICBBZGQgd3ggc3R1YiBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0ZWRQYWdlSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudFd4OjpzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaDoKKwogMjAwOS0wNy0xMiAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2
ZSBidWlsZCBmaXggYWZ0ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDU3ODYu
CkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3Bw
CShyZXZpc2lvbiA0NTg4NykKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNs
aWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMjMgQEAgU3RyaW5nIEluc3Bl
Y3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQorICAgIAorbG9uZyBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVj
dG9yUGFnZUhlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworbG9uZyBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdGVkUGFnZUhlaWdodCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50V3g6OnNldEluaXRpYWxBdHRhY2hlZEhlaWdodChsb25nIGhlaWdodCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQogCiB2b2lkIEluc3BlY3RvckNsaWVudFd4OjpzaG93V2lu
ZG93KCkKIHsKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guaAkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgdmlydHVhbCBT
dHJpbmcgaGlkZGVuUGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCBsb25nIGluc3BlY3RvclBh
Z2VIZWlnaHQoKTsKKyAgICB2aXJ0dWFsIGxvbmcgaW5zcGVjdGVkUGFnZUhlaWdodCgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5k
b3coKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32813</attachid>
            <date>2009-07-15 14:25:15 -0700</date>
            <delta_ts>2009-07-16 10:12:39 -0700</delta_ts>
            <desc>Attach Bug</desc>
            <filename>Inspector_no_added_methods.patch</filename>
            <type>text/plain</type>
            <size>6620</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTk0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMTUgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aDoKKwogMjAwOS0wNy0xNSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0Pgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDgg
Kzk5LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHIKIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZFNldHRpbmdOYW1lID0g
InJlc291cmNlVHJhY2tpbmdFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1
Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5hYmxl
ZCI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1l
ID0gImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBs
YXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSA9ICJsYXN0QWN0aXZlUGFuZWwiOwogCitzdGF0aWMg
Y29uc3QgbG9uZyBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29uc3QgZmxv
YXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OworCiBib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIE5vZGUqIGZyYW1lTm9kZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwg
ZnJhbWVOb2RlKTsKQEAgLTQ2Myw3ICs0NjgsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjphdHRhY2hXaW5kb3coKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47
CisKICAgICBtX2NsaWVudC0+YXR0YWNoV2luZG93KCk7CisKKyAgICBTZXR0aW5nIGF0dGFjaGVk
SGVpZ2h0ID0gc2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0LnR5cGUoKSA9PSBTZXR0aW5nOjpJbnRl
Z2VyVHlwZSA/IGF0dGFjaGVkSGVpZ2h0LmludGVnZXJWYWx1ZSgpIDogZGVmYXVsdEF0dGFjaGVk
SGVpZ2h0KTsKKwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRldGFjaFdpbmRvdygp
CkBAIC00ODUsNyArNDk1LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNo
ZWRXaW4KIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY2xp
ZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworCisgICAgbG9uZyB0b3RhbEhl
aWdodCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAg
bG9uZyBhdHRhY2hlZEhlaWdodCA9IHJvdW5kKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIAor
ICAgICAgICBtaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCksIHRvdGFsSGVpZ2h0ICogbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8pKSk7CisKKyAgICAvLyBTYXZlIGEgcHJlZmVyZW5jZSBm
b3IgdGhlIHVzZXIncyBwcmVmZXJyZWQgYXR0YWNoZWQgaGVpZ2h0IGFuZCBwYXNzIGl0IHRvIHRo
ZSBjbGllbnQuCisgICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFNl
dHRpbmcoYXR0YWNoZWRIZWlnaHQpKTsKKworICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRv
d0hlaWdodChhdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCkBAIC02NDcsNiAr
NjY1LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKIHsKICAgICBB
U1NFUlQoZW5hYmxlZCgpKTsKICAgICBtX2NsaWVudC0+c2hvd1dpbmRvdygpOworCisgICAgU2V0
dGluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1l
KTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodC50eXBlKCkgPT0g
U2V0dGluZzo6SW50ZWdlclR5cGUgPyBhdHRhY2hlZEhlaWdodC5pbnRlZ2VyVmFsdWUoKSA6IGRl
ZmF1bHRBdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2VXaW5kb3coKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAko
cmV2aXNpb24gNDU4ODcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsMTIgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9zaW1wbGVDb250ZW50Lm1fYm9vbGVhbiA9IHZhbHVlOwogICAgICAgICB9CiAKKyAgICAg
ICAgZXhwbGljaXQgU2V0dGluZyhsb25nIHZhbHVlKQorICAgICAgICAgICAgOiBtX3R5cGUoSW50
ZWdlclR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2ltcGxlQ29udGVudC5tX2ludGVn
ZXIgPSB2YWx1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGV4cGxpY2l0IFNldHRpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgIDogbV90eXBlKFN0cmluZ1R5cGUpCiAgICAgICAg
IHsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4v
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NTk0MykKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDctMTUgIEJyaWFuIFdlaW5zdGVpbiAg
PGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09Q
UyEpCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOgor
CiAyMDA5LTA3LTE0ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVvcmdhbml6ZSBKYXZhU2NyaXB0Q29yZSBoZWFkZXJzIGludG86CkluZGV4OiBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZp
c2lvbiA0NTg4NykKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBzdGF0aWMgTFBDVFNUUiBr
V2ViSW5zcGVjdG9yV2luZG93Q2xhc3NOCiBzdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNz
KCk7CiBzdGF0aWMgTFBDVFNUUiBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AgPSBURVhUKCJXZWJJ
bnNwZWN0b3JQb2ludGVyIik7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNo
ZWRIZWlnaHQgPSAzMDA7Ci0KIHN0YXRpYyBjb25zdCBJbnRSZWN0JiBkZWZhdWx0V2luZG93UmVj
dCgpCiB7CiAgICAgc3RhdGljIEludFJlY3QgcmVjdCg2MCwgMjAwLCA3NTAsIDY1MCk7CkBAIC0y
NTUsNyArMjUzLDI5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQog
CiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KKyAgICBpZiAoIW1f
YXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFJFQ1QgaW5zcGVjdGVkUmVjdDsKKyAg
ICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsICZpbnNwZWN0ZWRSZWN0KTsK
KworICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKKyAgICBHZXRDbGllbnRSZWN0KG1fd2ViVmlld0h3
bmQsICZpbnNwZWN0b3JSZWN0KTsKKworICAgIGludCB3ZWJWaWV3V2lkdGggPSBpbnNwZWN0ZWRS
ZWN0LnJpZ2h0IC0gaW5zcGVjdGVkUmVjdC5sZWZ0OworICAgIGludCB0b3RhbEhlaWdodCA9IChp
bnNwZWN0ZWRSZWN0LmJvdHRvbSAtIGluc3BlY3RlZFJlY3QudG9wKSArIChpbnNwZWN0b3JSZWN0
LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wKTsKKworICAgIFNlbmRNZXNzYWdlKG1faW5zcGVj
dGVkV2ViVmlld0h3bmQsIFdNX1NFVFJFRFJBVywgRkFMU0UsIDApOworICAgIFNlbmRNZXNzYWdl
KG1fd2ViVmlld0h3bmQsIFdNX1NFVFJFRFJBVywgRkFMU0UsIDApOworCisgICAgU2V0V2luZG93
UG9zKG1fd2ViVmlld0h3bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lk
dGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRX
ZWJWaWV3SHduZCwgMCwgMCwgMCwgd2ViVmlld1dpZHRoLCB0b3RhbEhlaWdodCwgU1dQX05PWk9S
REVSKTsKKyAgICAKKyAgICBTZW5kTWVzc2FnZShtX2luc3BlY3RlZFdlYlZpZXdId25kLCBXTV9T
RVRSRURSQVcsIFRSVUUsIDApOworICAgIFNlbmRNZXNzYWdlKG1fd2ViVmlld0h3bmQsIFdNX1NF
VFJFRFJBVywgVFJVRSwgMCk7CisKKyAgICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwg
MCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisg
ICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElE
QVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCkBAIC00MTMsOSArNDMzLDEzIEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3cKICAgICBpZiAod2luZG93UG9zLT5m
bGFncyAmIFNXUF9OT1NJWkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdpbmRvd1Bvcy0+Y3kg
LT0gZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKKyAgICBH
ZXRDbGllbnRSZWN0KG1fd2ViVmlld0h3bmQsICZpbnNwZWN0b3JSZWN0KTsKKyAgICBsb25nIGlu
c3BlY3RvckhlaWdodCA9IGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3A7
CisKKyAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKIAotICAgIDo6U2V0V2lu
ZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2lu
ZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCBTV1BfTk9a
T1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCB3aW5kb3dQb3MtPngs
IHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3Rvckhl
aWdodCwgU1dQX05PWk9SREVSKTsKIH0KIAogc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5z
cGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32883</attachid>
            <date>2009-07-16 10:12:39 -0700</date>
            <delta_ts>2009-07-16 13:45:58 -0700</delta_ts>
            <desc>Re-attaching Bug</desc>
            <filename>Windows_Crossplatform_temp.patch</filename>
            <type>text/plain</type>
            <size>6198</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA0NTg4NykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMyBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
VXNlckluaXRpYXRlZFByCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcmVzb3VyY2VUcmFja2lu
Z0VuYWJsZWRTZXR0aW5nTmFtZSA9ICJyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCI7CiBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZGVidWdnZXJFbmFibGVkU2V0dGluZ05hbWUgPSAiZGVidWdnZXJF
bmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwcm9maWxlckVuYWJsZWRTZXR0aW5n
TmFtZSA9ICJwcm9maWxlckVuYWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CiBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUgPSAibGFzdEFj
dGl2ZVBhbmVsIjsKIAorc3RhdGljIGNvbnN0IGxvbmcgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0g
MzAwOworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wOwor
c3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKKwog
Ym9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCiB7CiAgICAg
QVNTRVJUX0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7CkBAIC00NjMsNyArNDY4LDExIEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93KCkKIHsKICAgICBpZiAoIWVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygpOwor
CisgICAgU2V0dGluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHROYW1lKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodC50
eXBlKCkgPT0gU2V0dGluZzo6SW50ZWdlclR5cGUgPyBhdHRhY2hlZEhlaWdodC5pbnRlZ2VyVmFs
dWUoKSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGV0YWNoV2luZG93KCkKQEAgLTQ4MSwxMSArNDkwLDMwIEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW4KICAgICBtX2Zyb250ZW5kLT5zZXRBdHRhY2hlZFdp
bmRvdyhhdHRhY2hlZCk7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29uc3RyYWlu
ZWRBdHRhY2hlZFdpbmRvd0hlaWdodChsb25nIHByZWZlcnJlZEhlaWdodCwgbG9uZyB0b3RhbFdp
bmRvd0hlaWdodCkKK3sKKyAgICBpZiAocHJlZmVycmVkSGVpZ2h0ID09IDApIHsKKyAgICAgICAg
Ly8gSWYgcHJlZmVycmVkSGVpZ2h0IGlzIDAsIHRoZW4gdXNlIHRoZSBzdG9yZWQgc2V0dGluZyBh
cyBhIHByZWZlcnJlZCBoZWlnaHQuCisgICAgICAgIFNldHRpbmcgYXR0YWNoZWRIZWlnaHQgPSBz
ZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgICAgIHByZWZlcnJlZEhl
aWdodCA9IGF0dGFjaGVkSGVpZ2h0LnR5cGUoKSA9PSBTZXR0aW5nOjpJbnRlZ2VyVHlwZSA/IGF0
dGFjaGVkSGVpZ2h0LmludGVnZXJWYWx1ZSgpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAg
IH0KKworICAgIHJldHVybiByb3VuZChtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCAKKyAgICAg
ICAgbWluKHN0YXRpY19jYXN0PGZsb2F0PihwcmVmZXJyZWRIZWlnaHQpLCB0b3RhbFdpbmRvd0hl
aWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvKSkpOworfQorCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsK
ICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5zZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworCisgICAgbG9uZyB0b3RhbEhlaWdodCA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0ZWRQ
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgbG9uZyBhdHRh
Y2hlZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3Rh
bEhlaWdodCk7CisKKyAgICAvLyBTYXZlIGEgcHJlZmVyZW5jZSBmb3IgdGhlIHVzZXIncyBwcmVm
ZXJyZWQgYXR0YWNoZWQgaGVpZ2h0IGFuZCBwYXNzIGl0IHRvIHRoZSBjbGllbnQKKyAgICBzZXRT
ZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU2V0dGluZyhhdHRhY2hlZEhlaWdo
dCkpOworCisgICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVp
Z2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5l
bChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ1ODg3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fc2ltcGxlQ29udGVudC5tX2Jvb2xlYW4gPSB2YWx1ZTsKICAg
ICAgICAgfQogCisgICAgICAgIGV4cGxpY2l0IFNldHRpbmcobG9uZyB2YWx1ZSkKKyAgICAgICAg
ICAgIDogbV90eXBlKEludGVnZXJUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NpbXBs
ZUNvbnRlbnQubV9pbnRlZ2VyID0gdmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBleHBsaWNp
dCBTZXR0aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgICA6IG1fdHlwZShTdHJp
bmdUeXBlKQogICAgICAgICB7CkBAIC0xODYsNiArMTkyLDggQEAgcHVibGljOgogICAgIHZvaWQg
YXR0YWNoV2luZG93KCk7CiAgICAgdm9pZCBkZXRhY2hXaW5kb3coKTsKIAorICAgIGxvbmcgY29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChsb25nIHByZWZlcnJlZEhlaWdodCwgbG9uZyB0
b3RhbFdpbmRvd0hlaWdodCk7CisKICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwog
ICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIApJbmRl
eDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cAkocmV2aXNpb24gNDU4ODcpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RhdGljIExQ
Q1RTVFIga1dlYkluc3BlY3RvcldpbmRvd0NsYXNzTgogc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5k
b3dDbGFzcygpOwogc3RhdGljIExQQ1RTVFIga1dlYkluc3BlY3RvclBvaW50ZXJQcm9wID0gVEVY
VCgiV2ViSW5zcGVjdG9yUG9pbnRlciIpOwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVs
dEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwotCiBzdGF0aWMgY29uc3QgSW50UmVjdCYgZGVmYXVsdFdp
bmRvd1JlY3QoKQogewogICAgIHN0YXRpYyBJbnRSZWN0IHJlY3QoNjAsIDIwMCwgNzUwLCA2NTAp
OwpAQCAtNzYsNiArNzQsNyBAQCBXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVu
dChXCiAgICAgLCBtX3dlYlZpZXdId25kKDApCiAgICAgLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93
bihmYWxzZSkKICAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCisgICAgLCBtX2p1c3RBdHRhY2hlZChm
YWxzZSkKIHsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIApAQCAtMjU1LDcgKzI1
NCwyNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKIAogdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdo
dCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCisgICAgaWYgKCFtX2F0dGFjaGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIGluc3BlY3RlZFJlY3Q7CisgICAgR2V0Q2xp
ZW50UmVjdChtX2luc3BlY3RlZFdlYlZpZXdId25kLCAmaW5zcGVjdGVkUmVjdCk7CisKKyAgICBS
RUNUIGluc3BlY3RvclJlY3Q7CisgICAgR2V0Q2xpZW50UmVjdChtX3dlYlZpZXdId25kLCAmaW5z
cGVjdG9yUmVjdCk7CisKKyAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdo
dCAtIGluc3BlY3RlZFJlY3QubGVmdDsKKworICAgIC8vIFRoZSBwcm9ibGVtIGlzLCByaWdodCBh
ZnRlciByZS1hdHRhY2hpbmcsIHRoaXMgdmFsdWUgaXMgd3JvbmcsIGFuZCBJIGRvbid0IGhhdmUg
YSB3YXkgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlCisgICAgaW50IHRvdGFsSGVpZ2h0ID0gKGlu
c3BlY3RlZFJlY3QuYm90dG9tIC0gaW5zcGVjdGVkUmVjdC50b3ApICsgKGluc3BlY3RvclJlY3Qu
Ym90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3ApOworCisgICAgU2V0V2luZG93UG9zKG1fd2ViVmll
d0h3bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lkdGgsIGhlaWdodCwg
U1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwg
MCwgMCwgMCwgd2ViVmlld1dpZHRoLCB0b3RhbEhlaWdodCwgU1dQX05PWk9SREVSKTsKKworCisg
ICAgUmVkcmF3V2luZG93KG1fd2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRX
X0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7IAorICAgIFJlZHJhd1dpbmRvdyhtX2luc3Bl
Y3RlZFdlYlZpZXdId25kLCAwLCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8
IFJEV19VUERBVEVOT1cpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0
KE5vZGUqKQpAQCAtNDEzLDkgKzQzMSwxMyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b25X
ZWJWaWV3V2luZG93CiAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB3aW5kb3dQb3MtPmN5IC09IGRlZmF1bHRBdHRhY2hlZEhlaWdo
dDsKKyAgICBSRUNUIGluc3BlY3RvclJlY3Q7CisgICAgR2V0Q2xpZW50UmVjdChtX3dlYlZpZXdI
d25kLCAmaW5zcGVjdG9yUmVjdCk7CisgICAgbG9uZyBpbnNwZWN0b3JIZWlnaHQgPSBpbnNwZWN0
b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wOworCisgICAgd2luZG93UG9zLT5jeSAt
PSBpbnNwZWN0b3JIZWlnaHQ7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAw
LCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+
Y3gsIGRlZmF1bHRBdHRhY2hlZEhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQ
b3MobV93ZWJWaWV3SHduZCwgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQ
b3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CiB9
CiAKIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32889</attachid>
            <date>2009-07-16 13:45:58 -0700</date>
            <delta_ts>2009-07-16 17:08:32 -0700</delta_ts>
            <desc>Fixed Reattach Bug - No variable Caching</desc>
            <filename>Inspector_attach_height_take_4.patch</filename>
            <type>text/plain</type>
            <size>13103</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTk4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDctMTYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKwkJaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisJCQorCQlNb3ZlZCBwcmVmZXJl
bmNlIHNldHRpbmcgZm9yIGF0dGFjaGVkIGluc3BlY3RvciBoZWlnaHQgYW5kIGluc3BlY3RvciBo
ZWlnaHQgY2FsY3VsYXRpb24gZnJvbQorCQlXZWJJbnNwZWN0b3JDbGllbnQubW0gaW50byBJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCwgdG8gbWFrZSB0aGlzIGNvZGUgY3Jvc3MtcGxhdGZvcm0gYW5k
IGVuYWJsZQorCQlXaW5kb3dzIHJlc2l6aW5nIG9mIGF0dGFjaGVkIGluc3BlY3Rvci4gQWxzbyBh
ZGRlZCBhIG5ldyBmdW5jdGlvbiB0byBXZWJDb3JlLmJhc2UuZXhwLgorCisgICAgICAgIE1vdmVk
IGF0dGFjaGVkIGluc3BlY3RvciB3aW5kb3cgcmVzaXppbmcgbG9naWMgZnJvbSBXZWJJbnNwZWN0
b3JDbGllbnQubW0gdG8gSW5zcGVjdG9yQ29udHJvbGxlcgorCisgICAgICAgICogV2ViQ29yZS5i
YXNlLmV4cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjb25zdHJhaW5lZEF0dGFjaGVk
V2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGlu
Zzo6U2V0dGluZyk6CisKIDIwMDktMDctMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAkocmV2aXNpb24gNDU5NjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxMCw2ICs0MTAsNyBAQCBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxNWRpc2FiCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNnNldFdpbmRvd1Zp
c2libGVFYmIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFy
dFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQorX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMzFjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0RWxsCiBf
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI0c2hvd0V2CiBfX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXI1Y2xvc2VFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyN2luc3BlY3RFUE5TXzROb2RlRQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ1OTYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDggKzk5LDEzIEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHIKIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCByZXNvdXJjZVRyYWNraW5nRW5hYmxlZFNldHRpbmdOYW1lID0gInJlc291cmNlVHJh
Y2tpbmdFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1Z2dlckVuYWJsZWRT
ZXR0aW5nTmFtZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IHByb2ZpbGVyRW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5hYmxlZCI7CitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZlUGFu
ZWxTZXR0aW5nTmFtZSA9ICJsYXN0QWN0aXZlUGFuZWwiOwogCitzdGF0aWMgY29uc3QgbG9uZyBk
ZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0
dGFjaGVkSGVpZ2h0ID0gMjUwLjA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVk
SGVpZ2h0UmF0aW8gPSAwLjc1OworCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJj
ZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIE5v
ZGUqIGZyYW1lTm9kZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwgZnJhbWVOb2RlKTsK
QEAgLTQ4MywxMSArNDg4LDMwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNo
ZWRXaW4KICAgICBtX2Zyb250ZW5kLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7CiB9CiAK
K2xvbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdo
dChsb25nIHByZWZlcnJlZEhlaWdodCwgbG9uZyB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICBp
ZiAocHJlZmVycmVkSGVpZ2h0ID09IDApIHsKKyAgICAgICAgLy8gSWYgcHJlZmVycmVkSGVpZ2h0
IGlzIDAsIHRoZW4gdXNlIHRoZSBzdG9yZWQgc2V0dGluZyBhcyBhIHByZWZlcnJlZCBoZWlnaHQu
CisgICAgICAgIFNldHRpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0TmFtZSk7CisgICAgICAgIHByZWZlcnJlZEhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0
LnR5cGUoKSA9PSBTZXR0aW5nOjpJbnRlZ2VyVHlwZSA/IGF0dGFjaGVkSGVpZ2h0LmludGVnZXJW
YWx1ZSgpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIH0KKworICAgIHJldHVybiByb3Vu
ZChtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCAKKyAgICAgICAgbWluKHN0YXRpY19jYXN0PGZs
b2F0PihwcmVmZXJyZWRIZWlnaHQpLCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hl
ZEhlaWdodFJhdGlvKSkpOworfQorCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodCho
ZWlnaHQpOworCisgICAgbG9uZyB0b3RhbEhlaWdodCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmll
dygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgbG9uZyBhdHRhY2hlZEhlaWdodCA9IGNvbnN0cmFp
bmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdodCk7CisKKyAgICAvLyBT
YXZlIGEgcHJlZmVyZW5jZSBmb3IgdGhlIHVzZXIncyBwcmVmZXJyZWQgYXR0YWNoZWQgaGVpZ2h0
IGFuZCBwYXNzIGl0IHRvIHRoZSBjbGllbnQKKyAgICBzZXRTZXR0aW5nKGluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0TmFtZSwgU2V0dGluZyhhdHRhY2hlZEhlaWdodCkpOworCisgICAgbV9jbGllbnQt
PnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVs
TmFtZSkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlz
aW9uIDQ1OTYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
c2ltcGxlQ29udGVudC5tX2Jvb2xlYW4gPSB2YWx1ZTsKICAgICAgICAgfQogCisgICAgICAgIGV4
cGxpY2l0IFNldHRpbmcobG9uZyB2YWx1ZSkKKyAgICAgICAgICAgIDogbV90eXBlKEludGVnZXJU
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NpbXBsZUNvbnRlbnQubV9pbnRlZ2VyID0g
dmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBleHBsaWNpdCBTZXR0aW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgICAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQogICAgICAgICB7CkBA
IC0xODYsNiArMTkyLDggQEAgcHVibGljOgogICAgIHZvaWQgYXR0YWNoV2luZG93KCk7CiAgICAg
dm9pZCBkZXRhY2hXaW5kb3coKTsKIAorICAgIGxvbmcgY29uc3RyYWluZWRBdHRhY2hlZFdpbmRv
d0hlaWdodChsb25nIHByZWZlcnJlZEhlaWdodCwgbG9uZyB0b3RhbFdpbmRvd0hlaWdodCk7CisK
ICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwogICAgIHZvaWQgc2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1OTgyKQor
KysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAor
MjAwOS0wNy0xNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IG9mIDxyZGFy
Oi8vcHJvYmxlbS81NzEyNzk1PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhlIGhlaWdodCBvZiB0aGUg
ZG9ja2VkIFdlYiBJbnNwZWN0b3IgKDE0MjcyKQorCQlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyNzIKKworICAgICAgICBSZW1vdmVkIHNpemUgY2FsY3VsYXRpb24g
Y29kZSBmcm9tIFtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEluaXRpYWxBdHRhY2hl
ZEhlaWdodF0gaW50bworCSAgICBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCB0byBtYWtlIGl0IGNy
b3NzIHBsYXRmb3JtLCBhbmQgdXNlIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gc3RvcmUgdGhlIAor
CSAgICB1c2VyJ3MgcHJlZmVycmVkIHNpemUgZm9yIGFuIGF0dGFjaGVkIHdpbmRvdywgaW5zdGVh
ZCBvZiBOU1VzZXJEZWZhdWx0cy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBz
aG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0Ol0pOgorCiAyMDA5LTA3LTE1ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDog
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0JKHJl
dmlzaW9uIDQ1OTYzKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1Miw5ICsxNTIsNiBAQCB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0CiAKICNwcmFnbWEgbWFyayAtCiAKLSNkZWZpbmUg
V2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRLZXkgQCJXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZCIKLSNk
ZWZpbmUgV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRWaWV3SGVpZ2h0S2V5IEAiV2ViS2l0SW5zcGVj
dG9yQXR0YWNoZWRWaWV3SGVpZ2h0IgotCiBAaW1wbGVtZW50YXRpb24gV2ViSW5zcGVjdG9yV2lu
ZG93Q29udHJvbGxlcgogLSAoaWQpaW5pdAogewpAQCAtMzIzLDcgKzMyMCw4IEBAIHZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXQKIAogICAgIGlmIChfc2hvdWxkQXR0YWNo
KSB7CiAgICAgICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gW1tfaW5zcGVjdGVkV2ViVmll
dyBtYWluRnJhbWVdIGZyYW1lVmlld107Ci0KKyAgICAgICAgTlNSZWN0IGZyYW1lVmlld1JlY3Qg
PSBbZnJhbWVWaWV3IGZyYW1lXTsKKyAgICAgICAgCiAgICAgICAgIFtfd2ViVmlldyByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKICAgICAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IGFkZFN1YnZpZXc6X3dl
YlZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86KE5TVmlldyAqKWZyYW1l
Vmlld107CiAKQEAgLTMzMSw4ICszMjksOCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBk
YXRlV2luZG93VGl0CiAgICAgICAgIFtmcmFtZVZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooTlNW
aWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01pbllNYXJnaW4p
XTsKIAogICAgICAgICBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcgPSBZRVM7Ci0KLSAgICAg
ICAgW3NlbGYgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZFZpZXdI
ZWlnaHRLZXldXTsKKyAgICAgICAgCisgICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93SGVp
Z2h0OltfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb25z
dHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KDAsIE5TSGVpZ2h0KGZyYW1lVmlld1JlY3QpKV07
CiAgICAgfSBlbHNlIHsKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0gTk87
CiAKQEAgLTM4MSwyMyArMzc5LDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVX
aW5kb3dUaXQKIAogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDoodW5zaWduZWQpaGVp
Z2h0CiB7Ci0gICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0SW50
ZWdlcjpoZWlnaHQgZm9yS2V5OldlYktpdEluc3BlY3RvckF0dGFjaGVkVmlld0hlaWdodEtleV07
Ci0KICAgICBpZiAoIV9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykKICAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNwZWN0ZWRXZWJWaWV3IG1h
aW5GcmFtZV0gZnJhbWVWaWV3XTsKLSAgICBOU1JlY3QgZnJhbWVWaWV3UmVjdCA9IFtmcmFtZVZp
ZXcgZnJhbWVdOwotCi0gICAgQ0dGbG9hdCBhdHRhY2hlZEhlaWdodCA9IHJvdW5kKE1BWCgyNTAu
MCwgTUlOKGhlaWdodCwgKE5TSGVpZ2h0KFtfaW5zcGVjdGVkV2ViVmlldyBmcmFtZV0pICogMC43
NSkpKSk7Ci0KKyAgICAKICAgICAvLyBTZXR0aW5nIHRoZSBoZWlnaHQgYmFzZWQgb24gdGhlIGRp
ZmZlcmVuY2UgaXMgZG9uZSB0byB3b3JrIHdpdGgKICAgICAvLyBTYWZhcmkncyBmaW5kIGJhbm5l
ci4gVGhpcyBhc3N1bWVzIHRoZSBwcmV2aW91cyBoZWlnaHQgaXMgdGhlIFkgb3JpZ2luLgotICAg
IENHRmxvYXQgaGVpZ2h0RGlmZmVyZW5jZSA9IChOU01pblkoZnJhbWVWaWV3UmVjdCkgLSBhdHRh
Y2hlZEhlaWdodCk7CisgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNwZWN0ZWRX
ZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKKyAgICBOU1JlY3QgZnJhbWVWaWV3UmVjdCA9
IFtmcmFtZVZpZXcgZnJhbWVdOworICAgIAorICAgIENHRmxvYXQgaGVpZ2h0RGlmZmVyZW5jZSA9
IChOU01pblkoZnJhbWVWaWV3UmVjdCkgLSBoZWlnaHQpOwogICAgIGZyYW1lVmlld1JlY3Quc2l6
ZS5oZWlnaHQgKz0gaGVpZ2h0RGlmZmVyZW5jZTsKLSAgICBmcmFtZVZpZXdSZWN0Lm9yaWdpbi55
ID0gYXR0YWNoZWRIZWlnaHQ7CisgICAgZnJhbWVWaWV3UmVjdC5vcmlnaW4ueSA9IGhlaWdodDsK
IAotICAgIFtfd2ViVmlldyBzZXRGcmFtZTpOU01ha2VSZWN0KDAuMCwgMC4wLCBOU1dpZHRoKGZy
YW1lVmlld1JlY3QpLCBhdHRhY2hlZEhlaWdodCldOworICAgIFtfd2ViVmlldyBzZXRGcmFtZTpO
U01ha2VSZWN0KDAuMCwgMC4wLCBOU1dpZHRoKGZyYW1lVmlld1JlY3QpLCBoZWlnaHQpXTsKICAg
ICBbZnJhbWVWaWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwogfQogCkluZGV4OiBXZWJLaXQv
d2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gNDU5ODIpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDA5LTA3LTE2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXggb2YgPHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0aGUgaGVp
Z2h0IG9mIHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisJCWh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisJCUltcGxlbWVudGVkIHJlc2l6aW5n
IG9mIGluc3BlY3RvciB3aW5kb3cgd2hlbiBpdCBpcyBpbiBhdHRhY2hlZCBtb2RlLiBJbXBsZW1l
bnRlZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodAorCQl0byBzZXQgd2luZG93IHNpemVzIGFuZCBy
ZWRyYXcgdGhlIGluc3BlY3RvciBhbmQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldywgYW5kIHVzZWQg
c3RvcmVkIHByZWZlcmVuY2VzCisJCWluIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIHRvIHJlbWVt
YmVyIHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6YXR0
YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQ
b3NDaGFuZ2luZyk6CisKIDIwMDktMDctMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0NTk2
MykKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBzdGF0aWMgTFBDVFNUUiBrV2ViSW5zcGVj
dG9yV2luZG93Q2xhc3NOCiBzdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiBzdGF0
aWMgTFBDVFNUUiBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AgPSBURVhUKCJXZWJJbnNwZWN0b3JQ
b2ludGVyIik7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQg
PSAzMDA7Ci0KIHN0YXRpYyBjb25zdCBJbnRSZWN0JiBkZWZhdWx0V2luZG93UmVjdCgpCiB7CiAg
ICAgc3RhdGljIEludFJlY3QgcmVjdCg2MCwgMjAwLCA3NTAsIDY1MCk7CkBAIC0yNDAsNiArMjM4
LDE2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQogCiAgICAgY2xv
c2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90
aWZpY2F0aW9ucygpOworCisgICAgSFdORCBob3N0V2luZG93OworICAgIGlmIChTVUNDRUVERUQo
bV9pbnNwZWN0ZWRXZWJWaWV3LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykp
KQorICAgICAgICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsgICAgIC8v
IE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IHNpemUKKyAgICBSRUNUIGhvc3RXaW5kb3dS
ZWN0OworICAgIEdldENsaWVudFJlY3QoaG9zdFdpbmRvdywgJmhvc3RXaW5kb3dSZWN0KTsKKwor
ICAgIC8vIFRoaXMgcmUtY29uc3RyYWlucyBvdXIgYXR0YWNoZWQgaGVpZ2h0LCBpbiBjYXNlIHdo
aWxlIHRoZSBpbnNwZWN0b3Igd2FzIGRldGFjaGVkLCB0aGV5IHJlc2l6ZWQgdGhlIGluc3BlY3Rl
ZCB3aW5kb3csCisgICAgLy8gYW5kIGRyYXdpbmcgaXQgYXQgdGhlIHNpemUgaXQgdXNlZCB0byBi
ZSBjb3VsZCBsZWFkIHRvIHRoZSBpbnNwZWN0b3IgdGFraW5nIHVwIHRoZSB3aG9sZSB3aW5kb3cg
b3IgbW9yZQorICAgIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KG1faW5zcGVjdGVkV2ViVmlldy0+
cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dI
ZWlnaHQoMCwgaG9zdFdpbmRvd1JlY3QuYm90dG9tIC0gaG9zdFdpbmRvd1JlY3QudG9wKSk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQpAQCAtMjU1LDcgKzI2
MywyNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKIAogdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdo
dCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCisgICAgaWYgKCFtX2F0dGFjaGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBIV05EIGhvc3RXaW5kb3c7CisgICAgaWYgKCFTVUND
RUVERUQobV9pbnNwZWN0ZWRXZWJWaWV3LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdp
bmRvdykpKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIGhvc3RXaW5kb3dSZWN0OworICAg
IEdldENsaWVudFJlY3QoaG9zdFdpbmRvdywgJmhvc3RXaW5kb3dSZWN0KTsKKworICAgIFJFQ1Qg
aW5zcGVjdGVkUmVjdDsKKyAgICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkV2ViVmlld0h3bmQs
ICZpbnNwZWN0ZWRSZWN0KTsKKworICAgIGludCB0b3RhbEhlaWdodCA9IGhvc3RXaW5kb3dSZWN0
LmJvdHRvbSAtIGhvc3RXaW5kb3dSZWN0LnRvcDsKKyAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5z
cGVjdGVkUmVjdC5yaWdodCAtIGluc3BlY3RlZFJlY3QubGVmdDsKKworICAgIFNldFdpbmRvd1Bv
cyhtX3dlYlZpZXdId25kLCAwLCAwLCB0b3RhbEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRo
LCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2Vi
Vmlld0h3bmQsIDAsIDAsIDAsIHdlYlZpZXdXaWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRF
Uik7CisKKyAgICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURB
VEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93
KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENI
SUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpo
aWdobGlnaHQoTm9kZSopCkBAIC00MTMsOSArNDQxLDEzIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvbldlYlZpZXdXaW5kb3cKICAgICBpZiAod2luZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJ
WkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdpbmRvd1Bvcy0+Y3kgLT0gZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0OworICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKKyAgICBHZXRDbGllbnRSZWN0KG1f
d2ViVmlld0h3bmQsICZpbnNwZWN0b3JSZWN0KTsKKyAgICBsb25nIGluc3BlY3RvckhlaWdodCA9
IGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3A7CisKKyAgICB3aW5kb3dQ
b3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKIAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmll
d0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2lu
ZG93UG9zLT5jeCwgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNl
dFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSAr
IHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9S
REVSKTsKIH0KIAogc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhI
V05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQo=
</data>
<flag name="review"
          id="17239"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32903</attachid>
            <date>2009-07-16 17:08:32 -0700</date>
            <delta_ts>2009-07-17 14:12:39 -0700</delta_ts>
            <desc>Resize Attached Inspector</desc>
            <filename>Windows_attach_resize.patch</filename>
            <type>text/plain</type>
            <size>12905</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTk5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDctMTYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisKKyAgICAgICAgTW92
ZWQgcHJlZmVyZW5jZSBzZXR0aW5nIGZvciBhdHRhY2hlZCBpbnNwZWN0b3IgaGVpZ2h0IGFuZCBp
bnNwZWN0b3IgaGVpZ2h0IGNhbGN1bGF0aW9uIGZyb20KKyAgICAgICAgV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tIGludG8gSW5zcGVjdG9yQ29udHJvbGxlci5jcHAsIHRvIG1ha2UgdGhpcyBjb2RlIGNy
b3NzLXBsYXRmb3JtIGFuZCBlbmFibGUKKyAgICAgICAgV2luZG93cyByZXNpemluZyBvZiBhdHRh
Y2hlZCBpbnNwZWN0b3IuIEFsc28gYWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gV2ViQ29yZS5iYXNl
LmV4cC4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1dpbmRvdyk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OlNldHRpbmcpOgorCiAyMDA5LTA3LTE2ICBEcmV3IFdp
bHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
TGV2aW4uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0NTk2MykKKysrIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDEwLDYgKzQxMCw3IEBAIF9fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1ZGlzYWIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjE2c2V0V2luZG93VmlzaWJsZUViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0VQTlNfNVRpbWVySVMw
X0VFCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWNvbnN0cmFpbmVkQXR0YWNo
ZWRXaW5kb3dIZWlnaHRFbGwKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93
RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjVjbG9zZUV2CiBfX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXI3aW5zcGVjdEVQTlNfNE5vZGVFCkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU5NjMpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTksOCArOTksMTMgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQ
cgogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU2V0dGlu
Z05hbWUgPSAicmVzb3VyY2VUcmFja2luZ0VuYWJsZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1lID0gImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgcHJvZmlsZXJFbmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmls
ZXJFbmFibGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhl
aWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwogc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lID0gImxhc3RBY3RpdmVQYW5lbCI7CiAK
K3N0YXRpYyBjb25zdCBsb25nIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKK3N0YXRpYyBj
b25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMDsKK3N0YXRpYyBjb25zdCBm
bG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7CisKIGJvb2wgSW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWVOb2RlKQogewogICAgIEFTU0VSVF9BUkcoZnJh
bWVOb2RlLCBmcmFtZU5vZGUpOwpAQCAtNDY1LDcgKzQ3MCwxNCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmF0dGFjaFdpbmRvdygpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpbnQgaW5zcGVjdGVkSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgCiAgICAgbV9jbGll
bnQtPmF0dGFjaFdpbmRvdygpOworICAgIAorICAgIFNldHRpbmcgYXR0YWNoZWRIZWlnaHQgPSBz
ZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgaW50IHByZWZlcnJlZEhl
aWdodCA9IGF0dGFjaGVkSGVpZ2h0LnR5cGUoKSA9PSBTZXR0aW5nOjpJbnRlZ2VyVHlwZSA/IGF0
dGFjaGVkSGVpZ2h0LmludGVnZXJWYWx1ZSgpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAg
IG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkSGVpZ2h0KSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNoV2luZG93KCkKQEAgLTQ4MywxMSArNDk1LDI0IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW4KICAgICBtX2Zyb250ZW5k
LT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChsb25nIHByZWZlcnJlZEhlaWdo
dCwgbG9uZyB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICByZXR1cm4gcm91bmQobWF4KG1pbmlt
dW1BdHRhY2hlZEhlaWdodCwgCisgICAgICAgIG1pbihzdGF0aWNfY2FzdDxmbG9hdD4ocHJlZmVy
cmVkSGVpZ2h0KSwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
bykpKTsKK30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKKwor
ICAgIGxvbmcgdG90YWxIZWlnaHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2li
bGVIZWlnaHQoKSArIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpOworICAgIGxvbmcgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVk
V2luZG93SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOworCisgICAgLy8gU2F2ZSBhIHByZWZl
cmVuY2UgZm9yIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGF0dGFjaGVkIGhlaWdodCBhbmQgcGFzcyBp
dCB0byB0aGUgY2xpZW50CisgICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5h
bWUsIFNldHRpbmcoYXR0YWNoZWRIZWlnaHQpKTsKKworICAgIG1fY2xpZW50LT5zZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCkBAIC02
NDgsNyArNjczLDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKIHsKICAgICBBU1NFUlQoZW5hYmxlZCgp
KTsKKyAgICAKKyAgICBpbnQgaW5zcGVjdGVkSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgCiAgICAgbV9jbGllbnQtPnNo
b3dXaW5kb3coKTsKKyAgICAKKyAgICBTZXR0aW5nIGF0dGFjaGVkSGVpZ2h0ID0gc2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIGludCBwcmVmZXJyZWRIZWlnaHQgPSBh
dHRhY2hlZEhlaWdodC50eXBlKCkgPT0gU2V0dGluZzo6SW50ZWdlclR5cGUgPyBhdHRhY2hlZEhl
aWdodC5pbnRlZ2VyVmFsdWUoKSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICBtX2NsaWVu
dC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdo
dChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3RlZEhlaWdodCkpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNsb3NlV2luZG93KCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ1OTYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fc2ltcGxlQ29udGVudC5tX2Jvb2xlYW4gPSB2YWx1ZTsKICAg
ICAgICAgfQogCisgICAgICAgIGV4cGxpY2l0IFNldHRpbmcobG9uZyB2YWx1ZSkKKyAgICAgICAg
ICAgIDogbV90eXBlKEludGVnZXJUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NpbXBs
ZUNvbnRlbnQubV9pbnRlZ2VyID0gdmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBleHBsaWNp
dCBTZXR0aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgICA6IG1fdHlwZShTdHJp
bmdUeXBlKQogICAgICAgICB7CkBAIC0xODYsNiArMTkyLDggQEAgcHVibGljOgogICAgIHZvaWQg
YXR0YWNoV2luZG93KCk7CiAgICAgdm9pZCBkZXRhY2hXaW5kb3coKTsKIAorICAgIGxvbmcgY29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChsb25nIHByZWZlcnJlZEhlaWdodCwgbG9uZyB0
b3RhbFdpbmRvd0hlaWdodCk7CisKICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwog
ICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIApJbmRl
eDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ1OTk4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5z
dGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEyNzk1PiBXaW46IENhbm5vdCBjaGFu
Z2UgdGhlIGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0b3IgKDE0MjcyKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNzIKKworICAgICAg
ICBSZW1vdmVkIHNpemUgY2FsY3VsYXRpb24gY29kZSBmcm9tIFtXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyIHNldEluaXRpYWxBdHRhY2hlZEhlaWdodF0gaW50bworICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmNwcCB0byBtYWtlIGl0IGNyb3NzIHBsYXRmb3JtLCBhbmQgdXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXIgdG8gc3RvcmUgdGhlIAorICAgICAgICB1c2VyJ3MgcHJlZmVycmVkIHNp
emUgZm9yIGFuIGF0dGFjaGVkIHdpbmRvdywgaW5zdGVhZCBvZiBOU1VzZXJEZWZhdWx0cy4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToKKyAgICAgICAg
KC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAo
LVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0Ol0p
OgorCiAyMDA5LTA3LTE2ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA0NTk2MykKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTIsOSArMTUyLDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRv
d1RpdAogCiAjcHJhZ21hIG1hcmsgLQogCi0jZGVmaW5lIFdlYktpdEluc3BlY3RvckF0dGFjaGVk
S2V5IEAiV2ViS2l0SW5zcGVjdG9yQXR0YWNoZWQiCi0jZGVmaW5lIFdlYktpdEluc3BlY3RvckF0
dGFjaGVkVmlld0hlaWdodEtleSBAIldlYktpdEluc3BlY3RvckF0dGFjaGVkVmlld0hlaWdodCIK
LQogQGltcGxlbWVudGF0aW9uIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIKIC0gKGlkKWlu
aXQKIHsKQEAgLTMyMyw3ICszMjAsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRl
V2luZG93VGl0CiAKICAgICBpZiAoX3Nob3VsZEF0dGFjaCkgewogICAgICAgICBXZWJGcmFtZVZp
ZXcgKmZyYW1lVmlldyA9IFtbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXdd
OwotCisgICAgICAgIAogICAgICAgICBbX3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CiAg
ICAgICAgIFtfaW5zcGVjdGVkV2ViVmlldyBhZGRTdWJ2aWV3Ol93ZWJWaWV3IHBvc2l0aW9uZWQ6
TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOihOU1ZpZXcgKilmcmFtZVZpZXddOwogCkBAIC0zMzEs
OCArMzI4LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdAogICAg
ICAgICBbZnJhbWVWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8
IE5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5ZTWFyZ2luKV07CiAKICAgICAgICAgX2F0
dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0gWUVTOwotCi0gICAgICAgIFtzZWxmIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0OltbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGlu
dGVnZXJGb3JLZXk6V2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRWaWV3SGVpZ2h0S2V5XV07CiAgICAg
fSBlbHNlIHsKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0gTk87CiAKQEAg
LTM4MSwyMyArMzc2LDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXQKIAogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDoodW5zaWduZWQpaGVpZ2h0CiB7
Ci0gICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0SW50ZWdlcjpo
ZWlnaHQgZm9yS2V5OldlYktpdEluc3BlY3RvckF0dGFjaGVkVmlld0hlaWdodEtleV07Ci0KICAg
ICBpZiAoIV9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykKICAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFt
ZV0gZnJhbWVWaWV3XTsKLSAgICBOU1JlY3QgZnJhbWVWaWV3UmVjdCA9IFtmcmFtZVZpZXcgZnJh
bWVdOwotCi0gICAgQ0dGbG9hdCBhdHRhY2hlZEhlaWdodCA9IHJvdW5kKE1BWCgyNTAuMCwgTUlO
KGhlaWdodCwgKE5TSGVpZ2h0KFtfaW5zcGVjdGVkV2ViVmlldyBmcmFtZV0pICogMC43NSkpKSk7
Ci0KKyAgICAKICAgICAvLyBTZXR0aW5nIHRoZSBoZWlnaHQgYmFzZWQgb24gdGhlIGRpZmZlcmVu
Y2UgaXMgZG9uZSB0byB3b3JrIHdpdGgKICAgICAvLyBTYWZhcmkncyBmaW5kIGJhbm5lci4gVGhp
cyBhc3N1bWVzIHRoZSBwcmV2aW91cyBoZWlnaHQgaXMgdGhlIFkgb3JpZ2luLgotICAgIENHRmxv
YXQgaGVpZ2h0RGlmZmVyZW5jZSA9IChOU01pblkoZnJhbWVWaWV3UmVjdCkgLSBhdHRhY2hlZEhl
aWdodCk7CisgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNwZWN0ZWRXZWJWaWV3
IG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKKyAgICBOU1JlY3QgZnJhbWVWaWV3UmVjdCA9IFtmcmFt
ZVZpZXcgZnJhbWVdOworICAgIAorICAgIENHRmxvYXQgaGVpZ2h0RGlmZmVyZW5jZSA9IChOU01p
blkoZnJhbWVWaWV3UmVjdCkgLSBoZWlnaHQpOwogICAgIGZyYW1lVmlld1JlY3Quc2l6ZS5oZWln
aHQgKz0gaGVpZ2h0RGlmZmVyZW5jZTsKLSAgICBmcmFtZVZpZXdSZWN0Lm9yaWdpbi55ID0gYXR0
YWNoZWRIZWlnaHQ7CisgICAgZnJhbWVWaWV3UmVjdC5vcmlnaW4ueSA9IGhlaWdodDsKIAotICAg
IFtfd2ViVmlldyBzZXRGcmFtZTpOU01ha2VSZWN0KDAuMCwgMC4wLCBOU1dpZHRoKGZyYW1lVmll
d1JlY3QpLCBhdHRhY2hlZEhlaWdodCldOworICAgIFtfd2ViVmlldyBzZXRGcmFtZTpOU01ha2VS
ZWN0KDAuMCwgMC4wLCBOU1dpZHRoKGZyYW1lVmlld1JlY3QpLCBoZWlnaHQpXTsKICAgICBbZnJh
bWVWaWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwogfQogCkluZGV4OiBXZWJLaXQvd2luL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDU5
OTgpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4
IEBACisyMDA5LTA3LTE2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggb2Yg
PHJkYXI6Ly9wcm9ibGVtLzU3MTI3OTU+IFdpbjogQ2Fubm90IGNoYW5nZSB0aGUgaGVpZ2h0IG9m
IHRoZSBkb2NrZWQgV2ViIEluc3BlY3RvciAoMTQyNzIpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI3MgorCisgICAgICAgIEltcGxlbWVudGVkIHJl
c2l6aW5nIG9mIGluc3BlY3RvciB3aW5kb3cgd2hlbiBpdCBpcyBpbiBhdHRhY2hlZCBtb2RlLiBJ
bXBsZW1lbnRlZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodAorICAgICAgICB0byBzZXQgd2luZG93
IHNpemVzIGFuZCByZWRyYXcgdGhlIGluc3BlY3RvciBhbmQgdGhlIGluc3BlY3RlZCB3ZWIgdmll
dywgYW5kIHVzZWQgc3RvcmVkIHByZWZlcmVuY2VzCisgICAgICAgIGluIEluc3BlY3RvckNvbnRy
b2xsZXIuY3BwIHRvIHJlbWVtYmVyIHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0LgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYklu
c3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZyk6CisKIDIwMDktMDctMTYg
IFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNDU5NjMpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3
LDYgQEAgc3RhdGljIExQQ1RTVFIga1dlYkluc3BlY3RvcldpbmRvd0NsYXNzTgogc3RhdGljIEFU
T00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwogc3RhdGljIExQQ1RTVFIga1dlYkluc3BlY3RvclBv
aW50ZXJQcm9wID0gVEVYVCgiV2ViSW5zcGVjdG9yUG9pbnRlciIpOwogCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOwotCiBzdGF0aWMgY29uc3QgSW50
UmVjdCYgZGVmYXVsdFdpbmRvd1JlY3QoKQogewogICAgIHN0YXRpYyBJbnRSZWN0IHJlY3QoNjAs
IDIwMCwgNzUwLCA2NTApOwpAQCAtMjU1LDcgKzI1MywyNyBAQCB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGV0YWNoV2luZG93KCkKIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IHRoaXMuCisgICAgaWYgKCFtX2F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBI
V05EIGhvc3RXaW5kb3c7CisgICAgaWYgKCFTVUNDRUVERUQobV9pbnNwZWN0ZWRXZWJWaWV3LT5o
b3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSRUNUIGhvc3RXaW5kb3dSZWN0OworICAgIEdldENsaWVudFJlY3QoaG9zdFdpbmRvdywg
Jmhvc3RXaW5kb3dSZWN0KTsKKworICAgIFJFQ1QgaW5zcGVjdGVkUmVjdDsKKyAgICBHZXRDbGll
bnRSZWN0KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsICZpbnNwZWN0ZWRSZWN0KTsKKworICAgIGlu
dCB0b3RhbEhlaWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRvbSAtIGhvc3RXaW5kb3dSZWN0LnRv
cDsKKyAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdodCAtIGluc3BlY3Rl
ZFJlY3QubGVmdDsKKworICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCAwLCB0b3Rh
bEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7Cisg
ICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIDAsIHdlYlZpZXdX
aWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisKKyAgICBSZWRyYXdXaW5kb3cobV93
ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdf
VVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAs
IDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCkBAIC00MTMsOSAr
NDMxLDEzIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3cKICAgICBp
ZiAod2luZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHdpbmRvd1Bvcy0+Y3kgLT0gZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIFJFQ1QgaW5zcGVj
dG9yUmVjdDsKKyAgICBHZXRDbGllbnRSZWN0KG1fd2ViVmlld0h3bmQsICZpbnNwZWN0b3JSZWN0
KTsKKyAgICBsb25nIGluc3BlY3RvckhlaWdodCA9IGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5z
cGVjdG9yUmVjdC50b3A7CisKKyAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsK
IAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2lu
ZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgZGVmYXVsdEF0dGFjaGVk
SGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAw
LCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+
Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsKIH0KIAogc3RhdGljIExSRVNVTFQg
Q0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQo=
</data>
<flag name="review"
          id="17252"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32968</attachid>
            <date>2009-07-17 14:12:39 -0700</date>
            <delta_ts>2009-07-17 17:11:36 -0700</delta_ts>
            <desc>Resize Attach Height</desc>
            <filename>Crossplatform_take_6.patch</filename>
            <type>text/plain</type>
            <size>11686</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDctMTcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeCBvZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRo
ZSBoZWlnaHQgb2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisgICAgICAgIAorICAg
ICAgICBNb3ZlZCBwcmVmZXJlbmNlIHNldHRpbmcgZm9yIGF0dGFjaGVkIGluc3BlY3RvciBoZWln
aHQgYW5kIGluc3BlY3RvciBoZWlnaHQgY2FsY3VsYXRpb24gZnJvbQorICAgICAgICBXZWJJbnNw
ZWN0b3JDbGllbnQubW0gaW50byBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCwgdG8gbWFrZSB0aGlz
IGNvZGUgY3Jvc3MtcGxhdGZvcm0gYW5kIGVuYWJsZQorICAgICAgICBXaW5kb3dzIHJlc2l6aW5n
IG9mIGF0dGFjaGVkIGluc3BlY3Rvci4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
OgorCiAyMDA5LTA3LTE3ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU5NjMpCisrKyBXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTks
MTMgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcgogc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHJlc291cmNlVHJhY2tpbmdFbmFibGVkU2V0dGluZ05hbWUgPSAicmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlYnVnZ2Vy
RW5hYmxlZFNldHRpbmdOYW1lID0gImRlYnVnZ2VyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgcHJvZmlsZXJFbmFibGVkU2V0dGluZ05hbWUgPSAicHJvZmlsZXJFbmFibGVkIjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAi
aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxhc3RB
Y3RpdmVQYW5lbFNldHRpbmdOYW1lID0gImxhc3RBY3RpdmVQYW5lbCI7CiAKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29uc3QgZmxv
YXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OworCiBib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2UsIE5vZGUqIGZyYW1lTm9kZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwg
ZnJhbWVOb2RlKTsKQEAgLTQ2MSwxMSArNDY2LDI3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZW5kR3JvdXAoTWVzc2EKICAgICBhZGRDb25zb2xlTWVzc2FnZSgwLCBuZXcgQ29uc29sZU1l
c3NhZ2Uoc291cmNlLCBFbmRHcm91cE1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIFN0cmlu
ZygpLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1fZ3JvdXBMZXZlbCkpOwogfQogCitzdGF0aWMg
dW5zaWduZWQgY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBwcmVmZXJy
ZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KQoreworICAgIHJldHVybiByb3Vu
ZChtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LAorICAgICAgICBtaW4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHByZWZlcnJlZEhlaWdodCksIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0dGFjaGVk
SGVpZ2h0UmF0aW8pKSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2lu
ZG93KCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworCiAgICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygp
OworCisgICAgU2V0dGluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHROYW1lKTsKKyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBhdHRhY2hlZEhl
aWdodC50eXBlKCkgPT0gU2V0dGluZzo6SW50ZWdlclR5cGUgPyBhdHRhY2hlZEhlaWdodC5pbnRl
Z2VyVmFsdWUoKSA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKworICAgIC8vIFdlIG5lZWQgdG8g
Y29uc3RyYWluIHRoZSB3aW5kb3cgaGVpZ2h0IGhlcmUgaW4gY2FzZSB0aGUgdXNlciBoYXMgcmVz
aXplZCB0aGUgaW5zcGVjdGVkIHBhZ2UncyB3aW5kb3cgc28gdGhhdAorICAgIC8vIHRoZSB1c2Vy
J3MgcHJlZmVycmVkIGhlaWdodCB3b3VsZCBiZSB0b28gYmlnIHRvIGRpc3BsYXkuCisgICAgbV9j
bGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dI
ZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNoV2luZG93KCkKQEAgLTQ4Nyw3ICs1MDgsMTMgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbgogewogICAgIGlmICghZW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGhlaWdodCk7CisgICAgCisgICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGF0dGFj
aGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFs
SGVpZ2h0KTsKKyAgICAKKyAgICBzZXRTZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFt
ZSwgU2V0dGluZyhhdHRhY2hlZEhlaWdodCkpOworICAgIAorICAgIG1fY2xpZW50LT5zZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCkBA
IC02NDgsNyArNjc1LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKIHsKICAgICBBU1NFUlQoZW5hYmxl
ZCgpKTsKKworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKwogICAgIG1fY2xpZW50
LT5zaG93V2luZG93KCk7CisKKyAgICBTZXR0aW5nIGF0dGFjaGVkSGVpZ2h0ID0gc2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdo
dCA9IGF0dGFjaGVkSGVpZ2h0LnR5cGUoKSA9PSBTZXR0aW5nOjpJbnRlZ2VyVHlwZSA/IGF0dGFj
aGVkSGVpZ2h0LmludGVnZXJWYWx1ZSgpIDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworCisgICAg
Ly8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBv
dXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRh
Y2hlZCwKKyAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIg
Y2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93
SGVpZ2h0LgorICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5l
ZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhlaWdo
dCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlV2luZG93KCkKSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ1OTYzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsNiArMTEzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc2ltcGxlQ29udGVu
dC5tX2Jvb2xlYW4gPSB2YWx1ZTsKICAgICAgICAgfQogCisgICAgICAgIGV4cGxpY2l0IFNldHRp
bmcodW5zaWduZWQgdmFsdWUpCisgICAgICAgICAgICA6IG1fdHlwZShJbnRlZ2VyVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9zaW1wbGVDb250ZW50Lm1faW50ZWdlciA9IHZhbHVlOwor
ICAgICAgICB9CisKICAgICAgICAgZXhwbGljaXQgU2V0dGluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgICAgICAgOiBtX3R5cGUoU3RyaW5nVHlwZSkKICAgICAgICAgewpJbmRleDogV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ2MDU0KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAwOS0wNy0xNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IG9mIDxyZGFyOi8vcHJvYmxlbS81NzEyNzk1PiBXaW46IENhbm5vdCBjaGFuZ2UgdGhl
IGhlaWdodCBvZiB0aGUgZG9ja2VkIFdlYiBJbnNwZWN0b3IgKDE0MjcyKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNzIKKyAgICAgICAgCisgICAg
ICAgIFJlbW92ZWQgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIGZyb20gW1dlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXIgc2V0SW5pdGlhbEF0dGFjaGVkSGVpZ2h0XSBpbnRvCisgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIHRvIG1ha2UgaXQgY3Jvc3MgcGxhdGZvcm0sIGFuZCB1c2UgSW5z
cGVjdG9yQ29udHJvbGxlciB0byBzdG9yZSB0aGUgCisgICAgICAgIHVzZXIncyBwcmVmZXJyZWQg
c2l6ZSBmb3IgYW4gYXR0YWNoZWQgd2luZG93LCBpbnN0ZWFkIG9mIE5TVXNlckRlZmF1bHRzLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAg
ICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNob3dXaW5kb3c6XSk6CisgICAgICAg
ICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6
XSk6CisKIDIwMDktMDctMTYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQkocmV2aXNpb24gNDU5NjMpCisr
KyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTUyLDkgKzE1Miw2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRh
dGVXaW5kb3dUaXQKIAogI3ByYWdtYSBtYXJrIC0KIAotI2RlZmluZSBXZWJLaXRJbnNwZWN0b3JB
dHRhY2hlZEtleSBAIldlYktpdEluc3BlY3RvckF0dGFjaGVkIgotI2RlZmluZSBXZWJLaXRJbnNw
ZWN0b3JBdHRhY2hlZFZpZXdIZWlnaHRLZXkgQCJXZWJLaXRJbnNwZWN0b3JBdHRhY2hlZFZpZXdI
ZWlnaHQiCi0KIEBpbXBsZW1lbnRhdGlvbiBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyCiAt
IChpZClpbml0CiB7CkBAIC0zMzEsOCArMzI4LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnVwZGF0ZVdpbmRvd1RpdAogICAgICAgICBbZnJhbWVWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6
KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5ZTWFy
Z2luKV07CiAKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3ID0gWUVTOwotCi0g
ICAgICAgIFtzZWxmIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0OltbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6V2ViS2l0SW5zcGVjdG9yQXR0YWNoZWRW
aWV3SGVpZ2h0S2V5XV07CiAgICAgfSBlbHNlIHsKICAgICAgICAgX2F0dGFjaGVkVG9JbnNwZWN0
ZWRXZWJWaWV3ID0gTk87CiAKQEAgLTM4MSwyMyArMzc2LDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVXaW5kb3dUaXQKIAogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dDoodW5zaWduZWQpaGVpZ2h0CiB7Ci0gICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJE
ZWZhdWx0c10gc2V0SW50ZWdlcjpoZWlnaHQgZm9yS2V5OldlYktpdEluc3BlY3RvckF0dGFjaGVk
Vmlld0hlaWdodEtleV07Ci0KICAgICBpZiAoIV9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW19pbnNw
ZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKICAgICBOU1JlY3QgZnJhbWVWaWV3
UmVjdCA9IFtmcmFtZVZpZXcgZnJhbWVdOwogCi0gICAgQ0dGbG9hdCBhdHRhY2hlZEhlaWdodCA9
IHJvdW5kKE1BWCgyNTAuMCwgTUlOKGhlaWdodCwgKE5TSGVpZ2h0KFtfaW5zcGVjdGVkV2ViVmll
dyBmcmFtZV0pICogMC43NSkpKSk7Ci0KICAgICAvLyBTZXR0aW5nIHRoZSBoZWlnaHQgYmFzZWQg
b24gdGhlIGRpZmZlcmVuY2UgaXMgZG9uZSB0byB3b3JrIHdpdGgKICAgICAvLyBTYWZhcmkncyBm
aW5kIGJhbm5lci4gVGhpcyBhc3N1bWVzIHRoZSBwcmV2aW91cyBoZWlnaHQgaXMgdGhlIFkgb3Jp
Z2luLgotICAgIENHRmxvYXQgaGVpZ2h0RGlmZmVyZW5jZSA9IChOU01pblkoZnJhbWVWaWV3UmVj
dCkgLSBhdHRhY2hlZEhlaWdodCk7CisgICAgQ0dGbG9hdCBoZWlnaHREaWZmZXJlbmNlID0gKE5T
TWluWShmcmFtZVZpZXdSZWN0KSAtIGhlaWdodCk7CiAgICAgZnJhbWVWaWV3UmVjdC5zaXplLmhl
aWdodCArPSBoZWlnaHREaWZmZXJlbmNlOwotICAgIGZyYW1lVmlld1JlY3Qub3JpZ2luLnkgPSBh
dHRhY2hlZEhlaWdodDsKKyAgICBmcmFtZVZpZXdSZWN0Lm9yaWdpbi55ID0gaGVpZ2h0OwogCi0g
ICAgW193ZWJWaWV3IHNldEZyYW1lOk5TTWFrZVJlY3QoMC4wLCAwLjAsIE5TV2lkdGgoZnJhbWVW
aWV3UmVjdCksIGF0dGFjaGVkSGVpZ2h0KV07CisgICAgW193ZWJWaWV3IHNldEZyYW1lOk5TTWFr
ZVJlY3QoMC4wLCAwLjAsIE5TV2lkdGgoZnJhbWVWaWV3UmVjdCksIGhlaWdodCldOwogICAgIFtm
cmFtZVZpZXcgc2V0RnJhbWU6ZnJhbWVWaWV3UmVjdF07CiB9CiAKSW5kZXg6IFdlYktpdC93aW4v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0
NjA1NCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMDktMDctMTcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBv
ZiA8cmRhcjovL3Byb2JsZW0vNTcxMjc5NT4gV2luOiBDYW5ub3QgY2hhbmdlIHRoZSBoZWlnaHQg
b2YgdGhlIGRvY2tlZCBXZWIgSW5zcGVjdG9yICgxNDI3MikKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcyCisgICAgICAgIAorICAgICAgICBJbXBs
ZW1lbnRlZCByZXNpemluZyBvZiBpbnNwZWN0b3Igd2luZG93IHdoZW4gaXQgaXMgaW4gYXR0YWNo
ZWQgbW9kZS4gSW1wbGVtZW50ZWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQKKyAgICAgICAgdG8g
c2V0IHdpbmRvdyBzaXplcyBhbmQgcmVkcmF3IHRoZSBpbnNwZWN0b3IgYW5kIHRoZSBpbnNwZWN0
ZWQgd2ViIHZpZXcsIGFuZCB1c2VkIHN0b3JlZCBwcmVmZXJlbmNlcworICAgICAgICBpbiBJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCB0byByZW1lbWJlciB1c2VyJ3MgcHJlZmVycmVkIGhlaWdodC4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHA6CisKIDIw
MDktMDctMTYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA0NTk2MykKKysrIFdlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsOCArNTcsNiBAQCBzdGF0aWMgTFBDVFNUUiBrV2ViSW5zcGVjdG9yV2luZG93Q2xh
c3NOCiBzdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiBzdGF0aWMgTFBDVFNUUiBr
V2ViSW5zcGVjdG9yUG9pbnRlclByb3AgPSBURVhUKCJXZWJJbnNwZWN0b3JQb2ludGVyIik7CiAK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7Ci0KIHN0
YXRpYyBjb25zdCBJbnRSZWN0JiBkZWZhdWx0V2luZG93UmVjdCgpCiB7CiAgICAgc3RhdGljIElu
dFJlY3QgcmVjdCg2MCwgMjAwLCA3NTAsIDY1MCk7CkBAIC0yNTUsNyArMjUzLDMwIEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogCiB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEhXTkQgaG9zdFdpbmRvdzsKKyAgICBpZiAoIVNVQ0NFRURFRChtX2luc3Bl
Y3RlZFdlYlZpZXctPmhvc3RXaW5kb3coKE9MRV9IQU5ETEUqKSZob3N0V2luZG93KSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJFQ1QgaG9zdFdpbmRvd1JlY3Q7CisgICAgR2V0Q2xpZW50UmVj
dChob3N0V2luZG93LCAmaG9zdFdpbmRvd1JlY3QpOworCisgICAgUkVDVCBpbnNwZWN0ZWRSZWN0
OworICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgJmluc3BlY3RlZFJl
Y3QpOworCisgICAgaW50IHRvdGFsSGVpZ2h0ID0gaG9zdFdpbmRvd1JlY3QuYm90dG9tIC0gaG9z
dFdpbmRvd1JlY3QudG9wOworICAgIGludCB3ZWJWaWV3V2lkdGggPSBpbnNwZWN0ZWRSZWN0LnJp
Z2h0IC0gaW5zcGVjdGVkUmVjdC5sZWZ0OworCisgICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3
bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lkdGgsIGhlaWdodCwgU1dQ
X05PWk9SREVSKTsKKworICAgIC8vIFdlIHdhbnQgdG8gc2V0IHRoZSBpbnNwZWN0ZWQgd2ViIHZp
ZXcgaGVpZ2h0IHRvIHRoZSB0b3RhbEhlaWdodCwgYmVjYXVzZSB0aGUgaGVpZ2h0IGFkanVzdG1l
bnQKKyAgICAvLyBvZiB0aGUgaW5zcGVjdGVkIHdlYiB2aWV3IGhhcHBlbnMgaW4gb25XZWJWaWV3
V2luZG93UG9zQ2hhbmdpbmcsIG5vdCBoZXJlLgorICAgIFNldFdpbmRvd1BvcyhtX2luc3BlY3Rl
ZFdlYlZpZXdId25kLCAwLCAwLCAwLCB3ZWJWaWV3V2lkdGgsIHRvdGFsSGVpZ2h0LCBTV1BfTk9a
T1JERVIpOworCisgICAgUmVkcmF3V2luZG93KG1fd2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZB
TElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7IAorICAgIFJlZHJhd1dp
bmRvdyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAwLCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19B
TExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6aGlnaGxpZ2h0KE5vZGUqKQpAQCAtNDEzLDkgKzQzNCwxMyBAQCB2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6b25XZWJWaWV3V2luZG93CiAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1Bf
Tk9TSVpFKQogICAgICAgICByZXR1cm47CiAKLSAgICB3aW5kb3dQb3MtPmN5IC09IGRlZmF1bHRB
dHRhY2hlZEhlaWdodDsKKyAgICBSRUNUIGluc3BlY3RvclJlY3Q7CisgICAgR2V0Q2xpZW50UmVj
dChtX3dlYlZpZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CisgICAgdW5zaWduZWQgaW5zcGVjdG9y
SGVpZ2h0ID0gaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKKworICAg
IHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwogCi0gICAgOjpTZXRXaW5kb3dQb3Mo
bV93ZWJWaWV3SHduZCwgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3Mt
PmN5LCB3aW5kb3dQb3MtPmN4LCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQsIFNXUF9OT1pPUkRFUik7
CisgICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93
UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBT
V1BfTk9aT1JERVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JX
bmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>