<?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>111591</bug_id>
          
          <creation_ts>2013-03-06 09:47:06 -0800</creation_ts>
          <short_desc>[EFL][WK2] Separate WebView further from EwkView</short_desc>
          <delta_ts>2013-03-19 14:58:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>112364</dependson>
          <blocked>107662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Rohde Christiansen">kenneth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kalyan.kondapally</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>menard</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>848978</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 09:47:06 -0800</bug_when>
    <thetext>Now create WebView separately from EwkView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848980</commentid>
    <comment_count>1</comment_count>
      <attachid>191776</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 09:47:47 -0800</bug_when>
    <thetext>Created attachment 191776
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849063</commentid>
    <comment_count>2</comment_count>
      <attachid>191792</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 10:50:21 -0800</bug_when>
    <thetext>Created attachment 191792
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849073</commentid>
    <comment_count>3</comment_count>
      <attachid>191794</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 10:58:18 -0800</bug_when>
    <thetext>Created attachment 191794
Patch (work in progress)

Remove the WKViewConfig part for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849088</commentid>
    <comment_count>4</comment_count>
      <attachid>191796</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 11:04:16 -0800</bug_when>
    <thetext>Created attachment 191796
Patch (work in progress)

Fix inspector crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849157</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-06 11:55:02 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=191794&amp;action=review

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:102
&gt; +    static EwkView* create(WebKit::WebView*, Evas* canvas, PassRefPtr&lt;EwkContext&gt; context, Evas_Smart* smart = 0);

Not sure about it. So far we have evas object that owns ewkview and ewkview owns webview, at least it is clearly determined how all 
those objects are created and deleted. Now it becomes more complicated.. like if WKViewCreateEvasObject was invoked web view memory management is done one way and if WKViewCreateEvasObject wasn&apos;t invoked it should be done totally different.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:94
&gt; +    return o;

o?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:97
&gt; +static Evas_Object* internal_add_with_context(Evas* canvas, Ewk_Context* context, Evas_Smart* smart)

createView? createEvasObject?

&gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:109
&gt; +    WKViewSetThemePath(wkView, WKStringCreateWithUTF8CString(TEST_THEME_DIR &quot;/default.edj&quot;));

adopt

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:77
&gt; +{

assertion here?

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:288
&gt; +    if (!m_ewkView)

think assertion is enough here. WebView will own its focus state after bug110877 is fixed.

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:296
&gt; +    if (!m_ewkView)

ditto

&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:69
&gt; +    WKViewSetThemePath(m_view, WKStringCreateWithUTF8CString(THEME_DIR &quot;/default.edj&quot;));

adopt?

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:67
&gt; +        WKPageSetUseFixedLayout(WKViewGetPage(m_view), true);

that is great that we use WKPageSetUseFixedLayout and drop this annoying ViewBehavior, I guess it could be done even as a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849193</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 12:38:45 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191794&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:102
&gt; &gt; +    static EwkView* create(WebKit::WebView*, Evas* canvas, PassRefPtr&lt;EwkContext&gt; context, Evas_Smart* smart = 0);
&gt; 
&gt; Not sure about it. So far we have evas object that owns ewkview and ewkview owns webview, at least it is clearly determined how all those objects are created and deleted.

That is unchanged.

&gt; Now it becomes more complicated.. like if WKViewCreateEvasObject was invoked web view memory management is done one way and if WKViewCreateEvasObject wasn&apos;t invoked it should be done totally different.

huh? It makes it possible to use the C API without EFL, which is the whole point. If you don&apos;t invoke it, you have to EwkView nor an Evas_Object.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:97
&gt; &gt; +static Evas_Object* internal_add_with_context(Evas* canvas, Ewk_Context* context, Evas_Smart* smart)
&gt; 
&gt; createView? createEvasObject?

It will go away when the EwkView doesn&apos;t store the EwkContext but just the C API one.

&gt; &gt; Source/WebKit2/UIProcess/efl/WebView.cpp:288
&gt; &gt; +    if (!m_ewkView)
&gt; 
&gt; think assertion is enough here. WebView will own its focus state after bug110877 is fixed.

Yes, it can be removed then, right now it will crash without this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849253</commentid>
    <comment_count>7</comment_count>
      <attachid>191821</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 13:34:02 -0800</bug_when>
    <thetext>Created attachment 191821
Patch (work in progress)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849330</commentid>
    <comment_count>8</comment_count>
      <attachid>191837</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 14:55:19 -0800</bug_when>
    <thetext>Created attachment 191837
Patch (work in progress)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849344</commentid>
    <comment_count>9</comment_count>
      <attachid>191841</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 15:04:01 -0800</bug_when>
    <thetext>Created attachment 191841
Patch (work in progress)

Minor changes, time for bed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849353</commentid>
    <comment_count>10</comment_count>
      <attachid>191844</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-06 15:13:36 -0800</bug_when>
    <thetext>Created attachment 191844
Patch (work in progress)

Realized that I forgot to add the missing adoptWK calls that Mikhail pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849900</commentid>
    <comment_count>11</comment_count>
      <attachid>191955</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-07 02:17:05 -0800</bug_when>
    <thetext>Created attachment 191955
Patch (work in progress)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849983</commentid>
    <comment_count>12</comment_count>
      <attachid>191955</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-07 05:12:32 -0800</bug_when>
    <thetext>Comment on attachment 191955
Patch (work in progress)

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:33
&gt; +    WKViewRef wkView = toAPI(new WebView(toImpl(contextRef), toImpl(pageGroupRef)));

WebView is API object, we need adoption here. think it&apos;s worth having WebView::create()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850411</commentid>
    <comment_count>13</comment_count>
      <attachid>191955</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-07 13:03:02 -0800</bug_when>
    <thetext>Comment on attachment 191955
Patch (work in progress)

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:208
&gt; +    EwkView(WebKit::WebView*, Evas_Object* evasObject);

PassRefPtr

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:101
&gt; +    WKViewRef wkView = WKViewCreate(WKContextCreate(), 0);

RetainPtr

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:111
&gt; +    WKViewRef wkView = WKViewCreate(ewkContext-&gt;wkContext(), 0);

RetainPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850437</commentid>
    <comment_count>14</comment_count>
      <attachid>191955</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-07 13:25:49 -0800</bug_when>
    <thetext>Comment on attachment 191955
Patch (work in progress)

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:101
&gt;&gt; +    WKViewRef wkView = WKViewCreate(WKContextCreate(), 0);
&gt; 
&gt; RetainPtr

WKContextCreate() needs adoption</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850462</commentid>
    <comment_count>15</comment_count>
      <attachid>191955</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-07 13:54:12 -0800</bug_when>
    <thetext>Comment on attachment 191955
Patch (work in progress)

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:40
&gt; +    EwkView* ewkView = EwkView::create(toImpl(viewRef), evas, smart);

check for null

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:101
&gt;&gt;&gt; +    WKViewRef wkView = WKViewCreate(WKContextCreate(), 0);
&gt;&gt; 
&gt;&gt; RetainPtr
&gt; 
&gt; WKContextCreate() needs adoption

view also needs adoption, WKViewCreateEvasObject will retain it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850476</commentid>
    <comment_count>16</comment_count>
      <attachid>192083</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-07 14:14:02 -0800</bug_when>
    <thetext>Created attachment 192083
WIP patch

Fixed all above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851050</commentid>
    <comment_count>17</comment_count>
      <attachid>192191</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-08 03:23:49 -0800</bug_when>
    <thetext>Created attachment 192191
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854666</commentid>
    <comment_count>18</comment_count>
      <attachid>192191</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-13 14:47:57 -0700</bug_when>
    <thetext>Comment on attachment 192191
patch

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

Why not I guess. Signed off by me for WebKit2.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:263
&gt; +    // Remove when possible.

+FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855164</commentid>
    <comment_count>19</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-14 06:42:50 -0700</bug_when>
    <thetext>It seems that when you use an EFL web view, you want it to be an EvasObject, so I think should be way more simpler to make the EFL API use the WKViewCreate by itself instead of making the calling code do that.

EFL API would expose a way to get the WKViewRef/WKPageRef in order to use other WK2 C API calls.

In this scenario we&apos;ll have:

- WKViewRef/WebView as the &quot;raw&quot; web view API. One can use WKViewCreate() to use them.
- ewk_view_*/EwkView as the EFL web view API. It uses WKViewCreate() itself, it exposes its WKViewRef and WKPageRef for sharing code in tests and places that make a &quot;PlatformWebView&quot; abstraction and use WK2 C API.

This approach avoids the (IMHO) confusing WKViewCreateEvasObject() function, that does a lot of stuff behind that name: sligthly change ownership expectation about WKView, should be called only once per WebView, change the WK2 clients by itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855827</commentid>
    <comment_count>20</comment_count>
      <attachid>193263</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-15 02:32:55 -0700</bug_when>
    <thetext>Created attachment 193263
patch v2

WKView APIs are EFL-free now. Rebased. Will work correctly however only after bug112364 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855981</commentid>
    <comment_count>21</comment_count>
      <attachid>193263</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-15 07:24:34 -0700</bug_when>
    <thetext>Comment on attachment 193263
patch v2

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:35
&gt; +    WKPageSetUseFixedLayout(webView-&gt;pageRef(), true);

I think this shouldn&apos;t be here.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:273
&gt; +    // Remove when possible.

It was pointed out in other review. Add a &quot;FIXME: &quot; here.

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:65
&gt; +    m_view = WKViewCreate(context, pageGroup);
&gt; +    m_window = ewkCreateEvasObject(m_view, ecore_evas_get(m_backing), /* smart */ 0);

My suggestion was more in the line of having this code written as:

    m_window = ewkCreateWebView(context, pageGroup, ecore_evas_get, /* smart */ 0);
    m_view = ewkGetWKView(m_window); // Note that this do not transfer ownership.
    // or having an ewkGetWKPage().

In other hands, when using EWK, we use a create function specific of EWK that will call WKViewCreate (and possibly set WKPageSetUseFixedLayout() and friends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855982</commentid>
    <comment_count>22</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-15 07:28:26 -0700</bug_when>
    <thetext>&gt; In other hands, when using EWK, we use a create function specific of EWK that will call WKViewCreate (and possibly set WKPageSetUseFixedLayout() and friends.

&quot;In other words&quot; I meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857005</commentid>
    <comment_count>23</comment_count>
      <attachid>193535</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 05:04:26 -0700</bug_when>
    <thetext>Created attachment 193535
patch v3

Took Marcelo&apos;s proposal into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857007</commentid>
    <comment_count>24</comment_count>
      <attachid>193535</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 05:06:29 -0700</bug_when>
    <thetext>Comment on attachment 193535
patch v3

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:34
&gt; +    RefPtr&lt;WebView&gt; webView = WebView::create(toImpl(contextRef), toImpl(pageGroupRef));

mm, no need to have RefPtr anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857029</commentid>
    <comment_count>25</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 05:47:23 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 193535 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193535&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:34
&gt; &gt; +    RefPtr&lt;WebView&gt; webView = WebView::create(toImpl(contextRef), toImpl(pageGroupRef));
&gt; 
&gt; mm, no need to have RefPtr anymore.

on the other hand WKContextCreate.. functions use the same pattern, so can be leaved as it is I guess..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857030</commentid>
    <comment_count>26</comment_count>
      <attachid>193535</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-18 05:49:02 -0700</bug_when>
    <thetext>Comment on attachment 193535
patch v3

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

&gt; Source/WebKit2/ChangeLog:10
&gt; +
&gt; +        EFL is not present in WKView API.
&gt; +        WebView does not keep evas object.
&gt; +

I would explain this better:

Main points being:
 - The WKView API has no dependency on EFL types
 - WebView does not store the Evas_Object

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.h:81
&gt; -
&gt;  WK_EXPORT WKImageRef WKViewCreateSnapshot(WKViewRef);

We need to change this method (later) to not depend on EFL

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:273
&gt; +    // Remove when possible.

FIXME:

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:92
&gt; -Evas_Object* ewk_view_smart_add(Evas* canvas, Evas_Smart* smart, Ewk_Context* context, Ewk_Page_Group* pageGroup)
&gt; +Evas_Object* ewkCreateEvasObject(WKContextRef context, WKPageGroupRef pageGroup, Evas* canvas, Evas_Smart* smart)

maybe just ewkCreate ? or ewkViewCreate(). Are these internal/private methods? then maybe just _ewk_create() or similar

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_private.h:38
&gt; +
&gt; +EAPI Evas_Object* ewkCreateEvasObject(WKContextRef, WKPageGroupRef, Evas*, Evas_Smart*);
&gt; +EAPI WKViewRef ewkGetWKView(Evas_Object*);
&gt; +

Either we should use EFL naming or WK2 naming.

_ewk_view_create()
_ewk_view_wkview_get()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857081</commentid>
    <comment_count>27</comment_count>
      <attachid>193535</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-18 07:11:03 -0700</bug_when>
    <thetext>Comment on attachment 193535
patch v3

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

I think we are converging to the right direction. :-)  Added a couple of comments on top of Kenneth comments. I think after this round we should get WK2 Owner to review again and land this.

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:34
&gt;&gt;&gt; +    RefPtr&lt;WebView&gt; webView = WebView::create(toImpl(contextRef), toImpl(pageGroupRef));
&gt;&gt; 
&gt;&gt; mm, no need to have RefPtr anymore.
&gt; 
&gt; on the other hand WKContextCreate.. functions use the same pattern, so can be leaved as it is I guess..

Yes. Leave WebView::create() returning RefPtr, because WKViewCreate should return a WKViewRef.

&gt; Tools/TestWebKitAPI/PlatformWebView.h:54
&gt; +typedef struct _Evas_Object Evas_Object;
&gt;  typedef WKViewRef PlatformWKView;
&gt; -typedef Ecore_Evas* PlatformWindow;
&gt; +typedef Ecore_Evas* PlatformBacking;
&gt; +typedef Evas_Object* PlatformWindow;

I don&apos;t think you should create another typedef here. If I recall correctly, Ecore_Evas* conceptually represents the PlatformWindow, and should keep that way.

You should either (1) make the Evas_Object* (of type ewk_*) be the PlatformWKView, (2) keep it as extra member, or (3) make a way to go from WKView -&gt; ewk_type.

Given that you need Ewk for certain operations and for deletion, and there&apos;s no shared code that relies on PlatformWKView, I say you go for (1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857111</commentid>
    <comment_count>28</comment_count>
      <attachid>193564</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 07:47:38 -0700</bug_when>
    <thetext>Created attachment 193564
patch v4

Updated due to previous comments from Kenneth and Marcelo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857115</commentid>
    <comment_count>29</comment_count>
      <attachid>193564</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 07:51:05 -0700</bug_when>
    <thetext>Comment on attachment 193564
patch v4

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

&gt; Tools/WebKitTestRunner/PlatformWebView.h:108
&gt; +    PlatformBacking m_backing;

forgot to get rid of backing here :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857121</commentid>
    <comment_count>30</comment_count>
      <attachid>193566</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 08:08:22 -0700</bug_when>
    <thetext>Created attachment 193566
patch v5

Now there is no &apos;backing&apos; in WTR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857126</commentid>
    <comment_count>31</comment_count>
      <attachid>193566</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-18 08:13:39 -0700</bug_when>
    <thetext>Comment on attachment 193566
patch v5

LGTM Misha!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857208</commentid>
    <comment_count>32</comment_count>
      <attachid>193566</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-18 09:44:45 -0700</bug_when>
    <thetext>Comment on attachment 193566
patch v5

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857374</commentid>
    <comment_count>33</comment_count>
      <attachid>193620</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-03-18 11:43:48 -0700</bug_when>
    <thetext>Created attachment 193620
patch v6

Rebased to master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858709</commentid>
    <comment_count>34</comment_count>
      <attachid>193620</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-19 13:56:24 -0700</bug_when>
    <thetext>Comment on attachment 193620
patch v6

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

Quickly skimmed over this. This looks ok for WebKit2. Go ahead with a review.

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:70
&gt; +    if (m_usingFixedLayout)
&gt; +        resizeTo(800, 600);
&gt; +

Uh?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858742</commentid>
    <comment_count>35</comment_count>
      <attachid>193620</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-03-19 14:32:43 -0700</bug_when>
    <thetext>Comment on attachment 193620
patch v6

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

Let&apos;s get this going.

&gt; Source/WebKit2/ChangeLog:23
&gt; +            WKViewRef is passed to EwkView constructor from outside rather than
&gt; +            created inside.

Optional: I would go even further and make EwkView create the WKViewRef itself, so the EWKViewCreate() function is just a wrapper to EwkView::create() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858774</commentid>
    <comment_count>36</comment_count>
      <attachid>193620</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 14:58:12 -0700</bug_when>
    <thetext>Comment on attachment 193620
patch v6

Clearing flags on attachment: 193620

Committed r146265: &lt;http://trac.webkit.org/changeset/146265&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858775</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 14:58:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191776</attachid>
            <date>2013-03-06 09:47:47 -0800</date>
            <delta_ts>2013-03-06 10:50:21 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>WIP.patch</filename>
            <type>text/plain</type>
            <size>16055</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCBh
MjQ5ODIwLi5iMDA4ZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCkBAIC0yOCwyNCArMjgsMTkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAotc3RhdGljIGlubGluZSBXS1ZpZXdSZWYgY3JlYXRlV0tWaWV3KEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShjb25z
dCBXS1ZpZXdDb25maWcqIGNvbmZpZywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9
IGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0
OjpkZWZhdWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmll
dzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZp
b3IpOwotICAgIGlmICghZXZhc09iamVjdCkKKyAgICBpZiAoIWNvbmZpZykKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3
a1ZpZXcoZXZhc09iamVjdCktPndrVmlldygpKSk7Ci19CisgICAgV2ViVmlldyogd2ViVmlldyA9
IG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwor
ICAgIHdlYlZpZXctPnBhZ2UoKS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoY29uZmln
LT5pbnRyaW5zaWNCYWNraW5nU3RvcmVTY2FsZUZhY3Rvcik7CiAKLVdLVmlld1JlZiBXS1ZpZXdD
cmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250
ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0KKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZToKKyAgICBSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCA9IGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4
dFJlZikgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpOworICAgIEV3a1ZpZXcqIGV3a1Zp
ZXcgPSBFd2tWaWV3OjpjcmVhdGUod2ViVmlldywgY29uZmlnLT5jYW52YXMsIGNvbnRleHQpOwog
Ci1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLXsKLSAg
ICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBF
d2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdS
ZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7CiB9CiAKIHZvaWQgV0tWaWV3SW5pdGlh
bGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5oCmluZGV4IGE3MDliNDguLjNlOTI5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtNTcsOSArNTcsMTYgQEAgdHlwZWRlZiBz
dHJ1Y3QgV0tWaWV3Q2xpZW50IFdLVmlld0NsaWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRD
dXJyZW50VmVyc2lvbiA9IDAgfTsKIAotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUo
RXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwKTsKK3N0cnVjdCBXS1ZpZXdDb25maWcgeworICAgIGludCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOworCisgICAgLy8gVmVyc2lvbiAwCisg
ICAgRXZhcyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZh
czsKKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljQmFja2luZ1N0b3JlU2NhbGVGYWN0b3I7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tW
aWV3Q29uZmlnIFdLVmlld0NvbmZpZzsKIAotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVh
dGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KGNvbnN0IFdLVmlld0NvbmZpZyosIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXApOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1Jl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29uc3Qg
V0tWaWV3Q2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCmluZGV4IGI1MmM1MmUuLmRlOGYxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMjgsMTEgKzIyOCwxMSBAQCB2b2lkIEV3a1Zp
ZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0
YSwgRXZhcyosIEV2YQogCiAvLyBFd2tWaWV3IGltcGxlbWVudGF0aW9uLgogCi1Fd2tWaWV3OjpF
d2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQor
RXdrVmlldzo6RXdrVmlldyhXZWJWaWV3KiB3ZWJWaWV3LCBFdmFzX09iamVjdCogZXZhc09iamVj
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KQogICAgIDogbV9ldmFzT2JqZWN0KGV2
YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fcGVuZGluZ1N1cmZh
Y2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9J
bXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQor
ICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2Fk
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBv
bGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJ
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0yNjAsNiArMjYwLDkgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250
ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIHdlYlZpZXctPnNldEV3
a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAg
ICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQo
KSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZh
c09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKIAogICAgIFdL
Vmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQo
d2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91
cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQ
cmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3
a1BhZ2VHcm91cCk7CiAKQEAgLTMwMyw3ICszMDQsNyBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAg
ICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpoYW5kbGVGYXZpY29uQ2hh
bmdlZCk7CiB9CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMq
IGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitF
d2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUoV2ViVmlldyogd2ViVmlldywgRXZhcyogY2FudmFzLCBF
dmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7CkBAIC0zMjAsMTUgKzMyMSwxNCBAQCBF
dmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNf
U21hcnQqIHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYpOwog
Ci0gICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNv
bnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKLSAgICAvLyBzbyB3ZSBkbyBub3Qg
bmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmll
dyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1
cm4gZXZhc09iamVjdDsKKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3
LCBldmFzT2JqZWN0LCBjb250ZXh0KTsKKworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7CiB9
CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXZWJW
aWV3KiB3ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52YXMsIGRlZmF1bHRTbWFydENs
YXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgcmV0
dXJuIGNyZWF0ZSh3ZWJWaWV3LCBjYW52YXMsIGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSwg
Y29udGV4dCk7CiB9CiAKIGJvb2wgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MmIGFwaSkKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIEV3a1ZpZXc6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIAogdm9pZCBFd2tWaWV3OjpzZXREZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKIHsKLSAgICBwYWdlKCktPnNldEludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKHNjYWxlKTsKKyAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVG
YWN0b3Iod2tQYWdlKCksIHNjYWxlKTsKIAogICAgIC8vIFVwZGF0ZSBpbnRlcm5hbCB2aWV3cG9y
dCBzaXplIGFmdGVyIGRldmljZS1zY2FsZSBjaGFuZ2UuCiAgICAgc2V0RGV2aWNlU2l6ZShkZXZp
Y2VTaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmlu
ZGV4IDJjYzZlMjcuLjQ2YjM4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmgKQEAgLTk3LDE3ICs5NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9T
dXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0Rh
dGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIEV3a19WaWV3X1NtYXJ0X0NsYXNzOwogCi0vLyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBi
eSB0aGUgZXZhcyBvYmplY3QsIG9idGFpbmVkIGZyb20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dCgpLgogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7
Ci0gICAgICAgIExlZ2FjeUJlaGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9
OwotCi0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZh
cywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3
a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVF
dmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBF
d2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoV2Vi
S2l0OjpXZWJWaWV3KiwgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0KTsKKyAgICBzdGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktp
dDo6V2ViVmlldyosIEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
KTsKIAogICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1Nt
YXJ0X0NsYXNzJik7CiAKQEAgLTIxMyw3ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgpOwogCiBwcml2YXRlOgotICAgIEV3a1Zp
ZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXco
V2ViS2l0OjpXZWJWaWV3KiwgRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCk7CiAgICAgfkV3a1ZpZXcoKTsKIAogICAgIHZvaWQgc2V0RGV2aWNl
U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNGYxYTEzMS4uZWM0NmMyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtODgsMTIgKzg4
LDI4IEBAIEVpbmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21hcnRf
Q2xhc3MqIGFwaSkKIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52
YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1
cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nh
c3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0ID0g
ZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KTsKKworICAgIC8vIEZJWE1FOiBD
cmVhdGUgdXNpbmcgV0tWaWV3IHdoZW4gcG9zc2libGUuCisgICAgV2ViVmlldyogd2ViVmlldyA9
IG5ldyBXZWJWaWV3KHRvSW1wbChld2tDb250ZXh0LT53a0NvbnRleHQoKSksIDApOworICAgIFdL
UGFnZVNldFVzZUZpeGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwgdHJ1ZSk7CisKKyAgICBF
d2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdlYlZpZXcsIGNhbnZhcywgc21hcnQs
IGV3a0NvbnRleHQpOworCisgICAgcmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAog
RXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tf
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dChjYW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3
a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRl
eHQpOworCisgICAgLy8gRklYTUU6IENyZWF0ZSB1c2luZyBXS1ZpZXcgd2hlbiBwb3NzaWJsZS4K
KyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbmV3IFdlYlZpZXcodG9JbXBsKGV3a0NvbnRleHQtPndr
Q29udGV4dCgpKSwgMCk7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2ViVmlldy0+cGFn
ZVJlZigpLCB0cnVlKTsKKworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3OjpjcmVhdGUo
d2ViVmlldywgY2FudmFzLCBld2tDb250ZXh0KTsKKworICAgIHJldHVybiBld2tWaWV3LT5ldmFz
T2JqZWN0KCk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94
eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5
RWZsLmNwcAppbmRleCBmYTJlMDhkLi44ZDQ3NTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtMzUsNiArMzUs
MTAgQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVj
dG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VHcm91cC5o
PgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTk4LDIwICsxMDIsMjIgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2lu
ZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2Ug
V0tWaWV3UmVmLgotICAgIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5w
cm9jZXNzKCktPmNvbnRleHQoKSk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIEV3a0NvbnRl
eHQ6OmNyZWF0ZShjb250ZXh0UmVmKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tW
aWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFtX2luc3BlY3RvclZpZXcpCi0gICAgICAg
IHJldHVybiAwOworICAgIFdLVmlld0NvbmZpZyBjb25maWc7CisgICAgY29uZmlnLnZlcnNpb24g
PSAwOworICAgIGNvbmZpZy5jYW52YXMgPSBlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRv
dyk7CisgICAgY29uZmlnLmludHJpbnNpY0JhY2tpbmdTdG9yZVNjYWxlRmFjdG9yID0gMTsKKwor
ICAgIFdLQ29udGV4dFJlZiB3a0NvbnRleHQgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29u
dGV4dCgpKTsKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3Rv
clBhZ2VHcm91cCgpKTsKKyAgICBXS1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKCZjb25m
aWcsIHdrQ29udGV4dCwgd2tQYWdlR3JvdXApOwogCi0gICAgRXdrVmlldyogZXdrVmlldyA9IHRv
RXdrVmlldyhtX2luc3BlY3RvclZpZXcpOwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAgICBld2tW
aWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIFdL
Vmlld1NldFRoZW1lUGF0aCh3a1ZpZXcsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRF
U1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gV0tW
aWV3R2V0RXZhc09iamVjdCh3a1ZpZXcpOwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9
IGV3a1ZpZXctPnNldHRpbmdzKCk7Ci0gICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21f
ZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
UmVmIHdrUHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHdrUGFnZUdyb3Vw
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQod2tQ
cmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOworICAgIHJl
dHVybiB0b0ltcGwoV0tWaWV3R2V0UGFnZSh3a1ZpZXcpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuY3BwCmluZGV4IDMzZmRiNWQuLjNmOWNlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmNwcApAQCAtNTEsOCArNTEsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCog
Y29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCi0gICAg
OiBtX2V3a1ZpZXcoZXdrVmlldykKK1dlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgOiBtX2V3a1ZpZXcoMCkKICAgICAsIG1f
cGFnZShjb250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHBhZ2VHcm91cCkpCiB7CiAgICAgbV9w
YWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQodHJ1ZSk7CkBAIC02MiwxMCArNjIsNiBAQCBXZWJWaWV3OjpXZWJWaWV3KFdlYkNv
bnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBld2tWaWV3
KQogICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYm
ICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7CiAgICAgbV9wYWdlLT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93
RGVidWdWaXN1YWxzKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0K
LSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5zZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7Ci0jZW5kaWYKIH0KIAogV2ViVmlldzo6fldl
YlZpZXcoKQpAQCAtNzYsNiArNzIsMTcgQEAgV2ViVmlldzo6fldlYlZpZXcoKQogICAgIG1fcGFn
ZS0+Y2xvc2UoKTsKIH0KIAorLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBX
ZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0g
ZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRp
ZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0
aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc4LDExICsyODUsMTcgQEAgYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAg
IGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9l
d2tWaWV3LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkK
IHsKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0
dXJuIG1fZXdrVmlldy0+aXNWaXNpYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmgKaW5kZXggOWY1ZjZmNC4uNGZlNjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTUwLDkgKzUwLDEyIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJs
aWMgQVBJT2JqZWN0LCBwdWJsaWMgUGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVWaWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250ZXh0Kiwg
V2ViUGFnZUdyb3VwKiwgRXdrVmlldyopOworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBh
Z2VHcm91cCopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIC8vIEZJWE1FOiBSZW1v
dmUgd2hlbiBwb3NzaWJsZS4KKyAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOworCiAgICAg
dm9pZCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9u
KGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
ZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9y
bVdlYlZpZXcuY3BwCmluZGV4IDhhMDM1ZjMuLjhkYTAzM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtNjQsOSArNjQsMTUgQEAgc3RhdGljIHZv
aWQgb25XZWJQcm9jZXNzQ3Jhc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCiBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIG1fd2luZG93ID0gaW5p
dEVjb3JlRXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7
Ci0gICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJl
Zik7Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
VEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworCisgICAgV0tWaWV3Q29uZmlnIGNvbmZpZzsKKyAg
ICBjb25maWcudmVyc2lvbiA9IDA7CisgICAgY29uZmlnLmNhbnZhcyA9IGVjb3JlX2V2YXNfZ2V0
KG1fd2luZG93KTsKKyAgICBjb25maWcuaW50cmluc2ljQmFja2luZ1N0b3JlU2NhbGVGYWN0b3Ig
PSAxOworCisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKCZjb25maWcsIGNvbnRleHRSZWYsIHBh
Z2VHcm91cFJlZik7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKG1fdmlldywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisKICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAi
d2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXpl
VG8oNjAwLCA4MDApOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwv
UGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRm
b3JtV2ViVmlld0VmbC5jcHAKaW5kZXggYzNiYzg1Ny4uNzZiMGU2MSAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSwxMSAr
NjEsMTcgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBtX3dpbmRvdyA9IGluaXRFY29y
ZUV2YXMoKTsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwogCisg
ICAgV0tWaWV3Q29uZmlnIGNvbmZpZzsKKyAgICBjb25maWcudmVyc2lvbiA9IDA7CisgICAgY29u
ZmlnLmNhbnZhcyA9IGV2YXM7CisgICAgY29uZmlnLmludHJpbnNpY0JhY2tpbmdTdG9yZVNjYWxl
RmFjdG9yID0gMTsKKworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZSgmY29uZmlnLCBjb250ZXh0
LCBwYWdlR3JvdXApOworCiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBt
X3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdy
b3VwKTsKKyAgICAgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQoV0tWaWV3R2V0UGFnZShtX3Zp
ZXcpLCB0cnVlKTsKICAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KSwgODAwLCA2MDApOwotICAgIH0gZWxzZQotICAgICAgICBtX3ZpZXcgPSBXS1Zp
ZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKKyAgICB9CiAKICAgICBld2tfdmll
d190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1
bHQuZWRqIik7CiAgICAgbV93aW5kb3dJc0tleSA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191792</attachid>
            <date>2013-03-06 10:50:21 -0800</date>
            <delta_ts>2013-03-06 10:58:18 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>WIP2.patch</filename>
            <type>text/plain</type>
            <size>18223</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCBh
MjQ5ODIwLi5lNzUwNTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCkBAIC0yOCwyNCArMjgsMjQgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAotc3RhdGljIGlubGluZSBXS1ZpZXdSZWYgY3JlYXRlV0tWaWV3KEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShjb25z
dCBXS1ZpZXdDb25maWcqIGNvbmZpZywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9
IGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0
OjpkZWZhdWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmll
dzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZp
b3IpOwotICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VH
cm91cFJlZikpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4o
dG9Fd2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOwotfQorICAgIGlmIChjb25maWcpCisg
ICAgICAgIHdlYlZpZXctPnBhZ2UoKS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoY29u
ZmlnLT5pbnRyaW5zaWNCYWNraW5nU3RvcmVTY2FsZUZhY3Rvcik7CiAKLVdLVmlld1JlZiBXS1Zp
ZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBj
b250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKKyAgICBy
ZXR1cm4gdG9BUEkod2ViVmlldyk7CiB9CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4
ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQorRXZhc19PYmplY3QqIFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qo
V0tWaWV3UmVmIHZpZXdSZWYsIEV2YXMqIGV2YXMpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVdLVmll
dyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2
aW9yKTsKKyAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IFdLUGFnZUdldENvbnRleHQoV0tW
aWV3R2V0UGFnZSh2aWV3UmVmKSk7CisgICAgUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQgPSBj
b250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6
ZGVmYXVsdENvbnRleHQoKTsKKworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3OjpjcmVh
dGUodG9JbXBsKHZpZXdSZWYpLCBldmFzLCBjb250ZXh0KTsKKworICAgIHJldHVybiBld2tWaWV3
LT5ldmFzT2JqZWN0KCk7CiB9CiAKIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmll
d1JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4
IGE3MDliNDguLjMxMTJkNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuaApAQCAtNTcsOSArNTcsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50
IFdLVmlld0NsaWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbiA9IDAg
fTsKIAotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK3N0cnVjdCBXS1Zp
ZXdDb25maWcgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJzaW9uOworCisgICAgLy8gVmVyc2lvbiAwCisgICAgZmxvYXQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJpbnNpY0JhY2tpbmdTdG9yZVNj
YWxlRmFjdG9yOworfTsKK3R5cGVkZWYgc3RydWN0IFdLVmlld0NvbmZpZyBXS1ZpZXdDb25maWc7
CiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7
CitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShjb25zdCBXS1ZpZXdDb25maWcqLCBX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAogV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tW
aWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCopOwpAQCAtODks
NiArOTUsNyBAQCBXS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1Jl
Zik7CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCiAv
LyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2Vl
cCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KK1dLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3
Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYsIEV2YXMqKTsKIFdLX0VYUE9SVCBFdmFzX09iamVj
dCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOwogCiBXS19FWFBPUlQgV0tJbWFnZVJl
ZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCBiNTJjNTJlLi5iZDk1YzMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjI4LDExICsy
MjgsMTEgQEAgdm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46Omhh
bmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmEKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRh
dGlvbi4KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXc6OkV3a1ZpZXcoV2ViVmlldyogd2ViVmlldywgRXZh
c19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCkKICAg
ICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAg
ICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQotICAgICwgbV93ZWJWaWV3KGFkb3B0
UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgpKSwgdG9JbXBsKHBh
Z2VHcm91cCksIHRoaXMpKSkKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9wYWdl
TG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdl
UG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1f
cGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMjYwLDYgKzI2
MCw5IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlCiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7
CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAKKyAgICAvLyBSZW1vdmUgd2hlbiBwb3NzaWJsZS4K
KyAgICB3ZWJWaWV3LT5zZXRFd2tWaWV3KHRoaXMpOworCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0
cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFzX2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAg
aWYgKG1fZXZhc0dMKQogICAgICAgICBtX2V2YXNHTENvbnRleHQgPSBFdmFzR0xDb250ZXh0Ojpj
cmVhdGUobV9ldmFzR0wuZ2V0KCkpOwpAQCAtMjcxLDggKzI3NCw2IEBAIEV3a1ZpZXc6OkV3a1Zp
ZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV0tQYWdlCiAKICAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAotICAgIFdLUGFn
ZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3Ip
OwotCiAgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAo
d2tQYWdlKCkpOwogICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdy
b3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwogCkBAIC0zMDMsMTMgKzMwNCwxMyBAQCBF
d2tWaWV3Ojp+RXdrVmlldygpCiAgICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tW
aWV3OjpoYW5kbGVGYXZpY29uQ2hhbmdlZCk7CiB9CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3Ojpj
cmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3
QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUoV2ViVmlldyogd2Vi
VmlldywgRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIEV2YXNf
U21hcnQqIHNtYXJ0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52
YXMsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwogCi0gICAgRXZh
c19PYmplY3QqIGV2YXNPYmplY3QgPSBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFy
dCk7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBldmFzX29iamVjdF9zbWFydF9hZGQo
Y2FudmFzLCBzbWFydCA/IHNtYXJ0IDogZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhc09iamVjdCwgMCk7CiAKICAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsK
QEAgLTMyMCwxNSArMzIxLDkgQEAgRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmpl
Y3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlAKIAogICAgIEFTU0VS
VCghc21hcnREYXRhLT5wcml2KTsKIAotICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNy
ZWF0ZWQgaW4gV2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAs
Ci0gICAgLy8gc28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCi0gICAgc21hcnRE
YXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXZhc09iamVjdCwgY29udGV4dCwgcGFnZUdyb3VwUmVm
LCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV2YXNPYmplY3Q7Ci19CisgICAgc21hcnREYXRhLT5w
cml2ID0gbmV3IEV3a1ZpZXcod2ViVmlldywgZXZhc09iamVjdCwgY29udGV4dCk7CiAKLUV2YXNf
T2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52YXMs
IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhh
dmlvcik7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogYm9vbCBFd2tWaWV3Ojpp
bml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFydF9DbGFzcyYgYXBpKQpAQCAtNDU1
LDcgKzQ1MCw3IEBAIHZvaWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29y
KQogCiB2b2lkIEV3a1ZpZXc6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogewot
ICAgIHBhZ2UoKS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGUpOworICAgIFdL
UGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3Rvcih3a1BhZ2UoKSwgc2NhbGUpOwogCiAgICAg
Ly8gVXBkYXRlIGludGVybmFsIHZpZXdwb3J0IHNpemUgYWZ0ZXIgZGV2aWNlLXNjYWxlIGNoYW5n
ZS4KICAgICBzZXREZXZpY2VTaXplKGRldmljZVNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMmNjNmUyNy4uY2I3NjZjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtOTcsMTcgKzk3LDkgQEAg
dHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiB0eXBlZGVm
IHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CiB0eXBlZGVm
IHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAotLy8g
RXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2JqZWN0LCBvYnRhaW5lZCBmcm9t
IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgot
Ci0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdhY3lCZWhhdmlvciwKLSAgICAg
ICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3Jl
YXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOwotICAgIHN0
YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAgICBz
dGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktpdDo6V2ViVmlldyosIEV2YXMqIGNhbnZhcywgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBFdmFzX1NtYXJ0KiBzbWFydCA9IDApOwogCiAg
ICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xh
c3MmKTsKIApAQCAtMjEzLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAgRXdrVmlldyhFdmFz
X09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAgRXdrVmlldyhXZWJLaXQ6
OldlYlZpZXcqLCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0KTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBzZXREZXZpY2VTaXplKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcAppbmRleCA0ZjFhMTMxLi5jMTQ3NmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04NiwxOSArODYsMzkgQEAg
RWluYV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpKQogICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFjZSgqYXBpKTsK
IH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNf
U21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKK0V2YXNfT2JqZWN0KiBld2tfdmll
d19hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2Jq
ZWN0KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkp
OworICAgIFdLVmlld0NvbmZpZyBjb25maWc7CisgICAgY29uZmlnLnZlcnNpb24gPSAwOworICAg
IGNvbmZpZy5pbnRyaW5zaWNCYWNraW5nU3RvcmVTY2FsZUZhY3RvciA9IDE7CisKKyAgICBXS1Zp
ZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKCZjb25maWcsIFdLQ29udGV4dENyZWF0ZSgpLCAw
KTsKKyAgICBFdmFzX09iamVjdCogbyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBj
YW52YXMpOworCisgICAgcmV0dXJuIG87CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRf
d2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCitzdGF0aWMg
RXZhc19PYmplY3QqIGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tf
Q29udGV4dCogY29udGV4dCwgRXZhc19TbWFydCogc21hcnQpCit7CisgICAgRXdrQ29udGV4dCog
ZXdrQ29udGV4dCA9IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCk7CisKKyAg
ICAvLyBGSVhNRTogQ3JlYXRlIHVzaW5nIFdLVmlldyB3aGVuIEV3a1ZpZXcgZG9lc24ndCBkZXBl
bmQgb24gRXdrQ29udGV4dC4KKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbmV3IFdlYlZpZXcodG9J
bXBsKGV3a0NvbnRleHQtPndrQ29udGV4dCgpKSwgMCk7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRM
YXlvdXQod2ViVmlldy0+cGFnZVJlZigpLCB0cnVlKTsKKworICAgIEV3a1ZpZXcqIGV3a1ZpZXcg
PSBFd2tWaWV3OjpjcmVhdGUod2ViVmlldywgY2FudmFzLCBld2tDb250ZXh0LCBzbWFydCk7CisK
KyAgICByZXR1cm4gZXdrVmlldy0+ZXZhc09iamVjdCgpOworfQorCitFdmFzX09iamVjdCogZXdr
X3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250
ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNh
bnZhcywgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJu
IGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBzbWFydCk7CiB9CiAK
LUV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQorRXZhc19PYmplY3QqIGV3
a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4
dCkKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChjYW52YXMsIGV3a19j
b250ZXh0X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVybiBpbnRlcm5hbF9hZGRfd2l0aF9jb250
ZXh0KGNhbnZhcywgY29udGV4dCwgLyogc21hcnQgKi8gMCk7CiB9CiAKIEV3a19Db250ZXh0KiBl
d2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAK
aW5kZXggZmEyZTA4ZC4uMDdiY2E0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAj
aW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VmbEluc3BlY3RvclV0aWxp
dGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KKyNpbmNs
dWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC05OCwyMCArMTAyLDIyIEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1Jl
Zi4KLSAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2UoKS0+cHJvY2Vzcygp
LT5jb250ZXh0KCkpOwotICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNP
YmplY3QoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBFd2tDb250ZXh0OjpjcmVh
dGUoY29udGV4dFJlZiksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVn
YWN5QmVoYXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JWaWV3KQotICAgICAgICByZXR1cm4g
MDsKKyAgICBXS1ZpZXdDb25maWcgY29uZmlnOworICAgIGNvbmZpZy52ZXJzaW9uID0gMDsKKyAg
ICBjb25maWcuaW50cmluc2ljQmFja2luZ1N0b3JlU2NhbGVGYWN0b3IgPSAxOworCisgICAgV0tD
b250ZXh0UmVmIHdrQ29udGV4dCA9IHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkp
OworICAgIFdLUGFnZUdyb3VwUmVmIHdrUGFnZUdyb3VwID0gdG9BUEkoaW5zcGVjdG9yUGFnZUdy
b3VwKCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBXS1ZpZXdDcmVhdGUoJmNvbmZpZywgd2tD
b250ZXh0LCB3a1BhZ2VHcm91cCk7CisKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tWaWV3LCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRq
IikpOwogCi0gICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcp
OwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAgICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9U
SEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIG1faW5zcGVjdG9yVmlldyA9IFdLVmlld0Ny
ZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdykp
OwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNldHRpbmdzKCk7Ci0g
ICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNl
dHRpbmdzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHdrUHJlZmVyZW5jZXMgPSBXS1Bh
Z2VHcm91cEdldFByZWZlcmVuY2VzKHdrUGFnZUdyb3VwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAg
ICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOworICAgIHJldHVybiB0b0ltcGwoV0tWaWV3R2V0UGFn
ZSh3a1ZpZXcpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCmluZGV4IDMzZmRiNWQuLjNm
OWNlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtNTEs
OCArNTEsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBw
YWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCi0gICAgOiBtX2V3a1ZpZXcoZXdrVmlldykKK1dl
YlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3Jv
dXApCisgICAgOiBtX2V3a1ZpZXcoMCkKICAgICAsIG1fcGFnZShjb250ZXh0LT5jcmVhdGVXZWJQ
YWdlKHRoaXMsIHBhZ2VHcm91cCkpCiB7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CkBAIC02Miwx
MCArNjIsNiBAQCBXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBld2tWaWV3KQogICAgIGJvb2wgc2hvd0RlYnVnVmlz
dWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52
aXJvbm1lbnQsICIxIik7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKICAgICBtX3Bh
Z2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3Vu
dGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV2YXNPYmpl
Y3QoKSk7Ci0jZW5kaWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXcoKQpAQCAtNzYsNiArNzIsMTcg
QEAgV2ViVmlldzo6fldlYlZpZXcoKQogICAgIG1fcGFnZS0+Y2xvc2UoKTsKIH0KIAorLy8gRklY
TUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBXZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1Zp
ZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0gZXdrVmlldzsKKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZp
ZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRpZgorCit9CisKIHZvaWQgV2ViVmlldzo6
aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc4
LDExICsyODUsMTcgQEAgYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQogCiBib29s
IFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAgIGlmICghbV9ld2tWaWV3KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3LT5pc0ZvY3VzZWQoKTsKIH0K
IAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKIHsKKyAgICBpZiAoIW1fZXdrVmlldykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIG1fZXdrVmlldy0+aXNWaXNpYmxl
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKaW5kZXggOWY1ZjZm
NC4uNGZlNjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTUw
LDkgKzUwLDEyIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMgUGFn
ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVW
aWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKiwgRXdrVmlldyop
OworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOwogICAgIHZpcnR1YWwg
fldlYlZpZXcoKTsKIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICB2
b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOworCiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAg
ICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCmluZGV4IDhhMDM1
ZjMuLmFlMjJlNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3Jt
V2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcApAQCAtNjQsOSArNjQsMTYgQEAgc3RhdGljIHZvaWQgb25XZWJQcm9jZXNzQ3Jhc2hlZCh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiBQbGF0Zm9ybVdlYlZpZXc6OlBs
YXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmKQogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwotICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gV0tWaWV3Q3Jl
YXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci0gICAgZXdrX3ZpZXdfdGhlbWVf
c2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIp
OworCisgICAgV0tWaWV3Q29uZmlnIGNvbmZpZzsKKyAgICBjb25maWcudmVyc2lvbiA9IDA7Cisg
ICAgY29uZmlnLmludHJpbnNpY0JhY2tpbmdTdG9yZVNjYWxlRmFjdG9yID0gMTsKKworICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZSgmY29uZmlnLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOwor
ICAgIFdLVmlld1NldFRoZW1lUGF0aChtX3ZpZXcsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKFRIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIikpOworCisgICAgV0tWaWV3Q3JlYXRlRXZhc09i
amVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KSk7CisKICAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJv
Y2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8oNjAw
LCA4MDApOwogfQpAQCAtNzgsOCArODUsNiBAQCBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdl
YlZpZXcoKQogICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxv
bmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94
eSByZWZlcnMgdG8uCiAgICAgV0tSZWxlYXNlKG1fdmlldyk7CiAKLSAgICAvLyBGSVhNRTogVGhl
IEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhh
dmUgdG8gZGVzdHJ1Y3QgaXQKLSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBh
bmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCiAgICAg
ZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOwogCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2lu
ZG93KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2Vi
Vmlld0VmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdF
ZmwuY3BwCmluZGV4IGMzYmM4NTcuLjBlYTE1NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcApAQCAtNTksMTMgKzU5LDE4IEBAIFBs
YXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXAsCiAgICAgbV91c2luZ0ZpeGVkTGF5b3V0ID0gb3B0aW9ucyA/
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExheW91dEtleS5nZXQoKSkpKSA6IGZhbHNl
OwogCiAgICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyogZXZhcyA9IGVj
b3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKKworICAgIFdLVmlld0NvbmZpZyBjb25maWc7CisgICAg
Y29uZmlnLnZlcnNpb24gPSAwOworICAgIGNvbmZpZy5pbnRyaW5zaWNCYWNraW5nU3RvcmVTY2Fs
ZUZhY3RvciA9IDE7CisKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoJmNvbmZpZywgY29udGV4
dCwgcGFnZUdyb3VwKTsKKyAgICBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KG1fdmlldywgZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpKTsKIAogICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpIHsKLSAg
ICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQs
IHBhZ2VHcm91cCk7CisgICAgICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dldFBh
Z2UobV92aWV3KSwgdHJ1ZSk7CiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyksIDgwMCwgNjAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgfQogCiAgICAg
ZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElS
Ii9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKQEAgLTc5LDggKzg0
LDYgQEAgUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKICAgICAvLyBSZWxlYXNl
IGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBF
d2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVs
ZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5
IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAg
Ly8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhp
cyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgogICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2Jq
ZWN0KTsKIAogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191794</attachid>
            <date>2013-03-06 10:58:18 -0800</date>
            <delta_ts>2013-03-06 11:04:16 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP3.patch</filename>
            <type>text/plain</type>
            <size>17333</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCBh
MjQ5ODIwLi4zNzJjM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCkBAIC0yOCwyNCArMjgsMTkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAotc3RhdGljIGlubGluZSBXS1ZpZXdSZWYgY3JlYXRlV0tWaWV3KEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAg
IFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNy
ZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7Ci0gICAgRXZh
c19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywg
Y29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7Ci0gICAgaWYgKCFldmFzT2JqZWN0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdL
UmV0YWluKHRvRXdrVmlldyhldmFzT2JqZWN0KS0+d2tWaWV3KCkpKTsKKyAgICByZXR1cm4gdG9B
UEkobmV3IFdlYlZpZXcodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSkp
OwogfQogCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK0V2YXNfT2JqZWN0KiBX
S1ZpZXdDcmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmLCBFdmFzKiBldmFzKQogewot
ICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0KKyAgICBXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiA9IFdLUGFnZUdldENvbnRleHQoV0tWaWV3R2V0UGFnZSh2aWV3UmVmKSk7CisgICAgUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNv
bnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKIAotV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVs
dEJlaGF2aW9yKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHRvSW1w
bCh2aWV3UmVmKSwgZXZhcywgY29udGV4dCk7CisKKyAgICByZXR1cm4gZXdrVmlldy0+ZXZhc09i
amVjdCgpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBhNzA5YjQ4
Li5kNmM3OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZs
L1dLVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmgKQEAgLTU3LDkgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50IFdLVmlld0Ns
aWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbiA9IDAgfTsKIAotV0tf
RVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKLQotV0tfRVhQT1JUIFdLVmlld1Jl
ZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXApOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7CiBXS19F
WFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29uc3QgV0tWaWV3Q2xp
ZW50Kik7CkBAIC04OSw2ICs4Nyw3IEBAIFdLX0VYUE9SVCBib29sIFdLVmlld0dldFNob3dzQXNT
b3VyY2UoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdL
Vmlld1JlZik7CiAKIC8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0IHJpZCBv
ZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgorV0tfRVhQT1JUIEV2YXNf
T2JqZWN0KiBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyopOwogV0tfRVhQ
T1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CiAKIFdLX0VY
UE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGI1MmM1MmUuLmJk
OTVjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3Bw
CkBAIC0yMjgsMTEgKzIyOCwxMSBAQCB2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxM
QkFDS19ISURFPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YQogCiAvLyBFd2tW
aWV3IGltcGxlbWVudGF0aW9uLgogCi1Fd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldzo6RXdrVmlldyhXZWJWaWV3
KiB3ZWJWaWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0KQogICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBt
X3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0
KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcp
CiAgICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CiAgICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRo
aXMpKQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CkBAIC0yNjAsNiArMjYwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09i
amVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQo
bV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3
aGVuIHBvc3NpYmxlLgorICAgIHdlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2
YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09i
amVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2
YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkp
OwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERl
ZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFn
ZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVu
Y2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwMywx
MyArMzA0LDEzIEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0
Y2hDaGFuZ2VzKEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0
ZShXZWJWaWV3KiB3ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgRXZhc19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwg
MCk7CiAKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2Jq
ZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZhdWx0U21hcnRDbGFzc0lu
c3RhbmNlKCkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0
LCAwKTsKIAogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRh
KGV2YXNPYmplY3QpOwpAQCAtMzIwLDE1ICszMjEsOSBAQCBFdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UAogCiAgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAgLy8gRGVmYXVsdCBXZWJQ
YWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdl
R3JvdXBSZWYgaXMgMCwKLSAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVy
ZS4KLSAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0
LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KKyAg
ICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0LCBjb250
ZXh0KTsKIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2Fu
dmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFz
T2JqZWN0KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdl
R3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBi
b29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNz
JiBhcGkpCkBAIC00NTUsNyArNDUwLDcgQEAgdm9pZCBFd2tWaWV3OjpzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJiBjdXJzb3IpCiAKIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGUpCiB7Ci0gICAgcGFnZSgpLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKHdrUGFnZSgpLCBz
Y2FsZSk7CiAKICAgICAvLyBVcGRhdGUgaW50ZXJuYWwgdmlld3BvcnQgc2l6ZSBhZnRlciBkZXZp
Y2Utc2NhbGUgY2hhbmdlLgogICAgIHNldERldmljZVNpemUoZGV2aWNlU2l6ZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCAyY2M2ZTI3Li5jYjc2
NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC05
NywxNyArOTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3Vy
ZmFjZTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRf
RGF0YTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19WaWV3X1NtYXJ0
X0NsYXNzOwogCi0vLyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBieSB0aGUgZXZhcyBvYmplY3Qs
IG9idGFpbmVkIGZyb20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCgpLgogY2xhc3MgRXdrVmll
dyB7CiBwdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7Ci0gICAgICAgIExlZ2FjeUJl
aGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9OwotCi0gICAgc3RhdGljIEV2
YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21h
cnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhh
dmlvcik7Ci0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNh
bnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoV2ViS2l0OjpXZWJWaWV3KiwgRXZh
cyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIEV2YXNfU21hcnQqIHNt
YXJ0ID0gMCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tf
Vmlld19TbWFydF9DbGFzcyYpOwogCkBAIC0yMTMsNyArMjA1LDcgQEAgcHVibGljOgogICAgIFBh
c3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAg
ICBFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBF
d2tWaWV3KFdlYktpdDo6V2ViVmlldyosIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNl
dERldmljZVNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDRmMWExMzEuLjU0ZmEzYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTg2
LDE5ICs4NiwzNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50
ZXJmYWNlKCphcGkpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMq
IGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQorRXZhc19P
YmplY3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRl
eHQqPihjb250ZXh0KSk7CisgICAgV0tWaWV3UmVmIHdrVmlldyA9IFdLVmlld0NyZWF0ZShXS0Nv
bnRleHRDcmVhdGUoKSwgMCk7CisgICAgRXZhc19PYmplY3QqIG8gPSBXS1ZpZXdDcmVhdGVFdmFz
T2JqZWN0KHdrVmlldywgY2FudmFzKTsKKworICAgIHJldHVybiBvOwogfQogCi1FdmFzX09iamVj
dCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBj
b250ZXh0KQorc3RhdGljIEV2YXNfT2JqZWN0KiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KEV2
YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQsIEV2YXNfU21hcnQqIHNtYXJ0KQogewot
ICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9j
YXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCA9
IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCk7CisKKyAgICAvLyBGSVhNRTog
Q3JlYXRlIHVzaW5nIFdLVmlldyB3aGVuIEV3a1ZpZXcgZG9lc24ndCBkZXBlbmQgb24gRXdrQ29u
dGV4dC4KKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbmV3IFdlYlZpZXcodG9JbXBsKGV3a0NvbnRl
eHQtPndrQ29udGV4dCgpKSwgMCk7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2ViVmll
dy0+cGFnZVJlZigpLCB0cnVlKTsKKworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpj
cmVhdGUod2ViVmlldywgY2FudmFzLCBld2tDb250ZXh0LCBzbWFydCk7CisKKyAgICByZXR1cm4g
ZXdrVmlldy0+ZXZhc09iamVjdCgpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2
YXMqIGNhbnZhcykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFz
LCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJu
IGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBzbWFydCk7Cit9CisK
K0V2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdr
X0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3X2FkZF93aXRoX2NvbnRl
eHQoY2FudmFzLCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxfYWRkX3dpdGhfY29udGV4dChjYW52YXMsIGNvbnRleHQsIC8qIHNtYXJ0ICovIDApOwogfQog
CiBFd2tfQ29udGV4dCogZXdrX3ZpZXdfY29udGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3Bl
Y3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVj
dG9yUHJveHlFZmwuY3BwCmluZGV4IGZhMmUwOGQuLmZkNjc4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC0z
NSw2ICszNSwxMCBAQAogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9F
ZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFn
ZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpAQCAtOTgsMjAgKzEwMiwxOCBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNw
ZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gRklYTUU6IFJlZmFjdG9y
IHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSB0b0FQSShw
YWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tW
aWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwg
RXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAo
KSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yVmlldykK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgV0tDb250ZXh0UmVmIHdrQ29udGV4dCA9IHRvQVBJKHBh
Z2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOworICAgIFdLUGFnZUdyb3VwUmVmIHdrUGFnZUdy
b3VwID0gdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcg
PSBXS1ZpZXdDcmVhdGUod2tDb250ZXh0LCB3a1BhZ2VHcm91cCk7CisKKyAgICBXS1ZpZXdTZXRU
aGVtZVBhdGgod2tWaWV3LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhURVNUX1RIRU1F
X0RJUiAiL2RlZmF1bHQuZWRqIikpOwogCi0gICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmll
dyhtX2luc3BlY3RvclZpZXcpOwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAgICBld2tWaWV3LT5z
ZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIG1faW5zcGVj
dG9yVmlldyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBlY29yZV9ldmFzX2dldCht
X2luc3BlY3RvcldpbmRvdykpOwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1Zp
ZXctPnNldHRpbmdzKCk7Ci0gICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91
cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHdr
UHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHdrUGFnZUdyb3VwKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQod2tQcmVmZXJl
bmNlcywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOworICAgIHJldHVybiB0
b0ltcGwoV0tWaWV3R2V0UGFnZSh3a1ZpZXcpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3Bw
CmluZGV4IDMzZmRiNWQuLjNmOWNlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmNwcApAQCAtNTEsOCArNTEsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCi0gICAgOiBtX2V3
a1ZpZXcoZXdrVmlldykKK1dlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2Vi
UGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgOiBtX2V3a1ZpZXcoMCkKICAgICAsIG1fcGFnZShj
b250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHBhZ2VHcm91cCkpCiB7CiAgICAgbV9wYWdlLT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQodHJ1ZSk7CkBAIC02MiwxMCArNjIsNiBAQCBXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQq
IGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBld2tWaWV3KQogICAg
IGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJj
bXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAo
KS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdW
aXN1YWxzKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21w
b3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0KLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5z
ZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7Ci0jZW5kaWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXco
KQpAQCAtNzYsNiArNzIsMTcgQEAgV2ViVmlldzo6fldlYlZpZXcoKQogICAgIG1fcGFnZS0+Y2xv
c2UoKTsKIH0KIAorLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBXZWJWaWV3
OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0gZXdrVmll
dzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRpZgorCit9
CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0aWFsaXpl
V2ViUGFnZSgpOwpAQCAtMjc4LDExICsyODUsMTcgQEAgYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5k
b3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAgIGlmICgh
bV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3
LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKIHsKKyAg
ICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIG1f
ZXdrVmlldy0+aXNWaXNpYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3LmgKaW5kZXggOWY1ZjZmNC4uNGZlNjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmgKQEAgLTUwLDkgKzUwLDEyIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJ
T2JqZWN0LCBwdWJsaWMgUGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5
cGUgQVBJVHlwZSA9IFR5cGVWaWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFn
ZUdyb3VwKiwgRXdrVmlldyopOworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91
cCopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hl
biBwb3NzaWJsZS4KKyAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOworCiAgICAgdm9pZCBp
bml0aWFsaXplKCk7CiAKICAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJs
ZSB0eCwgZG91YmxlIHR5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1Bs
YXRmb3JtV2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCmluZGV4IDhhMDM1ZjMuLjUxOGRiYTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9l
ZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtNjQsOSArNjQsMTIgQEAgc3RhdGljIHZvaWQgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiBQ
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3Jl
RXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAg
bV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci0g
ICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVf
RElSIi9kZWZhdWx0LmVkaiIpOworCisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZik7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKG1fdmlldywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisKKyAg
ICBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KG1fdmlldywgZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
KTsKKwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAw
KTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7CiB9CkBAIC03OCw4ICs4MSw2IEBAIFBsYXRmb3Jt
V2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmll
dyBzaG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9i
amVjdHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsK
IAotICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBF
dmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRl
cGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0
aGlzIGdldCBmaXhlZC4KICAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CiAKICAgICBl
Y29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
ZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggYzNiYzg1Ny4uN2I1NWQ4ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBA
IC01OSwxMyArNTksMTQgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBtX3VzaW5nRml4
ZWRMYXlvdXQgPSBvcHRpb25zID8gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG9wdGlvbnMsIHVzZUZpeGVkTGF5b3V0
S2V5LmdldCgpKSkpIDogZmFsc2U7CiAKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsK
LSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOworCisgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgV0tWaWV3Q3JlYXRlRXZh
c09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KSk7CiAKICAgICBpZiAobV91
c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhl
ZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgICAgICBXS1BhZ2VTZXRVc2VG
aXhlZExheW91dChXS1ZpZXdHZXRQYWdlKG1fdmlldyksIHRydWUpOwogICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdl
R3JvdXApOworICAgIH0KIAogICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5
ID0gZmFsc2U7CkBAIC03OSw4ICs4MCw2IEBAIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2Vi
VmlldygpCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9u
Z2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5
IHJlZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsKIAotICAgIC8vIEZJWE1FOiBUaGUg
QyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2
ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFu
ZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KICAgICBl
dmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CiAKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5k
b3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191796</attachid>
            <date>2013-03-06 11:04:16 -0800</date>
            <delta_ts>2013-03-06 13:34:02 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP4.patch</filename>
            <type>text/plain</type>
            <size>17333</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCBh
MjQ5ODIwLi4zNzJjM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCkBAIC0yOCwyNCArMjgsMTkgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAotc3RhdGljIGlubGluZSBXS1ZpZXdSZWYgY3JlYXRlV0tWaWV3KEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAg
IFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNy
ZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7Ci0gICAgRXZh
c19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywg
Y29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7Ci0gICAgaWYgKCFldmFzT2JqZWN0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdL
UmV0YWluKHRvRXdrVmlldyhldmFzT2JqZWN0KS0+d2tWaWV3KCkpKTsKKyAgICByZXR1cm4gdG9B
UEkobmV3IFdlYlZpZXcodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSkp
OwogfQogCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKK0V2YXNfT2JqZWN0KiBX
S1ZpZXdDcmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmLCBFdmFzKiBldmFzKQogewot
ICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0KKyAgICBXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiA9IFdLUGFnZUdldENvbnRleHQoV0tWaWV3R2V0UGFnZSh2aWV3UmVmKSk7CisgICAgUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNv
bnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKIAotV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVs
dEJlaGF2aW9yKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHRvSW1w
bCh2aWV3UmVmKSwgZXZhcywgY29udGV4dCk7CisKKyAgICByZXR1cm4gZXdrVmlldy0+ZXZhc09i
amVjdCgpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBhNzA5YjQ4
Li5kNmM3OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZs
L1dLVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmgKQEAgLTU3LDkgKzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50IFdLVmlld0Ns
aWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbiA9IDAgfTsKIAotV0tf
RVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKLQotV0tfRVhQT1JUIFdLVmlld1Jl
ZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXApOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7CiBXS19F
WFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29uc3QgV0tWaWV3Q2xp
ZW50Kik7CkBAIC04OSw2ICs4Nyw3IEBAIFdLX0VYUE9SVCBib29sIFdLVmlld0dldFNob3dzQXNT
b3VyY2UoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdL
Vmlld1JlZik7CiAKIC8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0IHJpZCBv
ZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgorV0tfRVhQT1JUIEV2YXNf
T2JqZWN0KiBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyopOwogV0tfRVhQ
T1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CiAKIFdLX0VY
UE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGI1MmM1MmUuLjdj
NzNmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3Bw
CkBAIC0yMjgsMTEgKzIyOCwxMSBAQCB2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxM
QkFDS19ISURFPjo6aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YQogCiAvLyBFd2tW
aWV3IGltcGxlbWVudGF0aW9uLgogCi1Fd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldzo6RXdrVmlldyhXZWJWaWV3
KiB3ZWJWaWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0KQogICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBt
X3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0
KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcp
CiAgICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CiAgICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRo
aXMpKQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CkBAIC0yNjAsNiArMjYwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09i
amVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQo
bV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3
aGVuIHBvc3NpYmxlLgorICAgIHdlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2
YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09i
amVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2
YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkp
OwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERl
ZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFn
ZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVu
Y2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwMywx
MyArMzA0LDEyIEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0
Y2hDaGFuZ2VzKEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0
ZShXZWJWaWV3KiB3ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgRXZhc19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwg
MCk7CiAKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2Jq
ZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZhdWx0U21hcnRDbGFzc0lu
c3RhbmNlKCkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0
LCAwKTsKIAogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRh
KGV2YXNPYmplY3QpOwpAQCAtMzIwLDE1ICszMjAsOSBAQCBFdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UAogCiAgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAgLy8gRGVmYXVsdCBXZWJQ
YWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdl
R3JvdXBSZWYgaXMgMCwKLSAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVy
ZS4KLSAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0
LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KKyAg
ICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0LCBjb250
ZXh0KTsKIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2Fu
dmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFz
T2JqZWN0KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdl
R3JvdXBSZWYsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBi
b29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNz
JiBhcGkpCkBAIC00NTUsNyArNDQ5LDcgQEAgdm9pZCBFd2tWaWV3OjpzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJiBjdXJzb3IpCiAKIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGUpCiB7Ci0gICAgcGFnZSgpLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKHdrUGFnZSgpLCBz
Y2FsZSk7CiAKICAgICAvLyBVcGRhdGUgaW50ZXJuYWwgdmlld3BvcnQgc2l6ZSBhZnRlciBkZXZp
Y2Utc2NhbGUgY2hhbmdlLgogICAgIHNldERldmljZVNpemUoZGV2aWNlU2l6ZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCAyY2M2ZTI3Li5jYjc2
NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC05
NywxNyArOTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3Vy
ZmFjZTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRf
RGF0YTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19WaWV3X1NtYXJ0
X0NsYXNzOwogCi0vLyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBieSB0aGUgZXZhcyBvYmplY3Qs
IG9idGFpbmVkIGZyb20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCgpLgogY2xhc3MgRXdrVmll
dyB7CiBwdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7Ci0gICAgICAgIExlZ2FjeUJl
aGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9OwotCi0gICAgc3RhdGljIEV2
YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21h
cnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhh
dmlvcik7Ci0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNh
bnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoV2ViS2l0OjpXZWJWaWV3KiwgRXZh
cyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIEV2YXNfU21hcnQqIHNt
YXJ0ID0gMCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tf
Vmlld19TbWFydF9DbGFzcyYpOwogCkBAIC0yMTMsNyArMjA1LDcgQEAgcHVibGljOgogICAgIFBh
c3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAg
ICBFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBF
d2tWaWV3KFdlYktpdDo6V2ViVmlldyosIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNl
dERldmljZVNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDRmMWExMzEuLjU0ZmEzYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTg2
LDE5ICs4NiwzNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50
ZXJmYWNlKCphcGkpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMq
IGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQorRXZhc19P
YmplY3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRl
eHQqPihjb250ZXh0KSk7CisgICAgV0tWaWV3UmVmIHdrVmlldyA9IFdLVmlld0NyZWF0ZShXS0Nv
bnRleHRDcmVhdGUoKSwgMCk7CisgICAgRXZhc19PYmplY3QqIG8gPSBXS1ZpZXdDcmVhdGVFdmFz
T2JqZWN0KHdrVmlldywgY2FudmFzKTsKKworICAgIHJldHVybiBvOwogfQogCi1FdmFzX09iamVj
dCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBj
b250ZXh0KQorc3RhdGljIEV2YXNfT2JqZWN0KiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KEV2
YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQsIEV2YXNfU21hcnQqIHNtYXJ0KQogewot
ICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9j
YXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCA9
IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCk7CisKKyAgICAvLyBGSVhNRTog
Q3JlYXRlIHVzaW5nIFdLVmlldyB3aGVuIEV3a1ZpZXcgZG9lc24ndCBkZXBlbmQgb24gRXdrQ29u
dGV4dC4KKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbmV3IFdlYlZpZXcodG9JbXBsKGV3a0NvbnRl
eHQtPndrQ29udGV4dCgpKSwgMCk7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2ViVmll
dy0+cGFnZVJlZigpLCB0cnVlKTsKKworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpj
cmVhdGUod2ViVmlldywgY2FudmFzLCBld2tDb250ZXh0LCBzbWFydCk7CisKKyAgICByZXR1cm4g
ZXdrVmlldy0+ZXZhc09iamVjdCgpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2
YXMqIGNhbnZhcykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFz
LCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJu
IGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBzbWFydCk7Cit9CisK
K0V2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdr
X0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3X2FkZF93aXRoX2NvbnRl
eHQoY2FudmFzLCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxfYWRkX3dpdGhfY29udGV4dChjYW52YXMsIGNvbnRleHQsIC8qIHNtYXJ0ICovIDApOwogfQog
CiBFd2tfQ29udGV4dCogZXdrX3ZpZXdfY29udGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3Bl
Y3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVj
dG9yUHJveHlFZmwuY3BwCmluZGV4IGZhMmUwOGQuLmZkNjc4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC0z
NSw2ICszNSwxMCBAQAogI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9F
ZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFn
ZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpAQCAtOTgsMjAgKzEwMiwxOCBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNw
ZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gRklYTUU6IFJlZmFjdG9y
IHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSB0b0FQSShw
YWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tW
aWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwg
RXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAo
KSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yVmlldykK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgV0tDb250ZXh0UmVmIHdrQ29udGV4dCA9IHRvQVBJKHBh
Z2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOworICAgIFdLUGFnZUdyb3VwUmVmIHdrUGFnZUdy
b3VwID0gdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcg
PSBXS1ZpZXdDcmVhdGUod2tDb250ZXh0LCB3a1BhZ2VHcm91cCk7CisKKyAgICBXS1ZpZXdTZXRU
aGVtZVBhdGgod2tWaWV3LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhURVNUX1RIRU1F
X0RJUiAiL2RlZmF1bHQuZWRqIikpOwogCi0gICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmll
dyhtX2luc3BlY3RvclZpZXcpOwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAgICBld2tWaWV3LT5z
ZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIG1faW5zcGVj
dG9yVmlldyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBlY29yZV9ldmFzX2dldCht
X2luc3BlY3RvcldpbmRvdykpOwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1Zp
ZXctPnNldHRpbmdzKCk7Ci0gICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91
cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHdr
UHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHdrUGFnZUdyb3VwKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQod2tQcmVmZXJl
bmNlcywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOworICAgIHJldHVybiB0
b0ltcGwoV0tWaWV3R2V0UGFnZSh3a1ZpZXcpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3Bw
CmluZGV4IDMzZmRiNWQuLjNmOWNlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmNwcApAQCAtNTEsOCArNTEsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCi0gICAgOiBtX2V3
a1ZpZXcoZXdrVmlldykKK1dlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2Vi
UGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgOiBtX2V3a1ZpZXcoMCkKICAgICAsIG1fcGFnZShj
b250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHBhZ2VHcm91cCkpCiB7CiAgICAgbV9wYWdlLT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQodHJ1ZSk7CkBAIC02MiwxMCArNjIsNiBAQCBXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQq
IGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBld2tWaWV3KQogICAg
IGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJj
bXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAo
KS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdW
aXN1YWxzKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21w
b3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0KLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5z
ZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7Ci0jZW5kaWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXco
KQpAQCAtNzYsNiArNzIsMTcgQEAgV2ViVmlldzo6fldlYlZpZXcoKQogICAgIG1fcGFnZS0+Y2xv
c2UoKTsKIH0KIAorLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBXZWJWaWV3
OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0gZXdrVmll
dzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRpZgorCit9
CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0aWFsaXpl
V2ViUGFnZSgpOwpAQCAtMjc4LDExICsyODUsMTcgQEAgYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5k
b3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAgIGlmICgh
bV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3
LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKIHsKKyAg
ICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIG1f
ZXdrVmlldy0+aXNWaXNpYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3LmgKaW5kZXggOWY1ZjZmNC4uNGZlNjc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmgKQEAgLTUwLDkgKzUwLDEyIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJ
T2JqZWN0LCBwdWJsaWMgUGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5
cGUgQVBJVHlwZSA9IFR5cGVWaWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFn
ZUdyb3VwKiwgRXdrVmlldyopOworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91
cCopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hl
biBwb3NzaWJsZS4KKyAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOworCiAgICAgdm9pZCBp
bml0aWFsaXplKCk7CiAKICAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJs
ZSB0eCwgZG91YmxlIHR5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1Bs
YXRmb3JtV2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCmluZGV4IDhhMDM1ZjMuLjUxOGRiYTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9l
ZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtNjQsOSArNjQsMTIgQEAgc3RhdGljIHZvaWQgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiBQ
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3Jl
RXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAg
bV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci0g
ICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVf
RElSIi9kZWZhdWx0LmVkaiIpOworCisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZik7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKG1fdmlldywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisKKyAg
ICBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KG1fdmlldywgZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
KTsKKwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAw
KTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7CiB9CkBAIC03OCw4ICs4MSw2IEBAIFBsYXRmb3Jt
V2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmll
dyBzaG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9i
amVjdHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsK
IAotICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBF
dmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRl
cGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0
aGlzIGdldCBmaXhlZC4KICAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CiAKICAgICBl
Y29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
ZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggYzNiYzg1Ny4uN2I1NWQ4ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBA
IC01OSwxMyArNTksMTQgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBtX3VzaW5nRml4
ZWRMYXlvdXQgPSBvcHRpb25zID8gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29s
ZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG9wdGlvbnMsIHVzZUZpeGVkTGF5b3V0
S2V5LmdldCgpKSkpIDogZmFsc2U7CiAKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsK
LSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOworCisgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgV0tWaWV3Q3JlYXRlRXZh
c09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KSk7CiAKICAgICBpZiAobV91
c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhl
ZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgICAgICBXS1BhZ2VTZXRVc2VG
aXhlZExheW91dChXS1ZpZXdHZXRQYWdlKG1fdmlldyksIHRydWUpOwogICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdl
R3JvdXApOworICAgIH0KIAogICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5
ID0gZmFsc2U7CkBAIC03OSw4ICs4MCw2IEBAIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2Vi
VmlldygpCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9u
Z2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5
IHJlZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsKIAotICAgIC8vIEZJWE1FOiBUaGUg
QyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2
ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFu
ZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KICAgICBl
dmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CiAKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5k
b3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191821</attachid>
            <date>2013-03-06 13:34:02 -0800</date>
            <delta_ts>2013-03-06 14:55:19 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP5.patch</filename>
            <type>text/plain</type>
            <size>18280</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlZmUyZjE3Li4xYjg0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDMtMDYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZy
b20gRXdrVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNTkxCisKKyAgICAgICAgVG8gZXhwbGFpbiB0aGUgb3ZlcmFsbCBnb2FsOgorCisgICAg
ICAgIGEpIEJlIGFibGUgdG8gbWFpbnRhaW4gdGhlIEVGTCBjb252ZW5pZW5jZSBBUEkgaW4gdGhl
IFRpemVuIHByb2plY3QKKyAgICAgICAgICAgdG9nZXRoZXIgd2l0aCBvdXIgcGFydG5lcnMgKHBv
dGVudGlhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsCisgICAgICAgICAgIGJhY2stcG9ydGlu
ZykuIFRoaXMgQVBJIGlzIG9mZmVyZWQgdG8gIk9FTSdzIiBhbmQgcGFydG5lcnMgZm9yCisgICAg
ICAgICAgIGFwcGxpY2F0aW9uIGNyZWF0aW9uLgorCisgICAgICAgICAgIEl0IHdpbGwgYmUgYmFz
ZWQgb24gdG9wIG9mIHRoZSBXSzIgQyBBUEkgYW5kIHRoZSBFRkwgV0tWaWV3IGNsYXNzIG9ubHku
CisKKyAgICAgICAgYikgRm9yIHNwZWNpYWxpemVkIGludGVybmFsIHByb2R1Y3RzIHdlIHdhbnQg
dG8gdXNlIHRoZSBsb3ctbGV2ZWwKKyAgICAgICAgICAgV0syIEMgQVBJIGluc3RlYWQsIHdoaWxl
IHN0aWxsIGJlIGFibGUgdG8gaW50ZWdyYXRlIHdpdGggRUZMIChmb3IgVUkpLgorCisgICAgICAg
ICAgIFRoZSBXSzIgQyBBUEkgaXMgbG93LWxldmVsIGFuZCBtdWNoIG1vcmUgcG93ZXJmdWwgdGhh
dCB0aGUgRUZMCisgICAgICAgICAgIGNvbnZlbmllbmNlIEFQSSwgd2hpY2ggaXMgYWltZWQgYXQg
YXBwbGljYXRpb24gZGV2ZWxvcGVycy4KKworICAgICAgICAgICBOb3RlOiBTb21lIG9mIHRoZXNl
IHByb2R1Y3RzIG1pZ2h0IG5vdCBldmVuIHVzZSBFRkwsIGJ1dCBqdXN0IE9wZW5HTC4KKwogMjAx
My0wMy0wNiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbRUZMXVtXSzJdIENvbnZlcnQgZnJvbSBkZXZpY2UgdmlldyBzaXplIHRvIFVJIHZpZXcg
c2l6ZSBvbmx5IGluIEV3a1ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5jcHAKaW5kZXggYTI0OTgyMC4uMzcyYzNiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjgsMjQgKzI4LDE5IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0
ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRl
eHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwot
ICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmll
dygpKSk7CisgICAgcmV0dXJuIHRvQVBJKG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwg
dG9JbXBsKHBhZ2VHcm91cFJlZikpKTsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCitFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYgdmll
d1JlZiwgRXZhcyogZXZhcykKIHsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19CisgICAg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBXS1BhZ2VHZXRDb250ZXh0KFdLVmlld0dldFBhZ2Uo
dmlld1JlZikpOworICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/
IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250
ZXh0KCk7CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgRXdrVmlldyogZXdrVmlldyA9
IEV3a1ZpZXc6OmNyZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIGNvbnRleHQpOworCisgICAg
cmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXpl
KFdLVmlld1JlZiB2aWV3UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tWaWV3LmgKaW5kZXggYTcwOWI0OC4uZDZjNzlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCkBAIC01Nyw5ICs1Nyw3IEBAIHR5cGVkZWYgc3RydWN0
IFdLVmlld0NsaWVudCBXS1ZpZXdDbGllbnQ7CiAKIGVudW0geyBrV0tWaWV3Q2xpZW50Q3VycmVu
dFZlcnNpb24gPSAwIH07CiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7
Ci0KLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7
CitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlh
bGl6ZShXS1ZpZXdSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1Zp
ZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCopOwpAQCAtODksNiArODcsNyBAQCBXS19FWFBPUlQg
Ym9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZik7CiBXS19FWFBPUlQgdm9pZCBX
S1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCiAvLyBGSVhNRTogVGhlIGxvbmcgdGVy
bSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2VlcCB1c2FnZSB0byBhIGJhcmUgbWlu
aW11bS4KK1dLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1Zp
ZXdSZWYsIEV2YXMqKTsKIFdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVj
dChXS1ZpZXdSZWYpOwogCiBXS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hv
dChXS1ZpZXdSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCBiNTJjNTJlLi5kMzQxZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjI4LDExICsyMjgsMTEgQEAgdm9pZCBFd2tWaWV3
RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEs
IEV2YXMqLCBFdmEKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KIAotRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3
a1ZpZXc6OkV3a1ZpZXcoV2ViVmlldyogd2ViVmlldywgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qs
IFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCkKICAgICA6IG1fZXZhc09iamVjdChldmFz
T2JqZWN0KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNl
UmVzaXplKGZhbHNlKQotICAgICwgbV93ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1w
bChtX2NvbnRleHQtPndrQ29udGV4dCgpKSwgdG9JbXBsKHBhZ2VHcm91cCksIHRoaXMpKSkKKyAg
ICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENs
aWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xp
Y3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNs
aWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMjYwLDYgKzI2MCw5IEBAIEV3a1ZpZXc6OkV3a1Zp
ZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV0tQYWdlCiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4
dCk7CiAKKyAgICAvLyBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICB3ZWJWaWV3LT5zZXRFd2tW
aWV3KHRoaXMpOworCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29i
amVjdF9ldmFzX2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQogICAgICAg
ICBtX2V2YXNHTENvbnRleHQgPSBFdmFzR0xDb250ZXh0OjpjcmVhdGUobV9ldmFzR0wuZ2V0KCkp
OwpAQCAtMjcxLDggKzI3NCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNP
YmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlCiAKICAgICBXS1Zp
ZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdr
UGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwotCiAgICAgV0tQYWdlR3JvdXBS
ZWYgd2tQYWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOwogICAgIFdLUHJl
ZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQ
YWdlR3JvdXApOwogCkBAIC0zMDMsMTMgKzMwNCwxMiBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAg
ICAgaWNvbkRhdGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpoYW5kbGVGYXZpY29uQ2hh
bmdlZCk7CiB9CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMq
IGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitF
d2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUoV2ViVmlldyogd2ViVmlldywgRXZhcyogY2FudmFzLCBQ
YXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIEV2YXNfU21hcnQqIHNtYXJ0KQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwogCi0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qg
PSBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCk7CisgICAgRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QgPSBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBzbWFydCA/IHNtYXJ0
IDogZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXZhc09iamVjdCwgMCk7CiAKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEgPSB0b1NtYXJ0RGF0YShldmFzT2JqZWN0KTsKQEAgLTMyMCwxNSArMzIwLDkgQEAg
RXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFz
X1NtYXJ0KiBzbWFydCwgUGFzc1JlZlAKIAogICAgIEFTU0VSVCghc21hcnREYXRhLT5wcml2KTsK
IAotICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4gV2ViQ29udGV4dCBj
b25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCi0gICAgLy8gc28gd2UgZG8gbm90
IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCi0gICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1Zp
ZXcoZXZhc09iamVjdCwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7Ci0gICAgcmV0
dXJuIGV2YXNPYmplY3Q7Ci19CisgICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcod2Vi
VmlldywgZXZhc09iamVjdCwgY29udGV4dCk7CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVh
dGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKLXsK
LSAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52YXMsIGRlZmF1bHRTbWFydENsYXNzSW5z
dGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+cHJpdjsKIH0KIAogYm9vbCBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0ludGVyZmFj
ZShFd2tfVmlld19TbWFydF9DbGFzcyYgYXBpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5oCmluZGV4IDJjYzZlMjcuLmNiNzY2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTk3LDE3ICs5Nyw5IEBAIHR5cGVkZWYg
c3RydWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9TdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3Qg
RXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwogdHlwZWRlZiBzdHJ1Y3Qg
RXdrX1ZpZXdfU21hcnRfQ2xhc3MgRXdrX1ZpZXdfU21hcnRfQ2xhc3M7CiAKLS8vIEV3a1ZpZXcg
b2JqZWN0IGlzIG93bmVkIGJ5IHRoZSBldmFzIG9iamVjdCwgb2J0YWluZWQgZnJvbSBFd2tWaWV3
OjpjcmVhdGVFdmFzT2JqZWN0KCkuCiBjbGFzcyBFd2tWaWV3IHsKIHB1YmxpYzoKLQotICAgIGVu
dW0gVmlld0JlaGF2aW9yIHsKLSAgICAgICAgTGVnYWN5QmVoYXZpb3IsCi0gICAgICAgIERlZmF1
bHRCZWhhdmlvcgotICAgIH07Ci0KLSAgICBzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZUV2YXNP
YmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCAgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2
aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBzdGF0aWMgRXZh
c19PYmplY3QqIGNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIFZpZXdCZWhh
dmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgc3RhdGljIEV3
a1ZpZXcqIGNyZWF0ZShXZWJLaXQ6OldlYlZpZXcqLCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgRXZhc19TbWFydCogc21hcnQgPSAwKTsKIAogICAgIHN0YXRp
YyBib29sIGluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJik7CiAK
QEAgLTIxMyw3ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHRha2VTbmFwc2hvdCgpOwogCiBwcml2YXRlOgotICAgIEV3a1ZpZXcoRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoV2ViS2l0OjpXZWJWaWV3
KiwgRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCk7CiAgICAgfkV3a1ZpZXcoKTsKIAogICAgIHZvaWQgc2V0RGV2aWNlU2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKaW5kZXggNGYxYTEzMS4uNTRmYTNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtODYsMTkgKzg2LDM1IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAg
ICByZXR1cm4gRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoKmFwaSk7CiB9CiAKLUV2
YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2
YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52
YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBX
S1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKFdLQ29udGV4dENyZWF0ZSgpLCAwKTsKKyAg
ICBFdmFzX09iamVjdCogbyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBjYW52YXMp
OworCisgICAgcmV0dXJuIG87CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9j
b250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCitzdGF0aWMgRXZhc19P
YmplY3QqIGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4
dCogY29udGV4dCwgRXZhc19TbWFydCogc21hcnQpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6OmNy
ZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRl
eHQpKTsKKyAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0ID0gZXdrX29iamVjdF9jYXN0PEV3a0Nv
bnRleHQqPihjb250ZXh0KTsKKworICAgIC8vIEZJWE1FOiBDcmVhdGUgdXNpbmcgV0tWaWV3IHdo
ZW4gRXdrVmlldyBkb2Vzbid0IGRlcGVuZCBvbiBFd2tDb250ZXh0LgorICAgIFdlYlZpZXcqIHdl
YlZpZXcgPSBuZXcgV2ViVmlldyh0b0ltcGwoZXdrQ29udGV4dC0+d2tDb250ZXh0KCkpLCAwKTsK
KyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3ZWJWaWV3LT5wYWdlUmVmKCksIHRydWUpOwor
CisgICAgRXdrVmlldyogZXdrVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZSh3ZWJWaWV3LCBjYW52YXMs
IGV3a0NvbnRleHQsIHNtYXJ0KTsKKworICAgIHJldHVybiBld2tWaWV3LT5ldmFzT2JqZWN0KCk7
CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQorRXZhc19PYmpl
Y3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBF
d2tfQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gaW50ZXJuYWxfYWRkX3dpdGhfY29u
dGV4dChjYW52YXMsIGNvbnRleHQsIHNtYXJ0KTsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3
X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChjYW52YXMsIGV3a19jb250ZXh0
X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVybiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KGNh
bnZhcywgY29udGV4dCwgLyogc21hcnQgKi8gMCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tfdmll
d19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXgg
ZmEyZTA4ZC4uZmQ2Nzg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVk
ZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VmbEluc3BlY3RvclV0aWxpdGllcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC05OCwy
MCArMTAyLDE4IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3Jl
YXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KLSAg
ICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250
ZXh0KCkpOwotICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3Qo
ZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBFd2tDb250ZXh0OjpjcmVhdGUoY29u
dGV4dFJlZiksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVo
YXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JWaWV3KQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBXS0NvbnRleHRSZWYgd2tDb250ZXh0ID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRl
eHQoKSk7CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSB0b0FQSShpbnNwZWN0b3JQ
YWdlR3JvdXAoKSk7CisgICAgV0tWaWV3UmVmIHdrVmlldyA9IFdLVmlld0NyZWF0ZSh3a0NvbnRl
eHQsIHdrUGFnZUdyb3VwKTsKKworICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcsIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7
CiAKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KG1faW5zcGVjdG9yVmlldyk7Ci0g
ICAgQVNTRVJUKGV3a1ZpZXcpOwotICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1F
X0RJUiAiL2RlZmF1bHQuZWRqIik7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gV0tWaWV3Q3JlYXRl
RXZhc09iamVjdCh3a1ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSk7CiAK
LSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdrVmlldy0+c2V0dGluZ3MoKTsKLSAgICBl
d2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0dGlu
Z3MsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdy
b3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIHJl
dHVybiBld2tWaWV3LT5wYWdlKCk7CisgICAgcmV0dXJuIHRvSW1wbChXS1ZpZXdHZXRQYWdlKHdr
VmlldykpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW4oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKaW5kZXggMzNmZGI1ZC4uM2Y5Y2Ux
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC01MSw4ICs1
MSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
V2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VH
cm91cCwgRXdrVmlldyogZXdrVmlldykKLSAgICA6IG1fZXdrVmlldyhld2tWaWV3KQorV2ViVmll
dzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkK
KyAgICA6IG1fZXdrVmlldygwKQogICAgICwgbV9wYWdlKGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2Uo
dGhpcywgcGFnZUdyb3VwKSkKIHsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNl
cygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKQEAgLTYyLDEwICs2
Miw2IEBAIFdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3Vw
KiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCiAgICAgYm9vbCBzaG93RGVidWdWaXN1YWxz
ID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9u
bWVudCwgIjEiKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRD
b21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwogICAgIG1fcGFnZS0+
cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJz
VmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
LSAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXZhc09iamVjdCgp
KTsKLSNlbmRpZgogfQogCiBXZWJWaWV3Ojp+V2ViVmlldygpCkBAIC03Niw2ICs3MiwxNyBAQCBX
ZWJWaWV3Ojp+V2ViVmlldygpCiAgICAgbV9wYWdlLT5jbG9zZSgpOwogfQogCisvLyBGSVhNRTog
UmVtb3ZlIHdoZW4gcG9zc2libGUuCit2b2lkIFdlYlZpZXc6OnNldEV3a1ZpZXcoRXdrVmlldyog
ZXdrVmlldykKK3sKKyAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OworCisjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQorICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhl
d2tWaWV3LT5ldmFzT2JqZWN0KCkpOworI2VuZGlmCisKK30KKwogdm9pZCBXZWJWaWV3Ojppbml0
aWFsaXplKCkKIHsKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CkBAIC0yNzgsMTEg
KzI4NSwxNyBAQCBib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCiAKIGJvb2wgV2Vi
Vmlldzo6aXNWaWV3Rm9jdXNlZCgpCiB7CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXctPmlzRm9jdXNlZCgpOwogfQogCiBi
b29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQogeworICAgIGlmICghbV9ld2tWaWV3KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3LT5pc1Zpc2libGUoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAppbmRleCA5ZjVmNmY0Li40
ZmU2Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApAQCAtNTAsOSAr
NTAsMTIgQEAgY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3QsIHB1YmxpYyBQYWdlQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7
CiAKLSAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqLCBFd2tWaWV3Kik7Cisg
ICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CiAgICAgdmlydHVhbCB+V2Vi
VmlldygpOwogCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIHZvaWQg
c2V0RXdrVmlldyhFd2tWaWV3Kik7CisKICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIHZv
aWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggOGEwMzVmMy4u
NTE4ZGJhNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJW
aWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3Bw
CkBAIC02NCw5ICs2NCwxMiBAQCBzdGF0aWMgdm9pZCBvbldlYlByb2Nlc3NDcmFzaGVkKHZvaWQq
LCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCiB7CiAgICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyogZXZh
cyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUo
ZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKLSAgICBld2tfdmlld190aGVtZV9zZXQo
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisK
KyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAg
ICBXS1ZpZXdTZXRUaGVtZVBhdGgobV92aWV3LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhUSEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKworICAgIFdLVmlld0NyZWF0ZUV2YXNPYmpl
Y3QobV92aWV3LCBlY29yZV9ldmFzX2dldChtX3dpbmRvdykpOworCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgIndlYnByb2Nl
c3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwg
ODAwKTsKIH0KQEAgLTc4LDggKzgxLDYgQEAgUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJW
aWV3KCkKICAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25n
ZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkg
cmVmZXJzIHRvLgogICAgIFdLUmVsZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBD
IFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZl
IHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5k
IFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgogICAgIGV2
YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKIAogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRv
dyk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZp
ZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcAppbmRleCBjM2JjODU3Li43YjU1ZDhmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTU5LDEzICs1OSwxNCBAQCBQbGF0
Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlvbnMgPyBX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdl
dEl0ZW1Gb3JLZXkob3B0aW9ucywgdXNlRml4ZWRMYXlvdXRLZXkuZ2V0KCkpKSkgOiBmYWxzZTsK
IAogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7CisKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29udGV4
dCwgcGFnZUdyb3VwKTsKKyAgICBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KG1fdmlldywgZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpKTsKIAogICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpIHsKLSAg
ICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQs
IHBhZ2VHcm91cCk7CisgICAgICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dldFBh
Z2UobV92aWV3KSwgdHJ1ZSk7CiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyksIDgwMCwgNjAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgfQogCiAgICAg
ZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElS
Ii9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKQEAgLTc5LDggKzgw
LDYgQEAgUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKICAgICAvLyBSZWxlYXNl
IGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBF
d2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVs
ZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5
IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAg
Ly8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhp
cyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgogICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2Jq
ZWN0KTsKIAogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191837</attachid>
            <date>2013-03-06 14:55:19 -0800</date>
            <delta_ts>2013-03-06 15:04:01 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP6.patch</filename>
            <type>text/plain</type>
            <size>27644</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlZmUyZjE3Li4xYjg0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDMtMDYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZy
b20gRXdrVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNTkxCisKKyAgICAgICAgVG8gZXhwbGFpbiB0aGUgb3ZlcmFsbCBnb2FsOgorCisgICAg
ICAgIGEpIEJlIGFibGUgdG8gbWFpbnRhaW4gdGhlIEVGTCBjb252ZW5pZW5jZSBBUEkgaW4gdGhl
IFRpemVuIHByb2plY3QKKyAgICAgICAgICAgdG9nZXRoZXIgd2l0aCBvdXIgcGFydG5lcnMgKHBv
dGVudGlhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsCisgICAgICAgICAgIGJhY2stcG9ydGlu
ZykuIFRoaXMgQVBJIGlzIG9mZmVyZWQgdG8gIk9FTSdzIiBhbmQgcGFydG5lcnMgZm9yCisgICAg
ICAgICAgIGFwcGxpY2F0aW9uIGNyZWF0aW9uLgorCisgICAgICAgICAgIEl0IHdpbGwgYmUgYmFz
ZWQgb24gdG9wIG9mIHRoZSBXSzIgQyBBUEkgYW5kIHRoZSBFRkwgV0tWaWV3IGNsYXNzIG9ubHku
CisKKyAgICAgICAgYikgRm9yIHNwZWNpYWxpemVkIGludGVybmFsIHByb2R1Y3RzIHdlIHdhbnQg
dG8gdXNlIHRoZSBsb3ctbGV2ZWwKKyAgICAgICAgICAgV0syIEMgQVBJIGluc3RlYWQsIHdoaWxl
IHN0aWxsIGJlIGFibGUgdG8gaW50ZWdyYXRlIHdpdGggRUZMIChmb3IgVUkpLgorCisgICAgICAg
ICAgIFRoZSBXSzIgQyBBUEkgaXMgbG93LWxldmVsIGFuZCBtdWNoIG1vcmUgcG93ZXJmdWwgdGhh
dCB0aGUgRUZMCisgICAgICAgICAgIGNvbnZlbmllbmNlIEFQSSwgd2hpY2ggaXMgYWltZWQgYXQg
YXBwbGljYXRpb24gZGV2ZWxvcGVycy4KKworICAgICAgICAgICBOb3RlOiBTb21lIG9mIHRoZXNl
IHByb2R1Y3RzIG1pZ2h0IG5vdCBldmVuIHVzZSBFRkwsIGJ1dCBqdXN0IE9wZW5HTC4KKwogMjAx
My0wMy0wNiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbRUZMXVtXSzJdIENvbnZlcnQgZnJvbSBkZXZpY2UgdmlldyBzaXplIHRvIFVJIHZpZXcg
c2l6ZSBvbmx5IGluIEV3a1ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5jcHAKaW5kZXggYTI0OTgyMC4uYzVkMWExMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjgsMjQgKzI4LDE5IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0
ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRl
eHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwot
ICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmll
dygpKSk7CisgICAgcmV0dXJuIHRvQVBJKG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwg
dG9JbXBsKHBhZ2VHcm91cFJlZikpKTsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCitFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYgdmll
d1JlZiwgRXZhcyogZXZhcykKIHsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19CisgICAg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBXS1BhZ2VHZXRDb250ZXh0KFdLVmlld0dldFBhZ2Uo
dmlld1JlZikpOworICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/
IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250
ZXh0KCk7CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgRXdrVmlldyogZXdrVmlldyA9
IEV3a1ZpZXc6OmNyZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIGNvbnRleHQpOworCisgICAg
cmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXpl
KFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTM4LDExICsxMzMsNiBAQCB2b2lkIFdLVmlld0V4aXRG
dWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVmKQogI2VuZGlmCiB9CiAKLUV2YXNfT2JqZWN0KiBX
S1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKLX0KLQogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVT
bmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKICAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9F
d2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGE3MDliNDguLmE0OGNiZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtNTcsOSArNTcs
NyBAQCB0eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCiBlbnVtIHsg
a1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwogCi1XS19FWFBPUlQgV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOworV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9S
VCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKQEAgLTg4LDgg
Kzg2LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYp
OwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCi0v
LyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2Vl
cCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KLVdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3
R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworV0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdD
cmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyopOwogCiBXS19FWFBPUlQgV0tJbWFnZVJl
ZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGI1MmM1MmUuLmQzNDFmNGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMjgsMTEg
KzIyOCwxMSBAQCB2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6
aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YQogCiAvLyBFd2tWaWV3IGltcGxlbWVu
dGF0aW9uLgogCi1Fd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNz
UmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldzo6RXdrVmlldyhXZWJWaWV3KiB3ZWJWaWV3LCBF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KQog
ICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRv
cHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwo
cGFnZUdyb3VwKSwgdGhpcykpKQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3Bh
Z2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Bh
Z2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwg
bV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0yNjAsNiAr
MjYwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0
KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3aGVuIHBvc3NpYmxl
LgorICAgIHdlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFkb3B0
UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsKICAg
ICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRleHQ6
OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAgV0tQ
YWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlv
cik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91
cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdl
R3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwMywxMyArMzA0LDEyIEBA
IEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3
a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXZWJWaWV3KiB3
ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgRXZh
c19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNh
bnZhcywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBF
dmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNt
YXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsKIAogICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3Qp
OwpAQCAtMzIwLDE1ICszMjAsOSBAQCBFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNT
RVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMg
Y3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMg
MCwKLSAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFy
dERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBS
ZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KKyAgICBzbWFydERhdGEt
PnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0LCBjb250ZXh0KTsKIAotRXZh
c19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZh
cywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJl
aGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6
OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMmNjNmUyNy4uY2I3
NjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAt
OTcsMTcgKzk3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1
cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0
X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFy
dF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2JqZWN0
LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3a1Zp
ZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdhY3lC
ZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRpYyBF
dmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNt
YXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOwotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBj
YW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKTsKKyAgICBzdGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktpdDo6V2ViVmlldyosIEV2
YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBFdmFzX1NtYXJ0KiBz
bWFydCA9IDApOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MmKTsKIApAQCAtMjEzLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0g
ICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAg
RXdrVmlldyhXZWJLaXQ6OldlYlZpZXcqLCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBz
ZXREZXZpY2VTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA0ZjFhMTMxLi5mNTBhMjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04
NiwxOSArODYsMzUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0lu
dGVyZmFjZSgqYXBpKTsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKK0V2YXNf
T2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBFd2tWaWV3
OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0Q3JlYXRlKCksIDApOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3
Q3JlYXRlRXZhc09iamVjdCh3a1ZpZXcsIGNhbnZhcyk7CisKKyAgICByZXR1cm4gZXZhc09iamVj
dDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2Fu
dmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyBFdmFzX09iamVjdCogaW50ZXJuYWxf
YWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFdmFz
X1NtYXJ0KiBzbWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChj
YW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3a0Nv
bnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQp
OworCisgICAgLy8gRklYTUU6IENyZWF0ZSB1c2luZyBXS1ZpZXcgd2hlbiBFd2tWaWV3IGRvZXNu
J3QgZGVwZW5kIG9uIEV3a0NvbnRleHQuCisgICAgV2ViVmlldyogd2ViVmlldyA9IG5ldyBXZWJW
aWV3KHRvSW1wbChld2tDb250ZXh0LT53a0NvbnRleHQoKSksIDApOworICAgIFdLUGFnZVNldFVz
ZUZpeGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwgdHJ1ZSk7CisKKyAgICBFd2tWaWV3KiBl
d2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdlYlZpZXcsIGNhbnZhcywgZXdrQ29udGV4dCwgc21h
cnQpOworCisgICAgcmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAotRXZhc19PYmpl
Y3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc21h
cnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250
ZXh0KQoreworICAgIHJldHVybiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgY29u
dGV4dCwgc21hcnQpOworfQorCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4
dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBld2tf
dmlld19hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7
CisgICAgcmV0dXJuIGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCAv
KiBzbWFydCAqLyAwKTsKIH0KIAogRXdrX0NvbnRleHQqIGV3a192aWV3X2NvbnRleHRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCBmYTJlMDhkLi5mZDY3ODdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclBy
b3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1BhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTk4LDIwICsxMDIsMTggQEAgV2Vi
UGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdl
KCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgotICAgIFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7Ci0gICAgbV9p
bnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldCht
X2luc3BlY3RvcldpbmRvdyksIEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSwgdG9BUEko
aW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYg
KCFtX2luc3BlY3RvclZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgIFdLQ29udGV4dFJlZiB3
a0NvbnRleHQgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKKyAgICBXS1Bh
Z2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKTsKKyAg
ICBXS1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwgd2tQYWdlR3JvdXAp
OworCisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKIAotICAgIEV3a1ZpZXcq
IGV3a1ZpZXcgPSB0b0V3a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NFUlQoZXdrVmll
dyk7Ci0gICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5l
ZGoiKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KHdrVmll
dywgZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpKTsKIAotICAgIEV3a19TZXR0aW5n
cyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwotICAgIGV3a19zZXR0aW5nc19maWxl
X2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywgdHJ1ZSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nlc3NGcm9tRmlsZVVS
THNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgcmV0dXJuIGV3a1ZpZXctPnBh
Z2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmlld0dldFBhZ2Uod2tWaWV3KSk7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCAzM2ZkYjVkLi4zZjljZTE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTUxLDggKzUxLDggQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpXZWJWaWV3
KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBl
d2tWaWV3KQotICAgIDogbV9ld2tWaWV3KGV3a1ZpZXcpCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNv
bnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAgIDogbV9ld2tWaWV3
KDApCiAgICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdlR3JvdXAp
KQogewogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpAQCAtNjIsMTAgKzYyLDYgQEAgV2ViVmlldzo6
V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdr
VmlldyogZXdrVmlldykKICAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNF
bnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOwogICAg
IG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVy
c1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1
Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhldmFzT2JqZWN0KCkpOwotI2VuZGlmCiB9CiAK
IFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTc2LDYgKzcyLDE3IEBAIFdlYlZpZXc6On5XZWJWaWV3
KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKKy8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3Nz
aWJsZS4KK3ZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQoreworICAg
IG1fZXdrVmlldyA9IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
bV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmpl
Y3QoKSk7CisjZW5kaWYKKworfQorCiB2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQogewogICAg
IG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKQEAgLTI3OCwxMSArMjg1LDE3IEBAIGJvb2wg
V2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1
c2VkKCkKIHsKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgcmV0dXJuIG1fZXdrVmlldy0+aXNGb2N1c2VkKCk7CiB9CiAKIGJvb2wgV2ViVmlldzo6aXNW
aWV3VmlzaWJsZSgpCiB7CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXctPmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDlmNWY2ZjQuLjRmZTY3OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC01MCw5ICs1MCwxMiBAQCBjbGFzcyBX
ZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCwgcHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXco
V2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIEV3a1ZpZXcqKTsKKyAgICBXZWJWaWV3KFdlYkNv
bnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCisgICAgdm9pZCBzZXRFd2tWaWV3KEV3a1Zp
ZXcqKTsKKwogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBzZXRVc2VyVmlld3Bv
cnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaAppbmRleCBiNTZjMDk2Li45NjkxODkxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ4LDggKzQ4LDEwIEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBs
YXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYg
UExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKK3R5
cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYgV0tWaWV3UmVm
IFBsYXRmb3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKK3R5
cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5nOwordHlwZWRlZiBFdmFzX09iamVjdCog
UGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQog
Y2xhc3MgUVF1aWNrVmlldzsKQEAgLTkzLDYgKzk1LDkgQEAgcHJpdmF0ZToKIAogICAgIFBsYXRm
b3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsKKyNpZiBQTEFU
Rk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQogICAgIFdpbmRvd01lc3NhZ2VPYnNlcnZlciogbV9wYXJlbnRXaW5kb3dN
ZXNzYWdlT2JzZXJ2ZXI7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0
Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcAppbmRleCA4YTAzNWYzLi4xNjU0OTVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZs
L1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTYzLDMyICs2MywzMSBAQCBzdGF0aWMgdm9pZCBvbldl
YlByb2Nlc3NDcmFzaGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIAog
UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBtX3dpbmRvdyA9IGluaXRFY29y
ZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAg
IG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOwot
ICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1F
X0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQ
cm9jZXNzQ3Jhc2hlZCwgMCk7CisgICAgbV9iYWNraW5nID0gaW5pdEVjb3JlRXZhcygpOworCisg
ICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7CisgICAg
V0tWaWV3U2V0VGhlbWVQYXRoKG1fdmlldywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
VEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisKKyAgICBtX3dpbmRvdyA9IFdLVmlld0NyZWF0
ZUV2YXNPYmplY3QobV92aWV3LCBlY29yZV9ldmFzX2dldChtX2JhY2tpbmcpKTsKKworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3dpbmRvdywgIndlYnByb2Nlc3MsY3Jhc2hl
ZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0K
IAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBFdmFzX09iamVj
dCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKLQogICAgIC8vIFJl
bGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcs
IGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCiAgICAg
V0tSZWxlYXNlKG1fdmlldyk7CiAKLSAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJy
ZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQK
LSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3
KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCi0gICAgZXZhc19vYmplY3RfZGVsKGV2
YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X2RlbChtX3dpbmRvdyk7CiAKLSAgICBlY29yZV9l
dmFzX2ZyZWUobV93aW5kb3cpOworICAgIGVjb3JlX2V2YXNfZnJlZShtX2JhY2tpbmcpOwogICAg
IGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6
ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3Rf
cmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhlaWdodCk7CisgICAg
ZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdl
UmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CkBAIC05OCwyMyArOTcsMjMgQEAgV0tQ
YWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewotICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSwgdHJ1ZSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93aW5kb3cs
IHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFzLCAic3BhY2UiLCAic3Bh
Y2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywgInNw
YWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7Ci0gICAgRXZhcyog
ZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaG93KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2luZG93KTsKICAg
ICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNpZ25lZCB4LCB1bnNpZ25l
ZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAg
ZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIEV2YXMq
IGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwg
eSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19C
VVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMs
IEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3LmgKaW5kZXggMzdjZGZjZi4uODE3MjAyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oCkBAIC01NSw4ICs1NSwxMCBAQCB0eXBlZGVmIFdLVmlld1JlZiBQ
bGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Cit0
eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiB0eXBlZGVmIFdLVmlld1Jl
ZiBQbGF0Zm9ybVdLVmlldzsKLXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7Cit0
eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtQmFja2luZzsKK3R5cGVkZWYgRXZhc19PYmplY3Qq
IFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpAQCAtMTAwLDYgKzEw
Miw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1XS1ZpZXcgbV92aWV3OwogICAg
IFBsYXRmb3JtV2luZG93IG1fd2luZG93OworI2lmIFBMQVRGT1JNKEVGTCkKKyAgICBQbGF0Zm9y
bUJhY2tpbmcgbV9iYWNraW5nOworI2VuZGlmCiAgICAgYm9vbCBtX3dpbmRvd0lzS2V5OwogICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbV9vcHRpb25zOwogI2lmIFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2
ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IDEzOTIwZWMuLjNkOTQ0ZTZhIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAt
MzE1LDEzICszMTUsMTMgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGludCBidXR0b24pCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZl
bnQoY29uc3QgV1RSRXZlbnQmIGV2ZW50KQogewogICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0g
V1RSRXZlbnRUeXBlTW91c2VEb3duKQotICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVj
b3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2lu
ZG93KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycywgbV9jbGlja0NvdW50KTsKKyAg
ICAgICAgZGlzcGF0Y2hNb3VzZURvd25FdmVudChldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RD
b250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9u
LCBldmVudC5tb2RpZmllcnMsIG1fY2xpY2tDb3VudCk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZl
bnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlVXApCi0gICAgICAgIGRpc3BhdGNoTW91c2VVcEV2
ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtV2luZG93KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgICAgIGRp
c3BhdGNoTW91c2VVcEV2ZW50KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1v
ZGlmaWVycyk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1v
dXNlTW92ZSkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldCht
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGlj
X2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkp
OworICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi55KSk7
CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xs
QnkpCi0gICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5o
b3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7CisgICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxC
eUV2ZW50KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5ob3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQpAQCAtNDEy
LDcgKzQxMiw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBr
ZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsCiAgICAgaWYgKChzdHJsZW4oa2V5
TmFtZSkgPT0gMSkgJiYgKGtleU5hbWVbMF0gPj0gJ0EnICYmIGtleU5hbWVbMF0gPD0gJ1onKSkK
ICAgICAgICAgd2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKIAotICAg
IEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmll
dygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZh
c19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7
CiAKICAgICBpbnQgZXZlbnRJbmRleCA9IDA7CiAgICAgLy8gTWltaWMgdGhlIGVtYWNzIGN0cmwt
byBiaW5kaW5nIGJ5IGluc2VydGluZyBhIHBhcmFncmFwaApAQCAtNDM4LDcgKzQzOCw3IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQoRXdrX1RvdWNoX0V2ZW50X1R5cGUg
ZXZlbnRUeXBlKQogewogICAgIEFTU0VSVChtX3RvdWNoUG9pbnRzKTsKIAotICAgIEV2YXNfT2Jq
ZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBt
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpOwogICAgIGV3
a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRz
LCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldykpKTsK
IAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCw3ICs0OTAsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzIG1v
ZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmll
d0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1W
aWV3KCkpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKTsKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKytp
bmRleCkgewogICAgICAgICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IGMz
YmM4NTcuLjM1OTUwZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1Bs
YXRmb3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxh
dGZvcm1XZWJWaWV3RWZsLmNwcApAQCAtNTgsMzcgKzU4LDM0IEBAIFBsYXRmb3JtV2ViVmlldzo6
UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXAsCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZUZpeGVkTGF5b3V0S2V5KEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VGaXhlZExheW91dCIpKTsK
ICAgICBtX3VzaW5nRml4ZWRMYXlvdXQgPSBvcHRpb25zID8gV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG9wdGlvbnMs
IHVzZUZpeGVkTGF5b3V0S2V5LmdldCgpKSkpIDogZmFsc2U7CiAKLSAgICBtX3dpbmRvdyA9IGlu
aXRFY29yZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
OworICAgIG1fYmFja2luZyA9IGluaXRFY29yZUV2YXMoKTsKKworICAgIG1fdmlldyA9IFdLVmll
d0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fd2luZG93ID0gV0tWaWV3Q3JlYXRl
RXZhc09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZykpOwogCiAgICAgaWYg
KG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRo
Rml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAwLCA2MDApOwotICAgIH0g
ZWxzZQotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdy
b3VwKTsKKyAgICAgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQoV0tWaWV3R2V0UGFnZShtX3Zp
ZXcpLCB0cnVlKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCA4MDAsIDYw
MCk7CisgICAgfQogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3Qo
bV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1lX3Nl
dChtX3dpbmRvdywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkg
PSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiB9CiAKIFBsYXRmb3JtV2ViVmll
dzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJW
aWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMg
b2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVsZWFzZShtX3ZpZXcp
OwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhl
IEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMg
ZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGls
IHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICBl
dmFzX29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93
KTsKKyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdl
YlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAg
ZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhl
aWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0KTsK
IH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCkBAIC05OCwyNyArOTUsMjYg
QEAgV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3Ojpmb2N1cygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdo
dCByZWNlaXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2Yg
aXQgYXQgYWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkg
ZG9lcyBub3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUg
dGhlCiAgICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9j
dXMgdG8gZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgog
ICAgIGlmIChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJh
bWUocGFnZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGV2YXNPYmplY3QsIGZh
bHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoZXZhc09iamVjdCwgdHJ1ZSk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgZmFsc2UpOworICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgdHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZp
ZXc6OndpbmRvd0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAg
IGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KG1fYmFja2lu
ZywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoeCwg
eSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dG
cmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRv
dywgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFt
ZS5zaXplLmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX2JhY2tpbmcsIGZy
YW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6
ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hyb21lSW5wdXRGaWVs
ZCgpCkBAIC0xMzcsNyArMTMzLDcgQEAgV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1X
ZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKIHsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50
IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndp
ZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX2JhY2tpbmcsIDAs
IDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAw
KTsKIAogICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191841</attachid>
            <date>2013-03-06 15:04:01 -0800</date>
            <delta_ts>2013-03-06 15:13:36 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP7.patch</filename>
            <type>text/plain</type>
            <size>27570</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlZmUyZjE3Li4xYjg0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDMtMDYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZy
b20gRXdrVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNTkxCisKKyAgICAgICAgVG8gZXhwbGFpbiB0aGUgb3ZlcmFsbCBnb2FsOgorCisgICAg
ICAgIGEpIEJlIGFibGUgdG8gbWFpbnRhaW4gdGhlIEVGTCBjb252ZW5pZW5jZSBBUEkgaW4gdGhl
IFRpemVuIHByb2plY3QKKyAgICAgICAgICAgdG9nZXRoZXIgd2l0aCBvdXIgcGFydG5lcnMgKHBv
dGVudGlhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsCisgICAgICAgICAgIGJhY2stcG9ydGlu
ZykuIFRoaXMgQVBJIGlzIG9mZmVyZWQgdG8gIk9FTSdzIiBhbmQgcGFydG5lcnMgZm9yCisgICAg
ICAgICAgIGFwcGxpY2F0aW9uIGNyZWF0aW9uLgorCisgICAgICAgICAgIEl0IHdpbGwgYmUgYmFz
ZWQgb24gdG9wIG9mIHRoZSBXSzIgQyBBUEkgYW5kIHRoZSBFRkwgV0tWaWV3IGNsYXNzIG9ubHku
CisKKyAgICAgICAgYikgRm9yIHNwZWNpYWxpemVkIGludGVybmFsIHByb2R1Y3RzIHdlIHdhbnQg
dG8gdXNlIHRoZSBsb3ctbGV2ZWwKKyAgICAgICAgICAgV0syIEMgQVBJIGluc3RlYWQsIHdoaWxl
IHN0aWxsIGJlIGFibGUgdG8gaW50ZWdyYXRlIHdpdGggRUZMIChmb3IgVUkpLgorCisgICAgICAg
ICAgIFRoZSBXSzIgQyBBUEkgaXMgbG93LWxldmVsIGFuZCBtdWNoIG1vcmUgcG93ZXJmdWwgdGhh
dCB0aGUgRUZMCisgICAgICAgICAgIGNvbnZlbmllbmNlIEFQSSwgd2hpY2ggaXMgYWltZWQgYXQg
YXBwbGljYXRpb24gZGV2ZWxvcGVycy4KKworICAgICAgICAgICBOb3RlOiBTb21lIG9mIHRoZXNl
IHByb2R1Y3RzIG1pZ2h0IG5vdCBldmVuIHVzZSBFRkwsIGJ1dCBqdXN0IE9wZW5HTC4KKwogMjAx
My0wMy0wNiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbRUZMXVtXSzJdIENvbnZlcnQgZnJvbSBkZXZpY2UgdmlldyBzaXplIHRvIFVJIHZpZXcg
c2l6ZSBvbmx5IGluIEV3a1ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5jcHAKaW5kZXggYTI0OTgyMC4uYzVkMWExMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjgsMjQgKzI4LDE5IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0
ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRl
eHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwot
ICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmll
dygpKSk7CisgICAgcmV0dXJuIHRvQVBJKG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwg
dG9JbXBsKHBhZ2VHcm91cFJlZikpKTsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCitFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYgdmll
d1JlZiwgRXZhcyogZXZhcykKIHsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19CisgICAg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBXS1BhZ2VHZXRDb250ZXh0KFdLVmlld0dldFBhZ2Uo
dmlld1JlZikpOworICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/
IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250
ZXh0KCk7CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgRXdrVmlldyogZXdrVmlldyA9
IEV3a1ZpZXc6OmNyZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIGNvbnRleHQpOworCisgICAg
cmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXpl
KFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTM4LDExICsxMzMsNiBAQCB2b2lkIFdLVmlld0V4aXRG
dWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVmKQogI2VuZGlmCiB9CiAKLUV2YXNfT2JqZWN0KiBX
S1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKLX0KLQogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVT
bmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKICAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9F
d2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGE3MDliNDguLmE0OGNiZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtNTcsOSArNTcs
NyBAQCB0eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCiBlbnVtIHsg
a1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwogCi1XS19FWFBPUlQgV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOworV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9S
VCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKQEAgLTg4LDgg
Kzg2LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYp
OwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCi0v
LyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2Vl
cCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KLVdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3
R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworV0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdD
cmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyopOwogCiBXS19FWFBPUlQgV0tJbWFnZVJl
ZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGI1MmM1MmUuLmQzNDFmNGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMjgsMTEg
KzIyOCwxMSBAQCB2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6
aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YQogCiAvLyBFd2tWaWV3IGltcGxlbWVu
dGF0aW9uLgogCi1Fd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNz
UmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldzo6RXdrVmlldyhXZWJWaWV3KiB3ZWJWaWV3LCBF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KQog
ICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRv
cHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwo
cGFnZUdyb3VwKSwgdGhpcykpKQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3Bh
Z2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Bh
Z2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwg
bV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0yNjAsNiAr
MjYwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0
KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3aGVuIHBvc3NpYmxl
LgorICAgIHdlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFkb3B0
UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsKICAg
ICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRleHQ6
OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAgV0tQ
YWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlv
cik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91
cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdl
R3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwMywxMyArMzA0LDEyIEBA
IEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3
a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXZWJWaWV3KiB3
ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgRXZh
c19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNh
bnZhcywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBF
dmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNt
YXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsKIAogICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3Qp
OwpAQCAtMzIwLDE1ICszMjAsOSBAQCBFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNT
RVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMg
Y3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMg
MCwKLSAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFy
dERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBS
ZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KKyAgICBzbWFydERhdGEt
PnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0LCBjb250ZXh0KTsKIAotRXZh
c19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZh
cywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJl
aGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6
OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMmNjNmUyNy4uY2I3
NjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAt
OTcsMTcgKzk3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1
cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0
X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFy
dF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2JqZWN0
LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3a1Zp
ZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdhY3lC
ZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRpYyBF
dmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNt
YXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOwotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBj
YW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKTsKKyAgICBzdGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktpdDo6V2ViVmlldyosIEV2
YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBFdmFzX1NtYXJ0KiBz
bWFydCA9IDApOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MmKTsKIApAQCAtMjEzLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0g
ICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAg
RXdrVmlldyhXZWJLaXQ6OldlYlZpZXcqLCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBz
ZXREZXZpY2VTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA0ZjFhMTMxLi5mNTBhMjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04
NiwxOSArODYsMzUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0lu
dGVyZmFjZSgqYXBpKTsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKK0V2YXNf
T2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBFd2tWaWV3
OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0Q3JlYXRlKCksIDApOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3
Q3JlYXRlRXZhc09iamVjdCh3a1ZpZXcsIGNhbnZhcyk7CisKKyAgICByZXR1cm4gZXZhc09iamVj
dDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2Fu
dmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyBFdmFzX09iamVjdCogaW50ZXJuYWxf
YWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFdmFz
X1NtYXJ0KiBzbWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChj
YW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3a0Nv
bnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQp
OworCisgICAgLy8gRklYTUU6IENyZWF0ZSB1c2luZyBXS1ZpZXcgd2hlbiBFd2tWaWV3IGRvZXNu
J3QgZGVwZW5kIG9uIEV3a0NvbnRleHQuCisgICAgV2ViVmlldyogd2ViVmlldyA9IG5ldyBXZWJW
aWV3KHRvSW1wbChld2tDb250ZXh0LT53a0NvbnRleHQoKSksIDApOworICAgIFdLUGFnZVNldFVz
ZUZpeGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwgdHJ1ZSk7CisKKyAgICBFd2tWaWV3KiBl
d2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdlYlZpZXcsIGNhbnZhcywgZXdrQ29udGV4dCwgc21h
cnQpOworCisgICAgcmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAotRXZhc19PYmpl
Y3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc21h
cnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250
ZXh0KQoreworICAgIHJldHVybiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgY29u
dGV4dCwgc21hcnQpOworfQorCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4
dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBld2tf
dmlld19hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7
CisgICAgcmV0dXJuIGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCAv
KiBzbWFydCAqLyAwKTsKIH0KIAogRXdrX0NvbnRleHQqIGV3a192aWV3X2NvbnRleHRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCBmYTJlMDhkLi5mZDY3ODdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclBy
b3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1BhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTk4LDIwICsxMDIsMTggQEAgV2Vi
UGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdl
KCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgotICAgIFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7Ci0gICAgbV9p
bnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldCht
X2luc3BlY3RvcldpbmRvdyksIEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSwgdG9BUEko
aW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYg
KCFtX2luc3BlY3RvclZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgIFdLQ29udGV4dFJlZiB3
a0NvbnRleHQgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKKyAgICBXS1Bh
Z2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKTsKKyAg
ICBXS1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwgd2tQYWdlR3JvdXAp
OworCisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKIAotICAgIEV3a1ZpZXcq
IGV3a1ZpZXcgPSB0b0V3a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NFUlQoZXdrVmll
dyk7Ci0gICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5l
ZGoiKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KHdrVmll
dywgZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpKTsKIAotICAgIEV3a19TZXR0aW5n
cyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwotICAgIGV3a19zZXR0aW5nc19maWxl
X2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywgdHJ1ZSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nlc3NGcm9tRmlsZVVS
THNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgcmV0dXJuIGV3a1ZpZXctPnBh
Z2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmlld0dldFBhZ2Uod2tWaWV3KSk7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCAzM2ZkYjVkLi45ZWM3MjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTUxLDggKzUxLDggQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpXZWJWaWV3
KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBl
d2tWaWV3KQotICAgIDogbV9ld2tWaWV3KGV3a1ZpZXcpCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNv
bnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAgIDogbV9ld2tWaWV3
KDApCiAgICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdlR3JvdXAp
KQogewogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpAQCAtNjIsMTAgKzYyLDYgQEAgV2ViVmlldzo6
V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdr
VmlldyogZXdrVmlldykKICAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNF
bnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOwogICAg
IG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVy
c1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1
Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhldmFzT2JqZWN0KCkpOwotI2VuZGlmCiB9CiAK
IFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTc2LDYgKzcyLDE3IEBAIFdlYlZpZXc6On5XZWJWaWV3
KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKKy8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3Nz
aWJsZS4KK3ZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQoreworICAg
IG1fZXdrVmlldyA9IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAg
bV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmpl
Y3QoKSk7CisjZW5kaWYKKworfQorCiB2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQogewogICAg
IG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKQEAgLTI3OCwxMSArMjg1LDE5IEBAIGJvb2wg
V2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1
c2VkKCkKIHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Via2l0Lm9yZy9iLzExMDg3
NworICAgIGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gbV9ld2tWaWV3LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNp
YmxlKCkKIHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Via2l0Lm9yZy9iLzExMDg3
NworICAgIGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gbV9ld2tWaWV3LT5pc1Zpc2libGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaAppbmRleCA5ZjVmNmY0Li40ZmU2Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuaApAQCAtNTAsOSArNTAsMTIgQEAgY2xhc3MgV2ViVmlldyA6IHB1Ymxp
YyBBUElPYmplY3QsIHB1YmxpYyBQYWdlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBX
ZWJQYWdlR3JvdXAqLCBFd2tWaWV3Kik7CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFn
ZUdyb3VwKik7CiAgICAgdmlydHVhbCB+V2ViVmlldygpOwogCisgICAgLy8gRklYTUU6IFJlbW92
ZSB3aGVuIHBvc3NpYmxlLgorICAgIHZvaWQgc2V0RXdrVmlldyhFd2tWaWV3Kik7CisKICAgICB2
b2lkIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24o
ZG91YmxlIHR4LCBkb3VibGUgdHkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgK
aW5kZXggYjU2YzA5Ni4uOTY5MTg5MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmll
dy5oCkBAIC00OCw4ICs0OCwxMCBAQCB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsK
IHR5cGVkZWYgR3RrV2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkK
IHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Cit0eXBlZGVmIHN0cnVjdCBf
RXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmll
dzsKLXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7Cit0eXBlZGVmIEVjb3JlX0V2
YXMqIFBsYXRmb3JtQmFja2luZzsKK3R5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV2luZG93
OwogI2VsaWYgUExBVEZPUk0oUVQpCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFRdWlja1Zp
ZXc7CkBAIC05Myw2ICs5NSw5IEBAIHByaXZhdGU6CiAKICAgICBQbGF0Zm9ybVdLVmlldyBtX3Zp
ZXc7CiAgICAgUGxhdGZvcm1XaW5kb3cgbV93aW5kb3c7CisjaWYgUExBVEZPUk0oRUZMKQorICAg
IFBsYXRmb3JtQmFja2luZyBtX2JhY2tpbmc7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICBXaW5kb3dNZXNzYWdlT2JzZXJ2ZXIqIG1fcGFyZW50V2luZG93TWVzc2FnZU9ic2VydmVy
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggOGEw
MzVmMy4uMTY1NDk1ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCkBAIC02MywzMiArNjMsMzEgQEAgc3RhdGljIHZvaWQgb25XZWJQcm9jZXNzQ3Jhc2hl
ZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiAKIFBsYXRmb3JtV2ViVmll
dzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAg
RXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBtX3ZpZXcgPSBXS1Zp
ZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKLSAgICBld2tfdmlld190
aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQu
ZWRqIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNP
YmplY3QobV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQs
IDApOworICAgIG1fYmFja2luZyA9IGluaXRFY29yZUV2YXMoKTsKKworICAgIG1fdmlldyA9IFdL
Vmlld0NyZWF0ZShjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIFdLVmlld1NldFRoZW1l
UGF0aChtX3ZpZXcsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRIRU1FX0RJUiAiL2Rl
ZmF1bHQuZWRqIikpOworCisgICAgbV93aW5kb3cgPSBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KG1f
dmlldywgZWNvcmVfZXZhc19nZXQobV9iYWNraW5nKSk7CisKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQobV93aW5kb3csICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nl
c3NDcmFzaGVkLCAwKTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7CiB9CiAKIFBsYXRmb3JtV2Vi
Vmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qg
PSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxlYXNlIGZpcnN0LiBX
ZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93
bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVsZWFzZShtX3Zp
ZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMg
dGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBp
dHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVu
dGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAg
ICBldmFzX29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVlKG1fd2lu
ZG93KTsKKyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKICAgICBlY29yZV9ldmFzX3No
dXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3dpbmRvdywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdl
YlZpZXc6OnBhZ2UoKSBjb25zdApAQCAtOTgsMjMgKzk3LDIzIEBAIFdLUGFnZVJlZiBQbGF0Zm9y
bVdlYlZpZXc6OnBhZ2UoKSBjb25zdAogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVT
cGFjZWJhcktleVByZXNzKCkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93
aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1f
dmlldyksIHRydWUpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dp
bmRvdyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCB0cnVlKTsKICAgICBl
dmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAw
LCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIs
ICIgIiwgMCwgMSwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNl
TW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9l
dmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldykpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dp
bmRvdyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBF
dmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3No
b3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQobV93aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5kb3cp
OwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAg
IGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAs
IDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9O
T05FLCAwLCAwKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4
IDM3Y2RmY2YuLjgxNzIwMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZp
ZXcuaApAQCAtNTUsOCArNTUsMTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7
CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwp
CiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwordHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1Zp
ZXc7Ci10eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwordHlwZWRlZiBFY29yZV9F
dmFzKiBQbGF0Zm9ybUJhY2tpbmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdpbmRv
dzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTEwMCw2ICsxMDIsOSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFBsYXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRv
dyBtX3dpbmRvdzsKKyNpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFj
a2luZzsKKyNlbmRpZgogICAgIGJvb2wgbV93aW5kb3dJc0tleTsKICAgICBXS1JldGFpblB0cjxX
S0RpY3Rpb25hcnlSZWY+IG1fb3B0aW9uczsKICNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JN
KFFUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQ
cm94eUVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5
RWZsLmNwcAppbmRleCAxMzkyMGVjLi4wMGU3ZDFmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtMzE0LDE0ICszMTQsMTYg
QEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBi
dXR0b24pCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBXVFJF
dmVudCYgZXZlbnQpCiB7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworCiAgICAg
aWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZURvd24pCi0gICAgICAgIGRp
c3BhdGNoTW91c2VEb3duRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZp
ZXJzLCBtX2NsaWNrQ291bnQpOworICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGV2YXMs
IGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQpOwogICAgIGVsc2Ug
aWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVVwKQotICAgICAgICBkaXNw
YXRjaE1vdXNlVXBFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMp
OworICAgICAgICBkaXNwYXRjaE1vdXNlVXBFdmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50
Lm1vZGlmaWVycyk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlw
ZU1vdXNlTW92ZSkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dl
dChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3Rh
dGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24u
eSkpOworICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGV2YXMsIHN0YXRpY19jYXN0PGlu
dD4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKICAgICBl
bHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSkKLSAg
ICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50Lmhvcml6b250
YWwsIGV2ZW50LnZlcnRpY2FsKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQo
ZXZhcywgZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOwogfQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKQEAgLTQxMiw3ICs0MTQsNyBAQCB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50TW9k
aWZpZXJzIHdrTW9kaWZpZXJzLAogICAgIGlmICgoc3RybGVuKGtleU5hbWUpID09IDEpICYmIChr
ZXlOYW1lWzBdID49ICdBJyAmJiBrZXlOYW1lWzBdIDw9ICdaJykpCiAgICAgICAgIHdrTW9kaWZp
ZXJzIHw9IGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXk7CiAKLSAgICBFdmFzKiBldmFzID0gZWNv
cmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5k
b3coKSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOwogCiAgICAgaW50IGV2ZW50
SW5kZXggPSAwOwogICAgIC8vIE1pbWljIHRoZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBpbnNl
cnRpbmcgYSBwYXJhZ3JhcGgKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAg
ICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdL
Vmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1WaWV3KCkpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKTsKICAgICBld2tfdmlld19mZWVkX3RvdWNo
X2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9kaWZp
ZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xpc3Qq
IGxpc3Q7CkBAIC00OTAsNyArNDkyLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVU
b3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFi
bGUpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFz
X09iamVjdCogZXdrVmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtV2luZG93KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6
ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAg
aWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCBjM2JjODU3Li4zNTk1MGQxIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5j
cHAKQEAgLTU4LDM3ICs1OCwzNCBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGaXhlZExheW91dEtleShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRml4ZWRMYXlvdXQiKSk7CiAgICAgbV91c2luZ0ZpeGVk
TGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExheW91dEtl
eS5nZXQoKSkpKSA6IGZhbHNlOwogCi0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0g
ICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBtX2JhY2tpbmcg
PSBpbml0RWNvcmVFdmFzKCk7CisKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29udGV4dCwg
cGFnZUdyb3VwKTsKKyAgICBtX3dpbmRvdyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3QobV92aWV3
LCBlY29yZV9ldmFzX2dldChtX2JhY2tpbmcpKTsKIAogICAgIGlmIChtX3VzaW5nRml4ZWRMYXlv
dXQpIHsKLSAgICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMs
IGNvbnRleHQsIHBhZ2VHcm91cCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIDgwMCwgNjAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV92
aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgICAgIFdL
UGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dldFBhZ2UobV92aWV3KSwgdHJ1ZSk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dpbmRvdywgODAwLCA2MDApOworICAgIH0KIAotICAg
IGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJ
UiIvZGVmYXVsdC5lZGoiKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93aW5kb3csIFRIRU1F
X0RJUiIvZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZh
c19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIGV2YXNfb2Jq
ZWN0X3Nob3cobV93aW5kb3cpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZp
ZXcoKQogewotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpOwotCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxp
dmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdl
IHByb3h5IHJlZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsKIAotICAgIC8vIEZJWE1F
OiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28g
d2UgaGF2ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tW
aWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4K
LSAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3RfZGVsKG1f
d2luZG93KTsKIAotICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CisgICAgZWNvcmVfZXZh
c19mcmVlKG1fYmFja2luZyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShtX3dpbmRvdywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQ
bGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQpAQCAtOTgsMjcgKzk1LDI2IEBAIFdLUGFnZVJlZiBQbGF0
Zm9ybVdlYlZpZXc6OnBhZ2UoKQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogewot
ICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
OwogICAgIC8vIEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBm
cm9tIEphdmFTY3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8v
IChXZWJDb3JlU3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55
IG5vdGlmaWNhdGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3Vz
IGZyb20gdGhlIHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0
X2ZvY3VzX3NldCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KICAgICBpZiAoV0tQYWdlR2V0
Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAg
ICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChldmFzT2JqZWN0LCBmYWxzZSk7Ci0gICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KGV2YXNPYmplY3QsIHRydWUpOworICAgICAgICBldmFzX29iamVjdF9m
b2N1c19zZXQobV93aW5kb3csIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93
aW5kb3csIHRydWUpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgp
CiB7CiAgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBlY29yZV9ldmFzX3JlcXVl
c3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
ZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX2JhY2tpbmcsICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0KTsKIAogICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1l
KQogewotICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54
LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwor
ICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV9iYWNraW5nLCBmcmFtZS5vcmlnaW4ueCwgZnJh
bWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTM3LDcgKzEz
Myw3IEBAIFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25h
cHNob3RJbWFnZSgpCiB7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNv
cmVfZXZhc19nZW9tZXRyeV9nZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7Cisg
ICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQobV9iYWNraW5nLCAwLCAwLCAmd2lkdGgsICZoZWln
aHQpOwogICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKICAgICByZXR1cm4g
YWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191844</attachid>
            <date>2013-03-06 15:13:36 -0800</date>
            <delta_ts>2013-03-07 02:17:05 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>WIP8.patch</filename>
            <type>text/plain</type>
            <size>27926</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlZmUyZjE3Li4xYjg0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDMtMDYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZy
b20gRXdrVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNTkxCisKKyAgICAgICAgVG8gZXhwbGFpbiB0aGUgb3ZlcmFsbCBnb2FsOgorCisgICAg
ICAgIGEpIEJlIGFibGUgdG8gbWFpbnRhaW4gdGhlIEVGTCBjb252ZW5pZW5jZSBBUEkgaW4gdGhl
IFRpemVuIHByb2plY3QKKyAgICAgICAgICAgdG9nZXRoZXIgd2l0aCBvdXIgcGFydG5lcnMgKHBv
dGVudGlhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsCisgICAgICAgICAgIGJhY2stcG9ydGlu
ZykuIFRoaXMgQVBJIGlzIG9mZmVyZWQgdG8gIk9FTSdzIiBhbmQgcGFydG5lcnMgZm9yCisgICAg
ICAgICAgIGFwcGxpY2F0aW9uIGNyZWF0aW9uLgorCisgICAgICAgICAgIEl0IHdpbGwgYmUgYmFz
ZWQgb24gdG9wIG9mIHRoZSBXSzIgQyBBUEkgYW5kIHRoZSBFRkwgV0tWaWV3IGNsYXNzIG9ubHku
CisKKyAgICAgICAgYikgRm9yIHNwZWNpYWxpemVkIGludGVybmFsIHByb2R1Y3RzIHdlIHdhbnQg
dG8gdXNlIHRoZSBsb3ctbGV2ZWwKKyAgICAgICAgICAgV0syIEMgQVBJIGluc3RlYWQsIHdoaWxl
IHN0aWxsIGJlIGFibGUgdG8gaW50ZWdyYXRlIHdpdGggRUZMIChmb3IgVUkpLgorCisgICAgICAg
ICAgIFRoZSBXSzIgQyBBUEkgaXMgbG93LWxldmVsIGFuZCBtdWNoIG1vcmUgcG93ZXJmdWwgdGhh
dCB0aGUgRUZMCisgICAgICAgICAgIGNvbnZlbmllbmNlIEFQSSwgd2hpY2ggaXMgYWltZWQgYXQg
YXBwbGljYXRpb24gZGV2ZWxvcGVycy4KKworICAgICAgICAgICBOb3RlOiBTb21lIG9mIHRoZXNl
IHByb2R1Y3RzIG1pZ2h0IG5vdCBldmVuIHVzZSBFRkwsIGJ1dCBqdXN0IE9wZW5HTC4KKwogMjAx
My0wMy0wNiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbRUZMXVtXSzJdIENvbnZlcnQgZnJvbSBkZXZpY2UgdmlldyBzaXplIHRvIFVJIHZpZXcg
c2l6ZSBvbmx5IGluIEV3a1ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5jcHAKaW5kZXggYTI0OTgyMC4uYzVkMWExMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjgsMjQgKzI4LDE5IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0
ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRl
eHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwot
ICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmll
dygpKSk7CisgICAgcmV0dXJuIHRvQVBJKG5ldyBXZWJWaWV3KHRvSW1wbChjb250ZXh0UmVmKSwg
dG9JbXBsKHBhZ2VHcm91cFJlZikpKTsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCitFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYgdmll
d1JlZiwgRXZhcyogZXZhcykKIHsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19CisgICAg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBXS1BhZ2VHZXRDb250ZXh0KFdLVmlld0dldFBhZ2Uo
dmlld1JlZikpOworICAgIFJlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0ID0gY29udGV4dFJlZiA/
IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250
ZXh0KCk7CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
KQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgRXdrVmlldyogZXdrVmlldyA9
IEV3a1ZpZXc6OmNyZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIGNvbnRleHQpOworCisgICAg
cmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXpl
KFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTM4LDExICsxMzMsNiBAQCB2b2lkIFdLVmlld0V4aXRG
dWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVmKQogI2VuZGlmCiB9CiAKLUV2YXNfT2JqZWN0KiBX
S1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKLX0KLQogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVT
bmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKICAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9F
d2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGE3MDliNDguLmE0OGNiZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtNTcsOSArNTcs
NyBAQCB0eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCiBlbnVtIHsg
a1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwogCi1XS19FWFBPUlQgV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXApOworV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9S
VCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmll
d1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKQEAgLTg4LDgg
Kzg2LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYp
OwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCi0v
LyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2Vl
cCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KLVdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3
R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworV0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdD
cmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyopOwogCiBXS19FWFBPUlQgV0tJbWFnZVJl
ZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGI1MmM1MmUuLmQzNDFmNGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMjgsMTEg
KzIyOCwxMSBAQCB2b2lkIEV3a1ZpZXdFdmVudEhhbmRsZXI8RVZBU19DQUxMQkFDS19ISURFPjo6
aGFuZGxlRXZlbnQodm9pZCogZGF0YSwgRXZhcyosIEV2YQogCiAvLyBFd2tWaWV3IGltcGxlbWVu
dGF0aW9uLgogCi1Fd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNz
UmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldzo6RXdrVmlldyhXZWJWaWV3KiB3ZWJWaWV3LCBF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KQog
ICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRv
cHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwo
cGFnZUdyb3VwKSwgdGhpcykpKQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3Bh
Z2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Bh
Z2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwg
bV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0yNjAsNiAr
MjYwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0
KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIFJlbW92ZSB3aGVuIHBvc3NpYmxl
LgorICAgIHdlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFkb3B0
UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsKICAg
ICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRleHQ6
OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAgV0tQ
YWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlv
cik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91
cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdl
R3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwMywxMyArMzA0LDEyIEBA
IEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3
a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXZWJWaWV3KiB3
ZWJWaWV3LCBFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgRXZh
c19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNh
bnZhcywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBF
dmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNt
YXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsKIAogICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3Qp
OwpAQCAtMzIwLDE1ICszMjAsOSBAQCBFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNT
RVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMg
Y3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMg
MCwKLSAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KLSAgICBzbWFy
dERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCBwYWdlR3JvdXBS
ZWYsIGJlaGF2aW9yKTsKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KKyAgICBzbWFydERhdGEt
PnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0LCBjb250ZXh0KTsKIAotRXZh
c19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZh
cywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJl
aGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6
OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMmNjNmUyNy4uY2I3
NjZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAt
OTcsMTcgKzk3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1
cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0
X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFy
dF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2JqZWN0
LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3a1Zp
ZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdhY3lC
ZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRpYyBF
dmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNt
YXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVo
YXZpb3IpOwotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBj
YW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKTsKKyAgICBzdGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktpdDo6V2ViVmlldyosIEV2
YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBFdmFzX1NtYXJ0KiBz
bWFydCA9IDApOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MmKTsKIApAQCAtMjEzLDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0g
ICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAg
RXdrVmlldyhXZWJLaXQ6OldlYlZpZXcqLCBFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0KTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBz
ZXREZXZpY2VTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA0ZjFhMTMxLi5mNTBhMjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04
NiwxOSArODYsMzUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0lu
dGVyZmFjZSgqYXBpKTsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKK0V2YXNf
T2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBFd2tWaWV3
OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0Q3JlYXRlKCksIDApOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3
Q3JlYXRlRXZhc09iamVjdCh3a1ZpZXcsIGNhbnZhcyk7CisKKyAgICByZXR1cm4gZXZhc09iamVj
dDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2Fu
dmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyBFdmFzX09iamVjdCogaW50ZXJuYWxf
YWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFdmFz
X1NtYXJ0KiBzbWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChj
YW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3a0Nv
bnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQp
OworCisgICAgLy8gRklYTUU6IENyZWF0ZSB1c2luZyBXS1ZpZXcgd2hlbiBFd2tWaWV3IGRvZXNu
J3QgZGVwZW5kIG9uIEV3a0NvbnRleHQuCisgICAgV2ViVmlldyogd2ViVmlldyA9IG5ldyBXZWJW
aWV3KHRvSW1wbChld2tDb250ZXh0LT53a0NvbnRleHQoKSksIDApOworICAgIFdLUGFnZVNldFVz
ZUZpeGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwgdHJ1ZSk7CisKKyAgICBFd2tWaWV3KiBl
d2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdlYlZpZXcsIGNhbnZhcywgZXdrQ29udGV4dCwgc21h
cnQpOworCisgICAgcmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIH0KIAotRXZhc19PYmpl
Y3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc21h
cnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250
ZXh0KQoreworICAgIHJldHVybiBpbnRlcm5hbF9hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgY29u
dGV4dCwgc21hcnQpOworfQorCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4
dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBld2tf
dmlld19hZGRfd2l0aF9jb250ZXh0KGNhbnZhcywgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7
CisgICAgcmV0dXJuIGludGVybmFsX2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBjb250ZXh0LCAv
KiBzbWFydCAqLyAwKTsKIH0KIAogRXdrX0NvbnRleHQqIGV3a192aWV3X2NvbnRleHRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCBmYTJlMDhkLi43ZDRkMTM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclBy
b3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS1BhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTk4LDIwICsxMDIsMTkgQEAgV2Vi
UGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdl
KCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgotICAgIFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7Ci0gICAgbV9p
bnNwZWN0b3JWaWV3ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldCht
X2luc3BlY3RvcldpbmRvdyksIEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSwgdG9BUEko
aW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYg
KCFtX2luc3BlY3RvclZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgIFdLQ29udGV4dFJlZiB3
a0NvbnRleHQgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKKyAgICBXS1Bh
Z2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKTsKKyAg
ICBXS1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwgd2tQYWdlR3JvdXAp
OworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7
CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldywgd2tUaGVtZS5nZXQoKSk7CiAKLSAgICBF
d2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgQVNTRVJU
KGV3a1ZpZXcpOwotICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2Rl
ZmF1bHQuZWRqIik7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gV0tWaWV3Q3JlYXRlRXZhc09iamVj
dCh3a1ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSk7CiAKLSAgICBFd2tf
U2V0dGluZ3MqIHNldHRpbmdzID0gZXdrVmlldy0+c2V0dGluZ3MoKTsKLSAgICBld2tfc2V0dGlu
Z3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0dGluZ3MsIHRydWUp
OworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJl
ZmVyZW5jZXMod2tQYWdlR3JvdXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxlQWNjZXNzRnJv
bUZpbGVVUkxzQWxsb3dlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIHJldHVybiBld2tW
aWV3LT5wYWdlKCk7CisgICAgcmV0dXJuIHRvSW1wbChXS1ZpZXdHZXRQYWdlKHdrVmlldykpOwog
fQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW4oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKaW5kZXggMzNmZGI1ZC4uOWVjNzI5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC01MSw4ICs1MSw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViVmlldzo6
V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdr
VmlldyogZXdrVmlldykKLSAgICA6IG1fZXdrVmlldyhld2tWaWV3KQorV2ViVmlldzo6V2ViVmll
dyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IG1f
ZXdrVmlldygwKQogICAgICwgbV9wYWdlKGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFn
ZUdyb3VwKSkKIHsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKQEAgLTYyLDEwICs2Miw2IEBAIFdl
YlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3Jv
dXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCiAgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdW
aXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEi
KTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGlu
Z0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwogICAgIG1fcGFnZS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShz
aG93RGVidWdWaXN1YWxzKTsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX3Bh
Z2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXZhc09iamVjdCgpKTsKLSNlbmRp
ZgogfQogCiBXZWJWaWV3Ojp+V2ViVmlldygpCkBAIC03Niw2ICs3MiwxNyBAQCBXZWJWaWV3Ojp+
V2ViVmlldygpCiAgICAgbV9wYWdlLT5jbG9zZSgpOwogfQogCisvLyBGSVhNRTogUmVtb3ZlIHdo
ZW4gcG9zc2libGUuCit2b2lkIFdlYlZpZXc6OnNldEV3a1ZpZXcoRXdrVmlldyogZXdrVmlldykK
K3sKKyAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhld2tWaWV3LT5l
dmFzT2JqZWN0KCkpOworI2VuZGlmCisKK30KKwogdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkK
IHsKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CkBAIC0yNzgsMTEgKzI4NSwxOSBA
QCBib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCiAKIGJvb2wgV2ViVmlldzo6aXNW
aWV3Rm9jdXNlZCgpCiB7CisgICAgLy8gRklYTUU6IFVubmVlZGVkIGFmdGVyIHdlYmtpdC5vcmcv
Yi8xMTA4NzcKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgcmV0dXJuIG1fZXdrVmlldy0+aXNGb2N1c2VkKCk7CiB9CiAKIGJvb2wgV2ViVmlldzo6aXNW
aWV3VmlzaWJsZSgpCiB7CisgICAgLy8gRklYTUU6IFVubmVlZGVkIGFmdGVyIHdlYmtpdC5vcmcv
Yi8xMTA4NzcKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgcmV0dXJuIG1fZXdrVmlldy0+aXNWaXNpYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmgKaW5kZXggOWY1ZjZmNC4uNGZlNjc5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTUwLDkgKzUwLDEyIEBAIGNsYXNzIFdlYlZpZXcg
OiBwdWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMgUGFnZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVWaWV3OwogCi0gICAgV2ViVmlldyhXZWJDb250
ZXh0KiwgV2ViUGFnZUdyb3VwKiwgRXdrVmlldyopOworICAgIFdlYlZpZXcoV2ViQ29udGV4dCos
IFdlYlBhZ2VHcm91cCopOwogICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIC8vIEZJWE1F
OiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOwor
CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5z
bGF0aW9uKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2Vi
Vmlldy5oCmluZGV4IGI1NmMwOTYuLjk2OTE4OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVdlYlZpZXcuaApAQCAtNDgsOCArNDgsMTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1X
S1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCAqUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9S
TShFRkwpCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwordHlwZWRlZiBz
dHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZv
cm1XS1ZpZXc7Ci10eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwordHlwZWRlZiBF
Y29yZV9FdmFzKiBQbGF0Zm9ybUJhY2tpbmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9y
bVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKFFUKQogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBR
UXVpY2tWaWV3OwpAQCAtOTMsNiArOTUsOSBAQCBwcml2YXRlOgogCiAgICAgUGxhdGZvcm1XS1Zp
ZXcgbV92aWV3OwogICAgIFBsYXRmb3JtV2luZG93IG1fd2luZG93OworI2lmIFBMQVRGT1JNKEVG
TCkKKyAgICBQbGF0Zm9ybUJhY2tpbmcgbV9iYWNraW5nOworI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgV2luZG93TWVzc2FnZU9ic2VydmVyKiBtX3BhcmVudFdpbmRvd01lc3NhZ2VP
YnNlcnZlcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2Vi
Vmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCmlu
ZGV4IDhhMDM1ZjMuLjgwZjgwZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZs
L1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1XZWJWaWV3LmNwcApAQCAtMjgsNyArMjgsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgogCiAjaW5jbHVkZSAiRVdlYktpdDIuaCIKLSNpbmNsdWRlICJXZWJLaXQyL1dLQVBJQ2Fz
dC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S1JldGFpblB0ci5oPgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KIAogZXh0ZXJuIGJvb2wgdXNl
WDExV2luZG93OwpAQCAtNjMsMzIgKzY0LDMzIEBAIHN0YXRpYyB2b2lkIG9uV2ViUHJvY2Vzc0Ny
YXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogCiBQbGF0Zm9ybVdl
YlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwot
ICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0g
V0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci0gICAgZXdrX3Zp
ZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZh
dWx0LmVkaiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyksICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFz
aGVkLCAwKTsKKyAgICBtX2JhY2tpbmcgPSBpbml0RWNvcmVFdmFzKCk7CisKKyAgICBtX3ZpZXcg
PSBXS1ZpZXdDcmVhdGUoY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhUSEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBh
dGgobV92aWV3LCB3a1RoZW1lLmdldCgpKTsKKworICAgIG1fd2luZG93ID0gV0tWaWV3Q3JlYXRl
RXZhc09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZykpOworCisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fd2luZG93LCAid2VicHJvY2VzcyxjcmFzaGVk
Iiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8oNjAwLCA4MDApOwogfQog
CiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIEV2YXNfT2JqZWN0
KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwotCiAgICAgLy8gUmVs
ZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywg
YXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KICAgICBX
S1JlbGVhc2UobV92aWV3KTsKIAotICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJl
bnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAot
ICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcp
IHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KLSAgICBldmFzX29iamVjdF9kZWwoZXZh
c09iamVjdCk7CisgICAgZXZhc19vYmplY3RfZGVsKG1fd2luZG93KTsKIAotICAgIGVjb3JlX2V2
YXNfZnJlZShtX3dpbmRvdyk7CisgICAgZWNvcmVfZXZhc19mcmVlKG1fYmFja2luZyk7CiAgICAg
ZWNvcmVfZXZhc19zaHV0ZG93bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXpl
VG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9y
ZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBl
dmFzX29iamVjdF9yZXNpemUobV93aW5kb3csIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VS
ZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKQEAgLTk4LDIzICsxMDAsMjMgQEAgV0tQ
YWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewotICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSwgdHJ1ZSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93aW5kb3cs
IHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFzLCAic3BhY2UiLCAic3Bh
Y2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywgInNw
YWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7Ci0gICAgRXZhcyog
ZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaG93KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2luZG93KTsKICAg
ICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNpZ25lZCB4LCB1bnNpZ25l
ZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAg
ZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIEV2YXMq
IGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwg
eSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19C
VVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMs
IEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3LmgKaW5kZXggMzdjZGZjZi4uODE3MjAyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oCkBAIC01NSw4ICs1NSwxMCBAQCB0eXBlZGVmIFdLVmlld1JlZiBQ
bGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Cit0
eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiB0eXBlZGVmIFdLVmlld1Jl
ZiBQbGF0Zm9ybVdLVmlldzsKLXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7Cit0
eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtQmFja2luZzsKK3R5cGVkZWYgRXZhc19PYmplY3Qq
IFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpAQCAtMTAwLDYgKzEw
Miw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1XS1ZpZXcgbV92aWV3OwogICAg
IFBsYXRmb3JtV2luZG93IG1fd2luZG93OworI2lmIFBMQVRGT1JNKEVGTCkKKyAgICBQbGF0Zm9y
bUJhY2tpbmcgbV9iYWNraW5nOworI2VuZGlmCiAgICAgYm9vbCBtX3dpbmRvd0lzS2V5OwogICAg
IFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbV9vcHRpb25zOwogI2lmIFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2
ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IDEzOTIwZWMuLjAwZTdkMWYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0z
MTQsMTQgKzMxNCwxNiBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRG
b3JCdXR0b24oaW50IGJ1dHRvbikKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpkaXNwYXRjaEV2
ZW50KGNvbnN0IFdUUkV2ZW50JiBldmVudCkKIHsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmpl
Y3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5k
b3coKSk7CisKICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlRG93
bikKLSAgICAgICAgZGlzcGF0Y2hNb3VzZURvd25FdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RD
b250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9u
LCBldmVudC5tb2RpZmllcnMsIG1fY2xpY2tDb3VudCk7CisgICAgICAgIGRpc3BhdGNoTW91c2VE
b3duRXZlbnQoZXZhcywgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMsIG1fY2xpY2tDb3Vu
dCk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlVXAp
Ci0gICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5idXR0b24sIGV2
ZW50Lm1vZGlmaWVycyk7CisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGV2YXMsIGV2ZW50
LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzKTsKICAgICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUg
PT0gV1RSRXZlbnRUeXBlTW91c2VNb3ZlKQotICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50
KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
V2luZG93KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGlu
dD4obV9wb3NpdGlvbi55KSk7CisgICAgICAgIGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoZXZhcywg
c3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRp
b24ueSkpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3Vz
ZVNjcm9sbEJ5KQotICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChlY29yZV9ldmFz
X2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwg
ZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOworICAgICAgICBkaXNwYXRjaE1vdXNl
U2Nyb2xsQnlFdmVudChldmFzLCBldmVudC5ob3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7CiB9
CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQpAQCAtNDEyLDcg
KzQxNCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlS
ZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsCiAgICAgaWYgKChzdHJsZW4oa2V5TmFt
ZSkgPT0gMSkgJiYgKGtleU5hbWVbMF0gPj0gJ0EnICYmIGtleU5hbWVbMF0gPD0gJ1onKSkKICAg
ICAgICAgd2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKIAotICAgIEV2
YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7CiAK
ICAgICBpbnQgZXZlbnRJbmRleCA9IDA7CiAgICAgLy8gTWltaWMgdGhlIGVtYWNzIGN0cmwtbyBi
aW5kaW5nIGJ5IGluc2VydGluZyBhIHBhcmFncmFwaApAQCAtNDM4LDcgKzQ0MCw3IEBAIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQoRXdrX1RvdWNoX0V2ZW50X1R5cGUgZXZl
bnRUeXBlKQogewogICAgIEFTU0VSVChtX3RvdWNoUG9pbnRzKTsKIAotICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpOwogICAgIGV3a192
aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBl
dmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldykpKTsKIAog
ICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCw3ICs0OTIsNyBAQCB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVyLCBib29sIGVuYWJsZSkKIHsKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dl
dEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKTsKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKytpbmRl
eCkgewogICAgICAgICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IGMzYmM4
NTcuLjM1OTUwZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRm
b3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZv
cm1XZWJWaWV3RWZsLmNwcApAQCAtNTgsMzcgKzU4LDM0IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXAsCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZUZpeGVkTGF5b3V0S2V5KEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VGaXhlZExheW91dCIpKTsKICAg
ICBtX3VzaW5nRml4ZWRMYXlvdXQgPSBvcHRpb25zID8gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG9wdGlvbnMsIHVz
ZUZpeGVkTGF5b3V0S2V5LmdldCgpKSkpIDogZmFsc2U7CiAKLSAgICBtX3dpbmRvdyA9IGluaXRF
Y29yZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwor
ICAgIG1fYmFja2luZyA9IGluaXRFY29yZUV2YXMoKTsKKworICAgIG1fdmlldyA9IFdLVmlld0Ny
ZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fd2luZG93ID0gV0tWaWV3Q3JlYXRlRXZh
c09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZykpOwogCiAgICAgaWYgKG1f
dXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4
ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
cmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAwLCA2MDApOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3Vw
KTsKKyAgICAgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQoV0tWaWV3R2V0UGFnZShtX3ZpZXcp
LCB0cnVlKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCA4MDAsIDYwMCk7
CisgICAgfQogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1lX3NldCht
X3dpbmRvdywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBm
YWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6
flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1Zp
ZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3
IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMgb2Jq
ZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVsZWFzZShtX3ZpZXcpOwog
Ci0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2
YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVw
ZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRo
aXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICBldmFz
X29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsK
KyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZp
ZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZh
c19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhlaWdo
dCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCkBAIC05OCwyNyArOTUsMjYgQEAg
V0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3
Ojpmb2N1cygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCBy
ZWNlaXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQg
YXQgYWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9l
cyBub3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhl
CiAgICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMg
dG8gZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgogICAg
IGlmIChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUo
cGFnZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGV2YXNPYmplY3QsIGZhbHNl
KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoZXZhc09iamVjdCwgdHJ1ZSk7CisgICAgICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgZmFsc2UpOworICAgIGV2YXNfb2JqZWN0
X2ZvY3VzX3NldChtX3dpbmRvdywgdHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6
OndpbmRvd0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIGVj
b3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAm
aGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KG1fYmFja2luZywg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFt
ZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywg
ZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5z
aXplLmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX2JhY2tpbmcsIGZyYW1l
Lm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5o
ZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hyb21lSW5wdXRGaWVsZCgp
CkBAIC0xMzcsNyArMTMzLDcgQEAgV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJW
aWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKIHsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhl
aWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX2JhY2tpbmcsIDAsIDAs
ICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsK
IAogICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191955</attachid>
            <date>2013-03-07 02:17:05 -0800</date>
            <delta_ts>2013-03-07 14:14:02 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>hest.patch</filename>
            <type>text/plain</type>
            <size>28427</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlZmUyZjE3Li4xYjg0MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMDMtMDYgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZy
b20gRXdrVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNTkxCisKKyAgICAgICAgVG8gZXhwbGFpbiB0aGUgb3ZlcmFsbCBnb2FsOgorCisgICAg
ICAgIGEpIEJlIGFibGUgdG8gbWFpbnRhaW4gdGhlIEVGTCBjb252ZW5pZW5jZSBBUEkgaW4gdGhl
IFRpemVuIHByb2plY3QKKyAgICAgICAgICAgdG9nZXRoZXIgd2l0aCBvdXIgcGFydG5lcnMgKHBv
dGVudGlhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsCisgICAgICAgICAgIGJhY2stcG9ydGlu
ZykuIFRoaXMgQVBJIGlzIG9mZmVyZWQgdG8gIk9FTSdzIiBhbmQgcGFydG5lcnMgZm9yCisgICAg
ICAgICAgIGFwcGxpY2F0aW9uIGNyZWF0aW9uLgorCisgICAgICAgICAgIEl0IHdpbGwgYmUgYmFz
ZWQgb24gdG9wIG9mIHRoZSBXSzIgQyBBUEkgYW5kIHRoZSBFRkwgV0tWaWV3IGNsYXNzIG9ubHku
CisKKyAgICAgICAgYikgRm9yIHNwZWNpYWxpemVkIGludGVybmFsIHByb2R1Y3RzIHdlIHdhbnQg
dG8gdXNlIHRoZSBsb3ctbGV2ZWwKKyAgICAgICAgICAgV0syIEMgQVBJIGluc3RlYWQsIHdoaWxl
IHN0aWxsIGJlIGFibGUgdG8gaW50ZWdyYXRlIHdpdGggRUZMIChmb3IgVUkpLgorCisgICAgICAg
ICAgIFRoZSBXSzIgQyBBUEkgaXMgbG93LWxldmVsIGFuZCBtdWNoIG1vcmUgcG93ZXJmdWwgdGhh
dCB0aGUgRUZMCisgICAgICAgICAgIGNvbnZlbmllbmNlIEFQSSwgd2hpY2ggaXMgYWltZWQgYXQg
YXBwbGljYXRpb24gZGV2ZWxvcGVycy4KKworICAgICAgICAgICBOb3RlOiBTb21lIG9mIHRoZXNl
IHByb2R1Y3RzIG1pZ2h0IG5vdCBldmVuIHVzZSBFRkwsIGJ1dCBqdXN0IE9wZW5HTC4KKwogMjAx
My0wMy0wNiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbRUZMXVtXSzJdIENvbnZlcnQgZnJvbSBkZXZpY2UgdmlldyBzaXplIHRvIFVJIHZpZXcg
c2l6ZSBvbmx5IGluIEV3a1ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5jcHAKaW5kZXggYTI0OTgyMC4uMDExYzNlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjgsMjQgKzI4LDE3IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0
ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRl
eHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZikgOiBFd2tDb250ZXh0OjpkZWZh
dWx0Q29udGV4dCgpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3Jl
YXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwot
ICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmll
dygpKSk7Ci19Ci0KLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJl
dHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKTsKKyAgICBXS1ZpZXdSZWYgd2tWaWV3ID0gdG9BUEkobmV3IFdl
YlZpZXcodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSkpOworICAgIFdL
UGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dldFBhZ2Uod2tWaWV3KSwgdHJ1ZSk7CisgICAg
cmV0dXJuIHdrVmlldzsKIH0KIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91
dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCitFdmFzX09iamVjdCogV0tWaWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdS
ZWYgdmlld1JlZiwgRXZhcyogZXZhcywgRXZhc19TbWFydCogc21hcnQpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6
RGVmYXVsdEJlaGF2aW9yKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRl
KHRvSW1wbCh2aWV3UmVmKSwgZXZhcywgc21hcnQpOworICAgIHJldHVybiBld2tWaWV3LT5ldmFz
T2JqZWN0KCk7CiB9CiAKIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikK
QEAgLTEzOCwxMSArMTMxLDYgQEAgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYg
dmlld1JlZikKICNlbmRpZgogfQogCi1FdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChX
S1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5ldmFzT2Jq
ZWN0KCk7Ci19Ci0KIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZp
ZXdSZWYpCiB7CiAgICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1Jl
ZiktPmV2YXNPYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuaAppbmRleCBhNzA5YjQ4Li4zYjgxNzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKQEAgLTI2LDkgKzI2LDExIEBACiAKICNpZiBVU0UoRU8p
CiB0eXBlZGVmIHN0cnVjdCBfRW8gRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FbyBFdmFzX1NtYXJ0
OwogdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0
IF9FdmFzIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19TbWFydCBFdmFzX1NtYXJ0OwogdHlw
ZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogI2VuZGlmCiAKQEAgLTU3LDkg
KzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50IFdLVmlld0NsaWVudDsKIAogZW51
bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50VmVyc2lvbiA9IDAgfTsKIAotV0tfRVhQT1JUIFdLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKLQotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVh
dGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBXS19F
WFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7CiBXS19FWFBPUlQgdm9pZCBX
S1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29uc3QgV0tWaWV3Q2xpZW50Kik7CkBAIC04
OCw4ICs4OCw3IEBAIFdLX0VYUE9SVCBib29sIFdLVmlld0dldFNob3dzQXNTb3VyY2UoV0tWaWV3
UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsK
IAotLy8gRklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNv
IGtlZXAgdXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCi1XS19FWFBPUlQgRXZhc19PYmplY3QqIFdL
Vmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCBFdmFzX09iamVjdCogV0tW
aWV3Q3JlYXRlRXZhc09iamVjdChXS1ZpZXdSZWYsIEV2YXMqLCBFdmFzX1NtYXJ0Kik7CiAKIFdL
X0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5kZXggYjUyYzUy
ZS4uZmQxYmIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHAKQEAgLTIyOCwxMSArMjI4LDExIEBAIHZvaWQgRXdrVmlld0V2ZW50SGFuZGxlcjxFVkFT
X0NBTExCQUNLX0hJREU+OjpoYW5kbGVFdmVudCh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhCiAKIC8v
IEV3a1ZpZXcgaW1wbGVtZW50YXRpb24uCiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi0gICAgOiBtX2V2YXNPYmplY3Qo
ZXZhc09iamVjdCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQorRXdrVmlldzo6RXdrVmlldyhX
ZWJWaWV3KiB3ZWJWaWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2ViVmll
dyh3ZWJWaWV3KQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCisgICAgLCBtX2NvbnRl
eHQoRXdrQ29udGV4dDo6Y3JlYXRlKFdLUGFnZUdldENvbnRleHQod2tQYWdlKCkpKSkKICAgICAs
IG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYo
bmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwocGFnZUdy
b3VwKSwgdGhpcykpKQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6
Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRF
Zmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6
Y3JlYXRlKHRoaXMpKQpAQCAtMjYwLDYgKzI2MCw5IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19P
YmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdl
CiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAKKyAg
ICAvLyBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICB3ZWJWaWV3LT5zZXRFd2tWaWV3KHRoaXMp
OworCiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFz
X2dldChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQogICAgICAgICBtX2V2YXNH
TENvbnRleHQgPSBFdmFzR0xDb250ZXh0OjpjcmVhdGUobV9ldmFzR0wuZ2V0KCkpOwpAQCAtMjcx
LDggKzI3NCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBh
c3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlCiAKICAgICBXS1ZpZXdJbml0aWFs
aXplKHdrVmlldygpKTsKIAotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBi
ZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwotCiAgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdl
R3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOwogICAgIFdLUHJlZmVyZW5jZXNS
ZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXAp
OwogCkBAIC0zMDMsMTMgKzMwNCwxMSBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAgICAgaWNvbkRh
dGFiYXNlLT51bndhdGNoQ2hhbmdlcyhFd2tWaWV3OjpoYW5kbGVGYXZpY29uQ2hhbmdlZCk7CiB9
CiAKLUV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywg
RXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBF
d2tWaWV3OjpjcmVhdGUoV2ViVmlldyogd2ViVmlldywgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0
KiBzbWFydCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAw
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOwor
ICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZh
cywgc21hcnQgPyBzbWFydCA6IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXNPYmplY3QsIDApOwogCiAgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CkBAIC0z
MjAsMTUgKzMxOSw5IEBAIEV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2
YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQCiAKICAgICBBU1NFUlQoIXNt
YXJ0RGF0YS0+cHJpdik7CiAKLSAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVk
IGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAotICAg
IC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0RGF0YS0+
cHJpdiA9IG5ldyBFd2tWaWV3KGV2YXNPYmplY3QsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVo
YXZpb3IpOwotICAgIHJldHVybiBldmFzT2JqZWN0OwotfQorICAgIHNtYXJ0RGF0YS0+cHJpdiA9
IG5ldyBFd2tWaWV3KHdlYlZpZXcsIGV2YXNPYmplY3QpOwogCi1FdmFzX09iamVjdCogRXdrVmll
dzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZp
b3IpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBkZWZhdWx0U21hcnRD
bGFzc0luc3RhbmNlKCksIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJl
dHVybiBzbWFydERhdGEtPnByaXY7CiB9CiAKIGJvb2wgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJ
bnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmIGFwaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCAyY2M2ZTI3Li5kNzczOWQ0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtOTcsMTcgKzk3LDkgQEAg
dHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiB0eXBlZGVm
IHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CiB0eXBlZGVm
IHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAotLy8g
RXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2JqZWN0LCBvYnRhaW5lZCBmcm9t
IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgot
Ci0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdhY3lCZWhhdmlvciwKLSAgICAg
ICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3Jl
YXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBW
aWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOwotICAgIHN0
YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAgICBz
dGF0aWMgRXdrVmlldyogY3JlYXRlKFdlYktpdDo6V2ViVmlldyosIEV2YXMqIGNhbnZhcywgRXZh
c19TbWFydCogc21hcnQgPSAwKTsKIAogICAgIHN0YXRpYyBib29sIGluaXRTbWFydENsYXNzSW50
ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJik7CiAKQEAgLTIxMyw3ICsyMDUsNyBAQCBwdWJs
aWM6CiAgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgpOwogCiBw
cml2YXRlOgotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLCBWaWV3QmVoYXZp
b3IpOworICAgIEV3a1ZpZXcoV2ViS2l0OjpXZWJWaWV3KiwgRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNldERldmljZVNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwpAQCAtMjUxLDYgKzI0Myw3IEBAIHByaXZhdGU6CiAKIHByaXZhdGU6
CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4KKyAgICBSZWZQdHI8
V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVj
dDsKICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OwogICAgIE93blB0cjxFdmFzX0dM
PiBtX2V2YXNHTDsKQEAgLTI1OSw3ICsyNTIsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9kZXZpY2VTaXplOwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
dXNlclZpZXdwb3J0VHJhbnNmb3JtOwogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsK
LSAgICBSZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktp
dDo6UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktp
dDo6UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxX
ZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNGYxYTEzMS4uM2M4MjhiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAt
ODgsMTcgKzg4LDMwIEBAIEVpbmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChF
dmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIHNtYXJ0LCBld2tf
b2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBFd2tDb250ZXh0KiBld2tD
b250ZXh0ID0gZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KTsKKworICAgIFdL
Vmlld1JlZiB3a1ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDAp
OworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3Q3JlYXRlRXZhc09iamVjdCh3
a1ZpZXcsIGNhbnZhcywgc21hcnQpOworCisgICAgcmV0dXJuIGV2YXNPYmplY3Q7CiB9CiAKLUV2
YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0Nv
bnRleHQqIGNvbnRleHQpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2YXMqIGNhbnZhcykK
IHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIGV3a19vYmpl
Y3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBX
S1ZpZXdDcmVhdGUoV0tDb250ZXh0Q3JlYXRlKCksIDApOworICAgIEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0ID0gV0tWaWV3Q3JlYXRlRXZhc09iamVjdCh3a1ZpZXcsIGNhbnZhcywgMCk7CisKKyAg
ICByZXR1cm4gZXZhc09iamVjdDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2FkZChFdmFz
KiBjYW52YXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBj
YW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBld2tfdmlld19hZGRf
d2l0aF9jb250ZXh0KGNhbnZhcywgZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKSk7CisgICAgRXdr
Q29udGV4dCogZXdrQ29udGV4dCA9IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4
dCk7CisKKyAgICBXS1ZpZXdSZWYgd2tWaWV3ID0gV0tWaWV3Q3JlYXRlKGV3a0NvbnRleHQtPndr
Q29udGV4dCgpLCAwKTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0NyZWF0
ZUV2YXNPYmplY3Qod2tWaWV3LCBjYW52YXMsIDApOworCisgICAgcmV0dXJuIGV2YXNPYmplY3Q7
CiB9CiAKIEV3a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
SW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJ
bnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggZmEyZTA4ZC4uM2M2YjQ2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAK
QEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0VmbEluc3BlY3RvclV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tQYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+
CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkBAIC05OCwyMCArMTAyLDE5IEBAIFdlYlBhZ2VQcm94eSogV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFt
X2luc3BlY3RvcldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBGSVhNRTogUmVm
YWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KLSAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRv
QVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOwotICAgIG1faW5zcGVjdG9yVmlldyA9
IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5k
b3cpLCBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZiksIHRvQVBJKGluc3BlY3RvclBhZ2VH
cm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JW
aWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICBXS0NvbnRleHRSZWYgd2tDb250ZXh0ID0gdG9B
UEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQ
YWdlR3JvdXAgPSB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSk7CisgICAgV0tWaWV3UmVmIHdr
VmlldyA9IFdLVmlld0NyZWF0ZSh3a0NvbnRleHQsIHdrUGFnZUdyb3VwKTsKKworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIikpOworICAgIFdLVmlld1Nl
dFRoZW1lUGF0aCh3a1ZpZXcsIHdrVGhlbWUuZ2V0KCkpOwogCi0gICAgRXdrVmlldyogZXdrVmll
dyA9IHRvRXdrVmlldyhtX2luc3BlY3RvclZpZXcpOwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAg
ICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwor
ICAgIG1faW5zcGVjdG9yVmlldyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LCBlY29y
ZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIC8qIHNtYXJ0ICovIDApOwogCi0gICAgRXdr
X1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNldHRpbmdzKCk7Ci0gICAgZXdrX3NldHRp
bmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVl
KTsKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHdrUHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFBy
ZWZlcmVuY2VzKHdrUGFnZUdyb3VwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMc0FsbG93ZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gZXdr
Vmlldy0+cGFnZSgpOworICAgIHJldHVybiB0b0ltcGwoV0tWaWV3R2V0UGFnZSh3a1ZpZXcpKTsK
IH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCmluZGV4IDMzZmRiNWQuLjllYzcyOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtNTEsOCArNTEsOCBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6
OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3
a1ZpZXcqIGV3a1ZpZXcpCi0gICAgOiBtX2V3a1ZpZXcoZXdrVmlldykKK1dlYlZpZXc6OldlYlZp
ZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgOiBt
X2V3a1ZpZXcoMCkKICAgICAsIG1fcGFnZShjb250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHBh
Z2VHcm91cCkpCiB7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CkBAIC02MiwxMCArNjIsNiBAQCBX
ZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdy
b3VwLCBFd2tWaWV3KiBld2tWaWV3KQogICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVn
VmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIx
Iik7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRp
bmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUo
c2hvd0RlYnVnVmlzdWFscyk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9w
YWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7Ci0jZW5k
aWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXcoKQpAQCAtNzYsNiArNzIsMTcgQEAgV2ViVmlldzo6
fldlYlZpZXcoKQogICAgIG1fcGFnZS0+Y2xvc2UoKTsKIH0KIAorLy8gRklYTUU6IFJlbW92ZSB3
aGVuIHBvc3NpYmxlLgordm9pZCBXZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcp
Cit7CisgICAgbV9ld2tWaWV3ID0gZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+
ZXZhc09iamVjdCgpKTsKKyNlbmRpZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgp
CiB7CiAgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc4LDExICsyODUsMTkg
QEAgYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6Omlz
Vmlld0ZvY3VzZWQoKQogeworICAgIC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3Jn
L2IvMTEwODc3CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiBtX2V3a1ZpZXctPmlzRm9jdXNlZCgpOwogfQogCiBib29sIFdlYlZpZXc6Omlz
Vmlld1Zpc2libGUoKQogeworICAgIC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3Jn
L2IvMTEwODc3CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiBtX2V3a1ZpZXctPmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDlmNWY2ZjQuLjRmZTY3OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC01MCw5ICs1MCwxMiBAQCBjbGFzcyBXZWJWaWV3
IDogcHVibGljIEFQSU9iamVjdCwgcHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0
YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29u
dGV4dCosIFdlYlBhZ2VHcm91cCosIEV3a1ZpZXcqKTsKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQq
LCBXZWJQYWdlR3JvdXAqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKKyAgICAvLyBGSVhN
RTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCisgICAgdm9pZCBzZXRFd2tWaWV3KEV3a1ZpZXcqKTsK
KwogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFu
c2xhdGlvbihkb3VibGUgdHgsIGRvdWJsZSB0eSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdl
YlZpZXcuaAppbmRleCBiNTZjMDk2Li45NjkxODkxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XZWJWaWV3LmgKQEAgLTQ4LDggKzQ4LDEwIEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZP
Uk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKK3R5cGVkZWYg
c3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRm
b3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKK3R5cGVkZWYg
RWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5nOwordHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZv
cm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3Mg
UVF1aWNrVmlldzsKQEAgLTkzLDYgKzk1LDkgQEAgcHJpdmF0ZToKIAogICAgIFBsYXRmb3JtV0tW
aWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsKKyNpZiBQTEFURk9STShF
RkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIFdpbmRvd01lc3NhZ2VPYnNlcnZlciogbV9wYXJlbnRXaW5kb3dNZXNzYWdl
T2JzZXJ2ZXI7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdl
YlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApp
bmRleCA4YTAzNWYzLi5kMzAyMDYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2Vm
bC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRm
b3JtV2ViVmlldy5jcHAKQEAgLTI4LDcgKzI4LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZp
ZXcuaCIKIAogI2luY2x1ZGUgIkVXZWJLaXQyLmgiCi0jaW5jbHVkZSAiV2ViS2l0Mi9XS0FQSUNh
c3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQVBJQ2FzdC5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAKIGV4dGVybiBib29sIHVz
ZVgxMVdpbmRvdzsKQEAgLTYzLDMyICs2NCwzMyBAQCBzdGF0aWMgdm9pZCBvbldlYlByb2Nlc3ND
cmFzaGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIAogUGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsK
LSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9
IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOwotICAgIGV3a192
aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVm
YXVsdC5lZGoiKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0
RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jh
c2hlZCwgMCk7CisgICAgbV9iYWNraW5nID0gaW5pdEVjb3JlRXZhcygpOworCisgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7CisKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisgICAgV0tWaWV3U2V0VGhlbWVQ
YXRoKG1fdmlldywgd2tUaGVtZS5nZXQoKSk7CisKKyAgICBtX3dpbmRvdyA9IFdLVmlld0NyZWF0
ZUV2YXNPYmplY3QobV92aWV3LCBlY29yZV9ldmFzX2dldChtX2JhY2tpbmcpLCAvKiBzbWFydCAq
LyAwKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3dpbmRvdywgIndl
YnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRv
KDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsK
LSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KTsKLQogICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdl
ciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSBy
ZWZlcnMgdG8uCiAgICAgV0tSZWxlYXNlKG1fdmlldyk7CiAKLSAgICAvLyBGSVhNRTogVGhlIEMg
V0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUg
dG8gZGVzdHJ1Y3QgaXQKLSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQg
V2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCi0gICAgZXZh
c19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X2RlbChtX3dpbmRvdyk7
CiAKLSAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOworICAgIGVjb3JlX2V2YXNfZnJlZSht
X2JhY2tpbmcpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0g
ICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0
KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CkBAIC05OCwy
MyArMTAwLDIzIEBAIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBjb25zdAogCiB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsKLSAgICBF
dmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUpOworICAgIEV2YXMqIGV2
YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19vYmplY3RfZm9j
dXNfc2V0KG1fd2luZG93LCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZh
cywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRf
a2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CiAKIHZvaWQg
UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5
KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZh
c19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIEV2YXMqIGV2
YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19vYmplY3Rfc2hv
dyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwg
MCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5z
aWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQo
bV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV93aW5kb3cpOwor
ICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5kb3cpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9kb3du
KGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9t
b3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDM3Y2RmY2YuLjgxNzIwMmIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTUsOCArNTUsMTAgQEAgdHlw
ZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZv
cm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZh
cyBFY29yZV9FdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0Owog
dHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7Ci10eXBlZGVmIEVjb3JlX0V2YXMqIFBs
YXRmb3JtV2luZG93OwordHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybUJhY2tpbmc7Cit0eXBl
ZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RS
IHsKQEAgLTEwMCw2ICsxMDIsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFBsYXRmb3JtV0tW
aWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsKKyNpZiBQTEFURk9STShF
RkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRpZgogICAgIGJvb2wgbV93
aW5kb3dJc0tleTsKICAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1fb3B0aW9uczsK
ICNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAppbmRleCAxMzkyMGVjLi4wMGU3
ZDFmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclBy
b3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclBy
b3h5RWZsLmNwcApAQCAtMzE0LDE0ICszMTQsMTYgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1
cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBXVFJFdmVudCYgZXZlbnQpCiB7CisgICAgRXZhcyog
ZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpOworCiAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJF
dmVudFR5cGVNb3VzZURvd24pCi0gICAgICAgIGRpc3BhdGNoTW91c2VEb3duRXZlbnQoZWNvcmVf
ZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3co
KSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQpOworICAgICAg
ICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZp
ZXJzLCBtX2NsaWNrQ291bnQpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJF
dmVudFR5cGVNb3VzZVVwKQotICAgICAgICBkaXNwYXRjaE1vdXNlVXBFdmVudChlY29yZV9ldmFz
X2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwg
ZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMpOworICAgICAgICBkaXNwYXRjaE1vdXNlVXBF
dmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CiAgICAgZWxzZSBpZiAo
ZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKLSAgICAgICAgZGlzcGF0
Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngp
LCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgICAgICBkaXNwYXRjaE1vdXNl
TW92ZUV2ZW50KGV2YXMsIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nh
c3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKICAgICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0g
V1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5
RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1XaW5kb3coKSksIGV2ZW50Lmhvcml6b250YWwsIGV2ZW50LnZlcnRpY2FsKTsKKyAgICAg
ICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZXZhcywgZXZlbnQuaG9yaXpvbnRhbCwgZXZl
bnQudmVydGljYWwpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZl
bnRzKCkKQEAgLTQxMiw3ICs0MTQsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24o
V0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzLAogICAgIGlm
ICgoc3RybGVuKGtleU5hbWUpID09IDEpICYmIChrZXlOYW1lWzBdID49ICdBJyAmJiBrZXlOYW1l
WzBdIDw9ICdaJykpCiAgICAgICAgIHdrTW9kaWZpZXJzIHw9IGtXS0V2ZW50TW9kaWZpZXJzU2hp
ZnRLZXk7CiAKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxl
ci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7CisgICAgRXZhcyogZXZhcyA9IGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtV2luZG93KCkpOwogCiAgICAgaW50IGV2ZW50SW5kZXggPSAwOwogICAgIC8vIE1pbWljIHRo
ZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBpbnNlcnRpbmcgYSBwYXJhZ3JhcGgKQEAgLTQzOCw3
ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3Vj
aF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAK
LSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOworICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5k
b3coKTsKICAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwg
bV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00OTAsNyArNDkyLDcgQEAg
dm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgs
IGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV3
a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IG1fdGVzdENv
bnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9m
KGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgp
KSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZp
ZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcAppbmRleCBjM2JjODU3Li5jMTMwYzcxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTU4LDM3ICs1OCwzNCBAQCBQbGF0
Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGaXhl
ZExheW91dEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRml4
ZWRMYXlvdXQiKSk7CiAgICAgbV91c2luZ0ZpeGVkTGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShvcHRpb25zLCB1c2VGaXhlZExheW91dEtleS5nZXQoKSkpKSA6IGZhbHNlOwogCi0gICAg
bV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNf
Z2V0KG1fd2luZG93KTsKKyAgICBtX2JhY2tpbmcgPSBpbml0RWNvcmVFdmFzKCk7CiAKLSAgICBp
ZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwotICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdl
R3JvdXApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApOwor
ICAgIG1fd2luZG93ID0gV0tWaWV3Q3JlYXRlRXZhc09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNf
Z2V0KG1fYmFja2luZyksIC8qIHNtYXJ0ICovIDApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0
KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwor
ICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dldFBhZ2UobV92aWV3KSwgbV91c2lu
Z0ZpeGVkTGF5b3V0KTsKKworICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpCisgICAgICAgIHJl
c2l6ZVRvKDgwMCwgNjAwKTsKKworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dpbmRvdywgVEhF
TUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKLSAgICBl
dmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisgICAgZXZhc19v
YmplY3Rfc2hvdyhtX3dpbmRvdyk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2Vi
VmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3Qg
bGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBh
Z2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVsZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklY
TUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBz
byB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3
a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVk
LgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICBldmFzX29iamVjdF9kZWwo
bV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKKyAgICBlY29yZV9l
dmFzX2ZyZWUobV9iYWNraW5nKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRv
KHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVz
aXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZh
c19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVm
IFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCkBAIC05OCwyNyArOTUsMjYgQEAgV0tQYWdlUmVmIFBs
YXRmb3JtV2ViVmlldzo6cGFnZSgpCiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7
Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmll
dyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCByZWNlaXZlIGZvY3Vz
IGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQgYXQgYWxsCiAgICAg
Ly8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9lcyBub3QgZW1pdCBh
bnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhlCiAgICAgLy8gZm9j
dXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMgdG8gZXZhc19vYmpl
Y3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgogICAgIGlmIChXS1BhZ2VH
ZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSgpKSkKLSAg
ICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGV2YXNPYmplY3QsIGZhbHNlKTsKLSAgICBldmFz
X29iamVjdF9mb2N1c19zZXQoZXZhc09iamVjdCwgdHJ1ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2ZvY3VzX3NldChtX3dpbmRvdywgZmFsc2UpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCht
X3dpbmRvdywgdHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1l
KCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIGVjb3JlX2V2YXNfcmVx
dWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAg
ICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KG1fYmFja2luZywgJngsICZ5LCAmd2lk
dGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJh
bWUpCiB7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2lu
LngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7
CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX2JhY2tpbmcsIGZyYW1lLm9yaWdpbi54LCBm
cmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCkBAIC0xMzcsNyAr
MTMzLDcgQEAgV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dT
bmFwc2hvdEltYWdlKCkKIHsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKLSAgICBl
Y29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX2JhY2tpbmcsIDAsIDAsICZ3aWR0aCwgJmhl
aWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAogICAgIHJldHVy
biBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192083</attachid>
            <date>2013-03-07 14:14:02 -0800</date>
            <delta_ts>2013-03-08 03:23:49 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug111591</filename>
            <type>text/plain</type>
            <size>29100</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDY5NmNlNGMwY2E5YWViN2JjYTVhN2IyZjY1ZWRlMDg3MGU5OGFkOTQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDAwOjA2OjExIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMDYyZTcyNi4uNmVkNDFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAz
LTA3ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbRUZMXVtXSzJdIFNlcGFyYXRlIFdlYlZpZXcgZnVydGhlciBmcm9tIEV3a1ZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTU5MQor
CisgICAgICAgIFRvIGV4cGxhaW4gdGhlIG92ZXJhbGwgZ29hbDoKKworICAgICAgICBhKSBCZSBh
YmxlIHRvIG1haW50YWluIHRoZSBFRkwgY29udmVuaWVuY2UgQVBJIGluIHRoZSBUaXplbiBwcm9q
ZWN0CisgICAgICAgICAgIHRvZ2V0aGVyIHdpdGggb3VyIHBhcnRuZXJzIChwb3RlbnRpYWwgZGlm
ZmVyZW50IHZlcnNpb25zIG9mIGl0LAorICAgICAgICAgICBiYWNrLXBvcnRpbmcpLiBUaGlzIEFQ
SSBpcyBvZmZlcmVkIHRvICJPRU0ncyIgYW5kIHBhcnRuZXJzIGZvcgorICAgICAgICAgICBhcHBs
aWNhdGlvbiBjcmVhdGlvbi4KKworICAgICAgICAgICBJdCB3aWxsIGJlIGJhc2VkIG9uIHRvcCBv
ZiB0aGUgV0syIEMgQVBJIGFuZCB0aGUgRUZMIFdLVmlldyBjbGFzcyBvbmx5LgorCisgICAgICAg
IGIpIEZvciBzcGVjaWFsaXplZCBpbnRlcm5hbCBwcm9kdWN0cyB3ZSB3YW50IHRvIHVzZSB0aGUg
bG93LWxldmVsCisgICAgICAgICAgIFdLMiBDIEFQSSBpbnN0ZWFkLCB3aGlsZSBzdGlsbCBiZSBh
YmxlIHRvIGludGVncmF0ZSB3aXRoIEVGTCAoZm9yIFVJKS4KKworICAgICAgICAgICBUaGUgV0sy
IEMgQVBJIGlzIGxvdy1sZXZlbCBhbmQgbXVjaCBtb3JlIHBvd2VyZnVsIHRoYXQgdGhlIEVGTAor
ICAgICAgICAgICBjb252ZW5pZW5jZSBBUEksIHdoaWNoIGlzIGFpbWVkIGF0IGFwcGxpY2F0aW9u
IGRldmVsb3BlcnMuCisKKyAgICAgICAgICAgTm90ZTogU29tZSBvZiB0aGVzZSBwcm9kdWN0cyBt
aWdodCBub3QgZXZlbiB1c2UgRUZMLCBidXQganVzdCBPcGVuR0wuCisKIDIwMTMtMDMtMDYgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlIHJhaXNlcyBhbiB1bmNhdWdodCBPYmplY3RpdmUtQyBleGNlcHRp
b24gaWYgcGF0aCBpcyBlbXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwCmluZGV4IGEyNDk4MjAuLjEyOTMzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI4LDI0ICsyOCwxOSBAQAogCiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1zdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVX
S1ZpZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCiB7Ci0gICAgUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0
UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVs
dENvbnRleHQoKTsKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IEV3a1ZpZXc6OmNyZWF0
ZUV2YXNPYmplY3QoY2FudmFzLCBjb250ZXh0LCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKLSAg
ICBpZiAoIWV2YXNPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odG9Fd2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXco
KSkpOworICAgIFJlZlB0cjxXZWJWaWV3PiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHRvSW1w
bChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOworICAgIFdLUGFnZVNldFVzZUZp
eGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwgdHJ1ZSk7CisgICAgcmV0dXJuIHRvQVBJKHdl
YlZpZXcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGUo
RXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmKQorRXZhc19PYmplY3QqIFdLVmlld0NyZWF0ZUV2YXNPYmplY3QoV0tWaWV3UmVm
IHZpZXdSZWYsIEV2YXMqIGV2YXMsIEV2YXNfU21hcnQqIHNtYXJ0KQogewotICAgIHJldHVybiBj
cmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6Okxl
Z2FjeUJlaGF2aW9yKTsKLX0KKyAgICBpZiAoRXdrVmlldyogZXdrVmlldyA9IEV3a1ZpZXc6OmNy
ZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIHNtYXJ0KSkKKyAgICAgICAgcmV0dXJuIGV3a1Zp
ZXctPmV2YXNPYmplY3QoKTsKIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91
dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVdLVmlldyhjYW52YXMsIGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAgICByZXR1cm4g
MDsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTM4
LDExICsxMzMsNiBAQCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVm
KQogI2VuZGlmCiB9CiAKLUV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1Jl
ZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsK
LX0KLQogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikK
IHsKICAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZh
c09iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9l
ZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5o
CmluZGV4IGE3MDliNDguLjNiODE3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuaApAQCAtMjYsOSArMjYsMTEgQEAKIAogI2lmIFVTRShFTykKIHR5cGVk
ZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfU21hcnQ7CiB0eXBl
ZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMg
RXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX1NtYXJ0IEV2YXNfU21hcnQ7CiB0eXBlZGVmIHN0
cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIApAQCAtNTcsOSArNTksNyBA
QCB0eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCiBlbnVtIHsga1dL
Vmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwogCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhG
aXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXApOworV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250
ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9SVCB2
b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmlld1Nl
dFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKQEAgLTg4LDggKzg4
LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwog
CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCi0vLyBG
SVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2VlcCB1
c2FnZSB0byBhIGJhcmUgbWluaW11bS4KLVdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0
RXZhc09iamVjdChXS1ZpZXdSZWYpOworV0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdDcmVh
dGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyosIEV2YXNfU21hcnQqKTsKIAogV0tfRVhQT1JU
IFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCAxZjJlZWEyLi45Yjkz
MTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApA
QCAtMjI4LDExICsyMjgsMTEgQEAgdm9pZCBFd2tWaWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJB
Q0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRhdGEsIEV2YXMqLCBFdmEKIAogLy8gRXdrVmll
dyBpbXBsZW1lbnRhdGlvbi4KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09i
amVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2Jq
ZWN0KQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCitFd2tWaWV3OjpFd2tWaWV3KFBhc3NSZWZQ
dHI8V2ViS2l0OjpXZWJWaWV3PiB3ZWJWaWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAg
ICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCisg
ICAgLCBtX2NvbnRleHQoRXdrQ29udGV4dDo6Y3JlYXRlKFdLUGFnZUdldENvbnRleHQod2tQYWdl
KCkpKSkKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZp
ZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0
b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9h
ZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQ
b2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VV
SUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMjYwLDYgKzI2MCw5IEBAIEV3a1ZpZXc6OkV3
a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgV0tQYWdlCiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CiAKKyAgICAvLyBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBtX3dlYlZpZXctPnNl
dEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAg
ICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5n
ZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCog
ZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2UKIAogICAg
IFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlv
dXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VH
cm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwNCwxMyArMzA1LDExIEBAIEV3a1ZpZXc6On5Fd2tWaWV3
KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hDaGFuZ2VzKEV3a1ZpZXc6OmhhbmRsZUZhdmlj
b25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3Qo
RXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYktpdDo6V2ViVmlldz4g
d2ViVmlldywgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19v
YmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2Jq
ZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQgPyBzbWFydCA6IGRlZmF1
bHRTbWFydENsYXNzSW5zdGFuY2UoKSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV2YXNPYmplY3QsIDApOwogCiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
ID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CkBAIC0zMjEsMTUgKzMyMCw5IEBAIEV2YXNfT2Jq
ZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCog
c21hcnQsIFBhc3NSZWZQCiAKICAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CiAKLSAgICAv
LyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0
b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAotICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRv
IGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV2YXNP
YmplY3QsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwotICAgIHJldHVybiBldmFz
T2JqZWN0OwotfQorICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KHdlYlZpZXcsIGV2
YXNPYmplY3QpOwogCi1FdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFz
KiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZUV2YXNPYmplY3QoY2FudmFzLCBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCksIGNvbnRleHQs
IHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7CiB9
CiAKIGJvb2wgRXdrVmlldzo6aW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRf
Q2xhc3MmIGFwaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApp
bmRleCAyY2M2ZTI3Li45ZjU0YmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oCkBAIC05NywxNyArOTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9T
dXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0Rh
dGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIEV3a19WaWV3X1NtYXJ0X0NsYXNzOwogCi0vLyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBi
eSB0aGUgZXZhcyBvYmplY3QsIG9idGFpbmVkIGZyb20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dCgpLgogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7
Ci0gICAgICAgIExlZ2FjeUJlaGF2aW9yLAotICAgICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9
OwotCi0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZh
cywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3
a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVF
dmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBF
d2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoUGFz
c1JlZlB0cjxXZWJLaXQ6OldlYlZpZXc+LCBFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0
ID0gMCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmll
d19TbWFydF9DbGFzcyYpOwogCkBAIC0yMTMsNyArMjA1LDcgQEAgcHVibGljOgogICAgIFBhc3NS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25hcHNob3QoKTsKIAogcHJpdmF0ZToKLSAgICBF
d2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBFd2tW
aWV3KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiwgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qp
OwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNldERldmljZVNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwpAQCAtMjUxLDYgKzI0Myw3IEBAIHByaXZhdGU6CiAKIHByaXZhdGU6CiAg
ICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4KKyAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsK
ICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OwogICAgIE93blB0cjxFdmFzX0dMPiBt
X2V2YXNHTDsKQEAgLTI1OSw3ICsyNTIsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNp
emUgbV9kZXZpY2VTaXplOwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdXNl
clZpZXdwb3J0VHJhbnNmb3JtOwogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKLSAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6
UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6
UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJL
aXQ6OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNGYxYTEzMS4uZDI2ZWI5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtODgs
MTcgKzg4LDI1IEBAIEVpbmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdf
U21hcnRfQ2xhc3MqIGFwaSkKIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIHNtYXJ0LCBld2tfb2Jq
ZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBFd2tDb250ZXh0KiBld2tDb250
ZXh0ID0gZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KTsKKyAgICBXS1JldGFp
blB0cjxXS1ZpZXdSZWY+IHdrVmlldyA9IGFkb3B0V0soV0tWaWV3Q3JlYXRlKGV3a0NvbnRleHQt
PndrQ29udGV4dCgpLCAwKSk7CisKKyAgICByZXR1cm4gV0tWaWV3Q3JlYXRlRXZhc09iamVjdCh3
a1ZpZXcuZ2V0KCksIGNhbnZhcywgc21hcnQpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdf
YWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQorRXZh
c19PYmplY3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIEV3a1Zp
ZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+
KGNvbnRleHQpKTsKKyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IHdrVmlldyA9IGFkb3B0V0so
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dENyZWF0ZSgpLCAwKSk7CisKKyAgICByZXR1cm4gV0tWaWV3
Q3JlYXRlRXZhc09iamVjdCh3a1ZpZXcuZ2V0KCksIGNhbnZhcywgMCk7CiB9CiAKLUV2YXNfT2Jq
ZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQorRXZhc19PYmplY3QqIGV3a192aWV3X2Fk
ZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChjYW52YXMsIGV3a19jb250ZXh0X2Rl
ZmF1bHRfZ2V0KCkpOworICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nh
c3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpOworICAgIFdLUmV0YWluUHRyPFdLVmlld1JlZj4gd2tW
aWV3ID0gYWRvcHRXSyhXS1ZpZXdDcmVhdGUoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDApKTsK
KworICAgIHJldHVybiBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KHdrVmlldy5nZXQoKSwgY2FudmFz
LCAwKTsKIH0KIAogRXdrX0NvbnRleHQqIGV3a192aWV3X2NvbnRleHRfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCBmYTJlMDhkLi5kNDg3Y2I3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvRWZsSW5zcGVjdG9yVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlLmg+CisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1BhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZh
dGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTk4LDIwICsxMDIsMTkgQEAgV2ViUGFnZVByb3h5
KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBp
ZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEZJWE1F
OiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgotICAgIFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
ID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7Ci0gICAgbV9pbnNwZWN0b3JW
aWV3ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChlY29yZV9ldmFzX2dldChtX2luc3BlY3Rv
cldpbmRvdyksIEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0UmVmKSwgdG9BUEkoaW5zcGVjdG9y
UGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgaWYgKCFtX2luc3Bl
Y3RvclZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgIFdLQ29udGV4dFJlZiB3a0NvbnRleHQg
PSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKKyAgICBXS1BhZ2VHcm91cFJl
ZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKTsKKyAgICBXS1JldGFp
blB0cjxXS1ZpZXdSZWY+IHdrVmlldyA9IGFkb3B0V0soV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwg
d2tQYWdlR3JvdXApKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1RoZW1lID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhURVNUX1RIRU1FX0RJUiAiL2Rl
ZmF1bHQuZWRqIikpOworICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcuZ2V0KCksIHdrVGhl
bWUuZ2V0KCkpOwogCi0gICAgRXdrVmlldyogZXdrVmlldyA9IHRvRXdrVmlldyhtX2luc3BlY3Rv
clZpZXcpOwotICAgIEFTU0VSVChld2tWaWV3KTsKLSAgICBld2tWaWV3LT5zZXRUaGVtZVBhdGgo
VEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIG1faW5zcGVjdG9yVmlldyA9IFdL
Vmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LmdldCgpLCBlY29yZV9ldmFzX2dldChtX2luc3Bl
Y3RvcldpbmRvdyksIC8qIHNtYXJ0ICovIDApOwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5n
cyA9IGV3a1ZpZXctPnNldHRpbmdzKCk7Ci0gICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zy
b21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzUmVmIHdrUHJlZmVyZW5jZXMgPSBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHdrUGFnZUdy
b3VwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQo
d2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOworICAg
IHJldHVybiB0b0ltcGwoV0tWaWV3R2V0UGFnZSh3a1ZpZXcuZ2V0KCkpKTsKIH0KIAogdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXcuY3BwCmluZGV4IDExY2ZjOTguLmExOWU4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtNTEsOCArNTEsOCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlZpZXc6OldlYlZpZXcoV2Vi
Q29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1Zp
ZXcpCi0gICAgOiBtX2V3a1ZpZXcoZXdrVmlldykKK1dlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4
dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgOiBtX2V3a1ZpZXcoMCkK
ICAgICAsIG1fcGFnZShjb250ZXh0LT5jcmVhdGVXZWJQYWdlKHRoaXMsIHBhZ2VHcm91cCkpCiB7
CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CkBAIC02MiwxMCArNjIsNiBAQCBXZWJWaWV3OjpXZWJW
aWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3
KiBld2tWaWV3KQogICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmly
b25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7CiAgICAgbV9w
YWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlz
aWJsZShzaG93RGVidWdWaXN1YWxzKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlz
dWFscyk7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlLT5mdWxsU2Ny
ZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV2YXNPYmplY3QoKSk7Ci0jZW5kaWYKIH0KIAogV2Vi
Vmlldzo6fldlYlZpZXcoKQpAQCAtNzYsNiArNzIsMjIgQEAgV2ViVmlldzo6fldlYlZpZXcoKQog
ICAgIG1fcGFnZS0+Y2xvc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxXZWJWaWV3PiBXZWJWaWV3Ojpj
cmVhdGUoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCkpOworfQor
CisvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCit2b2lkIFdlYlZpZXc6OnNldEV3a1Zp
ZXcoRXdrVmlldyogZXdrVmlldykKK3sKKyAgICBtX2V3a1ZpZXcgPSBld2tWaWV3OworCisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+
c2V0V2ViVmlldyhld2tWaWV3LT5ldmFzT2JqZWN0KCkpOworI2VuZGlmCisKK30KKwogdm9pZCBX
ZWJWaWV3Ojppbml0aWFsaXplKCkKIHsKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7
CkBAIC0yNzQsMTEgKzI4NiwxOSBAQCBib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgp
CiAKIGJvb2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCiB7CisgICAgLy8gRklYTUU6IFVubmVl
ZGVkIGFmdGVyIHdlYmtpdC5vcmcvYi8xMTA4NzcKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIG1fZXdrVmlldy0+aXNGb2N1c2VkKCk7CiB9
CiAKIGJvb2wgV2ViVmlldzo6aXNWaWV3VmlzaWJsZSgpCiB7CisgICAgLy8gRklYTUU6IFVubmVl
ZGVkIGFmdGVyIHdlYmtpdC5vcmcvYi8xMTA4NzcKKyAgICBpZiAoIW1fZXdrVmlldykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIG1fZXdrVmlldy0+aXNWaXNpYmxlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKaW5kZXggOWY1ZjZmNC4uMGE4
MjI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTUwLDkgKzUw
LDEzIEBAIGNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMgUGFnZUNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVWaWV3Owog
Ci0gICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKiwgRXdrVmlldyopOwogICAg
IHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNy
ZWF0ZShXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHdoZW4gcG9zc2libGUuCisgICAgdm9pZCBzZXRFd2tWaWV3KEV3a1ZpZXcqKTsKKwogICAgIHZv
aWQgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihk
b3VibGUgdHgsIGRvdWJsZSB0eSk7CkBAIC05Niw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdDsKIAogcHJpdmF0
ZToKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKICAgICBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwog
CiAgICAgLy8gUGFnZUNsaWVudApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5k
ZXggYjU2YzA5Ni4uOTY5MTg5MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5o
CkBAIC00OCw4ICs0OCwxMCBAQCB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5
cGVkZWYgR3RrV2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKIHR5
cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsK
LXR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7Cit0eXBlZGVmIEVjb3JlX0V2YXMq
IFBsYXRmb3JtQmFja2luZzsKK3R5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV2luZG93Owog
I2VsaWYgUExBVEZPUk0oUVQpCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFRdWlja1ZpZXc7
CkBAIC05Myw2ICs5NSw5IEBAIHByaXZhdGU6CiAKICAgICBQbGF0Zm9ybVdLVmlldyBtX3ZpZXc7
CiAgICAgUGxhdGZvcm1XaW5kb3cgbV93aW5kb3c7CisjaWYgUExBVEZPUk0oRUZMKQorICAgIFBs
YXRmb3JtQmFja2luZyBtX2JhY2tpbmc7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBXaW5kb3dNZXNzYWdlT2JzZXJ2ZXIqIG1fcGFyZW50V2luZG93TWVzc2FnZU9ic2VydmVyOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggOGEwMzVm
My4uZDMwMjA2MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1X
ZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcu
Y3BwCkBAIC0yOCw3ICsyOCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAKICNp
bmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1ZGUgIldlYktpdDIvV0tBUElDYXN0LmgiCisjaW5j
bHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogCiBleHRlcm4gYm9vbCB1c2VYMTFXaW5kb3c7
CkBAIC02MywzMiArNjQsMzMgQEAgc3RhdGljIHZvaWQgb25XZWJQcm9jZXNzQ3Jhc2hlZCh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiAKIFBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYpCiB7Ci0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyog
ZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVh
dGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKLSAgICBld2tfdmlld190aGVtZV9z
ZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3Qo
bV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwor
ICAgIG1fYmFja2luZyA9IGluaXRFY29yZUV2YXMoKTsKKworICAgIG1fdmlldyA9IFdLVmlld0Ny
ZWF0ZShjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRI
RU1FX0RJUiAiL2RlZmF1bHQuZWRqIikpOworICAgIFdLVmlld1NldFRoZW1lUGF0aChtX3ZpZXcs
IHdrVGhlbWUuZ2V0KCkpOworCisgICAgbV93aW5kb3cgPSBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0
KG1fdmlldywgZWNvcmVfZXZhc19nZXQobV9iYWNraW5nKSwgLyogc21hcnQgKi8gMCk7CisKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQobV93aW5kb3csICJ3ZWJwcm9jZXNzLGNy
YXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7
CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19P
YmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAv
LyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tW
aWV3LCBhcyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgog
ICAgIFdLUmVsZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkg
Y3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0
IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2Vi
VmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2Rl
bChldmFzT2JqZWN0KTsKKyAgICBldmFzX29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNv
cmVfZXZhc19mcmVlKG1fd2luZG93KTsKKyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsK
ICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpy
ZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dpbmRvdywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdL
UGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBjb25zdApAQCAtOTgsMjMgKzEwMCwyMyBA
QCBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7Ci0gICAgRXZhcyogZXZhcyA9
IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB0cnVlKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQobV93aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dp
bmRvdywgdHJ1ZSk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIs
ICJzcGFjZSIsICIgIiwgMCwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFz
LCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2Vi
Vmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBF
dmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3No
b3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQobV93aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5kb3cp
OwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKHVuc2lnbmVkIHgsIHVu
c2lnbmVkIHkpCiB7Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsK
LSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisgICAg
RXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBldmFzX29i
amVjdF9zaG93KG1fd2luZG93KTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFz
LCB4LCB5LCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfZG93bihldmFzLCAzLCBF
VkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZh
cywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaAppbmRleCAzN2NkZmNmLi44MTcyMDJiIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTU1LDggKzU1LDEwIEBAIHR5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93Owog
I2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZh
czsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYgV0tW
aWV3UmVmIFBsYXRmb3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRv
dzsKK3R5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5nOwordHlwZWRlZiBFdmFzX09i
amVjdCogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBAIC0xMDAs
NiArMTAyLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBQbGF0Zm9ybVdLVmlldyBtX3ZpZXc7
CiAgICAgUGxhdGZvcm1XaW5kb3cgbV93aW5kb3c7CisjaWYgUExBVEZPUk0oRUZMKQorICAgIFBs
YXRmb3JtQmFja2luZyBtX2JhY2tpbmc7CisjZW5kaWYKICAgICBib29sIG1fd2luZG93SXNLZXk7
CiAgICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtX29wdGlvbnM7CiAjaWYgUExBVEZP
Uk0oRUZMKSB8fCBQTEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKaW5kZXggMTM5MjBlYy4uMDBlN2QxZiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAK
QEAgLTMxNCwxNCArMzE0LDE2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tD
b3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3Bh
dGNoRXZlbnQoY29uc3QgV1RSRXZlbnQmIGV2ZW50KQogeworICAgIEV2YXMqIGV2YXMgPSBldmFz
X29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVdpbmRvdygpKTsKKwogICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91
c2VEb3duKQotICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5i
dXR0b24sIGV2ZW50Lm1vZGlmaWVycywgbV9jbGlja0NvdW50KTsKKyAgICAgICAgZGlzcGF0Y2hN
b3VzZURvd25FdmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycywgbV9jbGlj
a0NvdW50KTsKICAgICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91
c2VVcCkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50LmJ1dHRv
biwgZXZlbnQubW9kaWZpZXJzKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZXZhcywg
ZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50
VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZU1vdmUpCi0gICAgICAgIGRpc3BhdGNoTW91c2VNb3Zl
RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1XaW5kb3coKSksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nh
c3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChl
dmFzLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9w
b3NpdGlvbi55KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlw
ZU1vdXNlU2Nyb2xsQnkpCi0gICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KGVjb3Jl
X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93
KCkpLCBldmVudC5ob3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7CisgICAgICAgIGRpc3BhdGNo
TW91c2VTY3JvbGxCeUV2ZW50KGV2YXMsIGV2ZW50Lmhvcml6b250YWwsIGV2ZW50LnZlcnRpY2Fs
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpyZXBsYXlTYXZlZEV2ZW50cygpCkBAIC00
MTIsNyArNDE0LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVm
IGtleVJlZiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycywKICAgICBpZiAoKHN0cmxlbihr
ZXlOYW1lKSA9PSAxKSAmJiAoa2V5TmFtZVswXSA+PSAnQScgJiYga2V5TmFtZVswXSA8PSAnWicp
KQogICAgICAgICB3a01vZGlmaWVycyB8PSBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OwogCi0g
ICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9l
dmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygp
KTsKIAogICAgIGludCBldmVudEluZGV4ID0gMDsKICAgICAvLyBNaW1pYyB0aGUgZW1hY3MgY3Ry
bC1vIGJpbmRpbmcgYnkgaW5zZXJ0aW5nIGEgcGFyYWdyYXBoCkBAIC00MzgsNyArNDQwLDcgQEAg
dm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRfVHlw
ZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMpOwogCi0gICAgRXZhc19P
YmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9
IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCk7CiAgICAg
ZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUsIG1fdG91Y2hQb2lu
dHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSkp
OwogCiAgICAgRWluYV9MaXN0KiBsaXN0OwpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIAog
dm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogewotICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tW
aWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgKHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyAr
K2luZGV4KSB7CiAgICAgICAgIGlmIChtb2RpZmllciAmICgxIDw8IGluZGV4KSkgewpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXgg
YzNiYzg1Ny4uYzEzMGM3MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwv
UGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9Q
bGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC01OCwzNyArNTgsMzQgQEAgUGxhdGZvcm1XZWJWaWV3
OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cCwKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRml4ZWRMYXlvdXRLZXko
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZpeGVkTGF5b3V0Iikp
OwogICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlvbnMgPyBXS0Jvb2xlYW5HZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkob3B0aW9u
cywgdXNlRml4ZWRMYXlvdXRLZXkuZ2V0KCkpKSkgOiBmYWxzZTsKIAotICAgIG1fd2luZG93ID0g
aW5pdEVjb3JlRXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRv
dyk7CisgICAgbV9iYWNraW5nID0gaW5pdEVjb3JlRXZhcygpOwogCi0gICAgaWYgKG1fdXNpbmdG
aXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlv
dXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAwLCA2MDApOwotICAgIH0gZWxzZQotICAg
ICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKKyAg
ICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29udGV4dCwgcGFnZUdyb3VwKTsKKyAgICBtX3dpbmRv
dyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3QobV92aWV3LCBlY29yZV9ldmFzX2dldChtX2JhY2tp
bmcpLCAvKiBzbWFydCAqLyAwKTsKIAotICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBXS1BhZ2VT
ZXRVc2VGaXhlZExheW91dChXS1ZpZXdHZXRQYWdlKG1fdmlldyksIG1fdXNpbmdGaXhlZExheW91
dCk7CisKKyAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KQorICAgICAgICByZXNpemVUbyg4MDAs
IDYwMCk7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93aW5kb3csIFRIRU1FX0RJUiIvZGVm
YXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rf
c2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIGV2YXNfb2JqZWN0X3Nob3co
bV93aW5kb3cpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewot
ICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
OwotCiAgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9uZ2Vy
IHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5IHJl
ZmVycyB0by4KICAgICBXS1JlbGVhc2UobV92aWV3KTsKIAotICAgIC8vIEZJWE1FOiBUaGUgQyBX
S1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0
byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBX
ZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KLSAgICBldmFz
X29iamVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3RfZGVsKG1fd2luZG93KTsK
IAotICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CisgICAgZWNvcmVfZXZhc19mcmVlKG1f
YmFja2luZyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3dpbmRvdywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdl
YlZpZXc6OnBhZ2UoKQpAQCAtOTgsMjcgKzk1LDI2IEBAIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZp
ZXc6OnBhZ2UoKQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogewotICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8v
IEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFT
Y3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3Jl
U3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNh
dGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhl
IHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KICAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZy
YW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChldmFzT2JqZWN0LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfZm9j
dXNfc2V0KGV2YXNPYmplY3QsIHRydWUpOworICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQo
bV93aW5kb3csIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93aW5kb3csIHRy
dWUpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAg
aW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0
cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZh
c19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX2JhY2tpbmcsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
KTsKIAogICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewotICAg
IGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5v
cmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3Jl
X2V2YXNfbW92ZV9yZXNpemUobV9iYWNraW5nLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2lu
LnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0
Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTM3LDcgKzEzMyw3IEBAIFdL
UmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFn
ZSgpCiB7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZhc19n
ZW9tZXRyeV9nZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVf
ZXZhc19nZW9tZXRyeV9nZXQobV9iYWNraW5nLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAg
IEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKICAgICByZXR1cm4gYWRvcHRXSyhX
S1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192191</attachid>
            <date>2013-03-08 03:23:49 -0800</date>
            <delta_ts>2013-03-15 02:32:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug111591</filename>
            <type>text/plain</type>
            <size>31592</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGVlMGI4YjA4Y2NjM2M5ODViNmY5ZjE4OWI3NTFiYTYyYjUyNThhNmQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMzMzNWQ2Ny4uNmU2ZGRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAz
LTA4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFRkwgaXMgbm90
IG5lZWRlZCBmb3IgV2ViVmlldyB0byBiZSBjb25zdHJ1Y3RlZC4KKyAgICAgICAgV2ViVmlldyBk
b2VzIG5vdCBrZWVwIGV2YXMgb2JqZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tW
aWV3IGNyZWF0aW9uIGRvZXMgbm90IHJlcXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3Nl
ZC4KKworICAgICAgICAoV0tWaWV3Q3JlYXRlRXZhc09iamVjdCk6CisKKyAgICAgICAgICAgIE5l
dyBmdW5jdGlvbiBlbmNhcHN1bGF0aW5nIEVXSyBWaWV3IEV2YXMgb2JqZWN0IGNyZWF0aW9uIGJh
c2VkIAorICAgICAgICAgICAgb24gdGhlIGdpdmVuIFdLVmlld1JlZi4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1Zp
ZXc6OmNyZWF0ZSk6CisKKyAgICAgICAgICAgIFdlYlZpZXcgaXMgcGFzc2VkIHRvIEV3a1ZpZXcg
Y29uc3RydWN0b3IgZnJvbSBvdXRzaWRlIHJhdGhlciB0aGFuCisgICAgICAgICAgICBjcmVhdGVk
IGluc2lkZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAg
ICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoK
KyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19hZGQpOgor
ICAgICAgICAoZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNz
L2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorCisgICAgICAgICAgICBV
cGRhdGVkIGFjY29yZGluZ2x5IHRvIHRoZSBuZXcgV0tWaWV3IEFQSS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RXdrVmlldyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OmlzVmlld0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpp
c1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoKKyAgICAg
ICAgKFdlYlZpZXcpOgorCisgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB1cGRhdGVkIFdL
VmlldyBBUEkuCisKIDIwMTMtMDMtMDcgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFu
eTEwMC5uZXQ+CiAKICAgICAgICAgW0VGTF0gRXdrVmlldyBzaG91bGQga2VlcCBjc3MgcG9zaXRp
b24gaW5zdGVhZCBvZiBzY3JvbGwgcG9zaXRpb24gaW4gZGV2aWNlIHBpeGVsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IGEyNDk4MjAuLjEy
OTMzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5j
cHAKQEAgLTI4LDI0ICsyOCwxOSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1zdGF0
aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1ZpZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRS
ZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3
QmVoYXZpb3IgYmVoYXZpb3IpCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRl
eHRSZWYpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKLSAgICBFdmFzX09iamVjdCog
ZXZhc09iamVjdCA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBjb250ZXh0LCBw
YWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKLSAgICBpZiAoIWV2YXNPYmplY3QpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odG9F
d2tWaWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOworICAgIFJlZlB0cjxXZWJWaWV3PiB3ZWJW
aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91
cFJlZikpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdlYlZpZXctPnBhZ2VSZWYoKSwg
dHJ1ZSk7CisgICAgcmV0dXJuIHRvQVBJKHdlYlZpZXcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9
CiAKLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQorRXZhc19PYmplY3QqIFdLVmll
d0NyZWF0ZUV2YXNPYmplY3QoV0tWaWV3UmVmIHZpZXdSZWYsIEV2YXMqIGV2YXMsIEV2YXNfU21h
cnQqIHNtYXJ0KQogewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVm
LCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0KKyAgICBpZiAoRXdr
VmlldyogZXdrVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZSh0b0ltcGwodmlld1JlZiksIGV2YXMsIHNt
YXJ0KSkKKyAgICAgICAgcmV0dXJuIGV3a1ZpZXctPmV2YXNPYmplY3QoKTsKIAotV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVm
YXVsdEJlaGF2aW9yKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBXS1ZpZXdJbml0aWFsaXpl
KFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTM4LDExICsxMzMsNiBAQCB2b2lkIFdLVmlld0V4aXRG
dWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVmKQogI2VuZGlmCiB9CiAKLUV2YXNfT2JqZWN0KiBX
S1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQotewotICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKLX0KLQogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVT
bmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKICAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9F
d2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGE3MDliNDguLjNiODE3NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjYsOSArMjYs
MTEgQEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBz
dHJ1Y3QgX0VvIEV2YXNfU21hcnQ7CiB0eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7CiAj
ZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX1Nt
YXJ0IEV2YXNfU21hcnQ7CiB0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7
CiAjZW5kaWYKIApAQCAtNTcsOSArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQg
V0tWaWV3Q2xpZW50OwogCiBlbnVtIHsga1dLVmlld0NsaWVudEN1cnJlbnRWZXJzaW9uID0gMCB9
OwogCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwotCi1XS19FWFBPUlQg
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOworV0tfRVhQT1JUIFdL
Vmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9SVCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVm
KTsKIFdLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpZXdDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBX
S1ZpZXdDbGllbnQqKTsKQEAgLTg4LDggKzg4LDcgQEAgV0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0
U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVs
bFNjcmVlbihXS1ZpZXdSZWYpOwogCi0vLyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRv
IGdldCByaWQgb2YgdGhpcywgc28ga2VlcCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KLVdLX0VY
UE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworV0tfRVhQ
T1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KFdLVmlld1JlZiwgRXZhcyos
IEV2YXNfU21hcnQqKTsKIAogV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNo
b3QoV0tWaWV3UmVmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcAppbmRleCAxZjJlZWEyLi45YjkzMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjI4LDExICsyMjgsMTEgQEAgdm9pZCBFd2tW
aWV3RXZlbnRIYW5kbGVyPEVWQVNfQ0FMTEJBQ0tfSElERT46OmhhbmRsZUV2ZW50KHZvaWQqIGRh
dGEsIEV2YXMqLCBFdmEKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KIAotRXdrVmlldzo6
RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikK
LSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQotICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CitFd2tWaWV3OjpFd2tWaWV3KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiB3ZWJWaWV3LCBF
dmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICwg
bV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCisgICAgLCBtX2NvbnRleHQoRXdrQ29udGV4dDo6Y3Jl
YXRlKFdLUGFnZUdldENvbnRleHQod2tQYWdlKCkpKSkKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VS
ZXNpemUoZmFsc2UpCi0gICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBs
KG1fY29udGV4dC0+d2tDb250ZXh0KCkpLCB0b0ltcGwocGFnZUdyb3VwKSwgdGhpcykpKQogICAg
ICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAg
ICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkK
ICAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAt
MjYwLDYgKzI2MCw5IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3Qs
IFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlCiAgICAgQVNTRVJUKG1fZXZh
c09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAKKyAgICAvLyBSZW1vdmUgd2hlbiBw
b3NzaWJsZS4KKyAgICBtX3dlYlZpZXctPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNH
TCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVj
dCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNH
TENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yNzEsOCArMjc0LDYgQEAgRXdr
Vmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXS1BhZ2UKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwog
Ci0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1
bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdl
dFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2Vz
ID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMwNCwxMyAr
MzA1LDExIEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICBpY29uRGF0YWJhc2UtPnVud2F0Y2hD
aGFuZ2VzKEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKTsKIH0KIAotRXZhc19PYmplY3Qq
IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShQ
YXNzUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gd2ViVmlldywgRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFz
LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQp
OworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNh
bnZhcywgc21hcnQgPyBzbWFydCA6IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXNPYmplY3QsIDApOwogCiAgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CkBA
IC0zMjEsMTUgKzMyMCw5IEBAIEV2YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0
KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQCiAKICAgICBBU1NFUlQo
IXNtYXJ0RGF0YS0+cHJpdik7CiAKLSAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVh
dGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAot
ICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgotICAgIHNtYXJ0RGF0
YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV2YXNPYmplY3QsIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwg
YmVoYXZpb3IpOwotICAgIHJldHVybiBldmFzT2JqZWN0OwotfQorICAgIHNtYXJ0RGF0YS0+cHJp
diA9IG5ldyBFd2tWaWV3KHdlYlZpZXcsIGV2YXNPYmplY3QpOwogCi1FdmFzX09iamVjdCogRXdr
Vmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBWaWV3QmVoYXZpb3IgYmVo
YXZpb3IpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBkZWZhdWx0U21h
cnRDbGFzc0luc3RhbmNlKCksIGNvbnRleHQsIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOworICAg
IHJldHVybiBzbWFydERhdGEtPnByaXY7CiB9CiAKIGJvb2wgRXdrVmlldzo6aW5pdFNtYXJ0Q2xh
c3NJbnRlcmZhY2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmIGFwaSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCAyY2M2ZTI3Li4zYzlkMjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC05NywxNyArOTcsOSBA
QCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFjZTsKIHR5cGVk
ZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIHR5cGVk
ZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzIEV3a19WaWV3X1NtYXJ0X0NsYXNzOwogCi0v
LyBFd2tWaWV3IG9iamVjdCBpcyBvd25lZCBieSB0aGUgZXZhcyBvYmplY3QsIG9idGFpbmVkIGZy
b20gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdCgpLgogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6
Ci0KLSAgICBlbnVtIFZpZXdCZWhhdmlvciB7Ci0gICAgICAgIExlZ2FjeUJlaGF2aW9yLAotICAg
ICAgICBEZWZhdWx0QmVoYXZpb3IKLSAgICB9OwotCi0gICAgc3RhdGljIEV2YXNfT2JqZWN0KiBj
cmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAs
IFZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAg
c3RhdGljIEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAg
IHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlZpZXc+LCBFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0ID0gMCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0
U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFydF9DbGFzcyYpOwogCkBAIC0yMTMsNyAr
MjA1LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiB0YWtlU25h
cHNob3QoKTsKIAogcHJpdmF0ZToKLSAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cCwgVmlld0JlaGF2aW9yKTsKKyAgICBFd2tWaWV3KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJWaWV3
PiwgRXZhc19PYmplY3QqKTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBzZXREZXZpY2VT
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKQEAgLTI1MSw2ICsyNDMsNyBAQCBwcml2YXRl
OgogCiBwcml2YXRlOgogICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVyIG1hdHRlcnMu
CisgICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3OwogICAgIEV2YXNfT2JqZWN0
KiBtX2V2YXNPYmplY3Q7CiAgICAgUmVmUHRyPEV3a0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBP
d25QdHI8RXZhc19HTD4gbV9ldmFzR0w7CkBAIC0yNTksNyArMjUyLDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fZGV2aWNlU2l6ZTsKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKICAgICBib29sIG1fcGVuZGluZ1N1
cmZhY2VSZXNpemU7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3OwogICAg
IE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwogICAg
IE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsK
ICAgICBPd25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDRmMWEx
MzEuLmQyNmViOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKQEAgLTg4LDE3ICs4OCwyNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xh
c3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCiAKIEV2YXNfT2JqZWN0KiBld2tfdmll
d19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFz
LCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgRXdr
Q29udGV4dCogZXdrQ29udGV4dCA9IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4
dCk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0Ny
ZWF0ZShld2tDb250ZXh0LT53a0NvbnRleHQoKSwgMCkpOworCisgICAgcmV0dXJuIFdLVmlld0Ny
ZWF0ZUV2YXNPYmplY3Qod2tWaWV3LmdldCgpLCBjYW52YXMsIHNtYXJ0KTsKIH0KIAotRXZhc19P
YmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4
dCogY29udGV4dCkKK0V2YXNfT2JqZWN0KiBld2tfdmlld19hZGQoRXZhcyogY2FudmFzKQogewot
ICAgIHJldHVybiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9j
YXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiB3
a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZShXS0NvbnRleHRDcmVhdGUoKSwgMCkpOworCisg
ICAgcmV0dXJuIFdLVmlld0NyZWF0ZUV2YXNPYmplY3Qod2tWaWV3LmdldCgpLCBjYW52YXMsIDAp
OwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2YXMqIGNhbnZhcykKK0V2YXNfT2Jq
ZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoY2FudmFz
LCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKKyAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0
ID0gZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KTsKKyAgICBXS1JldGFpblB0
cjxXS1ZpZXdSZWY+IHdrVmlldyA9IGFkb3B0V0soV0tWaWV3Q3JlYXRlKGV3a0NvbnRleHQtPndr
Q29udGV4dCgpLCAwKSk7CisKKyAgICByZXR1cm4gV0tWaWV3Q3JlYXRlRXZhc09iamVjdCh3a1Zp
ZXcuZ2V0KCksIGNhbnZhcywgMCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggZmEyZTA4ZC4u
ZDQ4N2NiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNw
ZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJ
bnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VmbEluc3BlY3RvclV0aWxpdGllcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZS5o
PgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dL
UHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC05OCwyMCArMTAyLDE5
IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVj
dG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KLSAgICBXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOwot
ICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoZWNvcmVfZXZh
c19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBFd2tDb250ZXh0OjpjcmVhdGUoY29udGV4dFJlZiks
IHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwot
ICAgIGlmICghbV9pbnNwZWN0b3JWaWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICBXS0NvbnRl
eHRSZWYgd2tDb250ZXh0ID0gdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7Cisg
ICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAo
KSk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0Ny
ZWF0ZSh3a0NvbnRleHQsIHdrUGFnZUdyb3VwKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEVT
VF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tW
aWV3LmdldCgpLCB3a1RoZW1lLmdldCgpKTsKIAotICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3
a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NFUlQoZXdrVmlldyk7Ci0gICAgZXdrVmll
dy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKKyAgICBtX2lu
c3BlY3RvclZpZXcgPSBXS1ZpZXdDcmVhdGVFdmFzT2JqZWN0KHdrVmlldy5nZXQoKSwgZWNvcmVf
ZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCAvKiBzbWFydCAqLyAwKTsKIAotICAgIEV3a19T
ZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwotICAgIGV3a19zZXR0aW5n
c19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywgdHJ1ZSk7
CisgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVm
ZXJlbmNlcyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nlc3NGcm9t
RmlsZVVSTHNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgcmV0dXJuIGV3a1Zp
ZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmlld0dldFBhZ2Uod2tWaWV3LmdldCgp
KSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCA1YzJiM2JhLi5lNWU4MGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTUxLDggKzUxLDgg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJW
aWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3Vw
LCBFd2tWaWV3KiBld2tWaWV3KQotICAgIDogbV9ld2tWaWV3KGV3a1ZpZXcpCitXZWJWaWV3OjpX
ZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAg
IDogbV9ld2tWaWV3KDApCiAgICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlz
LCBwYWdlR3JvdXApKQogewogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpAQCAtNjIsMTAgKzYyLDYg
QEAgV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBh
Z2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKICAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBk
ZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50
LCAiMSIpOwogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CiAgICAgbV9wYWdlLT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNp
YmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhldmFzT2JqZWN0KCkpOwot
I2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTc2LDYgKzcyLDIyIEBAIFdlYlZp
ZXc6On5XZWJWaWV3KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2Vi
Vmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCog
cGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBw
YWdlR3JvdXApKTsKK30KKworLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBX
ZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0g
ZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRp
ZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0
aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc2LDExICsyODgsMTkgQEAgYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzRm9jdXNlZCgpOwogfQogCiBib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmlu
ZGV4IDlmNWY2ZjQuLjBhODIyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oCkBAIC01MCw5ICs1MCwxMyBAQCBjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCwg
cHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5
cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCos
IEV3a1ZpZXcqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOworCisgICAg
Ly8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIHZvaWQgc2V0RXdrVmlldyhFd2tW
aWV3Kik7CisKICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgc2V0VXNlclZpZXdw
b3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwpAQCAtOTYsNiArMTAwLDcgQEAg
cHVibGljOgogICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3Vw
Kik7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKTsKIAogICAgIC8vIFBhZ2VDbGllbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNDRkMjQzLi5lMGFmNmVjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTMtMDMtMDggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPiBhbmQgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNlcGFyYXRlIFdlYlZpZXcgZnVydGhlciBmcm9t
IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTU5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZWQgRUZMIFBsYXRmb3JtV2ViVmlldyB0byBtZWV0IHRoZSBuZXcgV0tWaWV3IEFQSS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgIChQ
bGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2Vi
Vmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRm
b3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNp
bXVsYXRlU3BhY2ViYXJLZXlQcmVzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBs
YXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDoKKyAg
ICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
VFI6OkV2ZW50U2VuZGVyUHJveHk6OmtleURvd24pOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpzZW5kVG91Y2hFdmVudCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6
OnNldFRvdWNoTW9kaWZpZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRm
b3JtV2ViVmlld0VmbC5jcHA6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJW
aWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6Zm9jdXMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdl
YlZpZXc6OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRX
aW5kb3dGcmFtZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNo
b3RJbWFnZSk6CisKIDIwMTMtMDMtMDggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBXZWIgQXVkaW8gaW4gZGV2ZWxvcG1lbnQgYnVp
bGRzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCBiNTZjMDk2Li45Njkx
ODkxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ4LDggKzQ4LDEw
IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQg
KlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vj
b3JlX0V2YXMgRWNvcmVfRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09i
amVjdDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9F
dmFzKiBQbGF0Zm9ybVdpbmRvdzsKK3R5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5n
OwordHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShR
VCkKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUVF1aWNrVmlldzsKQEAgLTkzLDYgKzk1LDkg
QEAgcHJpdmF0ZToKIAogICAgIFBsYXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdp
bmRvdyBtX3dpbmRvdzsKKyNpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1f
YmFja2luZzsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFdpbmRvd01lc3NhZ2VP
YnNlcnZlciogbV9wYXJlbnRXaW5kb3dNZXNzYWdlT2JzZXJ2ZXI7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAppbmRleCA4YTAzNWYzLi5kMzAyMDYwIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTI4LDcgKzI4
LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKIAogI2luY2x1ZGUgIkVXZWJLaXQy
LmgiCi0jaW5jbHVkZSAiV2ViS2l0Mi9XS0FQSUNhc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dL
QVBJQ2FzdC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxF
Y29yZV9FdmFzLmg+CiAKIGV4dGVybiBib29sIHVzZVgxMVdpbmRvdzsKQEAgLTYzLDMyICs2NCwz
MyBAQCBzdGF0aWMgdm9pZCBvbldlYlByb2Nlc3NDcmFzaGVkKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKIAogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAg
ICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZh
c19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYpOwotICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJv
Y2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CisgICAgbV9iYWNraW5nID0g
aW5pdEVjb3JlRXZhcygpOworCisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVs
dC5lZGoiKSk7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKG1fdmlldywgd2tUaGVtZS5nZXQoKSk7
CisKKyAgICBtX3dpbmRvdyA9IFdLVmlld0NyZWF0ZUV2YXNPYmplY3QobV92aWV3LCBlY29yZV9l
dmFzX2dldChtX2JhY2tpbmcpLCAvKiBzbWFydCAqLyAwKTsKKworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChtX3dpbmRvdywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJv
Y2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1X
ZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVj
dCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKLQogICAgIC8vIFJlbGVhc2UgZmlyc3Qu
IFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcg
b3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCiAgICAgV0tSZWxlYXNlKG1f
dmlldyk7CiAKLSAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRl
cyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKLSAgICAvLyAoYW5k
IGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwg
dW50aWwgdGhpcyBnZXQgZml4ZWQuCi0gICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOwor
ICAgIGV2YXNfb2JqZWN0X2RlbChtX3dpbmRvdyk7CiAKLSAgICBlY29yZV9ldmFzX2ZyZWUobV93
aW5kb3cpOworICAgIGVjb3JlX2V2YXNfZnJlZShtX2JhY2tpbmcpOwogICAgIGVjb3JlX2V2YXNf
c2h1dGRvd24oKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3Rf
cmVzaXplKG1fd2luZG93LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3Jt
V2ViVmlldzo6cGFnZSgpIGNvbnN0CkBAIC05OCwyMyArMTAwLDIzIEBAIFdLUGFnZVJlZiBQbGF0
Zm9ybVdlYlZpZXc6OnBhZ2UoKSBjb25zdAogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxh
dGVTcGFjZWJhcktleVByZXNzKCkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQo
bV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyksIHRydWUpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCht
X3dpbmRvdyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCB0cnVlKTsKICAg
ICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAw
LCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFj
ZSIsICIgIiwgMCwgMSwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1v
dXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldykpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCht
X3dpbmRvdyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAg
ICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0
X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZh
c19vYmplY3RfZXZhc19nZXQobV93aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5k
b3cpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwog
ICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUs
IDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRP
Tl9OT05FLCAwLCAwKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1XZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmlu
ZGV4IDM3Y2RmY2YuLjgxNzIwMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
UGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaApAQCAtNTUsOCArNTUsMTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1Zp
ZXc7CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShF
RkwpCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwordHlwZWRlZiBzdHJ1
Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1X
S1ZpZXc7Ci10eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwordHlwZWRlZiBFY29y
ZV9FdmFzKiBQbGF0Zm9ybUJhY2tpbmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdp
bmRvdzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTEwMCw2ICsxMDIsOSBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFBsYXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdp
bmRvdyBtX3dpbmRvdzsKKyNpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1f
YmFja2luZzsKKyNlbmRpZgogICAgIGJvb2wgbV93aW5kb3dJc0tleTsKICAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1fb3B0aW9uczsKICNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRG
T1JNKFFUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5k
ZXJQcm94eUVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclBy
b3h5RWZsLmNwcAppbmRleCAxMzkyMGVjLi4wMGU3ZDFmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtMzE0LDE0ICszMTQs
MTYgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGlu
dCBidXR0b24pCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBX
VFJFdmVudCYgZXZlbnQpCiB7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworCiAg
ICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZURvd24pCi0gICAgICAg
IGRpc3BhdGNoTW91c2VEb3duRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9k
aWZpZXJzLCBtX2NsaWNrQ291bnQpOworICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGV2
YXMsIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQpOwogICAgIGVs
c2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVVwKQotICAgICAgICBk
aXNwYXRjaE1vdXNlVXBFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmll
cnMpOworICAgICAgICBkaXNwYXRjaE1vdXNlVXBFdmVudChldmFzLCBldmVudC5idXR0b24sIGV2
ZW50Lm1vZGlmaWVycyk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50
VHlwZU1vdXNlTW92ZSkKLSAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFz
X2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwg
c3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRp
b24ueSkpOworICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGV2YXMsIHN0YXRpY19jYXN0
PGludD4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKICAg
ICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSkK
LSAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50Lmhvcml6
b250YWwsIGV2ZW50LnZlcnRpY2FsKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZl
bnQoZXZhcywgZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOwogfQogCiB2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKQEAgLTQxMiw3ICs0MTQsNyBAQCB2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50
TW9kaWZpZXJzIHdrTW9kaWZpZXJzLAogICAgIGlmICgoc3RybGVuKGtleU5hbWUpID09IDEpICYm
IChrZXlOYW1lWzBdID49ICdBJyAmJiBrZXlOYW1lWzBdIDw9ICdaJykpCiAgICAgICAgIHdrTW9k
aWZpZXJzIHw9IGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXk7CiAKLSAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1X
aW5kb3coKSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENv
bnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOwogCiAgICAgaW50IGV2
ZW50SW5kZXggPSAwOwogICAgIC8vIE1pbWljIHRoZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBp
bnNlcnRpbmcgYSBwYXJhZ3JhcGgKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsK
ICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9
IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxl
ci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKTsKICAgICBld2tfdmlld19mZWVkX3Rv
dWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9k
aWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xp
c3QqIGxpc3Q7CkBAIC00OTAsNyArNDkyLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRh
dGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBl
bmFibGUpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBF
dmFzX09iamVjdCogZXdrVmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtV2luZG93KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAo
c2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAg
ICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCBjM2JjODU3Li5jMTMwYzcx
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdF
ZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0Vm
bC5jcHAKQEAgLTU4LDM3ICs1OCwzNCBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmll
dyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGaXhlZExheW91dEtleShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRml4ZWRMYXlvdXQiKSk7CiAgICAgbV91c2luZ0Zp
eGVkTGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExheW91
dEtleS5nZXQoKSkpKSA6IGZhbHNlOwogCi0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7
Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBtX2JhY2tp
bmcgPSBpbml0RWNvcmVFdmFzKCk7CiAKLSAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0g
ICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0
LCBwYWdlR3JvdXApOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09i
amVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fdmlldyA9IFdLVmll
d0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fd2luZG93ID0gV0tWaWV3Q3JlYXRl
RXZhc09iamVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZyksIC8qIHNtYXJ0ICov
IDApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0
KFdLVmlld0dldFBhZ2UobV92aWV3KSwgbV91c2luZ0ZpeGVkTGF5b3V0KTsKKworICAgIGlmICht
X3VzaW5nRml4ZWRMYXlvdXQpCisgICAgICAgIHJlc2l6ZVRvKDgwMCwgNjAwKTsKKworICAgIGV3
a192aWV3X3RoZW1lX3NldChtX3dpbmRvdywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAg
IG1fd2luZG93SXNLZXkgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2
YXNPYmplY3QobV92aWV3KSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiB9CiAK
IFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxl
YXNlIGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBh
cyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdL
UmVsZWFzZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVu
dGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0g
ICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykg
dGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFz
T2JqZWN0KTsKKyAgICBldmFzX29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZh
c19mcmVlKG1fd2luZG93KTsKKyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKIH0KIAog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCkBA
IC05OCwyNyArOTUsMjYgQEAgV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiAKIHZv
aWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMs
IGFuIGlmcmFtZSBtaWdodCByZWNlaXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBp
cyBub3QgYXdhcmUgb2YgaXQgYXQgYWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2Vk
RnJhbWVDaGFuZ2VkKCkgZG9lcyBub3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBt
YW51YWxseSByZW1vdmUgdGhlCiAgICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRo
ZSBjYWxsIGdpdmUgZm9jdXMgdG8gZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8g
YmUgZWZmZWN0ZnVsLgogICAgIGlmIChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBX
S1BhZ2VHZXRNYWluRnJhbWUocGFnZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0
KGV2YXNPYmplY3QsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoZXZhc09iamVj
dCwgdHJ1ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgZmFsc2Up
OworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgdHJ1ZSk7CiB9CiAKIFdLUmVj
dCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgs
IGhlaWdodDsKIAotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3cs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0
cnlfZ2V0KG1fYmFja2luZywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJu
IFdLUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgZWNvcmVfZXZhc19tb3Zl
X3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5z
aXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6
ZShtX2JhY2tpbmcsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53
aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRk
Q2hyb21lSW5wdXRGaWVsZCgpCkBAIC0xMzcsNyArMTMzLDcgQEAgV0tSZXRhaW5QdHI8V0tJbWFn
ZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKIHsKICAgICBpbnQg
d2lkdGg7CiAgICAgaW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dp
bmRvdywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dl
dChtX2JhY2tpbmcsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKTsKIAogICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBz
aG90KG1fdmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193263</attachid>
            <date>2013-03-15 02:32:55 -0700</date>
            <delta_ts>2013-03-18 05:04:26 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>bug111591_v2</filename>
            <type>text/plain</type>
            <size>36032</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDRlZmM2ODg3NTNhZTIyNDczMGJiMTYxODhhM2E4YzZlNmFjYThhYzAKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzg3YmM1NC4uNTc5MjQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAz
LTE1ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFRkwgaXMgbm90
IHByZXNlbnQgaW4gV0tWaWV3IEFQSS4KKyAgICAgICAgV2ViVmlldyBkb2VzIG5vdCBrZWVwIGV2
YXMgb2JqZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgor
ICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tWaWV3IGNyZWF0aW9uIGRv
ZXMgbm90IHJlcXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3NlZC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3
a1ZpZXc6OmNyZWF0ZSk6CisKKyAgICAgICAgICAgIFdLVmlld1JlZiBpcyBwYXNzZWQgdG8gRXdr
VmlldyBjb25zdHJ1Y3RvciBmcm9tIG91dHNpZGUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGNy
ZWF0ZWQgaW5zaWRlLgorCisgICAgICAgIChFd2tWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAg
KEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKworICAgICAgICAg
ICAgRXdrVmlldyBrZWVwcyBXS1ZpZXdSZWYgcmF0aGVyIHRoYW4gcG9pbnRlciB0byBXZWJWaWV3
IGNsYXNzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKGV3a0NyZWF0ZUV2YXNPYmplY3QpOgorCisgICAgICAgICAgICBB
ZGRlZCBwcml2YXRlIEFQSSB0byBjcmVhdGUgZXdrIHZpZXcgZXZhcyBvYmplY3QgYnkgZ2l2ZW4K
KyAgICAgICAgICAgIFdLVmlld1JlZi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmNwcDoKKyAgICAgICAgKGV3a0NyZWF0ZUV2YXNPYmplY3QpOgorICAgICAgICAoZXdr
X3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKGV3a192aWV3X2FkZCk6CisgICAgICAgIChld2tf
dmlld19hZGRfd2l0aF9jb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3Bl
Y3RvclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgYWNjb3Jk
aW5nbHkgdG8gdGhlIG5ldyBBUElzLgorCisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpzZXRFd2tWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6aXNWaWV3
Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzVmlld1Zpc2libGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOgorICAgICAgICAoV2ViVmlldyk6CisKKyAg
ICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHVwZGF0ZWQgV0tWaWV3IEFQSS4KKwogMjAxMy0w
My0xNSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4K
IAogICAgICAgICBbV0syXVtFRkxdIEdldCByaWQgb2YgV2ViUGFnZVByb3h5Ojp2aWV3V2lkZ2V0
KCkgbWV0aG9kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZs
L1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5j
cHAKaW5kZXggZGNkM2UyYy4uMGUxNjY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjksMjUgKzI5LDExIEBACiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVmIGNyZWF0ZVdLVmlldyhFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK1dLVmlld1JlZiBXS1ZpZXdD
cmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9IGNvbnRleHRSZWYgPyBFd2tD
b250ZXh0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKGNvbnRleHRSZWYpIDogRXdrQ29udGV4dDo6ZGVm
YXVsdENvbnRleHQoKTsKLSAgICBSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBFd2tQ
YWdlR3JvdXA6OmNyZWF0ZShwYWdlR3JvdXBSZWYpOwotICAgIEV2YXNfT2JqZWN0KiBldmFzT2Jq
ZWN0ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIGNvbnRleHQsIHBhZ2VHcm91
cCwgYmVoYXZpb3IpOwotICAgIGlmICghZXZhc09iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih0b0V3a1ZpZXcoZXZh
c09iamVjdCktPndrVmlldygpKSk7Ci19Ci0KLVdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmKQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdl
R3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0KLQotV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVdL
VmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKTsKKyAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSh0
b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICBXS1BhZ2VTZXRV
c2VGaXhlZExheW91dCh3ZWJWaWV3LT5wYWdlUmVmKCksIHRydWUpOworICAgIHJldHVybiB0b0FQ
SSh3ZWJWaWV3LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxp
emUoV0tWaWV3UmVmIHZpZXdSZWYpCkBAIC0xNDAsMTEgKzEyNiw2IEBAIHZvaWQgV0tWaWV3RXhp
dEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXdSZWYpCiAjZW5kaWYKIH0KIAotRXZhc19PYmplY3Qq
IFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRv
SW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpOwotfQotCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0
ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQogewogICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0
b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKaW5kZXggYTcwOWI0OC4uY2EzNGJhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCwxNCAr
MjQsNiBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0dlb21ldHJ5Lmg+CiAKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhczsKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
cyBFdmFzOwotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlm
Ci0KIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKIAogI2lm
ZGVmIF9fY3BsdXNwbHVzCkBAIC01Nyw5ICs0OSw3IEBAIHR5cGVkZWYgc3RydWN0IFdLVmlld0Ns
aWVudCBXS1ZpZXdDbGllbnQ7CiAKIGVudW0geyBrV0tWaWV3Q2xpZW50Q3VycmVudFZlcnNpb24g
PSAwIH07CiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7Ci0KLVdLX0VY
UE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CitXS19FWFBP
UlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1Zp
ZXdSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNv
bnN0IFdLVmlld0NsaWVudCopOwpAQCAtODgsOSArNzgsNiBAQCBXS19FWFBPUlQgYm9vbCBXS1Zp
ZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1JlZik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLVmlld0V4
aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CiAKLS8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4g
aXMgdG8gZ2V0IHJpZCBvZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgot
V0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7Ci0K
IFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAK
ICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3LmNwcAppbmRleCAxN2RjYjY0Li4xNWY0ODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjM3LDEyICsyMzcsMTIgQEAgc3RhdGlj
IGlubGluZSBXS1BhZ2VUb0V2YXNPYmplY3RNYXAmIHdrUGFnZVRvRXZhc09iamVjdE1hcCgpCiAK
IC8vIEV3a1ZpZXcgaW1wbGVtZW50YXRpb24uCiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0
cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDog
bV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fcGFnZUdyb3VwKHBhZ2VHcm91cCkKK0V3a1ZpZXc6OkV3a1ZpZXcoV0tWaWV3UmVmIHZpZXcs
IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIDogbV93ZWJWaWV3KHZpZXcpCisgICAgLCBt
X2V2YXNPYmplY3QoZXZhc09iamVjdCkKKyAgICAsIG1fY29udGV4dChFd2tDb250ZXh0OjpmaW5k
T3JDcmVhdGVXcmFwcGVyKFdLUGFnZUdldENvbnRleHQod2tQYWdlKCkpKSkKKyAgICAsIG1fcGFn
ZUdyb3VwKEV3a1BhZ2VHcm91cDo6Y3JlYXRlKFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSkp
KSAvLyBGSVhNRTogTXVzdCBiZSBmaW5kT3JDcmVhdGVXcmFwcGVyIGFmdGVyIHdlYmtpdC5vcmcv
Yi8xMTIzNjQuCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQotICAgICwgbV93
ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgp
KSwgdG9JbXBsKG1fcGFnZUdyb3VwLT53a1BhZ2VHcm91cCgpKSwgdGhpcykpKQogICAgICwgbV9w
YWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9w
YWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMjcwLDYg
KzI3MCw5IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAgICAgQVNTRVJUKG1fZXZhc09iamVj
dCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAKKyAgICAvLyBSZW1vdmUgd2hlbiBwb3NzaWJs
ZS4KKyAgICB3ZWJWaWV3KCktPnNldEV3a1ZpZXcodGhpcyk7CisKICAgICBtX2V2YXNHTCA9IGFk
b3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fZXZhc09iamVjdCkpKTsK
ICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4dCA9IEV2YXNHTENvbnRl
eHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yODEsOCArMjg0LDYgQEAgRXdrVmlldzo6
RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBQYXNzUmUKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tWaWV3KCkpOwogCi0gICAg
V0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9yID09IERlZmF1bHRCZWhh
dmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VH
cm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQ
YWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAgLTMyMCwxMyArMzIxLDEx
IEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICB3a1BhZ2VUb0V2YXNPYmplY3RNYXAoKS5yZW1v
dmUod2tQYWdlKCkpOwogfQogCi1FdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlv
ciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXS1ZpZXdSZWYgd2ViVmlldywg
RXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250
ZXh0LCAwKTsKIAotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21h
cnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gZXZh
c19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQgPyBzbWFydCA6IGRlZmF1bHRTbWFydENs
YXNzSW5zdGFuY2UoKSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXNP
YmplY3QsIDApOwogCiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gdG9TbWFy
dERhdGEoZXZhc09iamVjdCk7CkBAIC0zMzcsMTQgKzMzNiw5IEBAIEV2YXNfT2JqZWN0KiBFd2tW
aWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBh
c3NSZWZQCiAKICAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CiAKLSAgICBzbWFydERhdGEt
PnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCAocGFnZUdyb3VwID8gcGFn
ZUdyb3VwIDogRXdrUGFnZUdyb3VwOjpjcmVhdGUoKSksIGJlaGF2aW9yKTsKKyAgICBzbWFydERh
dGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0KTsKIAotICAgIHJldHVy
biBldmFzT2JqZWN0OwotfQotCi1FdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVj
dChFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0
cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotewotICAg
IHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZGVmYXVsdFNtYXJ0Q2xhc3NJbnN0YW5j
ZSgpLCBjb250ZXh0LCBwYWdlR3JvdXAsIGJlaGF2aW9yKTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKEV3a19W
aWV3X1NtYXJ0X0NsYXNzJiBhcGkpCkBAIC05NjAsNiArOTU0LDExIEBAIHVuc2lnbmVkIGxvbmcg
bG9uZyBFd2tWaWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtCiB9CiAjZW5kaWYKIAorV2ViVmlldyogRXdrVmlldzo6d2ViVmlldygpCit7Cisg
ICAgcmV0dXJuIHRvSW1wbChtX3dlYlZpZXcuZ2V0KCkpOworfQorCiAvKioKICAqIEBpbnRlcm5h
bAogICogVGhlIHVybCBvZiB2aWV3IHdhcyBjaGFuZ2VkIGJ5IHRoZSBmcmFtZSBsb2FkZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYWY3OWY1OC4u
MDFlYzU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApA
QCAtOTgsMTcgKzk4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dM
X1N1cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1Nt
YXJ0X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9DbGFzcyBFd2tfVmlld19T
bWFydF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQgYnkgdGhlIGV2YXMgb2Jq
ZWN0LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoKS4KIGNsYXNzIEV3
a1ZpZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3IgewotICAgICAgICBMZWdh
Y3lCZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAgfTsKLQotICAgIHN0YXRp
YyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQq
IHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBQYXNzUmVmUHRyPEV3a1Bh
Z2VHcm91cD4gcGFnZUdyb3VwID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6
RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZUV2YXNPYmpl
Y3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQ
dHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSAwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBF
d2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tWaWV3KiBjcmVhdGUoV0tW
aWV3UmVmLCBFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0ID0gMCk7CiAKICAgICBzdGF0
aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFydF9DbGFzcyYpOwog
CkBAIC0xMTYsMTAgKzEwOCwxMCBAQCBwdWJsaWM6CiAKICAgICBFdmFzX09iamVjdCogZXZhc09i
amVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0gICAgV0tWaWV3UmVmIHdrVmlldygp
IGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0KKyAgICBXS1ZpZXdSZWYg
d2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9CiAgICAgV0tQYWdlUmVm
IHdrUGFnZSgpIGNvbnN0OwogCi0gICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJl
dHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQorICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdl
KCkgeyByZXR1cm4gd2ViVmlldygpLT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250
ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrUGFnZUdyb3VwKiBld2tQ
YWdlR3JvdXAoKSB7IHJldHVybiBtX3BhZ2VHcm91cC5nZXQoKTsgfQogICAgIEV3a1NldHRpbmdz
KiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KQEAgLTIwMCw3ICsxOTIs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGluZm9ybURhdGFiYXNlUXVvdGFS
ZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcg
Y3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNh
Z2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlKTsKIAogICAgIC8vIEZJWE1FOiBS
ZW1vdmUgd2hlbiBwb3NzaWJsZS4KLSAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSB7IHJl
dHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKTsK
IAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBwYWdlU2NhbGVGYWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQpAQCAtMjE0LDcgKzIwNiw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gdGFrZVNuYXBzaG90KCk7
CiAKIHByaXZhdGU6Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdy
b3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoV0tWaWV3UmVmLCBFdmFzX09iamVjdCop
OwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNldERldmljZVNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwpAQCAtMjUyLDYgKzI0NCw3IEBAIHByaXZhdGU6CiAKIHByaXZhdGU6CiAg
ICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4KKyAgICBXS1JldGFpblB0
cjxXS1ZpZXdSZWY+IG1fd2ViVmlldzsKICAgICBFdmFzX09iamVjdCogbV9ldmFzT2JqZWN0Owog
ICAgIFJlZlB0cjxFd2tDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgUmVmUHRyPEV3a1BhZ2VHcm91
cD4gbV9wYWdlR3JvdXA7CkBAIC0yNjEsNyArMjU0LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fZGV2aWNlU2l6ZTsKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKICAgICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNp
emU7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3OwogICAgIE93blB0cjxX
ZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwogICAgIE93blB0cjxX
ZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsKICAgICBPd25Q
dHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDdhZTE4YzcuLjQ0NjNj
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAK
QEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a192
aWV3LmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiRXdrVmll
dy5oIgogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKQEAgLTg4LDE5ICs4OSwzNyBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkp
CiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKCphcGkpOwogfQog
Ci1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFy
dCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFd2tfUGFnZV9Hcm91cCogcGFnZUdyb3Vw
KQorRXZhc19PYmplY3QqIGV3a0NyZWF0ZUV2YXNPYmplY3QoV0tWaWV3UmVmIHZpZXcsIEV2YXMq
IGNhbnZhcywgRXZhc19TbWFydCogc21hcnQpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0
ZUV2YXNPYmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihj
b250ZXh0KSwgZXdrX29iamVjdF9jYXN0PEV3a1BhZ2VHcm91cCo+KHBhZ2VHcm91cCkpOworICAg
IGlmIChFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHZpZXcsIGNhbnZhcywgc21h
cnQpKQorICAgICAgICByZXR1cm4gZXdrVmlldy0+ZXZhc09iamVjdCgpOworCisgICAgcmV0dXJu
IDA7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNh
bnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRf
YWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0
LCBFd2tfUGFnZV9Hcm91cCogcGFnZUdyb3VwKQogewotICAgIHJldHVybiBFd2tWaWV3OjpjcmVh
dGVFdmFzT2JqZWN0KGNhbnZhcywgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0
KSk7CisgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCA9IGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCk7CisgICAgRXdrUGFnZUdyb3VwKiBld2tQYWdlR3JvdXAgPSBld2tfb2Jq
ZWN0X2Nhc3Q8RXdrUGFnZUdyb3VwKj4ocGFnZUdyb3VwKTsKKworICAgIFdLUmV0YWluUHRyPFdL
Vmlld1JlZj4gd2tWaWV3ID0gYWRvcHRXSyhXS1ZpZXdDcmVhdGUoZXdrQ29udGV4dC0+d2tDb250
ZXh0KCksIGV3a1BhZ2VHcm91cC0+d2tQYWdlR3JvdXAoKSkpOworCisgICAgcmV0dXJuIGV3a0Ny
ZWF0ZUV2YXNPYmplY3Qod2tWaWV3LmdldCgpLCBjYW52YXMsIHNtYXJ0KTsKIH0KIAogRXZhc19P
YmplY3QqIGV3a192aWV3X2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIGV3a192aWV3
X2FkZF93aXRoX2NvbnRleHQoY2FudmFzLCBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpKTsKKyAg
ICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IHdrVmlldyA9IGFkb3B0V0soV0tWaWV3Q3JlYXRlKFdL
Q29udGV4dENyZWF0ZSgpLCAwKSk7CisKKyAgICByZXR1cm4gZXdrQ3JlYXRlRXZhc09iamVjdCh3
a1ZpZXcuZ2V0KCksIGNhbnZhcywgMCk7Cit9CisKK0V2YXNfT2JqZWN0KiBld2tfdmlld19hZGRf
d2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
RXdrQ29udGV4dCogZXdrQ29udGV4dCA9IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29u
dGV4dCk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmll
d0NyZWF0ZShld2tDb250ZXh0LT53a0NvbnRleHQoKSwgMCkpOworCisgICAgcmV0dXJuIGV3a0Ny
ZWF0ZUV2YXNPYmplY3Qod2tWaWV3LmdldCgpLCBjYW52YXMsIDApOwogfQogCiBFd2tfQ29udGV4
dCogZXdrX3ZpZXdfY29udGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkMDJhMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a192aWV3
X3ByaXZhdGVfaAorI2RlZmluZSBld2tfdmlld19wcml2YXRlX2gKKworI2luY2x1ZGUgPEV2YXMu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgeworI2VuZGlmCisKK0VBUEkgRXZhc19PYmplY3QqIGV3a0NyZWF0ZUV2YXNPYmpl
Y3QoV0tWaWV3UmVmLCBFdmFzKiwgRXZhc19TbWFydCopOworCisjaWZkZWYgX19jcGx1c3BsdXMK
K30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCAy
NDBjYmIzLi40MDA3ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtMzQsOCArMzQsMTMgQEAKICNpbmNsdWRl
ICJld2tfcGFnZV9ncm91cF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAj
aW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KKyNpbmNsdWRl
IDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTksMjAgKzEwNCwxOSBAQCBXZWJQYWdl
UHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQog
ICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8g
RklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKLSAgICBtX2luc3Bl
Y3RvclZpZXcgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2YXNfZ2V0KG1faW5z
cGVjdG9yV2luZG93KSwgRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihjb250ZXh0UmVm
KSwgRXdrUGFnZUdyb3VwOjpjcmVhdGUodG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpKSwgRXdr
Vmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JWaWV3KQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBXS0NvbnRleHRSZWYgd2tDb250ZXh0ID0gdG9BUEkocGFnZSgpLT5w
cm9jZXNzKCktPmNvbnRleHQoKSk7CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSB0
b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiB3
a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZSh3a0NvbnRleHQsIHdrUGFnZUdyb3VwKSk7CisK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAg
ICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tWaWV3LmdldCgpLCB3a1RoZW1lLmdldCgpKTsKIAotICAg
IEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NF
UlQoZXdrVmlldyk7Ci0gICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIv
ZGVmYXVsdC5lZGoiKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBld2tDcmVhdGVFdmFzT2JqZWN0
KHdrVmlldy5nZXQoKSwgZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCAvKiBzbWFy
dCAqLyAwKTsKIAotICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5n
cygpOwotICAgIGV3a19zZXR0aW5nc19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2Vk
X3NldChzZXR0aW5ncywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2Vz
ID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEZpbGVBY2Nlc3NGcm9tRmlsZVVSTHNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUp
OwogCi0gICAgcmV0dXJuIGV3a1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmll
d0dldFBhZ2Uod2tWaWV3LmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRl
eCA1YzJiM2JhLi5lNWU4MGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5jcHAKQEAgLTUxLDggKzUxLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1XZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdl
YlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFd2tWaWV3KiBld2tWaWV3KQotICAgIDogbV9ld2tWaWV3
KGV3a1ZpZXcpCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwKQorICAgIDogbV9ld2tWaWV3KDApCiAgICAgLCBtX3BhZ2UoY29udGV4
dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdlR3JvdXApKQogewogICAgIG1fcGFnZS0+cGFnZUdy
b3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRy
dWUpOwpAQCAtNjIsMTAgKzYyLDYgQEAgV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250
ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKICAgICBib29s
IHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRl
YnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOwogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnBy
ZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFs
cyk7CiAgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRp
bmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2Vi
VmlldyhldmFzT2JqZWN0KCkpOwotI2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAg
LTc2LDYgKzcyLDIyIEBAIFdlYlZpZXc6On5XZWJWaWV3KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7
CiB9CiAKK1Bhc3NSZWZQdHI8V2ViVmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNv
bnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViVmlldyhjb250ZXh0LCBwYWdlR3JvdXApKTsKK30KKworLy8gRklYTUU6IFJlbW92ZSB3
aGVuIHBvc3NpYmxlLgordm9pZCBXZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcp
Cit7CisgICAgbV9ld2tWaWV3ID0gZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+
ZXZhc09iamVjdCgpKTsKKyNlbmRpZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgp
CiB7CiAgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc2LDExICsyODgsMTkg
QEAgYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6Omlz
Vmlld0ZvY3VzZWQoKQogeworICAgIC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3Jn
L2IvMTEwODc3CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiBtX2V3a1ZpZXctPmlzRm9jdXNlZCgpOwogfQogCiBib29sIFdlYlZpZXc6Omlz
Vmlld1Zpc2libGUoKQogeworICAgIC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3Jn
L2IvMTEwODc3CisgICAgaWYgKCFtX2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiBtX2V3a1ZpZXctPmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5oCmluZGV4IDlmNWY2ZjQuLjBhODIyNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC01MCw5ICs1MCwxMyBAQCBjbGFzcyBXZWJWaWV3
IDogcHVibGljIEFQSU9iamVjdCwgcHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0
YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29u
dGV4dCosIFdlYlBhZ2VHcm91cCosIEV3a1ZpZXcqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7
CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCosIFdl
YlBhZ2VHcm91cCopOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAg
IHZvaWQgc2V0RXdrVmlldyhFd2tWaWV3Kik7CisKICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAog
ICAgIHZvaWQgc2V0VXNlclZpZXdwb3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkp
OwpAQCAtOTYsNiArMTAwLDcgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgV2ViVmlldyhXZWJD
b250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKIAogICAgIC8vIFBhZ2VDbGllbnQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMDBm
Y2FiLi5iODhjZGVlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMtMDMtMTUgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPiBhbmQgTWlraGFpbCBQb3pkbnlha292ICA8bWlr
aGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNlcGFyYXRl
IFdlYlZpZXcgZnVydGhlciBmcm9tIEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTU5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgRUZMIFBsYXRmb3JtV2ViVmlldyB0byBtZWV0
IHRoZSBuZXcgV0tWaWV3IEFQSSBhbmQgZXdrIHZpZXcgcHJpdmF0ZSBBUEkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoUGxhdGZvcm1XZWJW
aWV3KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJW
aWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNl
YmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojpz
aW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZp
ZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHA6CisgICAgICAgIChXVFI6
OkV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5OjprZXlEb3duKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2Vu
ZFRvdWNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1v
ZGlmaWVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdF
ZmwuY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6
CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAg
ICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoV1RSOjpQbGF0
Zm9ybVdlYlZpZXc6OmZvY3VzKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5k
b3dGcmFtZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUp
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UpOgor
CiAyMDEzLTAzLTE1ICBUb2JpYXMgTXVlbGxlciAgPHRvYmlhc211ZUBnbm9tZS5vcmc+CiAKICAg
ICAgICAgQnVpbGQgZml4IGZvciBUb29scy9HdGtMYXVuY2hlci9Qcm9ncmFtc19HdGtMYXVuY2hl
ci1tYWluLm8gaWYgZ3N0cmVhbWVyIGlzIG5vdCBpbnN0YWxsZWQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oCmluZGV4IGI1NmMwOTYuLjk2OTE4OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNDgsOCArNDgsMTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYg
UGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCAqUGxhdGZvcm1XaW5kb3c7CiAjZWxp
ZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwor
dHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdS
ZWYgUGxhdGZvcm1XS1ZpZXc7Ci10eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93Owor
dHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybUJhY2tpbmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0
KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKFFUKQogUVRfQkVHSU5fTkFNRVNQQUNF
CiBjbGFzcyBRUXVpY2tWaWV3OwpAQCAtOTMsNiArOTUsOSBAQCBwcml2YXRlOgogCiAgICAgUGxh
dGZvcm1XS1ZpZXcgbV92aWV3OwogICAgIFBsYXRmb3JtV2luZG93IG1fd2luZG93OworI2lmIFBM
QVRGT1JNKEVGTCkKKyAgICBQbGF0Zm9ybUJhY2tpbmcgbV9iYWNraW5nOworI2VuZGlmCiAKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgV2luZG93TWVzc2FnZU9ic2VydmVyKiBtX3BhcmVudFdpbmRv
d01lc3NhZ2VPYnNlcnZlcjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1Bs
YXRmb3JtV2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCmluZGV4IDhhMDM1ZjMuLmQzNTg1MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9l
ZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtMjUsMTAgKzI1LDEyIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdlYlZpZXcuaCIKIAogI2luY2x1ZGUgIkVXZWJLaXQyLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Mi9XS0FQSUNhc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQVBJQ2FzdC5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CiAKIGV4
dGVybiBib29sIHVzZVgxMVdpbmRvdzsKQEAgLTYzLDMyICs2NSwzMyBAQCBzdGF0aWMgdm9pZCBv
bldlYlByb2Nlc3NDcmFzaGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykK
IAogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBtX3dpbmRvdyA9IGluaXRF
Y29yZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwot
ICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYp
OwotICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRI
RU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CisgICAgbV9iYWNraW5nID0gaW5pdEVjb3JlRXZhcygpOwor
CisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7CisK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisgICAgV0tW
aWV3U2V0VGhlbWVQYXRoKG1fdmlldywgd2tUaGVtZS5nZXQoKSk7CisKKyAgICBtX3dpbmRvdyA9
IGV3a0NyZWF0ZUV2YXNPYmplY3QobV92aWV3LCBlY29yZV9ldmFzX2dldChtX2JhY2tpbmcpLCAv
KiBzbWFydCAqLyAwKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3dp
bmRvdywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAg
IHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJW
aWV3KCkKIHsKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KTsKLQogICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBs
aXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFn
ZSBwcm94eSByZWZlcnMgdG8uCiAgICAgV0tSZWxlYXNlKG1fdmlldyk7CiAKLSAgICAvLyBGSVhN
RTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNv
IHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKLSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdr
VmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQu
Ci0gICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X2RlbCht
X3dpbmRvdyk7CiAKLSAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOworICAgIGVjb3JlX2V2
YXNfZnJlZShtX2JhY2tpbmcpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0
CkBAIC05OCwyMyArMTAxLDIzIEBAIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBj
b25zdAogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkK
IHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUpOworICAg
IEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5
X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2
ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1
bnNpZ25lZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7
Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAg
IEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAgZXZhc19v
YmplY3Rfc2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZh
cywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0
Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09i
amVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV93
aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5kb3cpOwogICAgIGV2YXNfZXZlbnRf
ZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9t
b3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2YXNfZXZl
bnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IGI5ZmE2NzguLjkzMGZiOTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTUsOCArNTUs
MTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdl
dCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBf
RWNvcmVfRXZhcyBFY29yZV9FdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNf
T2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7Ci10eXBlZGVmIEVjb3Jl
X0V2YXMqIFBsYXRmb3JtV2luZG93OwordHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybUJhY2tp
bmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCiBuYW1l
c3BhY2UgV1RSIHsKQEAgLTEwMiw2ICsxMDQsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFBs
YXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsKKyNpZiBQ
TEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRpZgogICAg
IGJvb2wgbV93aW5kb3dJc0tleTsKICAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1f
b3B0aW9uczsKICNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAppbmRleCAxMzky
MGVjLi4wMGU3ZDFmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVu
dFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVu
dFNlbmRlclByb3h5RWZsLmNwcApAQCAtMzE0LDE0ICszMTQsMTYgQEAgdm9pZCBFdmVudFNlbmRl
clByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBXVFJFdmVudCYgZXZlbnQpCiB7Cisg
ICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworCiAgICAgaWYgKGV2ZW50LmV2ZW50VHlw
ZSA9PSBXVFJFdmVudFR5cGVNb3VzZURvd24pCi0gICAgICAgIGRpc3BhdGNoTW91c2VEb3duRXZl
bnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1XaW5kb3coKSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQp
OworICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRvbiwgZXZl
bnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlw
ZSA9PSBXVFJFdmVudFR5cGVNb3VzZVVwKQotICAgICAgICBkaXNwYXRjaE1vdXNlVXBFdmVudChl
Y29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdp
bmRvdygpKSwgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMpOworICAgICAgICBkaXNwYXRj
aE1vdXNlVXBFdmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CiAgICAg
ZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKLSAgICAg
ICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bv
c2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgICAgICBkaXNw
YXRjaE1vdXNlTW92ZUV2ZW50KGV2YXMsIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi54KSwg
c3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKICAgICBlbHNlIGlmIChldmVudC5ldmVu
dFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSkKLSAgICAgICAgZGlzcGF0Y2hNb3Vz
ZVNjcm9sbEJ5RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50Lmhvcml6b250YWwsIGV2ZW50LnZlcnRpY2Fs
KTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZXZhcywgZXZlbnQuaG9yaXpv
bnRhbCwgZXZlbnQudmVydGljYWwpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxh
eVNhdmVkRXZlbnRzKCkKQEAgLTQxMiw3ICs0MTQsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJz
LAogICAgIGlmICgoc3RybGVuKGtleU5hbWUpID09IDEpICYmIChrZXlOYW1lWzBdID49ICdBJyAm
JiBrZXlOYW1lWzBdIDw9ICdaJykpCiAgICAgICAgIHdrTW9kaWZpZXJzIHw9IGtXS0V2ZW50TW9k
aWZpZXJzU2hpZnRLZXk7CiAKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV90ZXN0
Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7CisgICAgRXZhcyog
ZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpOwogCiAgICAgaW50IGV2ZW50SW5kZXggPSAwOwogICAgIC8v
IE1pbWljIHRoZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBpbnNlcnRpbmcgYSBwYXJhZ3JhcGgK
QEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50
KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90b3VjaFBv
aW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmplY3Qo
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOworICAgIEV2
YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1XaW5kb3coKTsKICAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2
ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00OTAsNyAr
NDkyLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRl
eCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZp
ZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAgRXZhc19P
YmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9
IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMp
IC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEg
PDwgaW5kZXgpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0
Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1X
ZWJWaWV3RWZsLmNwcAppbmRleCBmNmU0NzQ1Li41MGE1YWQ4IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTE5LDYgKzE5LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogCiAjaW5jbHVkZSAiRVdlYktpdDIu
aCIKQEAgLTU4LDM3ICs1OSwzNCBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGaXhlZExheW91dEtleShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRml4ZWRMYXlvdXQiKSk7CiAgICAgbV91c2luZ0ZpeGVk
TGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExheW91dEtl
eS5nZXQoKSkpKSA6IGZhbHNlOwogCi0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0g
ICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBtX2JhY2tpbmcg
PSBpbml0RWNvcmVFdmFzKCk7CiAKLSAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAg
ICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBw
YWdlR3JvdXApOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IFdLVmll
d0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fdmlldyA9IFdLVmlld0Ny
ZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fd2luZG93ID0gZXdrQ3JlYXRlRXZhc09i
amVjdChtX3ZpZXcsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZyksIC8qIHNtYXJ0ICovIDApOwog
Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhF
TUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmll
d0dldFBhZ2UobV92aWV3KSwgbV91c2luZ0ZpeGVkTGF5b3V0KTsKKworICAgIGlmIChtX3VzaW5n
Rml4ZWRMYXlvdXQpCisgICAgICAgIHJlc2l6ZVRvKDgwMCwgNjAwKTsKKworICAgIGV3a192aWV3
X3RoZW1lX3NldChtX3dpbmRvdywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2lu
ZG93SXNLZXkgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiB9CiAKIFBsYXRm
b3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNP
YmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KICAgICAvLyBSZWxlYXNlIGZp
cnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tW
aWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgogICAgIFdLUmVsZWFz
ZShtX3ZpZXcpOwogCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNy
ZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8g
KGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3
YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0
KTsKKyAgICBldmFzX29iamVjdF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVl
KG1fd2luZG93KTsKKyAgICBlY29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
CiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
d2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2luZG93LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCkBAIC05OCwy
NyArOTYsMjYgQEAgV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiAKIHZvaWQgUGxh
dGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlm
cmFtZSBtaWdodCByZWNlaXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3Qg
YXdhcmUgb2YgaXQgYXQgYWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVD
aGFuZ2VkKCkgZG9lcyBub3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxs
eSByZW1vdmUgdGhlCiAgICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxs
IGdpdmUgZm9jdXMgdG8gZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZm
ZWN0ZnVsLgogICAgIGlmIChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VH
ZXRNYWluRnJhbWUocGFnZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGV2YXNP
YmplY3QsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoZXZhc09iamVjdCwgdHJ1
ZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgZmFsc2UpOworICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dpbmRvdywgdHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0
Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdo
dDsKIAotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAm
eSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0
KG1fYmFja2luZywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVj
dE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpz
ZXRXaW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6
ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndp
ZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX2Jh
Y2tpbmcsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwg
ZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hyb21l
SW5wdXRGaWVsZCgpCkBAIC0xMzcsNyArMTM0LDcgQEAgV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4g
UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKIHsKICAgICBpbnQgd2lkdGg7
CiAgICAgaW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywg
MCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX2Jh
Y2tpbmcsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKTsKIAogICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1f
dmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193535</attachid>
            <date>2013-03-18 05:04:26 -0700</date>
            <delta_ts>2013-03-18 07:47:38 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>bug111591_v3</filename>
            <type>text/plain</type>
            <size>36496</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDY4MThkMDFhMTY0YmE4MDcxYzg0YTViNTNhMTFjYTExMjAxMGYzNjIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzg3YmM1NC4uZmFjNGMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAz
LTE4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFRkwgaXMgbm90
IHByZXNlbnQgaW4gV0tWaWV3IEFQSS4KKyAgICAgICAgV2ViVmlldyBkb2VzIG5vdCBrZWVwIGV2
YXMgb2JqZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgor
ICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tWaWV3IGNyZWF0aW9uIGRv
ZXMgbm90IHJlcXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3NlZC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3
a1ZpZXc6OmNyZWF0ZSk6CisKKyAgICAgICAgICAgIFdLVmlld1JlZiBpcyBwYXNzZWQgdG8gRXdr
VmlldyBjb25zdHJ1Y3RvciBmcm9tIG91dHNpZGUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGNy
ZWF0ZWQgaW5zaWRlLgorCisgICAgICAgIChFd2tWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAg
KEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKworICAgICAgICAg
ICAgRXdrVmlldyBrZWVwcyBXS1ZpZXdSZWYgcmF0aGVyIHRoYW4gcG9pbnRlciB0byBXZWJWaWV3
IGNsYXNzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKGV3a0NyZWF0ZUV2YXNPYmplY3QpOgorICAgICAgICAoZXdrR2V0
V0tWaWV3KToKKworICAgICAgICAgICAgQWRkZWQgcHJpdmF0ZSBBUEkgdG8gY3JlYXRlIGV3ayB2
aWV3IGV2YXMgb2JqZWN0IGFuZCByZXR1cm4gaXRzIFdLVmlld1JlZi4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a0NyZWF0ZUV2YXNPYmpl
Y3QpOgorICAgICAgICAoZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKGV3a192aWV3X2Fk
ZCk6CisgICAgICAgIChld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAg
ICAgIFVwZGF0ZWQgYWNjb3JkaW5nbHkgdG8gdGhlIG5ldyBBUElzLgorCisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmll
dyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFd2tWaWV3KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Omlz
Vmlld1Zpc2libGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOgorICAgICAg
ICAoV2ViVmlldyk6CisKKyAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHVwZGF0ZWQgV0tW
aWV3IEFQSS4KKwogMjAxMy0wMy0xNSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pk
bnlha292QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIEdldCByaWQgb2YgV2ViUGFn
ZVByb3h5Ojp2aWV3V2lkZ2V0KCkgbWV0aG9kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5jcHAKaW5kZXggZGNkM2UyYy4uNjkxZjZhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcApAQCAtMjksMjUgKzI5LDEw
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLXN0YXRpYyBpbmxpbmUgV0tWaWV3UmVm
IGNyZWF0ZVdLVmlldyhFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikK
K1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCA9
IGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKGNvbnRleHRSZWYp
IDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKLSAgICBSZWZQdHI8RXdrUGFnZUdyb3Vw
PiBwYWdlR3JvdXAgPSBFd2tQYWdlR3JvdXA6OmNyZWF0ZShwYWdlR3JvdXBSZWYpOwotICAgIEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMs
IGNvbnRleHQsIHBhZ2VHcm91cCwgYmVoYXZpb3IpOwotICAgIGlmICghZXZhc09iamVjdCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1Jl
dGFpbih0b0V3a1ZpZXcoZXZhc09iamVjdCktPndrVmlldygpKSk7Ci19Ci0KLVdLVmlld1JlZiBX
S1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJldHVybiBjcmVhdGVXS1ZpZXcoY2FudmFz
LCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLX0K
LQotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVdLVmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAgICBSZWZQdHI8V2ViVmlldz4gd2ViVmlldyA9
IFdlYlZpZXc6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYp
KTsKKyAgICByZXR1cm4gdG9BUEkod2ViVmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIAog
dm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQpAQCAtMTQwLDExICsxMjUs
NiBAQCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3UmVmKQogI2VuZGlm
CiB9CiAKLUV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVm
KQotewotICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKLX0KLQogV0tJ
bWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKIHsKICAgICBF
d2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGE3
MDliNDguLmNhMzRiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuaApAQCAtMjQsMTQgKzI0LDYgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBz
dHJ1Y3QgX0VvIEV2YXM7Ci10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQot
dHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBF
dmFzX09iamVjdDsKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWly
b19zdXJmYWNlX3Q7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTcsOSArNDksNyBAQCB0eXBl
ZGVmIHN0cnVjdCBXS1ZpZXdDbGllbnQgV0tWaWV3Q2xpZW50OwogCiBlbnVtIHsga1dLVmlld0Ns
aWVudEN1cnJlbnRWZXJzaW9uID0gMCB9OwogCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0Ny
ZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXApOwotCi1XS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExh
eW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXApOworV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKIFdLX0VYUE9SVCB2b2lkIFdL
Vmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpZXdD
bGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdDbGllbnQqKTsKQEAgLTg4LDkgKzc4LDYgQEAg
V0tfRVhQT1JUIGJvb2wgV0tWaWV3R2V0U2hvd3NBc1NvdXJjZShXS1ZpZXdSZWYpOwogCiBXS19F
WFBPUlQgdm9pZCBXS1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCi0vLyBGSVhNRTog
VGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2VlcCB1c2FnZSB0
byBhIGJhcmUgbWluaW11bS4KLVdLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09i
amVjdChXS1ZpZXdSZWYpOwotCiBXS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFw
c2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5kZXggMTdkY2I2NC4uMTVmNDgxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTIzNywx
MiArMjM3LDEyIEBAIHN0YXRpYyBpbmxpbmUgV0tQYWdlVG9FdmFzT2JqZWN0TWFwJiB3a1BhZ2VU
b0V2YXNPYmplY3RNYXAoKQogCiAvLyBFd2tWaWV3IGltcGxlbWVudGF0aW9uLgogCi1Fd2tWaWV3
OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlv
ciBiZWhhdmlvcikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQotICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgLCBtX3BhZ2VHcm91cChwYWdlR3JvdXApCitFd2tWaWV3OjpFd2tW
aWV3KFdLVmlld1JlZiB2aWV3LCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2Vi
Vmlldyh2aWV3KQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCisgICAgLCBtX2NvbnRl
eHQoRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihXS1BhZ2VHZXRDb250ZXh0KHdrUGFn
ZSgpKSkpCisgICAgLCBtX3BhZ2VHcm91cChFd2tQYWdlR3JvdXA6OmNyZWF0ZShXS1BhZ2VHZXRQ
YWdlR3JvdXAod2tQYWdlKCkpKSkgLy8gRklYTUU6IE11c3QgYmUgZmluZE9yQ3JlYXRlV3JhcHBl
ciBhZnRlciB3ZWJraXQub3JnL2IvMTEyMzY0LgogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZShmYWxzZSkKLSAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0ltcGwobV9j
b250ZXh0LT53a0NvbnRleHQoKSksIHRvSW1wbChtX3BhZ2VHcm91cC0+d2tQYWdlR3JvdXAoKSks
IHRoaXMpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0
ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpj
cmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0
ZSh0aGlzKSkKQEAgLTI3MCw2ICsyNzAsOSBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0
KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogICAg
IEFTU0VSVChtX2V2YXNPYmplY3QpOwogICAgIEFTU0VSVChtX2NvbnRleHQpOwogCisgICAgLy8g
UmVtb3ZlIHdoZW4gcG9zc2libGUuCisgICAgd2ViVmlldygpLT5zZXRFd2tWaWV3KHRoaXMpOwor
CiAgICAgbV9ldmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFzX2dl
dChtX2V2YXNPYmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQogICAgICAgICBtX2V2YXNHTENv
bnRleHQgPSBFdmFzR0xDb250ZXh0OjpjcmVhdGUobV9ldmFzR0wuZ2V0KCkpOwpAQCAtMjgxLDgg
KzI4NCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAKICAgICBXS1ZpZXdJbml0aWFsaXpl
KHdrVmlldygpKTsKIAotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhh
dmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwotCiAgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3Jv
dXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOwogICAgIFdLUHJlZmVyZW5jZXNSZWYg
d2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwog
CkBAIC0zMjAsMTMgKzMyMSwxMSBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAgICAgd2tQYWdlVG9F
dmFzT2JqZWN0TWFwKCkucmVtb3ZlKHdrUGFnZSgpKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1Zp
ZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFn
ZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUo
V0tWaWV3UmVmIHdlYlZpZXcsIEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVj
dCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFdmFzX09iamVj
dCogZXZhc09iamVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0ID8gc21h
cnQgOiBkZWZhdWx0U21hcnRDbGFzc0luc3RhbmNlKCkpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChldmFzT2JqZWN0LCAwKTsKIAogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOwpAQCAtMzM3LDE0ICszMzYsOSBA
QCBFdmFzX09iamVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2
YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYp
OwogCi0gICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXZhc09iamVjdCwgY29udGV4
dCwgKHBhZ2VHcm91cCA/IHBhZ2VHcm91cCA6IEV3a1BhZ2VHcm91cDo6Y3JlYXRlKCkpLCBiZWhh
dmlvcik7CisgICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcod2ViVmlldywgZXZhc09i
amVjdCk7CiAKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KLQotRXZhc19PYmplY3QqIEV3a1Zp
ZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlv
ciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52YXMsIGRlZmF1
bHRTbWFydENsYXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwLCBiZWhhdmlvcik7Cisg
ICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogYm9vbCBFd2tWaWV3Ojppbml0U21hcnRD
bGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFydF9DbGFzcyYgYXBpKQpAQCAtOTYwLDYgKzk1NCwx
MSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90YVJlYWNo
ZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogfQogI2VuZGlmCiAKK1dlYlZpZXcqIEV3a1Zp
ZXc6OndlYlZpZXcoKQoreworICAgIHJldHVybiB0b0ltcGwobV93ZWJWaWV3LmdldCgpKTsKK30K
KwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFRoZSB1cmwgb2YgdmlldyB3YXMgY2hhbmdlZCBieSB0
aGUgZnJhbWUgbG9hZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCmluZGV4IGFmNzlmNTguLjAxZWM1NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTk4LDE3ICs5OCw5IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFz
X0dMX1N1cmZhY2UgRXZhc19HTF9TdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21h
cnRfRGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MgRXdrX1ZpZXdfU21hcnRfQ2xhc3M7CiAKLS8vIEV3a1ZpZXcgb2JqZWN0IGlzIG93
bmVkIGJ5IHRoZSBldmFzIG9iamVjdCwgb2J0YWluZWQgZnJvbSBFd2tWaWV3OjpjcmVhdGVFdmFz
T2JqZWN0KCkuCiBjbGFzcyBFd2tWaWV3IHsKIHB1YmxpYzoKLQotICAgIGVudW0gVmlld0JlaGF2
aW9yIHsKLSAgICAgICAgTGVnYWN5QmVoYXZpb3IsCi0gICAgICAgIERlZmF1bHRCZWhhdmlvcgot
ICAgIH07Ci0KLSAgICBzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZUV2YXNPYmplY3QoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCAgUGFzc1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCA9IDAsIFZpZXdCZWhhdmlvciBi
ZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAgc3RhdGljIEV2YXNfT2Jq
ZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwID0gMCwgVmlld0Jl
aGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAgICBzdGF0aWMg
RXdrVmlldyogY3JlYXRlKFdLVmlld1JlZiwgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCA9IDApOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZhY2UoRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MmKTsKIApAQCAtMTE2LDEwICsxMDgsMTAgQEAgcHVibGljOgogCiAgICAg
RXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7IH0KIAotICAg
IFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlZpZXcuZ2V0KCkp
OyB9CisgICAgV0tWaWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldy5nZXQo
KTsgfQogICAgIFdLUGFnZVJlZiB3a1BhZ2UoKSBjb25zdDsKIAotICAgIFdlYktpdDo6V2ViUGFn
ZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KKyAgICBXZWJLaXQ6
OldlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIHdlYlZpZXcoKS0+cGFnZSgpOyB9CiAgICAg
RXdrQ29udGV4dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAg
IEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwKCkgeyByZXR1cm4gbV9wYWdlR3JvdXAuZ2V0KCk7
IH0KICAgICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgp
OyB9CkBAIC0yMDAsNyArMTkyLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSwg
dW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQgbG9uZyBsb25n
IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSk7
CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCi0gICAgV2ViS2l0OjpXZWJW
aWV3KiB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9CisgICAgV2ViS2l0OjpX
ZWJWaWV3KiB3ZWJWaWV3KCk7CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBz
Y2FsZUZhY3RvcikgeyBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9CiAgICAgZmxv
YXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0K
QEAgLTIxNCw3ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHRha2VTbmFwc2hvdCgpOwogCiBwcml2YXRlOgotICAgIEV3a1ZpZXcoRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxF
d2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBFd2tWaWV3KFdLVmll
d1JlZiwgRXZhc19PYmplY3QqKTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9pZCBzZXREZXZp
Y2VTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKQEAgLTI1Miw2ICsyNDQsNyBAQCBwcml2
YXRlOgogCiBwcml2YXRlOgogICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9yZGVyIG1hdHRl
cnMuCisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiBtX3dlYlZpZXc7CiAgICAgRXZhc19PYmpl
Y3QqIG1fZXZhc09iamVjdDsKICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250ZXh0OwogICAg
IFJlZlB0cjxFd2tQYWdlR3JvdXA+IG1fcGFnZUdyb3VwOwpAQCAtMjYxLDcgKzI1NCw2IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2RldmljZVNpemU7CiAgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRUcmFuc2Zvcm07CiAgICAgYm9vbCBt
X3BlbmRpbmdTdXJmYWNlUmVzaXplOwotICAgIFJlZlB0cjxXZWJLaXQ6OldlYlZpZXc+IG1fd2Vi
VmlldzsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbD4gbV9wYWdlTG9hZENs
aWVudDsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlUG9saWN5Q2xpZW50RWZsPiBtX3BhZ2VQb2xp
Y3lDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsPiBtX3BhZ2VVSUNs
aWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApp
bmRleCA3YWUxOGM3Li4yNjhmMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJld2tfdmlldy5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIK
IAogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCkBAIC04
OCwxOSArODksNDggQEAgRWluYV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFd2tWaWV3Ojppbml0U21hcnRDbGFzc0lu
dGVyZmFjZSgqYXBpKTsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCwgRXdrX1Bh
Z2VfR3JvdXAqIHBhZ2VHcm91cCkKK0V2YXNfT2JqZWN0KiBld2tDcmVhdGVFdmFzT2JqZWN0KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIEV2YXMqIGNhbnZh
cywgRXZhc19TbWFydCogc21hcnQpCiB7Ci0gICAgcmV0dXJuIEV3a1ZpZXc6OmNyZWF0ZUV2YXNP
YmplY3QoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0
KSwgZXdrX29iamVjdF9jYXN0PEV3a1BhZ2VHcm91cCo+KHBhZ2VHcm91cCkpOworICAgIFdLUmV0
YWluUHRyPFdLVmlld1JlZj4gd2tWaWV3ID0gYWRvcHRXSyhXS1ZpZXdDcmVhdGUoY29udGV4dCwg
cGFnZUdyb3VwKSk7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQoV0tWaWV3R2V0UGFnZSh3
a1ZpZXcuZ2V0KCkpLCB0cnVlKTsKKyAgICBpZiAoRXdrVmlldyogZXdrVmlldyA9IEV3a1ZpZXc6
OmNyZWF0ZSh3a1ZpZXcuZ2V0KCksIGNhbnZhcywgc21hcnQpKQorICAgICAgICByZXR1cm4gZXdr
Vmlldy0+ZXZhc09iamVjdCgpOworCisgICAgcmV0dXJuIDA7CiB9CiAKLUV2YXNfT2JqZWN0KiBl
d2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRl
eHQpCitXS1ZpZXdSZWYgZXdrR2V0V0tWaWV3KEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAg
IEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKKworICAgIHJl
dHVybiBpbXBsLT53a1ZpZXcoKTsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2Fk
ZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCwg
RXdrX1BhZ2VfR3JvdXAqIHBhZ2VHcm91cCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRl
RXZhc09iamVjdChjYW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkp
OworICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4
dCo+KGNvbnRleHQpOworICAgIEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwID0gZXdrX29iamVj
dF9jYXN0PEV3a1BhZ2VHcm91cCo+KHBhZ2VHcm91cCk7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXdrUGFnZUdyb3VwLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZXdrUGFnZUdyb3VwLT53a1BhZ2VHcm91cCgpLCAwKTsKKworICAgIHJl
dHVybiBld2tDcmVhdGVFdmFzT2JqZWN0KGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCBld2tQYWdl
R3JvdXAtPndrUGFnZUdyb3VwKCksIGNhbnZhcywgc21hcnQpOwogfQogCiBFdmFzX09iamVjdCog
ZXdrX3ZpZXdfYWRkKEV2YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dp
dGhfY29udGV4dChjYW52YXMsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVy
biBld2tDcmVhdGVFdmFzT2JqZWN0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpLCAw
LCBjYW52YXMsIDApOworfQorCitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4
dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQoreworICAgIEV3a0NvbnRleHQq
IGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDApOwor
CisgICAgcmV0dXJuIGV3a0NyZWF0ZUV2YXNPYmplY3QoZXdrQ29udGV4dC0+d2tDb250ZXh0KCks
IDAsIGNhbnZhcywgMCk7CiB9CiAKIEV3a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jN2VhOGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3ZpZXdfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a192
aWV3X3ByaXZhdGVfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tC
YXNlLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRUFQ
SSBFdmFzX09iamVjdCogZXdrQ3JlYXRlRXZhc09iamVjdChXS0NvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmLCBFdmFzKiwgRXZhc19TbWFydCopOworRUFQSSBXS1ZpZXdSZWYgZXdrR2V0V0tWaWV3
KEV2YXNfT2JqZWN0Kik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYg
Ly8gZXdrX3ZpZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDI0MGNiYjMuLjRhOGZhNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJv
eHlFZmwuY3BwCkBAIC0zNCw4ICszNCwxMyBAQAogI2luY2x1ZGUgImV3a19wYWdlX2dyb3VwX3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJld2tfdmlldy5o
IgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VmbElu
c3BlY3RvclV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlR3Jv
dXAuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CkBAIC05OSwyMCArMTA0LDE5IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3Rv
cldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8g
dXNlIFdLVmlld1JlZi4KLSAgICBXS0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHRvQVBJKHBhZ2Uo
KS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOwotICAgIG1faW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6
OmNyZWF0ZUV2YXNPYmplY3QoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCBFd2tD
b250ZXh0OjpmaW5kT3JDcmVhdGVXcmFwcGVyKGNvbnRleHRSZWYpLCBFd2tQYWdlR3JvdXA6OmNy
ZWF0ZSh0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlv
cik7Ci0gICAgaWYgKCFtX2luc3BlY3RvclZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgIFdL
Q29udGV4dFJlZiB3a0NvbnRleHQgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgp
KTsKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9IHRvQVBJKGluc3BlY3RvclBhZ2VH
cm91cCgpKTsKKworICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a0NyZWF0ZUV2YXNPYmplY3Qod2tD
b250ZXh0LCB3a1BhZ2VHcm91cCwgZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCAv
KiBzbWFydCAqLyAwKTsKKyAgICBXS1ZpZXdSZWYgd2tWaWV3ID0gZXdrR2V0V0tWaWV3KG1faW5z
cGVjdG9yVmlldyk7CiAKLSAgICBFd2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KG1faW5zcGVj
dG9yVmlldyk7Ci0gICAgQVNTRVJUKGV3a1ZpZXcpOwotICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0
aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRF
U1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdr
Vmlldywgd2tUaGVtZS5nZXQoKSk7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdr
Vmlldy0+c2V0dGluZ3MoKTsKLSAgICBld2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxl
X3VybHNfYWxsb3dlZF9zZXQoc2V0dGluZ3MsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNSZWYg
d2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZCh3a1ByZWZl
cmVuY2VzLCB0cnVlKTsKIAotICAgIHJldHVybiBld2tWaWV3LT5wYWdlKCk7CisgICAgcmV0dXJu
IHRvSW1wbChXS1ZpZXdHZXRQYWdlKHdrVmlldykpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybU9wZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5j
cHAKaW5kZXggNWMyYjNiYS4uZTVlODBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuY3BwCkBAIC01MSw4ICs1MSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250
ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKLSAgICA6IG1f
ZXdrVmlldyhld2tWaWV3KQorV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IG1fZXdrVmlldygwKQogICAgICwgbV9wYWdl
KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3VwKSkKIHsKICAgICBtX3BhZ2Ut
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCh0cnVlKTsKQEAgLTYyLDEwICs2Miw2IEBAIFdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4
dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCiAg
ICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0
cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEiKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1
Z1Zpc3VhbHMpOwogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENv
bXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLQotI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCkt
PnNldFdlYlZpZXcoZXZhc09iamVjdCgpKTsKLSNlbmRpZgogfQogCiBXZWJWaWV3Ojp+V2ViVmll
dygpCkBAIC03Niw2ICs3MiwyMiBAQCBXZWJWaWV3Ojp+V2ViVmlldygpCiAgICAgbV9wYWdlLT5j
bG9zZSgpOwogfQogCitQYXNzUmVmUHRyPFdlYlZpZXc+IFdlYlZpZXc6OmNyZWF0ZShXZWJDb250
ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKSk7Cit9CisKKy8vIEZJWE1FOiBS
ZW1vdmUgd2hlbiBwb3NzaWJsZS4KK3ZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3KiBl
d2tWaWV3KQoreworICAgIG1fZXdrVmlldyA9IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3
a1ZpZXctPmV2YXNPYmplY3QoKSk7CisjZW5kaWYKKworfQorCiB2b2lkIFdlYlZpZXc6OmluaXRp
YWxpemUoKQogewogICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKQEAgLTI3NiwxMSAr
Mjg4LDE5IEBAIGJvb2wgV2ViVmlldzo6aXNWaWV3V2luZG93QWN0aXZlKCkKIAogYm9vbCBXZWJW
aWV3Ojppc1ZpZXdGb2N1c2VkKCkKIHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Vi
a2l0Lm9yZy9iLzExMDg3NworICAgIGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJW
aWV3Ojppc1ZpZXdWaXNpYmxlKCkKIHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Vi
a2l0Lm9yZy9iLzExMDg3NworICAgIGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICByZXR1cm4gbV9ld2tWaWV3LT5pc1Zpc2libGUoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAppbmRleCA5ZjVmNmY0Li4wYTgyMjY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApAQCAtNTAsOSArNTAsMTMgQEAgY2xhc3Mg
V2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3QsIHB1YmxpYyBQYWdlQ2xpZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAgICBXZWJWaWV3
KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqLCBFd2tWaWV3Kik7CiAgICAgdmlydHVhbCB+V2Vi
VmlldygpOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4gY3JlYXRlKFdlYkNvbnRl
eHQqLCBXZWJQYWdlR3JvdXAqKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJs
ZS4KKyAgICB2b2lkIHNldEV3a1ZpZXcoRXdrVmlldyopOworCiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7CiAKICAgICB2b2lkIHNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0eCwgZG91
YmxlIHR5KTsKQEAgLTk2LDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIFdlYlZp
ZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAKICAgICAvLyBQYWdl
Q2xpZW50CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZTAwZmNhYi4uMjU2ZmVlNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEzLTAzLTE4ICBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5kIE1pa2hhaWwgUG96ZG55YWtv
diAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBT
ZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIEVGTCBQbGF0Zm9ybVdlYlZpZXcg
dG8gbWVldCB0aGUgbmV3IFdLVmlldyBBUEkgYW5kIGV3ayB2aWV3IHByaXZhdGUgQVBJLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFBsYXRm
b3JtV2ViVmlldyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1X
ZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRm
b3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnJl
c2l6ZVRvKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxh
dGVTcGFjZWJhcktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZv
cm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgIChQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwOgorICAgICAg
ICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJv
eHk6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0
VG91Y2hNb2RpZmllcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1X
ZWJWaWV3RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdl
YlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcp
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFdU
Ujo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmll
dzo6d2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdElt
YWdlKToKKwogMjAxMy0wMy0xNSAgVG9iaWFzIE11ZWxsZXIgIDx0b2JpYXNtdWVAZ25vbWUub3Jn
PgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgVG9vbHMvR3RrTGF1bmNoZXIvUHJvZ3JhbXNfR3Rr
TGF1bmNoZXItbWFpbi5vIGlmIGdzdHJlYW1lciBpcyBub3QgaW5zdGFsbGVkCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCBiNTZjMDk2Li45NjkxODkxIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ4LDggKzQ4LDEwIEBAIHR5cGVkZWYgV0tW
aWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93
OwogI2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVf
RXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYg
V0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdp
bmRvdzsKK3R5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5nOwordHlwZWRlZiBFdmFz
X09iamVjdCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05B
TUVTUEFDRQogY2xhc3MgUVF1aWNrVmlldzsKQEAgLTkzLDYgKzk1LDkgQEAgcHJpdmF0ZToKIAog
ICAgIFBsYXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsK
KyNpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFdpbmRvd01lc3NhZ2VPYnNlcnZlciogbV9wYXJl
bnRXaW5kb3dNZXNzYWdlT2JzZXJ2ZXI7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1XZWJWaWV3LmNwcAppbmRleCA4YTAzNWYzLi45Y2RiZjVhIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTI1LDEwICsyNSwxMiBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAKICNpbmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1
ZGUgIldlYktpdDIvV0tBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5o
PgogCiBleHRlcm4gYm9vbCB1c2VYMTFXaW5kb3c7CkBAIC02MywzMiArNjUsMjkgQEAgc3RhdGlj
IHZvaWQgb25XZWJQcm9jZXNzQ3Jhc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVu
dEluZm8pCiAKIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgbV93aW5kb3cg
PSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2lu
ZG93KTsKLSAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmKTsKLSAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hl
ZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fYmFja2luZyA9IGluaXRFY29yZUV2
YXMoKTsKKworICAgIG1fd2luZG93ID0gZXdrQ3JlYXRlRXZhc09iamVjdChjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYsIGVjb3JlX2V2YXNfZ2V0KG1fYmFja2luZyksIC8qIHNtYXJ0ICovIDApOwor
ICAgIG1fdmlldyA9IGV3a0dldFdLVmlldyhtX3dpbmRvdyk7CisKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKSk7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKG1f
dmlldywgd2tUaGVtZS5nZXQoKSk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQobV93aW5kb3csICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAw
KTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRm
b3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyk7Ci0KLSAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3IHNob3Vs
ZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0
aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgotICAgIFdLUmVsZWFzZShtX3ZpZXcpOwotCi0gICAg
Ly8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2Jq
ZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5j
aWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0
IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICBldmFzX29iamVj
dF9kZWwobV93aW5kb3cpOwogCi0gICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKKyAgICBl
Y29yZV9ldmFzX2ZyZWUobV9iYWNraW5nKTsKICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dpbmRv
dywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2Uo
KSBjb25zdApAQCAtOTgsMjMgKzk3LDIzIEBAIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKSBjb25zdAogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVBy
ZXNzKCkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUp
OworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2Zl
ZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBl
dmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwg
MCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25l
ZCB4LCB1bnNpZ25lZCB5KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dp
bmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykp
OworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3dpbmRvdyk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhtX3dpbmRvdyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21v
dmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0
ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0
RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQobV93aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93aW5kb3cpOwogICAgIGV2YXNf
ZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRf
ZmVlZF9tb3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2
YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IGI5ZmE2NzguLjkz
MGZiOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTUs
OCArNTUsMTAgQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0
a1dpZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIHN0
cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0
IEV2YXNfT2JqZWN0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7Ci10eXBlZGVm
IEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwordHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9y
bUJhY2tpbmc7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgog
CiBuYW1lc3BhY2UgV1RSIHsKQEAgLTEwMiw2ICsxMDQsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFBsYXRmb3JtV0tWaWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsK
KyNpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1CYWNraW5nIG1fYmFja2luZzsKKyNlbmRp
ZgogICAgIGJvb2wgbV93aW5kb3dJc0tleTsKICAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlS
ZWY+IG1fb3B0aW9uczsKICNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAppbmRl
eCAxMzkyMGVjLi4wMGU3ZDFmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtMzE0LDE0ICszMTQsMTYgQEAgdm9pZCBFdmVu
dFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24pCiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6ZGlzcGF0Y2hFdmVudChjb25zdCBXVFJFdmVudCYgZXZlbnQp
CiB7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworCiAgICAgaWYgKGV2ZW50LmV2
ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZURvd24pCi0gICAgICAgIGRpc3BhdGNoTW91c2VE
b3duRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNr
Q291bnQpOworICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRv
biwgZXZlbnQubW9kaWZpZXJzLCBtX2NsaWNrQ291bnQpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2
ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVVwKQotICAgICAgICBkaXNwYXRjaE1vdXNlVXBF
dmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMpOworICAgICAgICBk
aXNwYXRjaE1vdXNlVXBFdmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7
CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkK
LSAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250
cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50
PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgICAg
ICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGV2YXMsIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlv
bi54KSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLnkpKTsKICAgICBlbHNlIGlmIChldmVu
dC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSkKLSAgICAgICAgZGlzcGF0
Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50Lmhvcml6b250YWwsIGV2ZW50LnZl
cnRpY2FsKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoZXZhcywgZXZlbnQu
aG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOwogfQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OnJlcGxheVNhdmVkRXZlbnRzKCkKQEAgLTQxMiw3ICs0MTQsNyBAQCB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9k
aWZpZXJzLAogICAgIGlmICgoc3RybGVuKGtleU5hbWUpID09IDEpICYmIChrZXlOYW1lWzBdID49
ICdBJyAmJiBrZXlOYW1lWzBdIDw9ICdaJykpCiAgICAgICAgIHdrTW9kaWZpZXJzIHw9IGtXS0V2
ZW50TW9kaWZpZXJzU2hpZnRLZXk7CiAKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQo
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7CisgICAg
RXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOwogCiAgICAgaW50IGV2ZW50SW5kZXggPSAwOwog
ICAgIC8vIE1pbWljIHRoZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBpbnNlcnRpbmcgYSBwYXJh
Z3JhcGgKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3Vj
aEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90
b3VjaFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNP
YmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOwor
ICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXco
KS0+cGxhdGZvcm1XaW5kb3coKTsKICAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KGV3a1Zp
ZXcsIGV2ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00
OTAsNyArNDkyLDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGlu
dCBpbmRleCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNo
TW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7Ci0gICAg
RXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFzX09iamVjdCogZXdr
VmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVy
TmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVy
ICYgKDEgPDwgaW5kZXgpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxh
dGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCBmNmU0NzQ1Li5lNTJkNDBiIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTE5LDYg
KzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogCiAjaW5jbHVkZSAiRVdl
YktpdDIuaCIKQEAgLTU4LDM3ICs1OSwzMSBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2Vi
VmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLAogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VGaXhlZExheW91dEtleShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlRml4ZWRMYXlvdXQiKSk7CiAgICAgbV91c2lu
Z0ZpeGVkTGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExh
eW91dEtleS5nZXQoKSkpKSA6IGZhbHNlOwogCi0gICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFz
KCk7Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKKyAgICBtX2Jh
Y2tpbmcgPSBpbml0RWNvcmVFdmFzKCk7CiAKLSAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7
Ci0gICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250
ZXh0LCBwYWdlR3JvdXApOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9
IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fd2luZG93ID0g
ZXdrQ3JlYXRlRXZhc09iamVjdChjb250ZXh0LCBwYWdlR3JvdXAsIGVjb3JlX2V2YXNfZ2V0KG1f
YmFja2luZyksIC8qIHNtYXJ0ICovIDApOworICAgIG1fdmlldyA9IGV3a0dldFdLVmlldyhtX3dp
bmRvdyk7CiAKLSAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlv
dXQoV0tWaWV3R2V0UGFnZShtX3ZpZXcpLCBtX3VzaW5nRml4ZWRMYXlvdXQpOworCisgICAgaWYg
KG1fdXNpbmdGaXhlZExheW91dCkKKyAgICAgICAgcmVzaXplVG8oODAwLCA2MDApOworCisgICAg
ZXdrX3ZpZXdfdGhlbWVfc2V0KG1fd2luZG93LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CiAg
ICAgbV93aW5kb3dJc0tleSA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0
RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2luZG93KTsKIH0K
IAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBFdmFzX09iamVj
dCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKLQotICAgIC8vIFJl
bGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcs
IGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCi0gICAg
V0tSZWxlYXNlKG1fdmlldyk7Ci0KLSAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJy
ZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQK
LSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3
KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCi0gICAgZXZhc19vYmplY3RfZGVsKGV2
YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X2RlbChtX3dpbmRvdyk7CiAKLSAgICBlY29yZV9l
dmFzX2ZyZWUobV93aW5kb3cpOworICAgIGVjb3JlX2V2YXNfZnJlZShtX2JhY2tpbmcpOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUobV93aW5kb3cs
IHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkK
QEAgLTk4LDI3ICs5MywyNiBAQCBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIAog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsKLSAgICBFdmFzX09iamVjdCogZXZhc09i
amVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKICAgICAvLyBJbiBhIGZldyBjYXNl
cywgYW4gaWZyYW1lIG1pZ2h0IHJlY2VpdmUgZm9jdXMgZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFz
IGlzIG5vdCBhd2FyZSBvZiBpdCBhdCBhbGwKICAgICAvLyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3Vz
ZWRGcmFtZUNoYW5nZWQoKSBkb2VzIG5vdCBlbWl0IGFueSBub3RpZmljYXRpb24pLiBXZSB0aGVu
IG1hbnVhbGx5IHJlbW92ZSB0aGUKICAgICAvLyBmb2N1cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2Ug
dGhlIGNhbGwgZ2l2ZSBmb2N1cyB0byBldmFzX29iamVjdF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0
byBiZSBlZmZlY3RmdWwuCiAgICAgaWYgKFdLUGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpICE9
IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQoZXZhc09iamVjdCwgZmFsc2UpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChldmFzT2Jq
ZWN0LCB0cnVlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCBmYWxz
ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2luZG93LCB0cnVlKTsKIH0KIAogV0tS
ZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGludCB4LCB5LCB3aWR0
aCwgaGVpZ2h0OwogCi0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX3dpbmRv
dywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9t
ZXRyeV9nZXQobV9iYWNraW5nLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICByZXR1
cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdl
YlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKIHsKLSAgICBlY29yZV9ldmFzX21v
dmVfcmVzaXplKG1fd2luZG93LCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1l
LnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX21vdmVfcmVz
aXplKG1fYmFja2luZywgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojph
ZGRDaHJvbWVJbnB1dEZpZWxkKCkKQEAgLTEzNyw3ICsxMzEsNyBAQCBXS1JldGFpblB0cjxXS0lt
YWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UoKQogewogICAgIGlu
dCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KG1f
d2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KG1fYmFja2luZywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBBU1NFUlQod2lkdGgg
PiAwICYmIGhlaWdodCA+IDApOwogCiAgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25h
cHNob3QobV92aWV3KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193564</attachid>
            <date>2013-03-18 07:47:38 -0700</date>
            <delta_ts>2013-03-18 08:08:22 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>bug111591_v4</filename>
            <type>text/plain</type>
            <size>37482</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDczMGEwNGI0YjY3ZGI1OGYxYjU0ZTM0ZWI0NDk4NmExZDYyZGMyMGYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzg3YmM1NC4uYTUwMzE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAz
LTE4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWluIHBvaW50
cyBhcmU6CisgICAgICAgIC0gV0tWaWV3IEFQSSBoYXMgbm8gZGVwZW5kZW5jeSBvbiBFRkwgdHlw
ZXMKKyAgICAgICAgLSBXZWJWaWV3IGNsYXNzIGRvZXMgbm90IHN0b3JlIHRoZSBFdmFzX09iamVj
dAorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAo
V0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tWaWV3IGNyZWF0aW9uIGRvZXMgbm90IHJl
cXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3NlZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OmNy
ZWF0ZSk6CisKKyAgICAgICAgICAgIFdLVmlld1JlZiBpcyBwYXNzZWQgdG8gRXdrVmlldyBjb25z
dHJ1Y3RvciBmcm9tIG91dHNpZGUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGNyZWF0ZWQgaW5z
aWRlLgorCisgICAgICAgIChFd2tWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKworICAgICAgICAgICAgRXdrVmll
dyBrZWVwcyBXS1ZpZXdSZWYgcmF0aGVyIHRoYW4gcG9pbnRlciB0byBXZWJWaWV3IGNsYXNzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKEVXS1ZpZXdDcmVhdGUpOgorICAgICAgICAoRVdLVmlld0dldFdLVmlldyk6CisK
KyAgICAgICAgICAgIEFkZGVkIHByaXZhdGUgQVBJIHRvIGNyZWF0ZSBld2sgdmlldyBldmFzIG9i
amVjdCBhbmQgcmV0dXJuIGl0cyBXS1ZpZXdSZWYuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tDcmVhdGVFdmFzT2JqZWN0KToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19hZGQpOgorICAgICAg
ICAoZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9X
ZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorCisgICAgICAgICAgICBVcGRhdGVk
IGFjY29yZGluZ2x5IHRvIHRoZSBuZXcgQVBJcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RXdrVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmlzVmlld0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdWaXNpYmxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcp
OgorCisgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB1cGRhdGVkIFdLVmlldyBBUEkuCisK
IDIwMTMtMDMtMTUgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRl
bC5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBHZXQgcmlkIG9mIFdlYlBhZ2VQcm94eTo6dmll
d1dpZGdldCgpIG1ldGhvZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCmluZGV4IGRjZDNlMmMuLjY5MWY2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI1ICsyOSwxMCBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1zdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1Zp
ZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYpCiB7Ci0gICAgUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVm
ID8gRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihjb250ZXh0UmVmKSA6IEV3a0NvbnRl
eHQ6OmRlZmF1bHRDb250ZXh0KCk7Ci0gICAgUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3Vw
ID0gRXdrUGFnZUdyb3VwOjpjcmVhdGUocGFnZUdyb3VwUmVmKTsKLSAgICBFdmFzX09iamVjdCog
ZXZhc09iamVjdCA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBjb250ZXh0LCBw
YWdlR3JvdXAsIGJlaGF2aW9yKTsKLSAgICBpZiAoIWV2YXNPYmplY3QpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odG9Fd2tW
aWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOwotfQotCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZikKLXsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19Ci0KLVdLVmlld1Jl
ZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJldHVybiBj
cmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRl
ZmF1bHRCZWhhdmlvcik7CisgICAgUmVmUHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgcmV0
dXJuIHRvQVBJKHdlYlZpZXcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tWaWV3
SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKQEAgLTE0MCwxMSArMTI1LDYgQEAgdm9pZCBX
S1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKICNlbmRpZgogfQogCi1FdmFz
X09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICBy
ZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCk7Ci19Ci0KIFdLSW1hZ2VSZWYgV0tW
aWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCiB7CiAgICAgRXdrVmlldyogZXdr
VmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBhNzA5YjQ4Li5jYTM0
YmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKQEAg
LTI0LDE0ICsyNCw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLR2VvbWV0cnkuaD4KIAotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBF
dmFzOwotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzIEV2YXM7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7
Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90
OwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTU3LDkgKzQ5LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg
V0tWaWV3Q2xpZW50IFdLVmlld0NsaWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50
VmVyc2lvbiA9IDAgfTsKIAotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsK
LQotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsK
K1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmll
d1JlZiwgY29uc3QgV0tWaWV3Q2xpZW50Kik7CkBAIC04OCw5ICs3OCw2IEBAIFdLX0VYUE9SVCBi
b29sIFdLVmlld0dldFNob3dzQXNTb3VyY2UoV0tWaWV3UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQg
V0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKIAotLy8gRklYTUU6IFRoZSBsb25nIHRl
cm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtlZXAgdXNhZ2UgdG8gYSBiYXJlIG1p
bmltdW0uCi1XS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3
UmVmKTsKLQogV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3
UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDE3ZGNiNjQuLjE3Njg3ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMzcsMTIgKzIzNywxMiBA
QCBzdGF0aWMgaW5saW5lIFdLUGFnZVRvRXZhc09iamVjdE1hcCYgd2tQYWdlVG9FdmFzT2JqZWN0
TWFwKCkKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KIAotRXdrVmlldzo6RXdrVmlldyhF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQ
YXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3Ip
Ci0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0
KQotICAgICwgbV9wYWdlR3JvdXAocGFnZUdyb3VwKQorRXdrVmlldzo6RXdrVmlldyhXS1ZpZXdS
ZWYgdmlldywgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlZpZXcodmlldykK
KyAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorICAgICwgbV9jb250ZXh0KEV3a0NvbnRl
eHQ6OmZpbmRPckNyZWF0ZVdyYXBwZXIoV0tQYWdlR2V0Q29udGV4dCh3a1BhZ2UoKSkpKQorICAg
ICwgbV9wYWdlR3JvdXAoRXdrUGFnZUdyb3VwOjpjcmVhdGUoV0tQYWdlR2V0UGFnZUdyb3VwKHdr
UGFnZSgpKSkpIC8vIEZJWE1FOiBNdXN0IGJlIGZpbmRPckNyZWF0ZVdyYXBwZXIgYWZ0ZXIgd2Vi
a2l0Lm9yZy9iLzExMjM2NC4KICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0g
ICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tD
b250ZXh0KCkpLCB0b0ltcGwobV9wYWdlR3JvdXAtPndrUGFnZUdyb3VwKCkpLCB0aGlzKSkpCiAg
ICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBA
IC0yNzAsNiArMjcwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVj
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICAgICBBU1NFUlQobV9l
dmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIEZJWE1FOiBSZW1v
dmUgd2hlbiBwb3NzaWJsZS4KKyAgICB3ZWJWaWV3KCktPnNldEV3a1ZpZXcodGhpcyk7CisKICAg
ICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
ZXZhc09iamVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4
dCA9IEV2YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yODEsOCArMjg0
LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tW
aWV3KCkpOwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9y
ID09IERlZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9
IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1By
ZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAg
LTMyMCwxMyArMzIxLDExIEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICB3a1BhZ2VUb0V2YXNP
YmplY3RNYXAoKS5yZW1vdmUod2tQYWdlKCkpOwogfQogCi1FdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3Jv
dXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXS1Zp
ZXdSZWYgd2ViVmlldywgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0g
ZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQgPyBzbWFydCA6
IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV2YXNPYmplY3QsIDApOwogCiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CkBAIC0zMzcsMTQgKzMzNiw5IEBAIEV2
YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19T
bWFydCogc21hcnQsIFBhc3NSZWZQCiAKICAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CiAK
LSAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCAo
cGFnZUdyb3VwID8gcGFnZUdyb3VwIDogRXdrUGFnZUdyb3VwOjpjcmVhdGUoKSksIGJlaGF2aW9y
KTsKKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0
KTsKIAotICAgIHJldHVybiBldmFzT2JqZWN0OwotfQotCi1FdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJl
aGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZGVmYXVsdFNt
YXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXAsIGJlaGF2aW9yKTsKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNz
SW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCkBAIC05NjAsNiArOTU0LDExIEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBFd2tWaWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtCiB9CiAjZW5kaWYKIAorV2ViVmlldyogRXdrVmlldzo6
d2ViVmlldygpCit7CisgICAgcmV0dXJuIHRvSW1wbChtX3dlYlZpZXcuZ2V0KCkpOworfQorCiAv
KioKICAqIEBpbnRlcm5hbAogICogVGhlIHVybCBvZiB2aWV3IHdhcyBjaGFuZ2VkIGJ5IHRoZSBm
cmFtZSBsb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgK
aW5kZXggYWY3OWY1OC4uMDFlYzU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaApAQCAtOTgsMTcgKzk4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xf
U3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9E
YXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9D
bGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQg
YnkgdGhlIGV2YXMgb2JqZWN0LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmpl
Y3QoKS4KIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3Ig
ewotICAgICAgICBMZWdhY3lCZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAg
fTsKLQotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52
YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBQ
YXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2
aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBzdGF0aWMgRXZhc19PYmplY3Qq
IGNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSAwLCBWaWV3QmVoYXZp
b3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tW
aWV3KiBjcmVhdGUoV0tWaWV3UmVmLCBFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0ID0g
MCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19T
bWFydF9DbGFzcyYpOwogCkBAIC0xMTYsMTAgKzEwOCwxMCBAQCBwdWJsaWM6CiAKICAgICBFdmFz
X09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0gICAgV0tW
aWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0K
KyAgICBXS1ZpZXdSZWYgd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9
CiAgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OwogCi0gICAgV2ViS2l0OjpXZWJQYWdlUHJv
eHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQorICAgIFdlYktpdDo6V2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gd2ViVmlldygpLT5wYWdlKCk7IH0KICAgICBFd2tD
b250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdr
UGFnZUdyb3VwKiBld2tQYWdlR3JvdXAoKSB7IHJldHVybiBtX3BhZ2VHcm91cC5nZXQoKTsgfQog
ICAgIEV3a1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0K
QEAgLTIwMCw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGluZm9y
bURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KLSAgICBXZWJLaXQ6OldlYlZpZXcq
IHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6OldlYlZp
ZXcqIHdlYlZpZXcoKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKSB7IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQpAQCAt
MjE0LDcgKzIwNiw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
dGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZh
c09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1Bh
Z2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoV0tWaWV3UmVm
LCBFdmFzX09iamVjdCopOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNldERldmljZVNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwpAQCAtMjUyLDYgKzI0NCw3IEBAIHByaXZhdGU6
CiAKIHByaXZhdGU6CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4K
KyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IG1fd2ViVmlldzsKICAgICBFdmFzX09iamVjdCog
bV9ldmFzT2JqZWN0OwogICAgIFJlZlB0cjxFd2tDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgUmVm
UHRyPEV3a1BhZ2VHcm91cD4gbV9wYWdlR3JvdXA7CkBAIC0yNjEsNyArMjU0LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fZGV2aWNlU2l6ZTsKICAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKICAgICBib29sIG1fcGVu
ZGluZ1N1cmZhY2VSZXNpemU7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNs
aWVudDsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4
IDdhZTE4YzcuLmMxNWI4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgImV3a192aWV3LmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogCiAj
aW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKQEAgLTg4LDE5
ICs4OSw0OCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1Nt
YXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJm
YWNlKCphcGkpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNh
bnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFd2tfUGFnZV9H
cm91cCogcGFnZUdyb3VwKQorRXZhc19PYmplY3QqIEVXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52
YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpLCBld2tfb2Jq
ZWN0X2Nhc3Q8RXdrUGFnZUdyb3VwKj4ocGFnZUdyb3VwKSk7CisgICAgV0tSZXRhaW5QdHI8V0tW
aWV3UmVmPiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXAp
KTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dChXS1ZpZXdHZXRQYWdlKHdrVmlldy5nZXQo
KSksIHRydWUpOworICAgIGlmIChFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdr
Vmlldy5nZXQoKSwgY2FudmFzLCBzbWFydCkpCisgICAgICAgIHJldHVybiBld2tWaWV3LT5ldmFz
T2JqZWN0KCk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2Fk
ZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK1dLVmll
d1JlZiBFV0tWaWV3R2V0V0tWaWV3KEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVXS19W
SUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKKworICAgIHJldHVybiBp
bXBsLT53a1ZpZXcoKTsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCwgRXdrX1Bh
Z2VfR3JvdXAqIHBhZ2VHcm91cCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChjYW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAg
IEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNv
bnRleHQpOworICAgIEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwID0gZXdrX29iamVjdF9jYXN0
PEV3a1BhZ2VHcm91cCo+KHBhZ2VHcm91cCk7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXdrUGFnZUdyb3VwLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrUGFnZUdyb3VwLT53a1BhZ2VHcm91cCgpLCAwKTsKKworICAgIHJldHVybiBF
V0tWaWV3Q3JlYXRlKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCBld2tQYWdlR3JvdXAtPndrUGFn
ZUdyb3VwKCksIGNhbnZhcywgc21hcnQpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRk
KEV2YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChj
YW52YXMsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVybiBFV0tWaWV3Q3Jl
YXRlKGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpLCAwLCBjYW52YXMsIDApOworfQor
CitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3
a19Db250ZXh0KiBjb250ZXh0KQoreworICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tf
b2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDApOworCisgICAgcmV0dXJuIEVXS1Zp
ZXdDcmVhdGUoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDAsIGNhbnZhcywgMCk7CiB9CiAKIEV3
a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGUzNWQ5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
ZXdrX3ZpZXdfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a192aWV3X3ByaXZhdGVfaAorCisjaW5jbHVk
ZSA8RXZhcy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRUFQSSBFdmFzX09iamVjdCogRVdLVmlld0Ny
ZWF0ZShXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFdmFzKiwgRXZhc19TbWFydCopOwor
RUFQSSBXS1ZpZXdSZWYgRVdLVmlld0dldFdLVmlldyhFdmFzX09iamVjdCopOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcAppbmRleCAyNDBjYmIzLi5kYTA4M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtMzQsOCArMzQsMTMg
QEAKICNpbmNsdWRlICJld2tfcGFnZV9ncm91cF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3Nl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2
YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTksMjAgKzEwNCwx
OSBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3Bl
Y3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgLy8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsK
LSAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2
YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBl
cihjb250ZXh0UmVmKSwgRXdrUGFnZUdyb3VwOjpjcmVhdGUodG9BUEkoaW5zcGVjdG9yUGFnZUdy
b3VwKCkpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JW
aWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICBXS0NvbnRleHRSZWYgd2tDb250ZXh0ID0gdG9B
UEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQ
YWdlR3JvdXAgPSB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSk7CisKKyAgICBtX2luc3BlY3Rv
clZpZXcgPSBFV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwgd2tQYWdlR3JvdXAsIGVjb3JlX2V2YXNf
Z2V0KG1faW5zcGVjdG9yV2luZG93KSwgLyogc21hcnQgKi8gMCk7CisgICAgV0tWaWV3UmVmIHdr
VmlldyA9IEVXS1ZpZXdHZXRXS1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKIAotICAgIEV3a1ZpZXcq
IGV3a1ZpZXcgPSB0b0V3a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NFUlQoZXdrVmll
dyk7Ci0gICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5l
ZGoiKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIp
KTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tWaWV3LCB3a1RoZW1lLmdldCgpKTsKIAotICAg
IEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwotICAgIGV3a19z
ZXR0aW5nc19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywg
dHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBH
ZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgcmV0dXJu
IGV3a1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmlld0dldFBhZ2Uod2tWaWV3
KSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCA1YzJiM2JhLi5lNWU4MGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTUxLDggKzUxLDgg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJW
aWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3Vw
LCBFd2tWaWV3KiBld2tWaWV3KQotICAgIDogbV9ld2tWaWV3KGV3a1ZpZXcpCitXZWJWaWV3OjpX
ZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAg
IDogbV9ld2tWaWV3KDApCiAgICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlz
LCBwYWdlR3JvdXApKQogewogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpAQCAtNjIsMTAgKzYyLDYg
QEAgV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBh
Z2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKICAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBk
ZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50
LCAiMSIpOwogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CiAgICAgbV9wYWdlLT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNp
YmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhldmFzT2JqZWN0KCkpOwot
I2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTc2LDYgKzcyLDIyIEBAIFdlYlZp
ZXc6On5XZWJWaWV3KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2Vi
Vmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCog
cGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBw
YWdlR3JvdXApKTsKK30KKworLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBX
ZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0g
ZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRp
ZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0
aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc2LDExICsyODgsMTkgQEAgYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzRm9jdXNlZCgpOwogfQogCiBib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmlu
ZGV4IDlmNWY2ZjQuLjBhODIyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oCkBAIC01MCw5ICs1MCwxMyBAQCBjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCwg
cHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5
cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCos
IEV3a1ZpZXcqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOworCisgICAg
Ly8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIHZvaWQgc2V0RXdrVmlldyhFd2tW
aWV3Kik7CisKICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgc2V0VXNlclZpZXdw
b3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwpAQCAtOTYsNiArMTAwLDcgQEAg
cHVibGljOgogICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3Vw
Kik7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKTsKIAogICAgIC8vIFBhZ2VDbGllbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMDBmY2FiLi5kYzZhZGZkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTMtMDMtMTggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPiBhbmQgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNlcGFyYXRlIFdlYlZpZXcgZnVydGhlciBmcm9t
IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTU5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZWQgRUZMIFBsYXRmb3JtV2ViVmlldyB0byBtZWV0IHRoZSBuZXcgV0tWaWV3IEFQSSBh
bmQgZXdrIHZpZXcgcHJpdmF0ZSBBUEkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRm
b3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwv
V0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdl
YlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZv
cm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cmVz
aXplVG8pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJh
cktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2lt
dWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1XZWJWaWV3Lmg6CisgICAgICAgIChQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwOgorICAgICAgICAoV1RSOjpF
dmVudFNlbmRlclByb3h5OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
ZXJQcm94eTo6a2V5RG93bik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRU
b3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2Rp
Zmllcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgor
ICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAg
ICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1XZWJWaWV3Ojpmb2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93
RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToKKwog
MjAxMy0wMy0xNSAgVG9iaWFzIE11ZWxsZXIgIDx0b2JpYXNtdWVAZ25vbWUub3JnPgogCiAgICAg
ICAgIEJ1aWxkIGZpeCBmb3IgVG9vbHMvR3RrTGF1bmNoZXIvUHJvZ3JhbXNfR3RrTGF1bmNoZXIt
bWFpbi5vIGlmIGdzdHJlYW1lciBpcyBub3QgaW5zdGFsbGVkCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaAppbmRleCBiNTZjMDk2Li41NTk0ZWU0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ4LDcgKzQ4LDggQEAgdHlwZWRlZiBXS1ZpZXdSZWYgUGxh
dGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCAqUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQ
TEFURk9STShFRkwpCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlw
ZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmpl
Y3QgRXZhc19PYmplY3Q7Cit0eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKIHR5
cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShRVCkKIFFU
X0JFR0lOX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxi
YWNrcy5jcHAKaW5kZXggYzRiNjdhYS4uNDUwZGNmMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tz
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld0Ns
aWVudFdlYlByb2Nlc3NDYWxsYmFja3MuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogI2lu
Y2x1ZGUgIlRlc3QuaCIKQEAgLTEwNCwxMSArMTA1LDEyIEBAIFRFU1QoV2ViS2l0MiwgV0tWaWV3
Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcykKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
KEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKTsK
IAogICAgIFBsYXRmb3JtV2ViVmlldyB2aWV3KGNvbnRleHQuZ2V0KCkpOworICAgIFdLVmlld1Jl
ZiB3a1ZpZXcgPSBFV0tWaWV3R2V0V0tWaWV3KHZpZXcucGxhdGZvcm1WaWV3KCkpOwogCi0gICAg
VGVzdFN0YXRlc0RhdGEgc3RhdGVzID0gVGVzdFN0YXRlc0RhdGEodmlldy5wbGF0Zm9ybVZpZXco
KSwgdXJsLmdldCgpKTsKKyAgICBUZXN0U3RhdGVzRGF0YSBzdGF0ZXMgPSBUZXN0U3RhdGVzRGF0
YSh3a1ZpZXcsIHVybC5nZXQoKSk7CiAKICAgICBzZXRQYWdlTG9hZGVyQ2xpZW50KHZpZXcucGFn
ZSgpLCAmc3RhdGVzKTsKLSAgICBzZXRWaWV3Q2xpZW50KHZpZXcucGxhdGZvcm1WaWV3KCksICZz
dGF0ZXMpOworICAgIHNldFZpZXdDbGllbnQod2tWaWV3LCAmc3RhdGVzKTsKIAogICAgIFdLUGFn
ZUxvYWRVUkwodmlldy5wYWdlKCksIHVybC5nZXQoKSk7CiAgICAgVXRpbDo6cnVuKCZzdGF0ZXMu
ZGlkRmluaXNoTG9hZCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0
Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcAppbmRleCA4YTAzNWYzLi5iZTI5ZjBlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZs
L1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTI1LDEwICsyNSwxMiBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1XZWJWaWV3LmgiCiAKICNpbmNsdWRlICJFV2ViS2l0Mi5oIgotI2luY2x1ZGUgIldlYktp
dDIvV0tBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4KKyNpbmNsdWRl
IDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgogCiBleHRl
cm4gYm9vbCB1c2VYMTFXaW5kb3c7CkBAIC02NCwyMyArNjYsMTkgQEAgc3RhdGljIHZvaWQgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiBQ
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3Jl
RXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAg
bV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci0g
ICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVf
RElSIi9kZWZhdWx0LmVkaiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlBy
b2Nlc3NDcmFzaGVkLCAwKTsKKworICAgIG1fdmlldyA9IEVXS1ZpZXdDcmVhdGUoY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBlY29yZV9ldmFzX2dldChtX3dpbmRvdyksIC8qIHNtYXJ0ICovIDAp
OworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIikpOworICAg
IFdLVmlld1NldFRoZW1lUGF0aChFV0tWaWV3R2V0V0tWaWV3KG1fdmlldyksIHdrVGhlbWUuZ2V0
KCkpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnBy
b2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYw
MCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsK
LQotICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0
aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZl
cnMgdG8uCi0gICAgV0tSZWxlYXNlKG1fdmlldyk7Ci0KLSAgICAvLyBGSVhNRTogVGhlIEMgV0tW
aWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8g
ZGVzdHJ1Y3QgaXQKLSAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2Vi
S2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCi0gICAgZXZhc19v
YmplY3RfZGVsKGV2YXNPYmplY3QpOworICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOwogCiAg
ICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7
CkBAIC04OCwzMyArODYsMzMgQEAgUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkK
IAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3Qo
bV92aWV3KSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywg
d2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBj
b25zdAogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CisgICAgcmV0dXJuIFdL
Vmlld0dldFBhZ2UoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7Ci0gICAgRXZhcyogZXZhcyA9
IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB0cnVlKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19v
YmplY3RfZXZhc19nZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3
LCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNw
YWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJz
cGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewotICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVj
dF9ldmFzX2dldChtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKICAgICBl
dmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5
KQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZh
c19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIEV2YXMqIGV2
YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3co
bV92aWV3KTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAw
KTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfZG93bihldmFzLCAzLCBFVkFTX0JVVFRPTl9O
T05FLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgMywgRVZBU19C
VVRUT05fTk9ORSwgMCwgMCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAppbmRleCBiOWZhNjc4Li45MzBmYjk4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1XZWJWaWV3LmgKQEAgLTU1LDggKzU1LDEwIEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZP
Uk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKK3R5cGVkZWYg
c3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRm
b3JtV0tWaWV3OwotdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKK3R5cGVkZWYg
RWNvcmVfRXZhcyogUGxhdGZvcm1CYWNraW5nOwordHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZv
cm1XaW5kb3c7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBAIC0xMDIsNiArMTA0LDkgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBQbGF0Zm9ybVdLVmlldyBtX3ZpZXc7CiAgICAgUGxhdGZv
cm1XaW5kb3cgbV93aW5kb3c7CisjaWYgUExBVEZPUk0oRUZMKQorICAgIFBsYXRmb3JtQmFja2lu
ZyBtX2JhY2tpbmc7CisjZW5kaWYKICAgICBib29sIG1fd2luZG93SXNLZXk7CiAgICAgV0tSZXRh
aW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtX29wdGlvbnM7CiAjaWYgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50
U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5k
ZXJQcm94eUVmbC5jcHAKaW5kZXggMTM5MjBlYy4uMDBlN2QxZiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKQEAgLTMxNCwxNCAr
MzE0LDE2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRv
bihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29u
c3QgV1RSRXZlbnQmIGV2ZW50KQogeworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKTsK
KwogICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VEb3duKQotICAg
ICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xs
ZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5idXR0b24sIGV2ZW50
Lm1vZGlmaWVycywgbV9jbGlja0NvdW50KTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZURvd25FdmVu
dChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycywgbV9jbGlja0NvdW50KTsKICAg
ICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VVcCkKLSAgICAg
ICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9k
aWZpZXJzKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZXZhcywgZXZlbnQuYnV0dG9u
LCBldmVudC5tb2RpZmllcnMpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJF
dmVudFR5cGVNb3VzZU1vdmUpCi0gICAgICAgIGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoZWNvcmVf
ZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3co
KSksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi54KSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bv
c2l0aW9uLnkpKTsKKyAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChldmFzLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi55KSk7
CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xs
QnkpCi0gICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5o
b3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7CisgICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxC
eUV2ZW50KGV2YXMsIGV2ZW50Lmhvcml6b250YWwsIGV2ZW50LnZlcnRpY2FsKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRlclByb3h5OjpyZXBsYXlTYXZlZEV2ZW50cygpCkBAIC00MTIsNyArNDE0LDcg
QEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3duKFdLU3RyaW5nUmVmIGtleVJlZiwgV0tF
dmVudE1vZGlmaWVycyB3a01vZGlmaWVycywKICAgICBpZiAoKHN0cmxlbihrZXlOYW1lKSA9PSAx
KSAmJiAoa2V5TmFtZVswXSA+PSAnQScgJiYga2V5TmFtZVswXSA8PSAnWicpKQogICAgICAgICB3
a01vZGlmaWVycyB8PSBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5OwogCi0gICAgRXZhcyogZXZh
cyA9IGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtV2luZG93KCkpOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKIAogICAgIGlu
dCBldmVudEluZGV4ID0gMDsKICAgICAvLyBNaW1pYyB0aGUgZW1hY3MgY3RybC1vIGJpbmRpbmcg
YnkgaW5zZXJ0aW5nIGEgcGFyYWdyYXBoCkBAIC00MzgsNyArNDQwLDcgQEAgdm9pZCBFdmVudFNl
bmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUp
CiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1Zp
ZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IG1fdGVzdENvbnRy
b2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCk7CiAgICAgZXdrX3ZpZXdfZmVl
ZF90b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUsIG1fdG91Y2hQb2ludHMsIGV2YXNfa2V5
X21vZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSkpOwogCiAgICAgRWlu
YV9MaXN0KiBsaXN0OwpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNl
bmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJv
b2wgZW5hYmxlKQogewotICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09i
amVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7Cisg
ICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgKHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyArK2luZGV4KSB7CiAg
ICAgICAgIGlmIChtb2RpZmllciAmICgxIDw8IGluZGV4KSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggZjZlNDc0NS4uZTI0
NTI2NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJW
aWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZp
ZXdFZmwuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcu
aCIKIAogI2luY2x1ZGUgIkVXZWJLaXQyLmgiCkBAIC01OCwzNyArNTksMzEgQEAgUGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cCwKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNlRml4ZWRMYXlv
dXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUZpeGVkTGF5
b3V0IikpOwogICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlvbnMgPyBXS0Jvb2xlYW5HZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
b3B0aW9ucywgdXNlRml4ZWRMYXlvdXRLZXkuZ2V0KCkpKSkgOiBmYWxzZTsKIAotICAgIG1fd2lu
ZG93ID0gaW5pdEVjb3JlRXZhcygpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldCht
X3dpbmRvdyk7CisgICAgbV9iYWNraW5nID0gaW5pdEVjb3JlRXZhcygpOwogCi0gICAgaWYgKG1f
dXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4
ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
cmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAwLCA2MDApOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3Vw
KTsKKyAgICBtX3dpbmRvdyA9IEVXS1ZpZXdDcmVhdGUoY29udGV4dCwgcGFnZUdyb3VwLCBlY29y
ZV9ldmFzX2dldChtX2JhY2tpbmcpLCAvKiBzbWFydCAqLyAwKTsKKyAgICBtX3ZpZXcgPSBFV0tW
aWV3R2V0V0tWaWV3KG1fd2luZG93KTsKIAotICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBXS1Bh
Z2VTZXRVc2VGaXhlZExheW91dChXS1ZpZXdHZXRQYWdlKG1fdmlldyksIG1fdXNpbmdGaXhlZExh
eW91dCk7CisKKyAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KQorICAgICAgICByZXNpemVUbyg4
MDAsIDYwMCk7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93aW5kb3csIFRIRU1FX0RJUiIv
ZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOworICAgIGV2YXNfb2JqZWN0X3No
b3cobV93aW5kb3cpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQog
ewotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpOwotCi0gICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9u
Z2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5
IHJlZmVycyB0by4KLSAgICBXS1JlbGVhc2UobV92aWV3KTsKLQotICAgIC8vIEZJWE1FOiBUaGUg
QyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2
ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFu
ZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KLSAgICBl
dmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3RfZGVsKG1fd2luZG93
KTsKIAotICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CisgICAgZWNvcmVfZXZhc19mcmVl
KG1fYmFja2luZyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1Zp
ZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShtX3dpbmRvdywgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9y
bVdlYlZpZXc6OnBhZ2UoKQpAQCAtOTgsMjcgKzkzLDI2IEBAIFdLUGFnZVJlZiBQbGF0Zm9ybVdl
YlZpZXc6OnBhZ2UoKQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogewotICAgIEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAg
IC8vIEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEph
dmFTY3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJD
b3JlU3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlm
aWNhdGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20g
dGhlIHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KICAgICBpZiAoV0tQYWdlR2V0Rm9jdXNl
ZEZyYW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2
YXNfb2JqZWN0X2ZvY3VzX3NldChldmFzT2JqZWN0LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3Rf
Zm9jdXNfc2V0KGV2YXNPYmplY3QsIHRydWUpOworICAgICAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQobV93aW5kb3csIGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93aW5kb3cs
IHRydWUpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAg
ICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2Vv
bWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVf
ZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX2JhY2tpbmcsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0KTsKIAogICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewot
ICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFt
ZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVj
b3JlX2V2YXNfbW92ZV9yZXNpemUobV9iYWNraW5nLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3Jp
Z2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTM3LDcgKzEzMSw3IEBA
IFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJ
bWFnZSgpCiB7CiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZh
c19nZW9tZXRyeV9nZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNv
cmVfZXZhc19nZW9tZXRyeV9nZXQobV9iYWNraW5nLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwog
ICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKICAgICByZXR1cm4gYWRvcHRX
SyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193566</attachid>
            <date>2013-03-18 08:08:22 -0700</date>
            <delta_ts>2013-03-18 11:43:48 -0700</delta_ts>
            <desc>patch v5</desc>
            <filename>bug111591_v5</filename>
            <type>text/plain</type>
            <size>36568</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDNkNWY5NzRlOGNiNmM2YjhhNWEyNzAxODg3ZjgzNWVmNTE5NjAyMjUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzg3YmM1NC4uYTUwMzE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAz
LTE4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWluIHBvaW50
cyBhcmU6CisgICAgICAgIC0gV0tWaWV3IEFQSSBoYXMgbm8gZGVwZW5kZW5jeSBvbiBFRkwgdHlw
ZXMKKyAgICAgICAgLSBXZWJWaWV3IGNsYXNzIGRvZXMgbm90IHN0b3JlIHRoZSBFdmFzX09iamVj
dAorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAo
V0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tWaWV3IGNyZWF0aW9uIGRvZXMgbm90IHJl
cXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3NlZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OmNy
ZWF0ZSk6CisKKyAgICAgICAgICAgIFdLVmlld1JlZiBpcyBwYXNzZWQgdG8gRXdrVmlldyBjb25z
dHJ1Y3RvciBmcm9tIG91dHNpZGUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGNyZWF0ZWQgaW5z
aWRlLgorCisgICAgICAgIChFd2tWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKworICAgICAgICAgICAgRXdrVmll
dyBrZWVwcyBXS1ZpZXdSZWYgcmF0aGVyIHRoYW4gcG9pbnRlciB0byBXZWJWaWV3IGNsYXNzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKEVXS1ZpZXdDcmVhdGUpOgorICAgICAgICAoRVdLVmlld0dldFdLVmlldyk6CisK
KyAgICAgICAgICAgIEFkZGVkIHByaXZhdGUgQVBJIHRvIGNyZWF0ZSBld2sgdmlldyBldmFzIG9i
amVjdCBhbmQgcmV0dXJuIGl0cyBXS1ZpZXdSZWYuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tDcmVhdGVFdmFzT2JqZWN0KToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19hZGQpOgorICAgICAg
ICAoZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9X
ZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorCisgICAgICAgICAgICBVcGRhdGVk
IGFjY29yZGluZ2x5IHRvIHRoZSBuZXcgQVBJcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RXdrVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmlzVmlld0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdWaXNpYmxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcp
OgorCisgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB1cGRhdGVkIFdLVmlldyBBUEkuCisK
IDIwMTMtMDMtMTUgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRl
bC5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBHZXQgcmlkIG9mIFdlYlBhZ2VQcm94eTo6dmll
d1dpZGdldCgpIG1ldGhvZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCmluZGV4IGRjZDNlMmMuLjY5MWY2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI1ICsyOSwxMCBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1zdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1Zp
ZXcoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYpCiB7Ci0gICAgUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVm
ID8gRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihjb250ZXh0UmVmKSA6IEV3a0NvbnRl
eHQ6OmRlZmF1bHRDb250ZXh0KCk7Ci0gICAgUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3Vw
ID0gRXdrUGFnZUdyb3VwOjpjcmVhdGUocGFnZUdyb3VwUmVmKTsKLSAgICBFdmFzX09iamVjdCog
ZXZhc09iamVjdCA9IEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoY2FudmFzLCBjb250ZXh0LCBw
YWdlR3JvdXAsIGJlaGF2aW9yKTsKLSAgICBpZiAoIWV2YXNPYmplY3QpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odG9Fd2tW
aWV3KGV2YXNPYmplY3QpLT53a1ZpZXcoKSkpOwotfQotCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZikKLXsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci19Ci0KLVdLVmlld1Jl
ZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYg
Y29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHJldHVybiBj
cmVhdGVXS1ZpZXcoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRl
ZmF1bHRCZWhhdmlvcik7CisgICAgUmVmUHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgcmV0
dXJuIHRvQVBJKHdlYlZpZXcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tWaWV3
SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKQEAgLTE0MCwxMSArMTI1LDYgQEAgdm9pZCBX
S1ZpZXdFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlld1JlZikKICNlbmRpZgogfQogCi1FdmFz
X09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYgdmlld1JlZikKLXsKLSAgICBy
ZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCk7Ci19Ci0KIFdLSW1hZ2VSZWYgV0tW
aWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCiB7CiAgICAgRXdrVmlldyogZXdr
VmlldyA9IHRvRXdrVmlldyh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBhNzA5YjQ4Li5jYTM0
YmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKQEAg
LTI0LDE0ICsyNCw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLR2VvbWV0cnkuaD4KIAotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBF
dmFzOwotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzIEV2YXM7Ci10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7
Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90
OwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTU3LDkgKzQ5LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg
V0tWaWV3Q2xpZW50IFdLVmlld0NsaWVudDsKIAogZW51bSB7IGtXS1ZpZXdDbGllbnRDdXJyZW50
VmVyc2lvbiA9IDAgfTsKIAotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsK
LQotV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsK
K1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmll
d1JlZiwgY29uc3QgV0tWaWV3Q2xpZW50Kik7CkBAIC04OCw5ICs3OCw2IEBAIFdLX0VYUE9SVCBi
b29sIFdLVmlld0dldFNob3dzQXNTb3VyY2UoV0tWaWV3UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQg
V0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKIAotLy8gRklYTUU6IFRoZSBsb25nIHRl
cm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtlZXAgdXNhZ2UgdG8gYSBiYXJlIG1p
bmltdW0uCi1XS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3
UmVmKTsKLQogV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3
UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDE3ZGNiNjQuLjE3Njg3ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yMzcsMTIgKzIzNywxMiBA
QCBzdGF0aWMgaW5saW5lIFdLUGFnZVRvRXZhc09iamVjdE1hcCYgd2tQYWdlVG9FdmFzT2JqZWN0
TWFwKCkKIAogLy8gRXdrVmlldyBpbXBsZW1lbnRhdGlvbi4KIAotRXdrVmlldzo6RXdrVmlldyhF
dmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQ
YXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3Ip
Ci0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0
KQotICAgICwgbV9wYWdlR3JvdXAocGFnZUdyb3VwKQorRXdrVmlldzo6RXdrVmlldyhXS1ZpZXdS
ZWYgdmlldywgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlZpZXcodmlldykK
KyAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorICAgICwgbV9jb250ZXh0KEV3a0NvbnRl
eHQ6OmZpbmRPckNyZWF0ZVdyYXBwZXIoV0tQYWdlR2V0Q29udGV4dCh3a1BhZ2UoKSkpKQorICAg
ICwgbV9wYWdlR3JvdXAoRXdrUGFnZUdyb3VwOjpjcmVhdGUoV0tQYWdlR2V0UGFnZUdyb3VwKHdr
UGFnZSgpKSkpIC8vIEZJWE1FOiBNdXN0IGJlIGZpbmRPckNyZWF0ZVdyYXBwZXIgYWZ0ZXIgd2Vi
a2l0Lm9yZy9iLzExMjM2NC4KICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2UpCi0g
ICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcodG9JbXBsKG1fY29udGV4dC0+d2tD
b250ZXh0KCkpLCB0b0ltcGwobV9wYWdlR3JvdXAtPndrUGFnZUdyb3VwKCkpLCB0aGlzKSkpCiAg
ICAgLCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAg
ICAgLCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBA
IC0yNzAsNiArMjcwLDkgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVj
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICAgICBBU1NFUlQobV9l
dmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKIAorICAgIC8vIEZJWE1FOiBSZW1v
dmUgd2hlbiBwb3NzaWJsZS4KKyAgICB3ZWJWaWV3KCktPnNldEV3a1ZpZXcodGhpcyk7CisKICAg
ICBtX2V2YXNHTCA9IGFkb3B0UHRyKGV2YXNfZ2xfbmV3KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
ZXZhc09iamVjdCkpKTsKICAgICBpZiAobV9ldmFzR0wpCiAgICAgICAgIG1fZXZhc0dMQ29udGV4
dCA9IEV2YXNHTENvbnRleHQ6OmNyZWF0ZShtX2V2YXNHTC5nZXQoKSk7CkBAIC0yODEsOCArMjg0
LDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogICAgIFdLVmlld0luaXRpYWxpemUod2tW
aWV3KCkpOwogCi0gICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQod2tQYWdlKCksIGJlaGF2aW9y
ID09IERlZmF1bHRCZWhhdmlvcik7Ci0KICAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9
IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1By
ZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKQEAg
LTMyMCwxMyArMzIxLDExIEBAIEV3a1ZpZXc6On5Fd2tWaWV3KCkKICAgICB3a1BhZ2VUb0V2YXNP
YmplY3RNYXAoKS5yZW1vdmUod2tQYWdlKCkpOwogfQogCi1FdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3Jv
dXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIEV3a1ZpZXc6OmNyZWF0ZShXS1Zp
ZXdSZWYgd2ViVmlldywgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0g
ZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOworICAgIEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0ID0gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQgPyBzbWFydCA6
IGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV2YXNPYmplY3QsIDApOwogCiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gdG9TbWFydERhdGEoZXZhc09iamVjdCk7CkBAIC0zMzcsMTQgKzMzNiw5IEBAIEV2
YXNfT2JqZWN0KiBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgRXZhc19T
bWFydCogc21hcnQsIFBhc3NSZWZQCiAKICAgICBBU1NFUlQoIXNtYXJ0RGF0YS0+cHJpdik7CiAK
LSAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhldmFzT2JqZWN0LCBjb250ZXh0LCAo
cGFnZUdyb3VwID8gcGFnZUdyb3VwIDogRXdrUGFnZUdyb3VwOjpjcmVhdGUoKSksIGJlaGF2aW9y
KTsKKyAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyh3ZWJWaWV3LCBldmFzT2JqZWN0
KTsKIAotICAgIHJldHVybiBldmFzT2JqZWN0OwotfQotCi1FdmFzX09iamVjdCogRXdrVmlldzo6
Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJl
aGF2aW9yKQotewotICAgIHJldHVybiBjcmVhdGVFdmFzT2JqZWN0KGNhbnZhcywgZGVmYXVsdFNt
YXJ0Q2xhc3NJbnN0YW5jZSgpLCBjb250ZXh0LCBwYWdlR3JvdXAsIGJlaGF2aW9yKTsKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiBib29sIEV3a1ZpZXc6OmluaXRTbWFydENsYXNz
SW50ZXJmYWNlKEV3a19WaWV3X1NtYXJ0X0NsYXNzJiBhcGkpCkBAIC05NjAsNiArOTU0LDExIEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBFd2tWaWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtCiB9CiAjZW5kaWYKIAorV2ViVmlldyogRXdrVmlldzo6
d2ViVmlldygpCit7CisgICAgcmV0dXJuIHRvSW1wbChtX3dlYlZpZXcuZ2V0KCkpOworfQorCiAv
KioKICAqIEBpbnRlcm5hbAogICogVGhlIHVybCBvZiB2aWV3IHdhcyBjaGFuZ2VkIGJ5IHRoZSBm
cmFtZSBsb2FkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgK
aW5kZXggYWY3OWY1OC4uMDFlYzU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaApAQCAtOTgsMTcgKzk4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xf
U3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9E
YXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9D
bGFzcyBFd2tfVmlld19TbWFydF9DbGFzczsKIAotLy8gRXdrVmlldyBvYmplY3QgaXMgb3duZWQg
YnkgdGhlIGV2YXMgb2JqZWN0LCBvYnRhaW5lZCBmcm9tIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmpl
Y3QoKS4KIGNsYXNzIEV3a1ZpZXcgewogcHVibGljOgotCi0gICAgZW51bSBWaWV3QmVoYXZpb3Ig
ewotICAgICAgICBMZWdhY3lCZWhhdmlvciwKLSAgICAgICAgRGVmYXVsdEJlaGF2aW9yCi0gICAg
fTsKLQotICAgIHN0YXRpYyBFdmFzX09iamVjdCogY3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52
YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsICBQ
YXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwID0gMCwgVmlld0JlaGF2aW9yIGJlaGF2
aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKLSAgICBzdGF0aWMgRXZhc19PYmplY3Qq
IGNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNv
bnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSAwLCBWaWV3QmVoYXZp
b3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIHN0YXRpYyBFd2tW
aWV3KiBjcmVhdGUoV0tWaWV3UmVmLCBFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0ID0g
MCk7CiAKICAgICBzdGF0aWMgYm9vbCBpbml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19T
bWFydF9DbGFzcyYpOwogCkBAIC0xMTYsMTAgKzEwOCwxMCBAQCBwdWJsaWM6CiAKICAgICBFdmFz
X09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0gICAgV0tW
aWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0K
KyAgICBXS1ZpZXdSZWYgd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9
CiAgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OwogCi0gICAgV2ViS2l0OjpXZWJQYWdlUHJv
eHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQorICAgIFdlYktpdDo6V2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gd2ViVmlldygpLT5wYWdlKCk7IH0KICAgICBFd2tD
b250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdr
UGFnZUdyb3VwKiBld2tQYWdlR3JvdXAoKSB7IHJldHVybiBtX3BhZ2VHcm91cC5nZXQoKTsgfQog
ICAgIEV3a1NldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0K
QEAgLTIwMCw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGluZm9y
bURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KLSAgICBXZWJLaXQ6OldlYlZpZXcq
IHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBXZWJLaXQ6OldlYlZp
ZXcqIHdlYlZpZXcoKTsKIAogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKSB7IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsgfQpAQCAt
MjE0LDcgKzIwNiw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
dGFrZVNuYXBzaG90KCk7CiAKIHByaXZhdGU6Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogZXZh
c09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1Bh
Z2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoV0tWaWV3UmVm
LCBFdmFzX09iamVjdCopOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICB2b2lkIHNldERldmljZVNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwpAQCAtMjUyLDYgKzI0NCw3IEBAIHByaXZhdGU6
CiAKIHByaXZhdGU6CiAgICAgLy8gTm90ZSwgaW5pdGlhbGl6YXRpb24gb3JkZXIgbWF0dGVycy4K
KyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IG1fd2ViVmlldzsKICAgICBFdmFzX09iamVjdCog
bV9ldmFzT2JqZWN0OwogICAgIFJlZlB0cjxFd2tDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgUmVm
UHRyPEV3a1BhZ2VHcm91cD4gbV9wYWdlR3JvdXA7CkBAIC0yNjEsNyArMjU0LDYgQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fZGV2aWNlU2l6ZTsKICAgICBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3VzZXJWaWV3cG9ydFRyYW5zZm9ybTsKICAgICBib29sIG1fcGVu
ZGluZ1N1cmZhY2VSZXNpemU7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50
OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNs
aWVudDsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4
IDdhZTE4YzcuLmMxNWI4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgImV3a192aWV3LmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogCiAj
aW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKQEAgLTg4LDE5
ICs4OSw0OCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1Nt
YXJ0X0NsYXNzKiBhcGkpCiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJm
YWNlKCphcGkpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNh
bnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFd2tfUGFnZV9H
cm91cCogcGFnZUdyb3VwKQorRXZhc19PYmplY3QqIEVXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52
YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpLCBld2tfb2Jq
ZWN0X2Nhc3Q8RXdrUGFnZUdyb3VwKj4ocGFnZUdyb3VwKSk7CisgICAgV0tSZXRhaW5QdHI8V0tW
aWV3UmVmPiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXAp
KTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dChXS1ZpZXdHZXRQYWdlKHdrVmlldy5nZXQo
KSksIHRydWUpOworICAgIGlmIChFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdr
Vmlldy5nZXQoKSwgY2FudmFzLCBzbWFydCkpCisgICAgICAgIHJldHVybiBld2tWaWV3LT5ldmFz
T2JqZWN0KCk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2Fk
ZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK1dLVmll
d1JlZiBFV0tWaWV3R2V0V0tWaWV3KEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVXS19W
SUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKKworICAgIHJldHVybiBp
bXBsLT53a1ZpZXcoKTsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFz
KiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCwgRXdrX1Bh
Z2VfR3JvdXAqIHBhZ2VHcm91cCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09i
amVjdChjYW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAg
IEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNv
bnRleHQpOworICAgIEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwID0gZXdrX29iamVjdF9jYXN0
PEV3a1BhZ2VHcm91cCo+KHBhZ2VHcm91cCk7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXdrUGFnZUdyb3VwLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrUGFnZUdyb3VwLT53a1BhZ2VHcm91cCgpLCAwKTsKKworICAgIHJldHVybiBF
V0tWaWV3Q3JlYXRlKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCBld2tQYWdlR3JvdXAtPndrUGFn
ZUdyb3VwKCksIGNhbnZhcywgc21hcnQpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRk
KEV2YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChj
YW52YXMsIGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVybiBFV0tWaWV3Q3Jl
YXRlKGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpLCAwLCBjYW52YXMsIDApOworfQor
CitFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3
a19Db250ZXh0KiBjb250ZXh0KQoreworICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tf
b2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDApOworCisgICAgcmV0dXJuIEVXS1Zp
ZXdDcmVhdGUoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDAsIGNhbnZhcywgMCk7CiB9CiAKIEV3
a19Db250ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGUzNWQ5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
ZXdrX3ZpZXdfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a192aWV3X3ByaXZhdGVfaAorCisjaW5jbHVk
ZSA8RXZhcy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRUFQSSBFdmFzX09iamVjdCogRVdLVmlld0Ny
ZWF0ZShXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFdmFzKiwgRXZhc19TbWFydCopOwor
RUFQSSBXS1ZpZXdSZWYgRVdLVmlld0dldFdLVmlldyhFdmFzX09iamVjdCopOworCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcAppbmRleCAyNDBjYmIzLi5kYTA4M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtMzQsOCArMzQsMTMg
QEAKICNpbmNsdWRlICJld2tfcGFnZV9ncm91cF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3Nl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2
YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTksMjAgKzEwNCwx
OSBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3Bl
Y3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgLy8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsK
LSAgICBtX2luc3BlY3RvclZpZXcgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2
YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBl
cihjb250ZXh0UmVmKSwgRXdrUGFnZUdyb3VwOjpjcmVhdGUodG9BUEkoaW5zcGVjdG9yUGFnZUdy
b3VwKCkpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIGlmICghbV9pbnNwZWN0b3JW
aWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICBXS0NvbnRleHRSZWYgd2tDb250ZXh0ID0gdG9B
UEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSk7CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQ
YWdlR3JvdXAgPSB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSk7CisKKyAgICBtX2luc3BlY3Rv
clZpZXcgPSBFV0tWaWV3Q3JlYXRlKHdrQ29udGV4dCwgd2tQYWdlR3JvdXAsIGVjb3JlX2V2YXNf
Z2V0KG1faW5zcGVjdG9yV2luZG93KSwgLyogc21hcnQgKi8gMCk7CisgICAgV0tWaWV3UmVmIHdr
VmlldyA9IEVXS1ZpZXdHZXRXS1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKIAotICAgIEV3a1ZpZXcq
IGV3a1ZpZXcgPSB0b0V3a1ZpZXcobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBBU1NFUlQoZXdrVmll
dyk7Ci0gICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5l
ZGoiKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIp
KTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tWaWV3LCB3a1RoZW1lLmdldCgpKTsKIAotICAg
IEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwotICAgIGV3a19z
ZXR0aW5nc19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywg
dHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBH
ZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHNBbGxvd2VkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgcmV0dXJu
IGV3a1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gdG9JbXBsKFdLVmlld0dldFBhZ2Uod2tWaWV3
KSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcAppbmRleCA1YzJiM2JhLi5lNWU4MGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTUxLDggKzUxLDgg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJW
aWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3Vw
LCBFd2tWaWV3KiBld2tWaWV3KQotICAgIDogbV9ld2tWaWV3KGV3a1ZpZXcpCitXZWJWaWV3OjpX
ZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAg
IDogbV9ld2tWaWV3KDApCiAgICAgLCBtX3BhZ2UoY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlz
LCBwYWdlR3JvdXApKQogewogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpAQCAtNjIsMTAgKzYyLDYg
QEAgV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBh
Z2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKICAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBk
ZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50
LCAiMSIpOwogICAgIG1fcGFnZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CiAgICAgbV9wYWdlLT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNp
YmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhldmFzT2JqZWN0KCkpOwot
I2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTc2LDYgKzcyLDIyIEBAIFdlYlZp
ZXc6On5XZWJWaWV3KCkKICAgICBtX3BhZ2UtPmNsb3NlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2Vi
Vmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCog
cGFnZUdyb3VwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBw
YWdlR3JvdXApKTsKK30KKworLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgordm9pZCBX
ZWJWaWV3OjpzZXRFd2tWaWV3KEV3a1ZpZXcqIGV3a1ZpZXcpCit7CisgICAgbV9ld2tWaWV3ID0g
ZXdrVmlldzsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldy0+ZXZhc09iamVjdCgpKTsKKyNlbmRp
ZgorCit9CisKIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9wYWdlLT5pbml0
aWFsaXplV2ViUGFnZSgpOwpAQCAtMjc2LDExICsyODgsMTkgQEAgYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdXaW5kb3dBY3RpdmUoKQogCiBib29sIFdlYlZpZXc6OmlzVmlld0ZvY3VzZWQoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzRm9jdXNlZCgpOwogfQogCiBib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQogeworICAg
IC8vIEZJWE1FOiBVbm5lZWRlZCBhZnRlciB3ZWJraXQub3JnL2IvMTEwODc3CisgICAgaWYgKCFt
X2V3a1ZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBtX2V3a1ZpZXct
PmlzVmlzaWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCmlu
ZGV4IDlmNWY2ZjQuLjBhODIyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oCkBAIC01MCw5ICs1MCwxMyBAQCBjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCwg
cHVibGljIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5
cGUgPSBUeXBlVmlldzsKIAotICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCos
IEV3a1ZpZXcqKTsKICAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CiAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCopOworCisgICAg
Ly8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIHZvaWQgc2V0RXdrVmlldyhFd2tW
aWV3Kik7CisKICAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgc2V0VXNlclZpZXdw
b3J0VHJhbnNsYXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpOwpAQCAtOTYsNiArMTAwLDcgQEAg
cHVibGljOgogICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Ub1NjZW5lKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3Vw
Kik7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKTsKIAogICAgIC8vIFBhZ2VDbGllbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMDBmY2FiLi44NmMyMWExIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTMtMDMtMTggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPiBhbmQgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIFNlcGFyYXRlIFdlYlZpZXcgZnVydGhlciBmcm9t
IEV3a1ZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTU5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZWQgRUZMIFBsYXRmb3JtV2ViVmlldyB0byBtZWV0IHRoZSBuZXcgV0tWaWV3IEFQSSBh
bmQgZXdrIHZpZXcgcHJpdmF0ZSBBUEkuCisgICAgICAgIFBsYXRmb3JtV0tWaWV3IGlzIHBvaW50
ZXIgdG8gRXZhc19PYmplY3QgZm9yIEVGTCwgYXMgdGhpcyBpcyBtb3JlIG5hdHVyYWwgYW5kCisg
ICAgICAgIHNpbmNlIHdlIGNhbiBhZmZvcmQgaXQgaGF2aW5nIEVXS1ZpZXdHZXRXS1ZpZXcoKSBw
cml2YXRlIEFQSSB0byBhY2Nlc3MgV0tWaWV3LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
ZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3MuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJW
aWV3LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6flBs
YXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6
OnJlc2l6ZVRvKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cGFn
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3Bh
Y2ViYXJLZXlQcmVzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlTW91c2VNb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6c2ltdWxhdGVSaWdodENsaWNrKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2Vu
ZGVyUHJveHlFZmwuY3BwOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpkaXNwYXRj
aEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bik6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcik6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdl
YlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6
OnJlc2l6ZVRvKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAg
ICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3Jt
V2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSk6CisKIDIwMTMtMDMtMTUgIFRvYmlhcyBNdWVs
bGVyICA8dG9iaWFzbXVlQGdub21lLm9yZz4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIFRvb2xz
L0d0a0xhdW5jaGVyL1Byb2dyYW1zX0d0a0xhdW5jaGVyLW1haW4ubyBpZiBnc3RyZWFtZXIgaXMg
bm90IGluc3RhbGxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdl
YlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggYjU2
YzA5Ni4uNTU5NGVlNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdl
YlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00
OCw3ICs0OCw4IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBH
dGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBz
dHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwordHlwZWRl
ZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oUVQpCiBRVF9CRUdJTl9OQU1FU1BBQ0UKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50
V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3MuY3BwCmluZGV4IGM0YjY3YWEu
LjQ1MGRjZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9l
ZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tz
LmNwcApAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNpbmNsdWRlICJUZXN0LmgiCkBAIC0xMDQs
MTEgKzEwNSwxMiBAQCBURVNUKFdlYktpdDIsIFdLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFj
a3MpCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBVdGlsOjpjcmVhdGVV
UkxGb3JSZXNvdXJjZSgic2ltcGxlIiwgImh0bWwiKSk7CiAKICAgICBQbGF0Zm9ybVdlYlZpZXcg
dmlldyhjb250ZXh0LmdldCgpKTsKKyAgICBXS1ZpZXdSZWYgd2tWaWV3ID0gRVdLVmlld0dldFdL
Vmlldyh2aWV3LnBsYXRmb3JtVmlldygpKTsKIAotICAgIFRlc3RTdGF0ZXNEYXRhIHN0YXRlcyA9
IFRlc3RTdGF0ZXNEYXRhKHZpZXcucGxhdGZvcm1WaWV3KCksIHVybC5nZXQoKSk7CisgICAgVGVz
dFN0YXRlc0RhdGEgc3RhdGVzID0gVGVzdFN0YXRlc0RhdGEod2tWaWV3LCB1cmwuZ2V0KCkpOwog
CiAgICAgc2V0UGFnZUxvYWRlckNsaWVudCh2aWV3LnBhZ2UoKSwgJnN0YXRlcyk7Ci0gICAgc2V0
Vmlld0NsaWVudCh2aWV3LnBsYXRmb3JtVmlldygpLCAmc3RhdGVzKTsKKyAgICBzZXRWaWV3Q2xp
ZW50KHdrVmlldywgJnN0YXRlcyk7CiAKICAgICBXS1BhZ2VMb2FkVVJMKHZpZXcucGFnZSgpLCB1
cmwuZ2V0KCkpOwogICAgIFV0aWw6OnJ1bigmc3RhdGVzLmRpZEZpbmlzaExvYWQpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggOGEwMzVmMy4uYmUy
OWYwZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBA
IC0yNSwxMCArMjUsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
ZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogCiAjaW5j
bHVkZSAiRVdlYktpdDIuaCIKLSNpbmNsdWRlICJXZWJLaXQyL1dLQVBJQ2FzdC5oIgorI2luY2x1
ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KIAogZXh0ZXJuIGJvb2wgdXNlWDExV2luZG93OwpA
QCAtNjQsMjMgKzY2LDE5IEBAIHN0YXRpYyB2b2lkIG9uV2ViUHJvY2Vzc0NyYXNoZWQodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9y
bVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKIHsKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKLSAgICBFdmFzKiBldmFz
ID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShl
dmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOwotICAgIGV3a192aWV3X3RoZW1lX3NldChX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CisKKyAg
ICBtX3ZpZXcgPSBFV0tWaWV3Q3JlYXRlKGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpLCAvKiBzbWFydCAqLyAwKTsKKworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhUSEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgoRVdL
Vmlld0dldFdLVmlldyhtX3ZpZXcpLCB3a1RoZW1lLmdldCgpKTsKKworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlBy
b2Nlc3NDcmFzaGVkLCAwKTsKICAgICByZXNpemVUbyg2MDAsIDgwMCk7CiB9CiAKIFBsYXRmb3Jt
V2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7Ci0KLSAgICAvLyBSZWxlYXNlIGZpcnN0
LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIgdGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3
IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVmZXJzIHRvLgotICAgIFdLUmVsZWFzZSht
X3ZpZXcpOwotCi0gICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0
ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0Ci0gICAgLy8gKGFu
ZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXks
IHVudGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0KTsK
KyAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKIAogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dp
bmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwpAQCAtODgsMzMgKzg2LDMzIEBAIFBs
YXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQp
OworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBX
S1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tW
aWV3R2V0UGFnZShtX3ZpZXcpOworICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKEVXS1ZpZXdHZXRX
S1ZpZXcobV92aWV3KSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNl
YmFyS2V5UHJlc3MoKQogewotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRv
dyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgdHJ1ZSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldyk7
CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMCwgMCk7CiAg
ICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAs
IDEsIDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5z
aWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQo
bV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KTsKKyAg
ICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21v
dmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0
ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0
RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggYjlmYTY3OC4uOGRmMTE0
NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC01NSw3ICs1
NSw4IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRn
ZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3Qg
X0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3
OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwordHlwZWRlZiBFdmFz
X09iamVjdCogUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2lu
ZG93OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2
ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRT
ZW5kZXJQcm94eUVmbC5jcHAKaW5kZXggMTM5MjBlYy4uNDI0OTc0ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKQEAgLTMxNCwx
NCArMzE0LDE2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1
dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQo
Y29uc3QgV1RSRXZlbnQmIGV2ZW50KQogeworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9l
dmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7
CisKICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlRG93bikKLSAg
ICAgICAgZGlzcGF0Y2hNb3VzZURvd25FdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuYnV0dG9uLCBldmVu
dC5tb2RpZmllcnMsIG1fY2xpY2tDb3VudCk7CisgICAgICAgIGRpc3BhdGNoTW91c2VEb3duRXZl
bnQoZXZhcywgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMsIG1fY2xpY2tDb3VudCk7CiAg
ICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlVXApCi0gICAg
ICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1v
ZGlmaWVycyk7CisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRv
biwgZXZlbnQubW9kaWZpZXJzKTsKICAgICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RS
RXZlbnRUeXBlTW91c2VNb3ZlKQotICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGVjb3Jl
X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93
KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9w
b3NpdGlvbi55KSk7CisgICAgICAgIGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoZXZhcywgc3RhdGlj
X2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkp
OwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9s
bEJ5KQotICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChlY29yZV9ldmFzX2dldCht
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQu
aG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOworICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xs
QnlFdmVudChldmFzLCBldmVudC5ob3Jpem9udGFsLCBldmVudC52ZXJ0aWNhbCk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQpAQCAtNDEyLDcgKzQxNCw3
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlSZWYsIFdL
RXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsCiAgICAgaWYgKChzdHJsZW4oa2V5TmFtZSkgPT0g
MSkgJiYgKGtleU5hbWVbMF0gPj0gJ0EnICYmIGtleU5hbWVbMF0gPD0gJ1onKSkKICAgICAgICAg
d2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKIAotICAgIEV2YXMqIGV2
YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV90
ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOwogCiAgICAgaW50
IGV2ZW50SW5kZXggPSAwOwogICAgIC8vIE1pbWljIHRoZSBlbWFjcyBjdHJsLW8gYmluZGluZyBi
eSBpbnNlcnRpbmcgYSBwYXJhZ3JhcGgKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkK
IHsKICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCkpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJv
bGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CiAgICAgZXdrX3ZpZXdfZmVlZF90
b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUsIG1fdG91Y2hQb2ludHMsIGV2YXNfa2V5X21v
ZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSkpOwogCiAgICAgRWluYV9M
aXN0KiBsaXN0OwpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBk
YXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRl
clByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wg
ZW5hYmxlKQogewotICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVj
dChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisgICAg
RXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKTsKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IChz
aXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKytpbmRleCkgewogICAgICAg
ICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IGY2ZTQ3NDUuLmJkYTFiMDgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0Vm
bC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcApAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAK
ICNpbmNsdWRlICJFV2ViS2l0Mi5oIgpAQCAtNTksNTIgKzYwLDQ0IEBAIFBsYXRmb3JtV2ViVmll
dzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXAsCiAgICAgbV91c2luZ0ZpeGVkTGF5b3V0ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdl
dFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShvcHRpb25zLCB1c2VGaXhlZExheW91dEtleS5nZXQoKSkpKSA6IGZhbHNlOwogCiAgICAgbV93
aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0
KG1fd2luZG93KTsKIAotICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpIHsKLSAgICAgICAgbV92
aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91
cCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmll
dyksIDgwMCwgNjAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRl
KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgbV92aWV3ID0gRVdLVmlld0NyZWF0ZShj
b250ZXh0LCBwYWdlR3JvdXAsIGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KSwgLyogc21hcnQgKi8g
MCk7CiAKLSAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQo
V0tWaWV3R2V0UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpLCBtX3VzaW5nRml4ZWRMYXlv
dXQpOworCisgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkKKyAgICAgICAgcmVzaXplVG8oODAw
LCA2MDApOworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZh
dWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9z
aG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyht
X3ZpZXcpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAg
IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwot
Ci0gICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9uZ2VyIHRo
YW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5IHJlZmVy
cyB0by4KLSAgICBXS1JlbGVhc2UobV92aWV3KTsKLQotICAgIC8vIEZJWE1FOiBUaGUgQyBXS1Zp
ZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBk
ZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJL
aXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KLSAgICBldmFzX29i
amVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgZXZhc19vYmplY3RfZGVsKG1fdmlldyk7CiAKICAg
ICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6
cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29i
amVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQ
YWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBh
Z2UobV92aWV3KTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1f
dmlldykpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogewotICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8v
IEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFT
Y3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3Jl
U3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNh
dGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhl
IHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KICAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZy
YW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChldmFzT2JqZWN0LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfZm9j
dXNfc2V0KGV2YXNPYmplY3QsIHRydWUpOworICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQo
bV92aWV3LCBmYWxzZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7
CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKQEAgLTE0MCw3ICsx
MzMsNyBAQCBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1Nu
YXBzaG90SW1hZ2UoKQogICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAwLCAw
LCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7
CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsKKyAg
ICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChFV0tWaWV3R2V0V0tWaWV3KG1f
dmlldykpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMo
V0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193620</attachid>
            <date>2013-03-18 11:43:48 -0700</date>
            <delta_ts>2013-03-19 14:58:12 -0700</delta_ts>
            <desc>patch v6</desc>
            <filename>bug111591_v6</filename>
            <type>text/plain</type>
            <size>36250</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDEyYWJhNTFiZDQwZjI3MzFlNGI5OGUzZjA3ZDljYTNkNTgwNzU3ZWIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIE1hciA4IDEyOjUzOjEzIDIwMTMgKzAyMDAKCiAgICBidWcxMTE1OTEKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTYzMGZmZS4uMDJmMjdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEzLTAz
LTE4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4gYW5k
IE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisKKyAg
ICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRoZXIgZnJvbSBFd2tWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1OTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWluIHBvaW50
cyBhcmU6CisgICAgICAgIC0gV0tWaWV3IEFQSSBoYXMgbm8gZGVwZW5kZW5jeSBvbiBFRkwgdHlw
ZXMKKyAgICAgICAgLSBXZWJWaWV3IGNsYXNzIGRvZXMgbm90IHN0b3JlIHRoZSBFdmFzX09iamVj
dAorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAo
V0tWaWV3Q3JlYXRlKToKKworICAgICAgICAgICAgV0tWaWV3IGNyZWF0aW9uIGRvZXMgbm90IHJl
cXVpcmUgYW55IEVGTCBvYmplY3RzIHRvIGJlIHBhc3NlZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OmNy
ZWF0ZSk6CisKKyAgICAgICAgICAgIFdLVmlld1JlZiBpcyBwYXNzZWQgdG8gRXdrVmlldyBjb25z
dHJ1Y3RvciBmcm9tIG91dHNpZGUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGNyZWF0ZWQgaW5z
aWRlLgorCisgICAgICAgIChFd2tWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKworICAgICAgICAgICAgRXdrVmll
dyBrZWVwcyBXS1ZpZXdSZWYgcmF0aGVyIHRoYW4gcG9pbnRlciB0byBXZWJWaWV3IGNsYXNzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKEVXS1ZpZXdDcmVhdGUpOgorICAgICAgICAoRVdLVmlld0dldFdLVmlldyk6CisK
KyAgICAgICAgICAgIEFkZGVkIHByaXZhdGUgQVBJIHRvIGNyZWF0ZSBld2sgdmlldyBldmFzIG9i
amVjdCBhbmQgcmV0dXJuIGl0cyBXS1ZpZXdSZWYuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tDcmVhdGVFdmFzT2JqZWN0KToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisgICAgICAgIChld2tfdmlld19hZGQpOgorICAgICAg
ICAoZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9X
ZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgorCisgICAgICAgICAgICBVcGRhdGVk
IGFjY29yZGluZ2x5IHRvIHRoZSBuZXcgQVBJcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RXdrVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmlzVmlld0ZvY3VzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc1ZpZXdWaXNpYmxl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcp
OgorCisgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiB1cGRhdGVkIFdLVmlldyBBUEkuCisK
IDIwMTMtMDMtMTggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRl
bC5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBGaXggY29kZSB3cmFwcGluZyBXS1BhZ2VHcm91
cFJlZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmlu
ZGV4IDY5OTAxNWEuLjY5MWY2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI2ICsyOSwxMCBAQAogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogCi1zdGF0aWMgaW5saW5lIFdLVmlld1JlZiBjcmVhdGVXS1ZpZXcoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
LCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7
Ci0gICAgUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQgPSBjb250ZXh0UmVmID8gRXdrQ29udGV4
dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihjb250ZXh0UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRD
b250ZXh0KCk7Ci0gICAgUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwID0gcGFnZUdyb3Vw
UmVmID8gRXdrUGFnZUdyb3VwOjpmaW5kT3JDcmVhdGVXcmFwcGVyKHBhZ2VHcm91cFJlZikgOiAw
OwotCi0gICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2Jq
ZWN0KGNhbnZhcywgY29udGV4dCwgcGFnZUdyb3VwLCBiZWhhdmlvcik7Ci0gICAgaWYgKCFldmFz
T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1Zp
ZXdSZWY+KFdLUmV0YWluKHRvRXdrVmlldyhldmFzT2JqZWN0KS0+d2tWaWV3KCkpKTsKLX0KLQot
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVdL
VmlldyhjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVo
YXZpb3IpOwotfQotCi1XS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKLXsKLSAgICByZXR1cm4gY3JlYXRlV0tWaWV3KGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIFJlZlB0cjxXZWJWaWV3
PiB3ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBh
Z2VHcm91cFJlZikpOworICAgIHJldHVybiB0b0FQSSh3ZWJWaWV3LnJlbGVhc2UoKS5sZWFrUmVm
KCkpOwogfQogCiB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCkBAIC0x
NDEsMTEgKzEyNSw2IEBAIHZvaWQgV0tWaWV3RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXdS
ZWYpCiAjZW5kaWYKIH0KIAotRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3
UmVmIHZpZXdSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgp
OwotfQotCiBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVm
KQogewogICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSB0b0V3a1ZpZXcodG9JbXBsKHZpZXdSZWYpLT5l
dmFzT2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmgKaW5kZXggYTcwOWI0OC4uY2EzNGJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCwxNCArMjQsNiBAQAogI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+CiAKLSNpZiBVU0UoRU8p
Ci10eXBlZGVmIHN0cnVjdCBfRW8gRXZhczsKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVj
dDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhcyBFdmFzOwotdHlwZWRlZiBzdHJ1Y3QgX0V2
YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IF9jYWlyb19z
dXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC01Nyw5ICs0
OSw3IEBAIHR5cGVkZWYgc3RydWN0IFdLVmlld0NsaWVudCBXS1ZpZXdDbGllbnQ7CiAKIGVudW0g
eyBrV0tWaWV3Q2xpZW50Q3VycmVudFZlcnNpb24gPSAwIH07CiAKLVdLX0VYUE9SVCBXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCk7Ci0KLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
V2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCk7CitXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAogV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tW
aWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudCopOwpAQCAtODgs
OSArNzgsNiBAQCBXS19FWFBPUlQgYm9vbCBXS1ZpZXdHZXRTaG93c0FzU291cmNlKFdLVmlld1Jl
Zik7CiAKIFdLX0VYUE9SVCB2b2lkIFdLVmlld0V4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CiAK
LS8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0IHJpZCBvZiB0aGlzLCBzbyBr
ZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgotV0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1Zp
ZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7Ci0KIFdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmll
d0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCA4MWViMTE1Li4w
NjJhMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNw
cApAQCAtMjM3LDEyICsyMzcsMTIgQEAgc3RhdGljIGlubGluZSBXS1BhZ2VUb0V2YXNPYmplY3RN
YXAmIHdrUGFnZVRvRXZhc09iamVjdE1hcCgpCiAKIC8vIEV3a1ZpZXcgaW1wbGVtZW50YXRpb24u
CiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwg
Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCi0g
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2Vi
Vmlldyh0b0ltcGwobV9jb250ZXh0LT53a0NvbnRleHQoKSksIHBhZ2VHcm91cCA/IHRvSW1wbChw
YWdlR3JvdXAtPndrUGFnZUdyb3VwKCkpIDogMCwgdGhpcykpKQorRXdrVmlldzo6RXdrVmlldyhX
S1ZpZXdSZWYgdmlldywgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlZpZXco
dmlldykKKyAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorICAgICwgbV9jb250ZXh0KEV3
a0NvbnRleHQ6OmZpbmRPckNyZWF0ZVdyYXBwZXIoV0tQYWdlR2V0Q29udGV4dCh3a1BhZ2UoKSkp
KQogICAgICwgbV9wYWdlR3JvdXAoRXdrUGFnZUdyb3VwOjpmaW5kT3JDcmVhdGVXcmFwcGVyKFdL
UGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSkpKQotICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZShmYWxzZSkgICAgCisgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogICAgICwg
bV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwg
bV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAg
ICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMjcw
LDYgKzI3MCw5IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBh
c3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAgICAgQVNTRVJUKG1fZXZhc09i
amVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdo
ZW4gcG9zc2libGUuCisgICAgd2ViVmlldygpLT5zZXRFd2tWaWV3KHRoaXMpOworCiAgICAgbV9l
dmFzR0wgPSBhZG9wdFB0cihldmFzX2dsX25ldyhldmFzX29iamVjdF9ldmFzX2dldChtX2V2YXNP
YmplY3QpKSk7CiAgICAgaWYgKG1fZXZhc0dMKQogICAgICAgICBtX2V2YXNHTENvbnRleHQgPSBF
dmFzR0xDb250ZXh0OjpjcmVhdGUobV9ldmFzR0wuZ2V0KCkpOwpAQCAtMjgxLDggKzI4NCw2IEBA
IEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAKICAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygp
KTsKIAotICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBE
ZWZhdWx0QmVoYXZpb3IpOwotCiAgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSBXS1Bh
Z2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOwogICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJl
bmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwogCkBAIC0zMjAs
MTMgKzMyMSwxMSBAQCBFd2tWaWV3Ojp+RXdrVmlldygpCiAgICAgd2tQYWdlVG9FdmFzT2JqZWN0
TWFwKCkucmVtb3ZlKHdrUGFnZSgpKTsKIH0KIAotRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0
ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwLCBW
aWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBFd2tWaWV3OjpjcmVhdGUoV0tWaWV3UmVm
IHdlYlZpZXcsIEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IGV2YXNf
b2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09i
amVjdCA9IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0ID8gc21hcnQgOiBkZWZh
dWx0U21hcnRDbGFzc0luc3RhbmNlKCkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChldmFzT2JqZWN0LCAwKTsKIAogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSA9IHRvU21hcnREYXRhKGV2YXNPYmplY3QpOwpAQCAtMzM3LDE0ICszMzYsOSBAQCBFdmFzX09i
amVjdCogRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQq
IHNtYXJ0LCBQYXNzUmVmUAogCiAgICAgQVNTRVJUKCFzbWFydERhdGEtPnByaXYpOwogCi0gICAg
c21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcoZXZhc09iamVjdCwgY29udGV4dCwgcGFnZUdy
b3VwLCBiZWhhdmlvcik7CisgICAgc21hcnREYXRhLT5wcml2ID0gbmV3IEV3a1ZpZXcod2ViVmll
dywgZXZhc09iamVjdCk7CiAKLSAgICByZXR1cm4gZXZhc09iamVjdDsKLX0KLQotRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OmNyZWF0ZUV2YXNPYmplY3QoRXZhcyogY2FudmFzLCBQYXNzUmVmUHRyPEV3
a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8RXdrUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gY3JlYXRlRXZhc09iamVjdChjYW52
YXMsIGRlZmF1bHRTbWFydENsYXNzSW5zdGFuY2UoKSwgY29udGV4dCwgcGFnZUdyb3VwLCBiZWhh
dmlvcik7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogYm9vbCBFd2tWaWV3Ojpp
bml0U21hcnRDbGFzc0ludGVyZmFjZShFd2tfVmlld19TbWFydF9DbGFzcyYgYXBpKQpAQCAtOTYw
LDYgKzk1NCwxMSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VR
dW90YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogfQogI2VuZGlmCiAKK1dlYlZp
ZXcqIEV3a1ZpZXc6OndlYlZpZXcoKQoreworICAgIHJldHVybiB0b0ltcGwobV93ZWJWaWV3Lmdl
dCgpKTsKK30KKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFRoZSB1cmwgb2YgdmlldyB3YXMgY2hh
bmdlZCBieSB0aGUgZnJhbWUgbG9hZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oCmluZGV4IDY2MjYxOTcuLjAxZWM1NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTk4LDE3ICs5OCw5IEBAIHR5cGVkZWYgc3Ry
dWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9TdXJmYWNlOwogdHlwZWRlZiBzdHJ1Y3QgRXdr
X1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFydF9EYXRhOwogdHlwZWRlZiBzdHJ1Y3QgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MgRXdrX1ZpZXdfU21hcnRfQ2xhc3M7CiAKLS8vIEV3a1ZpZXcgb2Jq
ZWN0IGlzIG93bmVkIGJ5IHRoZSBldmFzIG9iamVjdCwgb2J0YWluZWQgZnJvbSBFd2tWaWV3Ojpj
cmVhdGVFdmFzT2JqZWN0KCkuCiBjbGFzcyBFd2tWaWV3IHsKIHB1YmxpYzoKLQotICAgIGVudW0g
Vmlld0JlaGF2aW9yIHsKLSAgICAgICAgTGVnYWN5QmVoYXZpb3IsCi0gICAgICAgIERlZmF1bHRC
ZWhhdmlvcgotICAgIH07Ci0KLSAgICBzdGF0aWMgRXZhc19PYmplY3QqIGNyZWF0ZUV2YXNPYmpl
Y3QoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCAgUGFzc1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCA9IDAsIFZpZXdC
ZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7Ci0gICAgc3RhdGlj
IEV2YXNfT2JqZWN0KiBjcmVhdGVFdmFzT2JqZWN0KEV2YXMqIGNhbnZhcywgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPEV3a1BhZ2VHcm91cD4gcGFnZUdyb3VwID0g
MCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKTsKKyAg
ICBzdGF0aWMgRXdrVmlldyogY3JlYXRlKFdLVmlld1JlZiwgRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCA9IDApOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdFNtYXJ0Q2xhc3NJbnRlcmZh
Y2UoRXdrX1ZpZXdfU21hcnRfQ2xhc3MmKTsKIApAQCAtMTE2LDEwICsxMDgsMTAgQEAgcHVibGlj
OgogCiAgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7
IH0KIAotICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlZp
ZXcuZ2V0KCkpOyB9CisgICAgV0tWaWV3UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
Vmlldy5nZXQoKTsgfQogICAgIFdLUGFnZVJlZiB3a1BhZ2UoKSBjb25zdDsKIAotICAgIFdlYktp
dDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KKyAg
ICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIHdlYlZpZXcoKS0+cGFnZSgp
OyB9CiAgICAgRXdrQ29udGV4dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQogICAgIEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwKCkgeyByZXR1cm4gbV9wYWdlR3Jv
dXAuZ2V0KCk7IH0KICAgICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRp
bmdzLmdldCgpOyB9CkBAIC0yMDAsNyArMTkyLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJl
bnRRdW90YSwgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRPcmlnaW5Vc2FnZSwgdW5zaWduZWQg
bG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0
ZWRVc2FnZSk7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCi0gICAgV2Vi
S2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9CisgICAg
V2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCk7CiAKICAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3RvcikgeyBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOyB9
CiAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVG
YWN0b3I7IH0KQEAgLTIxNCw3ICsyMDYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHRha2VTbmFwc2hvdCgpOwogCiBwcml2YXRlOgotICAgIEV3a1ZpZXcoRXZh
c19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFz
c1JlZlB0cjxFd2tQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBFd2tW
aWV3KFdLVmlld1JlZiwgRXZhc19PYmplY3QqKTsKICAgICB+RXdrVmlldygpOwogCiAgICAgdm9p
ZCBzZXREZXZpY2VTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKQEAgLTI1Miw5ICsyNDQs
OSBAQCBwcml2YXRlOgogCiBwcml2YXRlOgogICAgIC8vIE5vdGUsIGluaXRpYWxpemF0aW9uIG9y
ZGVyIG1hdHRlcnMuCisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVmPiBtX3dlYlZpZXc7CiAgICAg
RXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsKICAgICBSZWZQdHI8RXdrQ29udGV4dD4gbV9jb250
ZXh0OwotICAgIFJlZlB0cjxXZWJLaXQ6OldlYlZpZXc+IG1fd2ViVmlldzsKICAgICBSZWZQdHI8
RXdrUGFnZUdyb3VwPiBtX3BhZ2VHcm91cDsKICAgICBPd25QdHI8RXZhc19HTD4gbV9ldmFzR0w7
CiAgICAgT3duUHRyPFdlYktpdDo6RXZhc0dMQ29udGV4dD4gbV9ldmFzR0xDb250ZXh0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDdhZTE4
YzcuLmMxNWI4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgImV3a192aWV3LmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogCiAjaW5jbHVk
ZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKQEAgLTg4LDE5ICs4OSw0
OCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0Ns
YXNzKiBhcGkpCiAgICAgcmV0dXJuIEV3a1ZpZXc6OmluaXRTbWFydENsYXNzSW50ZXJmYWNlKCph
cGkpOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywg
RXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0LCBFd2tfUGFnZV9Hcm91cCog
cGFnZUdyb3VwKQorRXZhc19PYmplY3QqIEVXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChjYW52YXMsIHNt
YXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpLCBld2tfb2JqZWN0X2Nh
c3Q8RXdrUGFnZUdyb3VwKj4ocGFnZUdyb3VwKSk7CisgICAgV0tSZXRhaW5QdHI8V0tWaWV3UmVm
PiB3a1ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXApKTsKKyAg
ICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dChXS1ZpZXdHZXRQYWdlKHdrVmlldy5nZXQoKSksIHRy
dWUpOworICAgIGlmIChFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6Y3JlYXRlKHdrVmlldy5n
ZXQoKSwgY2FudmFzLCBzbWFydCkpCisgICAgICAgIHJldHVybiBld2tWaWV3LT5ldmFzT2JqZWN0
KCk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRo
X2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKK1dLVmlld1JlZiBF
V0tWaWV3R2V0V0tWaWV3KEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVXS19WSUVXX0lN
UExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKKworICAgIHJldHVybiBpbXBsLT53
a1ZpZXcoKTsKK30KKworRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52
YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCwgRXdrX1BhZ2VfR3Jv
dXAqIHBhZ2VHcm91cCkKIHsKLSAgICByZXR1cm4gRXdrVmlldzo6Y3JlYXRlRXZhc09iamVjdChj
YW52YXMsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3a0Nv
bnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQp
OworICAgIEV3a1BhZ2VHcm91cCogZXdrUGFnZUdyb3VwID0gZXdrX29iamVjdF9jYXN0PEV3a1Bh
Z2VHcm91cCo+KHBhZ2VHcm91cCk7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZXdrQ29udGV4dCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3
a0NvbnRleHQtPndrQ29udGV4dCgpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXdrUGFnZUdyb3VwLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZXdrUGFnZUdyb3VwLT53a1BhZ2VHcm91cCgpLCAwKTsKKworICAgIHJldHVybiBFV0tWaWV3
Q3JlYXRlKGV3a0NvbnRleHQtPndrQ29udGV4dCgpLCBld2tQYWdlR3JvdXAtPndrUGFnZUdyb3Vw
KCksIGNhbnZhcywgc21hcnQpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkKEV2YXMq
IGNhbnZhcykKIHsKLSAgICByZXR1cm4gZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChjYW52YXMs
IGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCkpOworICAgIHJldHVybiBFV0tWaWV3Q3JlYXRlKGFk
b3B0V0soV0tDb250ZXh0Q3JlYXRlKCkpLmdldCgpLCAwLCBjYW52YXMsIDApOworfQorCitFdmFz
X09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250
ZXh0KiBjb250ZXh0KQoreworICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQgPSBld2tfb2JqZWN0
X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDApOworCisgICAgcmV0dXJuIEVXS1ZpZXdDcmVh
dGUoZXdrQ29udGV4dC0+d2tDb250ZXh0KCksIDAsIGNhbnZhcywgMCk7CiB9CiAKIEV3a19Db250
ZXh0KiBld2tfdmlld19jb250ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGUzNWQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX3Zp
ZXdfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a192aWV3X3ByaXZhdGVfaAorCisjaW5jbHVkZSA8RXZh
cy5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRUFQSSBFdmFzX09iamVjdCogRVdLVmlld0NyZWF0ZShX
S0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFdmFzKiwgRXZhc19TbWFydCopOworRUFQSSBX
S1ZpZXdSZWYgRVdLVmlld0dldFdLVmlldyhFdmFzX09iamVjdCopOworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApp
bmRleCA2ZDEyZGZhLi5kYTA4M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtMzQsOCArMzQsMTMgQEAKICNp
bmNsdWRlICJld2tfcGFnZV9ncm91cF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdz
LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9FZmxJbnNwZWN0b3JVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2UuaD4KKyNp
bmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1ByZWZl
cmVuY2VzUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtOTksMjAgKzEwNCwxOSBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgLy8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCi0gICAgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYgPSB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKTsKLSAgICBt
X2luc3BlY3RvclZpZXcgPSBFd2tWaWV3OjpjcmVhdGVFdmFzT2JqZWN0KGVjb3JlX2V2YXNfZ2V0
KG1faW5zcGVjdG9yV2luZG93KSwgRXdrQ29udGV4dDo6ZmluZE9yQ3JlYXRlV3JhcHBlcihjb250
ZXh0UmVmKSwgRXdrUGFnZUdyb3VwOjpmaW5kT3JDcmVhdGVXcmFwcGVyKHRvQVBJKGluc3BlY3Rv
clBhZ2VHcm91cCgpKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLSAgICBpZiAoIW1faW5z
cGVjdG9yVmlldykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgV0tDb250ZXh0UmVmIHdrQ29udGV4
dCA9IHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpOworICAgIFdLUGFnZUdyb3Vw
UmVmIHdrUGFnZUdyb3VwID0gdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpOworCisgICAgbV9p
bnNwZWN0b3JWaWV3ID0gRVdLVmlld0NyZWF0ZSh3a0NvbnRleHQsIHdrUGFnZUdyb3VwLCBlY29y
ZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIC8qIHNtYXJ0ICovIDApOworICAgIFdLVmll
d1JlZiB3a1ZpZXcgPSBFV0tWaWV3R2V0V0tWaWV3KG1faW5zcGVjdG9yVmlldyk7CiAKLSAgICBF
d2tWaWV3KiBld2tWaWV3ID0gdG9Fd2tWaWV3KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgQVNTRVJU
KGV3a1ZpZXcpOwotICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2Rl
ZmF1bHQuZWRqIik7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRFU1RfVEhFTUVfRElSICIvZGVmYXVs
dC5lZGoiKSk7CisgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldywgd2tUaGVtZS5nZXQoKSk7
CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdrVmlldy0+c2V0dGluZ3MoKTsKLSAg
ICBld2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0
dGluZ3MsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRG
aWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAg
IHJldHVybiBld2tWaWV3LT5wYWdlKCk7CisgICAgcmV0dXJuIHRvSW1wbChXS1ZpZXdHZXRQYWdl
KHdrVmlldykpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW4oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKaW5kZXggNWMyYjNiYS4uZTVl
ODBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC01MSw4
ICs1MSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBh
Z2VHcm91cCwgRXdrVmlldyogZXdrVmlldykKLSAgICA6IG1fZXdrVmlldyhld2tWaWV3KQorV2Vi
Vmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91
cCkKKyAgICA6IG1fZXdrVmlldygwKQogICAgICwgbV9wYWdlKGNvbnRleHQtPmNyZWF0ZVdlYlBh
Z2UodGhpcywgcGFnZUdyb3VwKSkKIHsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKQEAgLTYyLDEw
ICs2Miw2IEBAIFdlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdy
b3VwKiBwYWdlR3JvdXAsIEV3a1ZpZXcqIGV3a1ZpZXcpCiAgICAgYm9vbCBzaG93RGVidWdWaXN1
YWxzID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZp
cm9ubWVudCwgIjEiKTsKICAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwogICAgIG1fcGFn
ZS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50
ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKLSAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXZhc09iamVj
dCgpKTsKLSNlbmRpZgogfQogCiBXZWJWaWV3Ojp+V2ViVmlldygpCkBAIC03Niw2ICs3MiwyMiBA
QCBXZWJWaWV3Ojp+V2ViVmlldygpCiAgICAgbV9wYWdlLT5jbG9zZSgpOwogfQogCitQYXNzUmVm
UHRyPFdlYlZpZXc+IFdlYlZpZXc6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdl
R3JvdXAqIHBhZ2VHcm91cCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZXcoY29u
dGV4dCwgcGFnZUdyb3VwKSk7Cit9CisKKy8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4K
K3ZvaWQgV2ViVmlldzo6c2V0RXdrVmlldyhFd2tWaWV3KiBld2tWaWV3KQoreworICAgIG1fZXdr
VmlldyA9IGV3a1ZpZXc7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXctPmV2YXNPYmplY3QoKSk7
CisjZW5kaWYKKworfQorCiB2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQogewogICAgIG1fcGFn
ZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKQEAgLTI3NiwxMSArMjg4LDE5IEBAIGJvb2wgV2ViVmll
dzo6aXNWaWV3V2luZG93QWN0aXZlKCkKIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKCkK
IHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Via2l0Lm9yZy9iLzExMDg3NworICAg
IGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9l
d2tWaWV3LT5pc0ZvY3VzZWQoKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkK
IHsKKyAgICAvLyBGSVhNRTogVW5uZWVkZWQgYWZ0ZXIgd2Via2l0Lm9yZy9iLzExMDg3NworICAg
IGlmICghbV9ld2tWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gbV9l
d2tWaWV3LT5pc1Zpc2libGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuaAppbmRleCA5ZjVmNmY0Li4wYTgyMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaApAQCAtNTAsOSArNTAsMTMgQEAgY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElP
YmplY3QsIHB1YmxpYyBQYWdlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgVHlw
ZSBBUElUeXBlID0gVHlwZVZpZXc7CiAKLSAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdl
R3JvdXAqLCBFd2tWaWV3Kik7CiAgICAgdmlydHVhbCB+V2ViVmlldygpOwogCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViVmlldz4gY3JlYXRlKFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsK
KworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICB2b2lkIHNldEV3a1Zp
ZXcoRXdrVmlldyopOworCiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHNldFVz
ZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKQEAgLTk2LDYgKzEw
MCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9T
Y2VuZSgpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFdlYlBh
Z2VHcm91cCopOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAKICAgICAvLyBQYWdlQ2xpZW50CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGY3NmViYi4uMTAyMmM1MyAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM5IEBACisyMDEzLTAzLTE4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5l
dGhAd2Via2l0Lm9yZz4gYW5kIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtv
dkBpbnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBTZXBhcmF0ZSBXZWJWaWV3IGZ1cnRo
ZXIgZnJvbSBFd2tWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTE1OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGVkIEVGTCBQbGF0Zm9ybVdlYlZpZXcgdG8gbWVldCB0aGUgbmV3IFdLVmll
dyBBUEkgYW5kIGV3ayB2aWV3IHByaXZhdGUgQVBJLgorICAgICAgICBQbGF0Zm9ybVdLVmlldyBp
cyBwb2ludGVyIHRvIEV2YXNfT2JqZWN0IGZvciBFRkwsIGFzIHRoaXMgaXMgbW9yZSBuYXR1cmFs
IGFuZAorICAgICAgICBzaW5jZSB3ZSBjYW4gYWZmb3JkIGl0IGhhdmluZyBFV0tWaWV3R2V0V0tW
aWV3KCkgcHJpdmF0ZSBBUEkgdG8gYWNjZXNzIFdLVmlldy4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZWZsL1BsYXRm
b3JtV2ViVmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6
OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZp
ZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1X
ZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZp
ZXc6OnBhZ2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11
bGF0ZVNwYWNlYmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1X
ZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0
Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9F
dmVudFNlbmRlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OmtleURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHA6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1X
ZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cGFnZSk6
CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6Zm9jdXMpOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UpOgorCiAyMDEzLTAzLTE4ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBwbHVnaW5z
L3BsdWdpbi1jbGlwLXN1YmZyYW1lLmh0bWwgaXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1XZWJWaWV3LmgKaW5kZXggYjU2YzA5Ni4uNTU5NGVlNCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtV2ViVmlldy5oCkBAIC00OCw3ICs0OCw4IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBs
YXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYg
UExBVEZPUk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2Jq
ZWN0IEV2YXNfT2JqZWN0OwordHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7CiB0
eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oUVQpCiBR
VF9CRUdJTl9OQU1FU1BBQ0UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxs
YmFja3MuY3BwCmluZGV4IGM0YjY3YWEuLjQ1MGRjZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNr
cy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdD
bGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzLmNwcApAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNp
bmNsdWRlICJUZXN0LmgiCkBAIC0xMDQsMTEgKzEwNSwxMiBAQCBURVNUKFdlYktpdDIsIFdLVmll
d0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3MpCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVy
bChBZG9wdFdLLCBVdGlsOjpjcmVhdGVVUkxGb3JSZXNvdXJjZSgic2ltcGxlIiwgImh0bWwiKSk7
CiAKICAgICBQbGF0Zm9ybVdlYlZpZXcgdmlldyhjb250ZXh0LmdldCgpKTsKKyAgICBXS1ZpZXdS
ZWYgd2tWaWV3ID0gRVdLVmlld0dldFdLVmlldyh2aWV3LnBsYXRmb3JtVmlldygpKTsKIAotICAg
IFRlc3RTdGF0ZXNEYXRhIHN0YXRlcyA9IFRlc3RTdGF0ZXNEYXRhKHZpZXcucGxhdGZvcm1WaWV3
KCksIHVybC5nZXQoKSk7CisgICAgVGVzdFN0YXRlc0RhdGEgc3RhdGVzID0gVGVzdFN0YXRlc0Rh
dGEod2tWaWV3LCB1cmwuZ2V0KCkpOwogCiAgICAgc2V0UGFnZUxvYWRlckNsaWVudCh2aWV3LnBh
Z2UoKSwgJnN0YXRlcyk7Ci0gICAgc2V0Vmlld0NsaWVudCh2aWV3LnBsYXRmb3JtVmlldygpLCAm
c3RhdGVzKTsKKyAgICBzZXRWaWV3Q2xpZW50KHdrVmlldywgJnN0YXRlcyk7CiAKICAgICBXS1Bh
Z2VMb2FkVVJMKHZpZXcucGFnZSgpLCB1cmwuZ2V0KCkpOwogICAgIFV0aWw6OnJ1bigmc3RhdGVz
LmRpZEZpbmlzaExvYWQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxh
dGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmll
dy5jcHAKaW5kZXggOGEwMzVmMy4uYmUyOWYwZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2Vm
bC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBAIC0yNSwxMCArMjUsMTIgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtV2ViVmlldy5oIgogCiAjaW5jbHVkZSAiRVdlYktpdDIuaCIKLSNpbmNsdWRlICJXZWJL
aXQyL1dLQVBJQ2FzdC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KIAogZXh0
ZXJuIGJvb2wgdXNlWDExV2luZG93OwpAQCAtNjQsMjMgKzY2LDE5IEBAIHN0YXRpYyB2b2lkIG9u
V2ViUHJvY2Vzc0NyYXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQog
UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKICAgICBtX3dpbmRvdyA9IGluaXRFY29y
ZUV2YXMoKTsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAg
IG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOwot
ICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1F
X0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQ
cm9jZXNzQ3Jhc2hlZCwgMCk7CisKKyAgICBtX3ZpZXcgPSBFV0tWaWV3Q3JlYXRlKGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZiwgZWNvcmVfZXZhc19nZXQobV93aW5kb3cpLCAvKiBzbWFydCAqLyAw
KTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhUSEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAg
ICBXS1ZpZXdTZXRUaGVtZVBhdGgoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpLCB3a1RoZW1lLmdl
dCgpKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJw
cm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKICAgICByZXNpemVUbyg2
MDAsIDgwMCk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0g
ICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7
Ci0KLSAgICAvLyBSZWxlYXNlIGZpcnN0LiBXZWJWaWV3IHNob3VsZCBub3QgbGl2ZSBsb25nZXIg
dGhhbiBFd2tWaWV3LCBhcyBFd2tWaWV3IG93bnMgb2JqZWN0cyB0aGF0IHBhZ2UgcHJveHkgcmVm
ZXJzIHRvLgotICAgIFdLUmVsZWFzZShtX3ZpZXcpOwotCi0gICAgLy8gRklYTUU6IFRoZSBDIFdL
VmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRv
IGRlc3RydWN0IGl0Ci0gICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdl
YktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgotICAgIGV2YXNf
b2JqZWN0X2RlbChldmFzT2JqZWN0KTsKKyAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKIAog
ICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigp
OwpAQCAtODgsMzMgKzg2LDMzIEBAIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygp
CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcs
IHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOworICAgIHJldHVybiBX
S1ZpZXdHZXRQYWdlKEVXS1ZpZXdHZXRXS1ZpZXcobV92aWV3KSk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewotICAgIEV2YXMqIGV2YXMg
PSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgdHJ1ZSk7CisgICAgRXZhcyogZXZhcyA9IGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG1fdmlldyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmll
dywgdHJ1ZSk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIsICJz
cGFjZSIsICIgIiwgMCwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCAi
c3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKLSAgICBFdmFz
KiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3co
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmpl
Y3RfZXZhc19nZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CiAgICAg
ZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQg
UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQg
eSkKIHsKLSAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2
YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKyAgICBFdmFzKiBl
dmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93
KG1fdmlldyk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwg
MCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05f
Tk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNf
QlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgKaW5kZXggYjlmYTY3OC4uOGRmMTE0NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtV2ViVmlldy5oCkBAIC01NSw3ICs1NSw4IEBAIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZP
Uk0oRUZMKQogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYg
V0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2
YXNfT2JqZWN0OwordHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVm
IEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKaW5kZXggMTM5MjBlYy4u
NDI0OTc0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5k
ZXJQcm94eUVmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5k
ZXJQcm94eUVmbC5jcHAKQEAgLTMxNCwxNCArMzE0LDE2IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9uKQogCiB2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RSRXZlbnQmIGV2ZW50KQogeworICAgIEV2
YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdU
UkV2ZW50VHlwZU1vdXNlRG93bikKLSAgICAgICAgZGlzcGF0Y2hNb3VzZURvd25FdmVudChlY29y
ZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRv
dygpKSwgZXZlbnQuYnV0dG9uLCBldmVudC5tb2RpZmllcnMsIG1fY2xpY2tDb3VudCk7CisgICAg
ICAgIGRpc3BhdGNoTW91c2VEb3duRXZlbnQoZXZhcywgZXZlbnQuYnV0dG9uLCBldmVudC5tb2Rp
ZmllcnMsIG1fY2xpY2tDb3VudCk7CiAgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09IFdU
UkV2ZW50VHlwZU1vdXNlVXApCi0gICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3JlX2V2
YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkp
LCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgICAgIGRpc3BhdGNoTW91c2VV
cEV2ZW50KGV2YXMsIGV2ZW50LmJ1dHRvbiwgZXZlbnQubW9kaWZpZXJzKTsKICAgICBlbHNlIGlm
IChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VNb3ZlKQotICAgICAgICBkaXNw
YXRjaE1vdXNlTW92ZUV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24u
eCksIHN0YXRpY19jYXN0PGludD4obV9wb3NpdGlvbi55KSk7CisgICAgICAgIGRpc3BhdGNoTW91
c2VNb3ZlRXZlbnQoZXZhcywgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOwogICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9
PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQotICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xs
QnlFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOworICAg
ICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChldmFzLCBldmVudC5ob3Jpem9udGFsLCBl
dmVudC52ZXJ0aWNhbCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRF
dmVudHMoKQpAQCAtNDEyLDcgKzQxNCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93
bihXS1N0cmluZ1JlZiBrZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsCiAgICAg
aWYgKChzdHJsZW4oa2V5TmFtZSkgPT0gMSkgJiYgKGtleU5hbWVbMF0gPj0gJ0EnICYmIGtleU5h
bWVbMF0gPD0gJ1onKSkKICAgICAgICAgd2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNT
aGlmdEtleTsKIAotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICBFdmFzKiBldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkpOwogCiAgICAgaW50IGV2ZW50SW5kZXggPSAwOwogICAgIC8vIE1pbWljIHRo
ZSBlbWFjcyBjdHJsLW8gYmluZGluZyBieSBpbnNlcnRpbmcgYSBwYXJhZ3JhcGgKQEAgLTQzOCw3
ICs0NDAsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3Vj
aF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAK
LSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29u
dHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOworICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCk7CiAgICAgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUsIG1f
dG91Y2hQb2ludHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dldChl
d2tWaWV3KSkpOwogCiAgICAgRWluYV9MaXN0KiBsaXN0OwpAQCAtNDkwLDcgKzQ5Miw3IEBAIHZv
aWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBp
bnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogewotICAgIEV2YXNfT2JqZWN0KiBld2tW
aWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVZpZXcoKSk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250
cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hh
ciopKTsgKytpbmRleCkgewogICAgICAgICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0Vm
bC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3Bw
CmluZGV4IGY2ZTQ3NDUuLmJkYTFiMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcApAQCAtMTksNiArMTksNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAKICNpbmNsdWRlICJFV2ViS2l0Mi5oIgpAQCAtNTksNTIg
KzYwLDQ0IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBj
b250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsCiAgICAgbV91c2luZ0ZpeGVkTGF5b3V0
ID0gb3B0aW9ucyA/IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShvcHRpb25zLCB1c2VGaXhlZExheW91dEtleS5nZXQo
KSkpKSA6IGZhbHNlOwogCiAgICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7Ci0gICAgRXZh
cyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKIAotICAgIGlmIChtX3VzaW5nRml4
ZWRMYXlvdXQpIHsKLSAgICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0
KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIDgwMCwgNjAwKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAg
bV92aWV3ID0gRVdLVmlld0NyZWF0ZShjb250ZXh0LCBwYWdlR3JvdXAsIGVjb3JlX2V2YXNfZ2V0
KG1fd2luZG93KSwgLyogc21hcnQgKi8gMCk7CiAKLSAgICBld2tfdmlld190aGVtZV9zZXQoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAg
V0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQoV0tWaWV3R2V0UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1f
dmlldykpLCBtX3VzaW5nRml4ZWRMYXlvdXQpOworCisgICAgaWYgKG1fdXNpbmdGaXhlZExheW91
dCkKKyAgICAgICAgcmVzaXplVG8oODAwLCA2MDApOworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0
KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBm
YWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcoKQogewotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3
R2V0RXZhc09iamVjdChtX3ZpZXcpOwotCi0gICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBz
aG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVj
dHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KLSAgICBXS1JlbGVhc2UobV92aWV3KTsKLQot
ICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFz
X09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAotICAgIC8vIChhbmQgaXRzIGRlcGVu
ZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlz
IGdldCBmaXhlZC4KLSAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CisgICAgZXZhc19v
YmplY3RfZGVsKG1fdmlldyk7CiAKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7
Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKKyAgICByZXR1cm4gV0tWaWV3R2V0
UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6Zm9jdXMoKQogewotICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpOwogICAgIC8vIEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQg
cmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFTY3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0
IGF0IGFsbAogICAgIC8vIChXZWJDb3JlU3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRv
ZXMgbm90IGVtaXQgYW55IG5vdGlmaWNhdGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRo
ZQogICAgIC8vIGZvY3VzIGZyb20gdGhlIHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3Vz
IHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KICAg
ICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1l
KHBhZ2UoKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChldmFzT2JqZWN0LCBmYWxz
ZSk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGV2YXNPYmplY3QsIHRydWUpOworICAgICAg
ICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCBmYWxzZSk7CisgICAgZXZhc19vYmplY3Rf
Zm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6Ondp
bmRvd0ZyYW1lKCkKQEAgLTE0MCw3ICsxMzMsNyBAQCBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQ
bGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UoKQogICAgIGVjb3JlX2V2YXNfZ2Vv
bWV0cnlfZ2V0KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3
aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVh
dGVTbmFwc2hvdChtX3ZpZXcpKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdChFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZp
ZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMoV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>