<?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>146335</bug_id>
          
          <creation_ts>2015-06-25 18:29:25 -0700</creation_ts>
          <short_desc>[Win] Implement High DPI support features for non-layer drawing</short_desc>
          <delta_ts>2019-09-04 01:04:39 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=147242</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=201450</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87919</dependson>
          <blocked>147242</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1104828</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-25 18:29:25 -0700</bug_when>
    <thetext>Extend the existing Windows High DPI features so that we satisfy the elements discussed in the MSDN article &lt;https://msdn.microsoft.com/en-us/library/windows/desktop/dd464659(v=vs.85).aspx&gt;.

Specifically:

1. Listen for WM_DPICHANGED messages and react accordingly.
2. Check for Windows 8.1 High DPI features, linking to them dynamically so we still run on Windows 7 and Windows 8.
3. Set the correct Process DPI Awareness in our test applications to avoid scaling behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104829</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-25 18:29:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/21558269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105212</commentid>
    <comment_count>2</comment_count>
      <attachid>255708</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-27 15:02:04 -0700</bug_when>
    <thetext>Created attachment 255708
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105213</commentid>
    <comment_count>3</comment_count>
      <attachid>255708</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-27 15:02:33 -0700</bug_when>
    <thetext>Comment on attachment 255708
WIP Patch

Works, except for layer-backed content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105214</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-27 15:03:34 -0700</bug_when>
    <thetext>Attachment 255708 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/WebView.cpp:1249:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/WebView.cpp:1292:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/platform/win/ScrollbarThemeWin.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:9:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 7 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105216</commentid>
    <comment_count>5</comment_count>
      <attachid>255708</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-27 15:21:43 -0700</bug_when>
    <thetext>Comment on attachment 255708
WIP Patch

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

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.cpp:124
&gt; +    HWndDC dc(0);
&gt; +    float scaleFactor = 96.0f / ::GetDeviceCaps(dc, LOGPIXELSX);
&gt; +    return clampTo&lt;int&gt;(scaleFactor * scrollbarThicknessInPixels());

Seems like this won’t do the right thing if there are multiple screens.

&gt; Source/WebKit/win/ChangeLog:3
&gt; +        [Win] Implement proper High DPI support features

“proper” eh?

&gt; Source/WebKit/win/WebView.cpp:966
&gt; +    // DDDDDD

?

&gt; Source/WebKit/win/WebView.cpp:1002
&gt; +        IntSize logicalSize = newSize;
&gt; +        logicalSize.scale(1.0f / deviceScaleFactor());

This will truncate; is that what we want rather than, say, rounding or doing a ceiling operation?

&gt; Source/WebKit/win/WebView.cpp:1249
&gt; +#if 1 //FLASH_BACKING_STORE_REDRAW

?

&gt; Source/WebKit/win/WebView.cpp:1292
&gt; +#if 1 //FLASH_WINDOW_REDRAW

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106143</commentid>
    <comment_count>6</comment_count>
      <attachid>255945</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-01 12:11:27 -0700</bug_when>
    <thetext>Created attachment 255945
WIP Do NOT REVIEW!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106146</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-01 12:12:55 -0700</bug_when>
    <thetext>Attachment 255945 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/win/ScrollbarThemeWin.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:427:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:427:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:9:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 7 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110023</commentid>
    <comment_count>8</comment_count>
      <attachid>256938</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-16 16:24:24 -0700</bug_when>
    <thetext>Created attachment 256938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110025</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-16 16:27:34 -0700</bug_when>
    <thetext>Attachment 256938 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:967:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/win/ScrollbarThemeWin.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111146</commentid>
    <comment_count>10</comment_count>
      <attachid>257223</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-21 17:38:43 -0700</bug_when>
    <thetext>Created attachment 257223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111149</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-21 17:41:24 -0700</bug_when>
    <thetext>Attachment 257223 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:366:  WM_DPICHANGED is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:73:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
ERROR: Tools/WinLauncher/Common.cpp:108:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 5 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111174</commentid>
    <comment_count>12</comment_count>
      <attachid>257235</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-21 18:38:42 -0700</bug_when>
    <thetext>Created attachment 257235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111175</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-21 18:40:01 -0700</bug_when>
    <thetext>Attachment 257235 did not pass style-queue:


ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:73:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
ERROR: Tools/WinLauncher/Common.cpp:108:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 4 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111307</commentid>
    <comment_count>14</comment_count>
      <attachid>257277</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 09:27:03 -0700</bug_when>
    <thetext>Created attachment 257277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111308</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 09:28:42 -0700</bug_when>
    <thetext>Attachment 257277 did not pass style-queue:


ERROR: Tools/WinLauncher/Common.cpp:108:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/ScrollbarThemeWin.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:73:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
Total errors found: 5 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111322</commentid>
    <comment_count>16</comment_count>
      <attachid>257279</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 09:53:06 -0700</bug_when>
    <thetext>Created attachment 257279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111325</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 09:54:31 -0700</bug_when>
    <thetext>Attachment 257279 did not pass style-queue:


ERROR: Tools/WinLauncher/Common.cpp:108:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:73:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111395</commentid>
    <comment_count>18</comment_count>
      <attachid>257291</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 13:38:11 -0700</bug_when>
    <thetext>Created attachment 257291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111398</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 13:39:21 -0700</bug_when>
    <thetext>Attachment 257291 did not pass style-queue:


ERROR: Tools/WinLauncher/Common.cpp:108:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Tools/WinLauncher/WinLauncher.cpp:486:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:73:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
Total errors found: 4 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111427</commentid>
    <comment_count>20</comment_count>
      <attachid>257291</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-07-22 14:33:32 -0700</bug_when>
    <thetext>Comment on attachment 257291
Patch

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

How did you test this? There are lots of different changes; were they all tested?

I’d like to see us consistently use one name for the inverse scale factor. Currently the patch sometimes calls it just “scale factor”, other times “inverse scale factor”, other times “inverted scale factor”.

&gt; Source/WebCore/platform/win/PlatformMouseEventWin.cpp:52
&gt; +    float scaleFactor = deviceScaleFactor(hWnd);
&gt; +    point.x = clampTo&lt;int&gt;(point.x / scaleFactor);
&gt; +    point.y = clampTo&lt;int&gt;(point.y / scaleFactor);

In ScrollbarThemeWin.cpp you made the scale factor be the inverse of what it is here, and so were able to do more multiplication and less division. Why the different approaches in the different source files?

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.cpp:115
&gt;      static int thickness;
&gt;      if (!thickness)
&gt;          thickness = ::GetSystemMetrics(SM_CXVSCROLL);

This seems strange. Why not just write this?

    static int thickness = ::GetSystemMetrics(SM_CXVSCROLL);

&gt; Source/WebCore/platform/win/ScrollbarThemeWin.cpp:122
&gt; +    HWndDC dc(0);

Is the 0 here really needed? How about using nothing at all? How about nullptr?

&gt; Source/WebCore/platform/win/WheelEventWin.cpp:44
&gt; +static float deviceScaleFactor(HWND window)
&gt; +{
&gt; +    HWndDC dc(window);
&gt; +    return ::GetDeviceCaps(dc, LOGPIXELSX) / 96.0f;
&gt; +}

Why write this function multiple times? Lets put it in a header.

&gt; Source/WebKit/win/WebPreferences.cpp:197
&gt; -    CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR(&quot;Segoe UI&quot;));
&gt; +    CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR(&quot;Times New Roman&quot;));

No explanation of this in the change log.

&gt; Source/WebKit/win/WebView.cpp:1255
&gt; +    float inverseScaleFactor = 1.0f / scaleFactor;

Seems like this should consistently be called inverseScaleFactor in all the source files.

&gt; Source/WebKit/win/WebView.cpp:1481
&gt; +    POINT point = { logicalPoint.x() * scaleFactor, logicalPoint.y() * scaleFactor };

I don’t think you need the &quot;=&quot; here.

&gt; Source/WebKit/win/WebView.cpp:1678
&gt; +    IntPoint logicalGestureBeginPoint(gestureBeginPoint.x / scaleFactor, gestureBeginPoint.y / scaleFactor);

Is truncation what we want in all these places where we convert to int? Why not ceiling, rounding, or pixel snapping instead?

&gt; Tools/WinLauncher/Common.cpp:110
&gt; +    HDC dc = ::GetDC(window);
&gt; +    float deviceScaleFactor = ::GetDeviceCaps(dc, LOGPIXELSX) / 96.0f;
&gt; +    ::ReleaseDC(window, dc);

Why not use HWndDC here? Also, it’s annoying to have another duplication copy of this same function!

&gt; Tools/WinLauncher/Common.cpp:135
&gt; +    if (!hURLFont) {
&gt; +        hURLFont = ::CreateFont(scaleFactor * 18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
&gt; +            OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, L&quot;Times New Roman&quot;);
&gt; +    }

Why is it safe to cache this in a global and not regenerate it? What if the scale factor is different, the next time through?

&gt; Tools/WinLauncher/Common.cpp:158
&gt; +    float scaleFactor = deviceScaleFactorForWindow(0);

How about nullptr instead of 0?

&gt; Tools/WinLauncher/Common.cpp:455
&gt; +            if ((y &gt; window.top) &amp;&amp; (y &lt; window.top + (dragBarHeight * gWinLauncher-&gt;deviceScaleFactor())))

Too many parentheses I think.

&gt; Tools/WinLauncher/WinLauncher.cpp:488
&gt; +    HDC dc = ::GetDC(m_hMainWnd);
&gt; +    m_deviceScaleFactor = ::GetDeviceCaps(dc, LOGPIXELSX) / 96.0f;
&gt; +    ::ReleaseDC(m_hMainWnd, dc);

Another place that could share the deviceScaleFactor function?

&gt; Tools/WinLauncher/WinLauncherWebHost.h:79
&gt; +    HWND m_hURLBarWnd { 0 };

nullptr

&gt; Tools/WinLauncher/WinLauncherWebHost.h:80
&gt; +    HGDIOBJ m_URLBarFont { 0 };

nullptr

&gt; Tools/WinLauncher/WinLauncherWebHost.h:81
&gt; +    HGDIOBJ m_oldFont { 0 };

nullptr

&gt; Tools/WinLauncher/WinMain.cpp:68
&gt; +    float scaleFactor = deviceScaleFactorForWindow(0);

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111486</commentid>
    <comment_count>21</comment_count>
      <attachid>257291</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 17:17:38 -0700</bug_when>
    <thetext>Comment on attachment 257291
Patch

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

&gt;&gt; Source/WebCore/platform/win/PlatformMouseEventWin.cpp:52
&gt;&gt; +    point.y = clampTo&lt;int&gt;(point.y / scaleFactor);
&gt; 
&gt; In ScrollbarThemeWin.cpp you made the scale factor be the inverse of what it is here, and so were able to do more multiplication and less division. Why the different approaches in the different source files?

No, it should be consistent. I&apos;ll fix that.

&gt;&gt; Source/WebCore/platform/win/ScrollbarThemeWin.cpp:115
&gt;&gt;          thickness = ::GetSystemMetrics(SM_CXVSCROLL);
&gt; 
&gt; This seems strange. Why not just write this?
&gt; 
&gt;     static int thickness = ::GetSystemMetrics(SM_CXVSCROLL);

Good idea. I&apos;ll correct.

&gt;&gt; Source/WebCore/platform/win/ScrollbarThemeWin.cpp:122
&gt;&gt; +    HWndDC dc(0);
&gt; 
&gt; Is the 0 here really needed? How about using nothing at all? How about nullptr?

It takes a window as its argument, so it does need something. But nullptr is fine, and I&apos;ll switch to that.

&gt;&gt; Source/WebCore/platform/win/WheelEventWin.cpp:44
&gt;&gt; +}
&gt; 
&gt; Why write this function multiple times? Lets put it in a header.

Done.

&gt;&gt; Source/WebKit/win/WebPreferences.cpp:197
&gt;&gt; +    CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR(&quot;Times New Roman&quot;));
&gt; 
&gt; No explanation of this in the change log.

I&apos;ll correct that. This was just a drive-by fix.

&gt;&gt; Source/WebKit/win/WebView.cpp:1255
&gt;&gt; +    float inverseScaleFactor = 1.0f / scaleFactor;
&gt; 
&gt; Seems like this should consistently be called inverseScaleFactor in all the source files.

Agreed. Fixed.

&gt;&gt; Source/WebKit/win/WebView.cpp:1481
&gt;&gt; +    POINT point = { logicalPoint.x() * scaleFactor, logicalPoint.y() * scaleFactor };
&gt; 
&gt; I don’t think you need the &quot;=&quot; here.

Ok. I should also be using the IntPoint&apos;s scale method to make sure the right things are being done for float-&gt;int.

&gt;&gt; Source/WebKit/win/WebView.cpp:1678
&gt;&gt; +    IntPoint logicalGestureBeginPoint(gestureBeginPoint.x / scaleFactor, gestureBeginPoint.y / scaleFactor);
&gt; 
&gt; Is truncation what we want in all these places where we convert to int? Why not ceiling, rounding, or pixel snapping instead?

I&apos;ll make sure to use IntPoint.scale() so that it does the right thing.

&gt;&gt; Tools/WinLauncher/Common.cpp:110
&gt;&gt; +    ::ReleaseDC(window, dc);
&gt; 
&gt; Why not use HWndDC here? Also, it’s annoying to have another duplication copy of this same function!

HWndDC is internal to WebCore, so we can&apos;t use it in the Tools section of our sources. However, I can expose the deviceScaleFactorForWindow() as a utility function, and I&apos;ll use that instead. That function uses HWndDC internally.

&gt;&gt; Tools/WinLauncher/Common.cpp:135
&gt;&gt; +    }
&gt; 
&gt; Why is it safe to cache this in a global and not regenerate it? What if the scale factor is different, the next time through?

I&apos;ll correct the life cycle handling for this.

&gt;&gt; Tools/WinLauncher/Common.cpp:158
&gt;&gt; +    float scaleFactor = deviceScaleFactorForWindow(0);
&gt; 
&gt; How about nullptr instead of 0?

OK!

&gt;&gt; Tools/WinLauncher/Common.cpp:455
&gt;&gt; +            if ((y &gt; window.top) &amp;&amp; (y &lt; window.top + (dragBarHeight * gWinLauncher-&gt;deviceScaleFactor())))
&gt; 
&gt; Too many parentheses I think.

OK!

&gt;&gt; Tools/WinLauncher/WinLauncher.cpp:488
&gt;&gt; +    ::ReleaseDC(m_hMainWnd, dc);
&gt; 
&gt; Another place that could share the deviceScaleFactor function?

Yup.

&gt;&gt; Tools/WinLauncher/WinLauncherWebHost.h:79
&gt;&gt; +    HWND m_hURLBarWnd { 0 };
&gt; 
&gt; nullptr

Done.

&gt;&gt; Tools/WinLauncher/WinLauncherWebHost.h:80
&gt;&gt; +    HGDIOBJ m_URLBarFont { 0 };
&gt; 
&gt; nullptr

Done.

&gt;&gt; Tools/WinLauncher/WinLauncherWebHost.h:81
&gt;&gt; +    HGDIOBJ m_oldFont { 0 };
&gt; 
&gt; nullptr

Done.

&gt;&gt; Tools/WinLauncher/WinMain.cpp:68
&gt;&gt; +    float scaleFactor = deviceScaleFactorForWindow(0);
&gt; 
&gt; nullptr

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111490</commentid>
    <comment_count>22</comment_count>
      <attachid>257312</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 17:22:17 -0700</bug_when>
    <thetext>Created attachment 257312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111491</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 17:24:55 -0700</bug_when>
    <thetext>Attachment 257312 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:368:  WM_DPICHANGED is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:77:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
Total errors found: 3 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111499</commentid>
    <comment_count>24</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 17:48:43 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Comment on attachment 257291 [details]
&gt; How did you test this? There are lots of different changes; were they all
&gt; tested?

This code is dormant until a WebKit client activates High DPI mode, so all scaling factors will be 1.0, rending all of these changes kind of useless unless you are playing with High DPI settings on Windows (and Opt-in in your application).

I&apos;ve turned this on for WinLauncher, but DumpRenderTree and the other programs are still blissfully unaware of High DPI.

These changes should have no impact on any rendering behavior, so our existing regression suites cover the changes.

We will be creating new high DPI test cases for Windows once we complete the second part of this work (getting CALayer drawing working properly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111587</commentid>
    <comment_count>25</comment_count>
      <attachid>257340</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 22:06:50 -0700</bug_when>
    <thetext>Created attachment 257340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111588</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 22:09:49 -0700</bug_when>
    <thetext>Attachment 257340 did not pass style-queue:


ERROR: Source/WebKit/win/WebView.cpp:368:  WM_DPICHANGED is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:77:  Declaration has space between type name and * in scaleFactor * s_windowPosition  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/win/PlatformMouseEventWin.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/win/GDIUtilities.h:26:  #ifndef header guard has wrong style, please use: GDIUtilities_h  [build/header_guard] [5]
Total errors found: 4 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111599</commentid>
    <comment_count>27</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-22 23:39:13 -0700</bug_when>
    <thetext>I confirmed that this patch passes Windows tests locally; it clearly passes the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111690</commentid>
    <comment_count>28</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-23 12:31:20 -0700</bug_when>
    <thetext>Committed r187245: &lt;http://trac.webkit.org/changeset/187245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111709</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-07-23 13:06:44 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Committed r187245: &lt;http://trac.webkit.org/changeset/187245&gt;

It broke the Apple Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111738</commentid>
    <comment_count>30</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-23 14:10:13 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; Committed r187245: &lt;http://trac.webkit.org/changeset/187245&gt;
&gt; 
&gt; It broke the Apple Windows build.

I&apos;m looking at this now. I&apos;m in the process of fixing some bot configuration issues, so this build failure may not be due to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111742</commentid>
    <comment_count>31</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-07-23 14:15:23 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; (In reply to comment #28)
&gt; &gt; &gt; Committed r187245: &lt;http://trac.webkit.org/changeset/187245&gt;
&gt; &gt; 
&gt; &gt; It broke the Apple Windows build.
&gt; 
&gt; I&apos;m looking at this now. I&apos;m in the process of fixing some bot configuration
&gt; issues, so this build failure may not be due to the patch.

This build failure is actually due to a mixture of Windows SDK&apos;s being used during the build. A clean build corrects the problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255708</attachid>
            <date>2015-06-27 15:02:04 -0700</date>
            <delta_ts>2015-07-01 12:11:24 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-146335-20150627151435.patch</filename>
            <type>text/plain</type>
            <size>29623</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE1LTA2LTI3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBw
cm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
MTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRm9yRXZlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZVdpbjo6flNjcm9sbGJhclRoZW1lV2luKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisKIDIwMTUtMDYtMjcgIERhdmlkIEtpbHpl
ciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yOjpjZkVycm9yKCkgYWZ0ZXIgcHJvdmlzaW9uYWwgbG9hZCBmYWlsZWQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAkocmV2aXNpb24gMTg2
MDAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXkKIAogICAgICAgICBHcmFw
aGljc0NvbnRleHQgY2coY29udGV4dCk7CiAgICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjZy5zY2FsZShXZWJDb3JlOjpG
bG9hdFNpemUoMi4wLCAyLjApKTsKICAgICAgICAgY2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0
ZXh0KSwgSW50UG9pbnQoYUJvdW5kcy5vcmlnaW4ueCArIDUsIGFCb3VuZHMub3JpZ2luLnkgKyAx
NykpOwogCiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7ICAgICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1v
dXNlRXZlbnRXaW4uY3BwCShyZXZpc2lvbiAxODYwMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxNSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgg
VG9yY2ggTW9iaWxlIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI1LDEwICsyNSwxMiBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtMzYsOSAr
MzgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIEhJR0hfQklUX01BU0tfU0hP
UlQgMHg4MDAwCiAKK3N0YXRpYyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcihIV05EIHdpbmRvdykK
K3sKKyAgICBIV25kREMgZGMod2luZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRj
LCBMT0dQSVhFTFNYKSAvIDk2LjBmOworfQorCiBzdGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JF
dmVudChIV05EIGhXbmQsIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VU
X1hfTFBBUkFNKGxQYXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pfTsKKyAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworICAgIHBvaW50LnggPSBjbGFtcFRv
PGludD4ocG9pbnQueCAvIHNjYWxlRmFjdG9yKTsKKyAgICBwb2ludC55ID0gY2xhbXBUbzxpbnQ+
KHBvaW50LnkgLyBzY2FsZUZhY3Rvcik7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJ
KHJldmlzaW9uIDE4NjAwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxi
YXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVdpbi5oIgogCisjaW5jbHVkZSAi
SFduZERDLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTG9jYWxX
aW5kb3dzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtMTA3
LDE0ICsxMDgsMjIgQEAgU2Nyb2xsYmFyVGhlbWVXaW46On5TY3JvbGxiYXJUaGVtZVdpbigpCiB7
CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJh
ckNvbnRyb2xTaXplKQorc3RhdGljIGludCBzY3JvbGxiYXJUaGlja25lc3NJblBpeGVscygpCiB7
CiAgICAgc3RhdGljIGludCB0aGlja25lc3M7CiAgICAgaWYgKCF0aGlja25lc3MpCiAgICAgICAg
IHRoaWNrbmVzcyA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOworCiAgICAgcmV0
dXJuIHRoaWNrbmVzczsKIH0KIAoraW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCit7CisgICAgSFduZERDIGRjKDApOworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gOTYuMGYgLyA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gp
OworICAgIHJldHVybiBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBzY3JvbGxiYXJUaGlja25l
c3NJblBpeGVscygpKTsKK30KKwogdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6dGhlbWVDaGFuZ2Vk
KCkKIHsKICAgICBpZiAoIXNjcm9sbGJhclRoZW1lKQpJbmRleDogU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2
aXNpb24gMTg2MDM1KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTUtMDYtMjcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IHByb3BlciBIaWdoIERQSSBz
dXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpZFNhdmVUb1BhZ2VDYWNoZSk6CisgICAgICAgICogV2ViRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KToKKyAgICAg
ICAgKFdlYkZyYW1lOjpwYWludFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludCk6CisgICAg
ICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpjbG9zZSk6CisgICAgICAgIChX
ZWJWaWV3OjpyZXBhaW50KToKKyAgICAgICAgKFdlYlZpZXc6OmFkZFRvRGlydHlSZWdpb24pOgor
ICAgICAgICAoV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6
OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJWaWV3OjpwYWludCk6CisgICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KToKKyAgICAgICAg
KFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViVmlldzo6Z2Vz
dHVyZU5vdGlmeSk6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToKKyAgICAgICAgKFdlYlZp
ZXc6OnNldFNob3VsZEludmVydENvbG9ycyk6CisgICAgICAgIChXZWJWaWV3OjpyZWdpc3Rlcldl
YlZpZXdXaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdp
bmRvdyk6CisgICAgICAgIChXZWJWaWV3OjpnZW5lcmF0ZVNlbGVjdGlvbkltYWdlKToKKyAgICAg
ICAgKFdlYlZpZXc6OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViVmlldzo6aXNMb2FkaW5n
KToKKyAgICAgICAgKFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKFdlYlZpZXc6
OmZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSk6CisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxPZmZz
ZXQpOgorICAgICAgICAoV2ViVmlldzo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViVmlldzo6dmlz
aWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5k
b3cpOgorICAgICAgICAoV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYlZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViVmlldzo6Zmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKiBXZWJWaWV3Lmg6CisKIDIw
MTUtMDYtMjYgIFBlciBBcm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAg
IFdpbkxhdW5jaGVyIGZhaWxzIHRvIGRvd25sb2FkIGZpbGVzLgpJbmRleDogU291cmNlL1dlYktp
dC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAkocmV2aXNpb24gMTg2MDAyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNiArMzM2LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6
cGFpbnREb2N1bWVudFJlY3RUb0NvbgogICAgIGRpcnR5UmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsK
ICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CiAgICAgZ2MudHJhbnNsYXRlKC1yZWN0LmxlZnQsIC1y
ZWN0LnRvcCk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSB3ZWJWaWV3KCktPmRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgZ2Muc2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlRmFjdG9yLCBz
Y2FsZUZhY3RvcikpOwogICAgIHZpZXctPnBhaW50Q29udGVudHMoJmdjLCByZWN0KTsKICAgICBn
Yy5yZXN0b3JlKCk7CiAKQEAgLTM2MCw2ICszNjIsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWlu
dFNjcm9sbFZpZXdSZWN0VG9DCiAgICAgZ2Muc2F2ZSgpOwogICAgIEludFJlY3QgZGlydHlSZWN0
KHJlY3QpOwogICAgIGRpcnR5UmVjdC5tb3ZlKC1wdC54LCAtcHQueSk7CisgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSB3ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ2Muc2NhbGUo
V2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgIHZpZXct
PnBhaW50KCZnYywgZGlydHlSZWN0KTsKICAgICBnYy5yZXN0b3JlKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCShyZXZpc2lvbiAxODYwMDIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE5LDggKzgxOSwxMSBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYlZpZXc6OmNsb3NlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXZvaWQg
V2ViVmlldzo6cmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29s
IGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkp
Cit2b2lkIFdlYlZpZXc6OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgbG9naWNhbFdp
bmRvd1JlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFp
bnRDb250ZW50T25seSkKIHsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1JlY3QobG9naWNh
bFdpbmRvd1JlY3QpOworICAgIHdpbmRvd1JlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gVGhl
IGNvbnRlbnRDaGFuZ2VkLCBpbW1lZGlhdGUsIGFuZCByZXBhaW50Q29udGVudE9ubHkgcGFyYW1l
dGVycyBhcmUgYWxsIGJhc2VkIG9uIGEgbm9uLQogICAgICAgICAvLyBjb21wb3NpdGluZyBwYWlu
dGluZy9zY3JvbGxpbmcgbW9kZWwuCkBAIC05MTgsMTAgKzkyMSwxOSBAQCB2b2lkIFdlYlZpZXc6
OmFkZFRvRGlydHlSZWdpb24oR0RJT2JqZWN0CiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZhdGUt
PndlYlZpZXdEaWRJbnZhbGlkYXRlKHRoaXMpOwogfQogCi12b2lkIFdlYlZpZXc6OnNjcm9sbEJh
Y2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmlldywgaW50IGR4LCBpbnQgZHksIGNvbnN0IElu
dFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2Vi
Vmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgbG9naWNh
bER4LCBpbnQgbG9naWNhbER5LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsU2Nyb2xsVmlld1JlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxDbGlwUmVjdCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9
IHRydWU7CiAKKyAgICAvLyBEaW1lbnNpb25zIHBhc3NlZCB0byB1cyBmcm9tIFdlYkNvcmUgYXJl
IGluIGxvZ2ljYWwgdW5pdHMuIFdlIG11c3QgY29udmVydCB0byBwaXhlbHM6CisgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGludCBkeCA9IGNsYW1wVG88
aW50PihzY2FsZUZhY3RvciAqIGxvZ2ljYWxEeCk7CisgICAgaW50IGR5ID0gY2xhbXBUbzxpbnQ+
KHNjYWxlRmFjdG9yICogbG9naWNhbER5KTsKKyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0KGxv
Z2ljYWxTY3JvbGxWaWV3UmVjdCk7CisgICAgc2Nyb2xsVmlld1JlY3Quc2NhbGUoc2NhbGVGYWN0
b3IpOworICAgIEludFJlY3QgY2xpcFJlY3QobG9naWNhbENsaXBSZWN0KTsKKyAgICBjbGlwUmVj
dC5zY2FsZShzY2FsZUZhY3Rvcik7CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21h
cnRlciBoZXJlLCBsaWtlIG1vdmluZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAg
IC8vIGFueSBuZXdseS1leHBvc2VkIHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4K
QEAgLTk1MCw3ICs5NjIsMTIgQEAgdm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJh
bWVWaQogICAgIEhXbmREQyB3aW5kb3dEQyhtX3ZpZXdXaW5kb3cpOwogICAgIGF1dG8gYml0bWFw
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyh3aW5kb3dEQykpOwogICAg
IEhHRElPQkogb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG1fYmFj
a2luZ1N0b3JlQml0bWFwLT5nZXQoKSk7Ci0gICAgCisgICAKKyAgICAvLyBEREREREQKKyAgICBS
RUNUIGNoZWNrOworICAgIDo6R2V0Q2xpZW50UmVjdChtX3ZpZXdXaW5kb3csICZjaGVjayk7Cisg
ICAgLy8gRERERERECisKICAgICAvLyBTY3JvbGwgdGhlIGJpdG1hcC4KICAgICBSRUNUIHNjcm9s
bFJlY3RXaW4oc2Nyb2xsVmlld1JlY3QpOwogICAgIFJFQ1QgY2xpcFJlY3RXaW4oY2xpcFJlY3Qp
OwpAQCAtOTgwLDggKzk5NywxMSBAQCB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IElu
dFNpemUmCiAKICAgICBkZWxldGVCYWNraW5nU3RvcmUoKTsKIAotICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZSh0b3BMZXZlbEZyYW1lKCkpKQotICAgICAgICBjb3JlRnJhbWUtPnZpZXco
KS0+cmVzaXplKG5ld1NpemUpOworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZSh0b3BM
ZXZlbEZyYW1lKCkpKSB7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUgPSBuZXdTaXplOwor
ICAgICAgICBsb2dpY2FsU2l6ZS5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5yZXNpemUobG9naWNhbFNpemUpOworICAgIH0KIAog
I2lmIFVTRShDQSkKICAgICBpZiAobV9sYXllclRyZWVIb3N0KQpAQCAtMTA0Nyw2ICsxMDY3LDgg
QEAgdm9pZCBXZWJWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgR0RJT2Jq
ZWN0PEhEQz4gYml0bWFwRENPYmplY3Q7CiAKKyAgICBiYWNraW5nU3RvcmVDb21wbGV0ZWx5RGly
dHkgPSB0cnVlOworCiAgICAgSERDIGJpdG1hcERDID0gZGM7CiAgICAgSEdESU9CSiBvbGRCaXRt
YXAgPSAwOwogICAgIGlmICghZGMpIHsKQEAgLTExODEsNiArMTIwMyw3IEBAIHZvaWQgV2ViVmll
dzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW8KICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6
U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkp
OwogCiAgICAgLy8gVXBkYXRlIG91ciBiYWNraW5nIHN0b3JlIGlmIG5lZWRlZC4KKyAgICBiYWNr
aW5nU3RvcmVDb21wbGV0ZWx5RGlydHkgPSB0cnVlOwogICAgIHVwZGF0ZUJhY2tpbmdTdG9yZShm
cmFtZVZpZXcsIGJpdG1hcERDLmdldCgpLCBiYWNraW5nU3RvcmVDb21wbGV0ZWx5RGlydHksIHdp
bmRvd3NUb1BhaW50KTsKIAogICAgIC8vIE5vdyB3ZSBibGl0IHRoZSB1cGRhdGVkIGJhY2tpbmcg
c3RvcmUKQEAgLTEyMjMsNyArMTI0Niw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2lu
Z1N0b3JlKEZyYW0KIAogICAgIFJFQ1QgcmVjdCA9IGRpcnR5UmVjdDsKIAotI2lmIEZMQVNIX0JB
Q0tJTkdfU1RPUkVfUkVEUkFXCisjaWYgMSAvL0ZMQVNIX0JBQ0tJTkdfU1RPUkVfUkVEUkFXCiAg
ICAgewogICAgICAgICBIV25kREMgZGMobV92aWV3V2luZG93KTsKICAgICAgICAgYXV0byB5ZWxs
b3dCcnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChSR0IoMjU1LCAyNTUs
IDApKSk7CkBAIC0xMjQ4LDcgKzEyNzEsMTEgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNr
aW5nU3RvcmUoRnJhbQogCiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCku
Y29udGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOworICAgICAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGdjLnNh
dmUoKTsKKyAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rv
cikpOwogICAgICAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgZGlydHlSZWN0KTsKKyAgICAgICAg
Z2MucmVzdG9yZSgpOwogICAgICAgICBpZiAobV9zaG91bGRJbnZlcnRDb2xvcnMpCiAgICAgICAg
ICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7CiAgICAgfQpAQCAtMTI2Miw3ICsxMjg5LDcgQEAg
dm9pZCBXZWJWaWV3OjpwYWludEludG9XaW5kb3coSERDIGJpdG1hcAogICAgIC8vIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzU4NTM5Pi4KIAogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVOQ1RJ
T05fXyk7Ci0jaWYgRkxBU0hfV0lORE9XX1JFRFJBVworI2lmIDEgLy9GTEFTSF9XSU5ET1dfUkVE
UkFXCiAgICAgYXV0byBncmVlbkJydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVTb2xpZEJy
dXNoKFJHQigwLCAyNTUsIDApKSk7CiAgICAgUkVDVCByZWN0ID0gZGlydHlSZWN0OwogICAgIEZp
bGxSZWN0KHdpbmRvd0RDLCAmcmVjdCwgZ3JlZW5CcnVzaC5nZXQoKSk7CkBAIC0xNDIwLDkgKzE0
NDcsMTMgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogCiAgICAg
bFBhcmFtID0gTUFLRUxQQVJBTShjb29yZHMueCwgY29vcmRzLnkpOwogCisgICAgLy8gQ29udmVy
dCBjb29yZGluYXRlcyB0byBsb2dpY2FsIHBpeGVscworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRQb2ludCBsb2dpY2FsQ29vcmRzKGNvb3Jkcy54
IC8gc2NhbGVGYWN0b3IsIGNvb3Jkcy55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgbV9wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS5jbGVhckNvbnRleHRNZW51KCk7CiAKLSAgICBJbnRQb2lu
dCBkb2N1bWVudFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKGNvb3JkcykpOworICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQobV9wYWdlLT5tYWluRnJh
bWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMobG9naWNhbENvb3JkcykpOwogICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRU
ZXN0UmVzdWx0QXRQb2ludChkb2N1bWVudFBvaW50KTsKICAgICBGcmFtZSogdGFyZ2V0RnJhbWUg
PSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogCkBAIC0xNDQ3LDcgKzE0NzgsOCBAQCBib29sIFdlYlZpZXc6Omhh
bmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRN
ZW51Q29udHJvbGxlci5oaXRUZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFt
ZSgpKSk7CisgICAgSW50UG9pbnQgbG9naWNhbFBvaW50ID0gdmlldy0+Y29udGVudHNUb1dpbmRv
dyhjb250ZXh0TWVudUNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5u
ZXJOb2RlRnJhbWUoKSk7CisgICAgUE9JTlQgcG9pbnQgPSB7IGxvZ2ljYWxQb2ludC54KCkgKiBz
Y2FsZUZhY3RvciwgbG9naWNhbFBvaW50LnkoKSAqIHNjYWxlRmFjdG9yIH07CiAKICAgICAvLyBU
cmFuc2xhdGUgdGhlIHBvaW50IHRvIHNjcmVlbiBjb29yZGluYXRlcwogICAgIGlmICghOjpDbGll
bnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZwb2ludCkpCkBAIC0xNjQyLDYgKzE2NzQsMTAgQEAg
Ym9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3UGFyYQogCiAgICAgYm9vbCBoaXRT
Y3JvbGxiYXIgPSBmYWxzZTsKICAgICBQT0lOVCBnZXN0dXJlQmVnaW5Qb2ludCA9IHtnbi0+cHRz
TG9jYXRpb24ueCwgZ24tPnB0c0xvY2F0aW9uLnl9OworCisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIEludFBvaW50IGxvZ2ljYWxHZXN0dXJlQmVnaW5Q
b2ludChnZXN0dXJlQmVnaW5Qb2ludC54IC8gc2NhbGVGYWN0b3IsIGdlc3R1cmVCZWdpblBvaW50
LnkgLyBzY2FsZUZhY3Rvcik7CisKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RS
ZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQp
OwogICAgIGZvciAoRnJhbWUqIGNoaWxkRnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgY2hp
bGRGcmFtZTsgY2hpbGRGcmFtZSA9IEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2Rl
KG1fZ2VzdHVyZVRhcmdldE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gY2hpbGRGcmFtZS0+dmlldygpOwpAQCAtMTY1NCw3ICsxNjkwLDcgQEAgYm9vbCBXZWJW
aWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3UGFyYQogICAgICAgICBpZiAoIWxheWVyKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3
LT5zY3JlZW5Ub0NvbnRlbnRzKGdlc3R1cmVCZWdpblBvaW50KSk7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhsb2dpY2FsR2VzdHVyZUJl
Z2luUG9pbnQpKTsKICAgICAgICAgbGF5ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAg
ICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKIApAQCAtMTc1
OSwxMyArMTc5NSwxNSBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBB
CiAgICAgICAgIH0KIAogICAgICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsZWRBcmVhID0gMDsK
KyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAg
ICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0
YVkgKiBzY2FsZUZhY3Rvcik7CiAKICAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8
ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBXZSBt
aWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMK
LSAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShJbnRTaXplKC1kZWx0YVgs
IC1kZWx0YVkpKTsKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dp
Y2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52
aWV3KCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSwgV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEpOworICAgICAg
ICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNj
cm9sbERlbHRhLCBXZWJDb3JlOjpSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCwgJnNj
cm9sbGVkQXJlYSk7CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkg
JiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkp
IHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxl
KTsKQEAgLTIyMDQsNyArMjI0MiwxMSBAQCB2b2lkIFdlYlZpZXc6OnNldFNob3VsZEludmVydENv
bG9ycyhib29sCiAKICAgICBSRUNUIHdpbmRvd1JlY3QgPSB7MH07CiAgICAgZnJhbWVSZWN0KCZ3
aW5kb3dSZWN0KTsKLSAgICByZXBhaW50KHdpbmRvd1JlY3QsIHRydWUsIHRydWUpOworCisgICAg
Ly8gcmVwYWludCBleHBlY3RzIGxvZ2ljYWwgcGl4ZWxzLCBzbyByZXNjYWxlIGhlcmUuCisgICAg
SW50UmVjdCBsb2dpY2FsUmVjdCh3aW5kb3dSZWN0KTsKKyAgICBsb2dpY2FsUmVjdC5zY2FsZSgx
LjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgcmVwYWludChsb2dpY2FsUmVjdCwgdHJ1
ZSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3Mo
KQpAQCAtMjkxMCw3ICsyOTUyLDcgQEAgdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdp
bmRvdygpCiAgICAgaW5mby51SWQgPSByZWludGVycHJldF9jYXN0PFVJTlRfUFRSPihtX3ZpZXdX
aW5kb3cpOwogCiAgICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fQUREVE9PTCwg
MCwgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZpbmZvKSk7Ci0gICAgOjpTZW5kTWVzc2FnZSht
X3Rvb2xUaXBId25kLCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIG1heFRvb2xUaXBXaWR0aCk7Cisg
ICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIGNs
YW1wVG88aW50PihtYXhUb29sVGlwV2lkdGggKiBkZXZpY2VTY2FsZUZhY3RvcigpKSk7CiAKICAg
ICA6OlNldFdpbmRvd1BvcyhtX3Rvb2xUaXBId25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQ
X05PTU9WRSB8IFNXUF9OT1NJWkUgfCBTV1BfTk9BQ1RJVkFURSk7CiB9CkBAIC0zNjgxLDE3ICsz
NzIzLDE5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Z2VuZXIKICAgICBy
ZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxl
Y3Rpb25SZWN0KFJFQ1QqIHJjKQorSFJFU1VMVCBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1Qq
IHJjKQogewogICAgIFdlYkNvcmU6OkZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5n
SW50UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaXIgPSBm
cmFtZS52aWV3KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coaXIpOwogICAgIGlyLm1vdmUo
LWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSwgLWZyYW1lLnZpZXcoKS0+c2Ny
b2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOwotICAgIHJjLT5sZWZ0ID0gaXIueCgpOwotICAgIHJjLT50
b3AgPSBpci55KCk7Ci0gICAgcmMtPmJvdHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKTsKLSAg
ICByYy0+cmlnaHQgPSByYy0+bGVmdCArIGlyLndpZHRoKCk7CisKKyAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmMtPmxlZnQgPSBpci54KCkgKiBzY2Fs
ZUZhY3RvcjsKKyAgICByYy0+dG9wID0gaXIueSgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPmJv
dHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5yaWdo
dCA9IHJjLT5sZWZ0ICsgaXIud2lkdGgoKSAqIHNjYWxlRmFjdG9yOwogCiAgICAgcmV0dXJuIFNf
T0s7CiB9CkBAIC0zNzY4LDkgKzM4MTIsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YlZpZXc6OmlzTG9hCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAgICAgCi1IUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KCAKLSAgICAgICAgLyogW2luXSAqLyBM
UFBPSU5UIHBvaW50LAotICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoq
IGVsZW1lbnREaWN0aW9uYXJ5KQorSFJFU1VMVCBXZWJWaWV3OjplbGVtZW50QXRQb2ludChMUFBP
SU5UIHBvaW50LCBJUHJvcGVydHlCYWcqKiBlbGVtZW50RGljdGlvbmFyeSkKIHsKICAgICBpZiAo
IWVsZW1lbnREaWN0aW9uYXJ5KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
Mzc4NCw2ICszODI2LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVt
ZQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCiAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0g
SW50UG9pbnQocG9pbnQtPngsIHBvaW50LT55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEu
MGYgLyBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHdlYkNvcmVQb2ludC5zY2FsZShzY2FsZUZh
Y3Rvciwgc2NhbGVGYWN0b3IpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJl
c3VsdCh3ZWJDb3JlUG9pbnQpOwogICAgIGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAg
ICAgICAgIHJlc3VsdCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2lu
dCh3ZWJDb3JlUG9pbnQpOwpAQCAtNTMwMCwzMiArNTM0NCwzNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OmZyYW1lCiAgICAgcmV0dXJuIG1fZnJhbWVMb2FkRGVsZWdhdGVQ
cml2YXRlLmNvcHlSZWZUbyhkKTsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJW
aWV3OjpzY3JvbGxPZmZzZXQoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBQT0lOVCBvZmZz
ZXQpCitIUkVTVUxUIFdlYlZpZXc6OnNjcm9sbE9mZnNldChMUFBPSU5UIG9mZnNldCkKIHsKICAg
ICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICBJbnRTaXplIG9m
ZnNldEludFNpemUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICBvZmZzZXRJbnRTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAg
b2Zmc2V0LT54ID0gb2Zmc2V0SW50U2l6ZS53aWR0aCgpOwogICAgIG9mZnNldC0+eSA9IG9mZnNl
dEludFNpemUuaGVpZ2h0KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6c2Nyb2xsQnkoIAotICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBv
ZmZzZXQpCitIUkVTVUxUIFdlYlZpZXc6OnNjcm9sbEJ5KExQUE9JTlQgb2Zmc2V0KQogewogICAg
IGlmICghb2Zmc2V0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCkudmlldygpLT5zY3JvbGxCeShJbnRTaXplKG9mZnNldC0+eCwgb2Zmc2V0LT55KSk7
CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKyAgICBz
Y3JvbGxEZWx0YS5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9wYWdl
LT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKICAgICByZXR1cm4g
U19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYmxlQ29u
dGVudFJlY3QoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBSRUNUIHJlY3QpCitIUkVTVUxU
IFdlYlZpZXc6OnZpc2libGVDb250ZW50UmVjdChMUFJFQ1QgcmVjdCkKIHsKICAgICBpZiAoIXJl
Y3QpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNv
bnRlbnQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7
CisgICAgdmlzaWJsZUNvbnRlbnQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgcmVj
dC0+bGVmdCA9IChMT05HKSB2aXNpYmxlQ29udGVudC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExP
TkcpIHZpc2libGVDb250ZW50LnkoKTsKICAgICByZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxl
Q29udGVudC5tYXhYKCk7CkBAIC01NjgwLDYgKzU3MjksOCBAQCB2b2lkIFdlYlZpZXc6OnByZXBh
cmVDYW5kaWRhdGVXaW5kb3coRnJhCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0
ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2Fy
ZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBDQU5ESURBVEVGT1JNIGZvcm07
CiAgICAgZm9ybS5kd0luZGV4ID0gMDsKICAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsK
QEAgLTU5MzksNiArNTk5MCw3IEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBv
c2l0aW8KICAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9y
UmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+
dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VT
Y2FsZUZhY3RvcigpKTsKICAgICBjaGFyUG9zLT5wdC54ID0gY2FyZXQueCgpOwogICAgIGNoYXJQ
b3MtPnB0LnkgPSBjYXJldC55KCk7CiAgICAgOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3cs
ICZjaGFyUG9zLT5wdCk7CkBAIC02NzY1LDYgKzY4MTcsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpCiAKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBjb250ZXh0
LmNsaXAoaW5DbGlwKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9y
KSk7CiAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qo
aW5DbGlwKSk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CkBAIC03MTA4LDYgKzcxNjIsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmZpcnN0CiAgICAgSW50UmVjdCBy
ZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAg
IHJlc3VsdEludFJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAK
KyAgICByZXN1bHRJbnRSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgcmVz
dWx0UmVjdC0+bGVmdCA9IHJlc3VsdEludFJlY3QueCgpOwogICAgIHJlc3VsdFJlY3QtPnRvcCA9
IHJlc3VsdEludFJlY3QueSgpOwogICAgIHJlc3VsdFJlY3QtPnJpZ2h0ID0gcmVzdWx0SW50UmVj
dC54KCkgKyByZXN1bHRJbnRSZWN0LndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCShyZXZp
c2lvbiAxODYwMDIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4NSw2ICs5ODUsOSBAQCBwdWJsaWM6CiAgICAgLyogW291dCwgcmV0dmFsXSAqLyBS
RUNUKiByZXN1bHRSZWN0KTsKIAogICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2VsZWN0
ZWRSYW5nZUZvclRlc3RpbmcoLyogW291dF0gKi8gVUlOVCogbG9jYXRpb24sIC8qIFtvdXRdICov
IFVJTlQqIGxlbmd0aCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRpcGxpZXIoZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29tTXVsdGlwbGllcihib29sIGlzVGV4dE9u
bHkpOwpAQCAtMTAyNyw4ICsxMDMwLDYgQEAgcHJpdmF0ZToKICAgICBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHNjYWxlV2ViVmlldyhkb3VibGUgc2NhbGUsIFBPSU5UIG9yaWdpbik7CiAgICAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsK
IAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0KIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgYm9vbCByZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcygpOwogICAgIHN0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFdlYlZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJl
dmlzaW9uIDE4NjAwMikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNywxMSArMTAxNywxMyBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiB7CiAgICAgV2ViVmll
dyogdmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKIAotICAgIFJFQ1QgcmVjdDsKLSAgICB2
aWV3LT5mcmFtZVJlY3QoJnJlY3QpOworICAgIFJFQ1QgcGl4ZWxSZWN0OworICAgIHZpZXctPmZy
YW1lUmVjdCgmcGl4ZWxSZWN0KTsKICAgICBib29sIHRyYW5zcGFyZW50ID0gdmlldy0+dHJhbnNw
YXJlbnQoKTsKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSB0cmFuc3BhcmVudCA/IENvbG9y
Ojp0cmFuc3BhcmVudCA6IENvbG9yOjp3aGl0ZTsKLSAgICBjb3JlKG1fd2ViRnJhbWUpLT5jcmVh
dGVWaWV3KEludFJlY3QocmVjdCkuc2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3IsIHRyYW5zcGFyZW50
KTsKKyAgICBJbnRSZWN0IGxvZ2ljYWxGcmFtZShwaXhlbFJlY3QpOworICAgIGxvZ2ljYWxGcmFt
ZS5zY2FsZSgxLjBmIC8gdmlldy0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29yZShtX3dl
YkZyYW1lKS0+Y3JlYXRlVmlldyhsb2dpY2FsRnJhbWUuc2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3Is
IHRyYW5zcGFyZW50KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkU2F2ZVRv
UGFnZUNhY2hlKCkKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NjAzNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA2LTI3ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdo
YW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBwcm9wZXIgSGlnaCBEUEkg
c3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMTU1ODI2OT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChyZXNldFdlYlZpZXdUb0NvbnNp
c3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9U
ZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldyk6Cisg
ICAgICAgIChUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IpOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogV2luTGF1bmNoZXIvQ29t
bW9uLmNwcDoKKyAgICAgICAgKFduZFByb2MpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxh
dW5jaGVyLmNwcDoKKyAgICAgICAgKFdpbkxhdW5jaGVyOjppbml0KToKKyAgICAgICAgKFdpbkxh
dW5jaGVyOjp6b29tT3V0KToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjp1cGRhdGVEZXZpY2VTY2Fs
ZUZhY3Rvcik6CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaDoKKyAgICAgICAg
KFdpbkxhdW5jaGVyOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgICogV2luTGF1bmNoZXIv
V2luTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6CisgICAgICAgICogd2luL0RMTExhdW5j
aGVyL0RMTExhdW5jaGVyTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6CisKIDIwMTUtMDYt
MjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdW1NPVVBdIEltcGxlbWVudCBXZWJDb3JlOjpQdWJsaWNTdWZmaXggZm9yIHNvdXAgYW5k
IGVuYWJsZSBQVUJMSUNfU1VGRklYX0xJU1QgZm9yIEdUSysKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTg2MDAyKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg2LDkgKzg4NiwxNCBAQCBzdGF0aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRT
dGF0CiAgICAgICAgIHdlYklCQWN0aW9ucy0+cmVzZXRQYWdlWm9vbSgwKTsKICAgICB9CiAKKyAg
ICAvLyBPT1BTIQorICAgIC8vIHNjYWxlV2ViVmlldygxLjAsIGF0T3JpZ2luOiBaRVJPUG9pbnQp
PworCiAgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gd2ViVmlld1ByaXZhdGUoUXVlcnksIHdl
YlZpZXcpOwotICAgIGlmICh3ZWJWaWV3UHJpdmF0ZSkKKyAgICBpZiAod2ViVmlld1ByaXZhdGUp
IHsKKyAgICAgICAgd2ViVmlld1ByaXZhdGUtPnNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3Rvcigw
KTsKICAgICAgICAgd2ViVmlld1ByaXZhdGUtPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyhUUlVFKTsKKyAgICB9CiAKICAgICB3ZWJWaWV3LT5zZXRQb2xpY3lEZWxlZ2F0ZShudWxscHRy
KTsKICAgICBwb2xpY3lEZWxlZ2F0ZS0+c2V0UGVybWlzc2l2ZShmYWxzZSk7CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCShyZXZpc2lvbiAxODYwMDIp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMTMsOSArMTIxMywxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmll
dygpCiAgICAgcHJpbnRmKCJFUlJPUjogVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkgbm90IGlt
cGxlbWVudGVkXG4iKTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0
b3IoZG91YmxlKQordm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91Ymxl
IG92ZXJyaWRlU2NhbGVGYWN0b3IpCiB7Ci0gICAgLy8gTm90IGFwcGxpY2FibGUKKyAgICBDT01Q
dHI8SVdlYlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2Vi
VmlldykpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB2
aWV3UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3
UHJpdmF0ZSkpKQorICAgICAgICByZXR1cm47CisKKyAgICB2aWV3UHJpdmF0ZS0+c2V0Q3VzdG9t
QmFja2luZ1NjYWxlRmFjdG9yKG92ZXJyaWRlU2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvQ29t
bW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9Db21tb24uY3BwCShyZXZp
c2lvbiAxODYwMDIpCisrKyBUb29scy9XaW5MYXVuY2hlci9Db21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjAsMTMgKzQyMCwxMyBAQCBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBo
V25kLCBVSU5UCiAgICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNwYXJlbnQgd2lu
ZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKICAgICAgICAgICAg
IC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkg
dGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKICAgICAgICAgICAgIC8vIHVuZGVyIHRoZSBtb3Vz
ZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4gYXJiaXRyYXJ5
Ci0gICAgICAgICAgICAvLyAzMCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMg
YW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgorICAgICAgICAgICAgLy8gMzAgbG9naWNh
bCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBw
aW5nIGxvY2F0aW9uLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJl
IHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NBUFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdh
bnQgdG8KICAgICAgICAgICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhl
IHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cuCiAgICAgICAgICAgICBpbnQgeSA9IEhJV09S
RChsUGFyYW0pOwogCi0gICAgICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdp
bmRvdy50b3AgKyBkcmFnQmFySGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50
b3ApICYmICh5IDwgd2luZG93LnRvcCArIChkcmFnQmFySGVpZ2h0ICogZ1dpbkxhdW5jaGVyLT5k
ZXZpY2VTY2FsZUZhY3RvcigpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2lu
TGF1bmNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVy
LmNwcAkocmV2aXNpb24gMTg2MDAyKQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFt
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNjEsNiAr
NjEsOCBAQCBXaW5MYXVuY2hlcjo6V2luTGF1bmNoZXIoSFdORCBtYWluV25kLCBICiAKIEhSRVNV
TFQgV2luTGF1bmNoZXI6OmluaXQoKQogeworICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7
CisKICAgICBIUkVTVUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywg
MCwgSUlEX0lXZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJ
bnRlcmZhY2VQdHIoKSkpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7
CkBAIC00NzMsMyArNDc1LDEwIEBAIHZvaWQgV2luTGF1bmNoZXI6Onpvb21PdXQoKQogCiAgICAg
d2ViQWN0aW9ucy0+em9vbVBhZ2VPdXQobnVsbHB0cik7CiB9CisKK3ZvaWQgV2luTGF1bmNoZXI6
OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICBIREMgZGMgPSA6OkdldERDKG1faE1h
aW5XbmQpOworICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSA6OkdldERldmljZUNhcHMoZGMsIExP
R1BJWEVMU1gpIC8gOTYuMGY7CisgICAgOjpSZWxlYXNlREMobV9oTWFpblduZCwgZGMpOworfQpJ
bmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCShyZXZpc2lvbiAxODYwMDIpCisrKyBUb29scy9X
aW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsNiArODgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCB6b29tSW4oKTsKICAgICB2b2lkIHpvb21PdXQoKTsKIAorICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQor
ICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6
OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOwogCkBAIC0xMTIsNSAr
MTE1LDYgQEAgcHJpdmF0ZToKICAgICBIV05EIG1faE1haW5XbmQ7CiAgICAgSFdORCBtX2hVUkxC
YXJXbmQ7CiAKKyAgICBmbG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMS4wZiB9OwogICAgIGJv
b2wgbV91c2VMYXllcmVkV2ViVmlldzsKIH07CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5N
YWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5NYWluLmNwcAkocmV2
aXNpb24gMTg2MDAyKQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDcgKzkzLDExIEBAIGludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBI
SU5TVEFOQ0UKIAogICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOwogCi0gICAgUkVDVCBjbGllbnRS
ZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQ
b3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRv
d1NpemUuY3kgfTsKKyAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KGhN
YWluV25kLCAmY2xpZW50UmVjdCk7CisKKyAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KQorICAg
ICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24u
eSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9u
LnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKIAogICAgIFdpbkxhdW5jaGVyV2ViSG9zdCogd2ViSG9z
dCA9IG51bGxwdHI7CiAKSW5kZXg6IFRvb2xzL3dpbi9ETExMYXVuY2hlci9ETExMYXVuY2hlck1h
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3dpbi9ETExMYXVuY2hlci9ETExMYXVuY2hlck1h
aW4uY3BwCShyZXZpc2lvbiAxODYwMDIpCisrKyBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1
bmNoZXJNYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw5IEBAIGludCBXSU5B
UEkgd1dpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKICAgICBfc2V0X0ZNQTNfZW5hYmxlKDAp
OwogI2VuZGlmCiAKKyAgICBCT09MIGRpZEl0ID0gU2V0UHJvY2Vzc0RQSUF3YXJlKCk7CisgICAg
X0FTU0VSVChkaWRJdCk7CisKICNpZmRlZiBfQ1JUREJHX01BUF9BTExPQwogICAgIF9DcnRTZXRS
ZXBvcnRGaWxlKF9DUlRfV0FSTiwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJl
cG9ydE1vZGUoX0NSVF9XQVJOLCBfQ1JUREJHX01PREVfRklMRSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255945</attachid>
            <date>2015-07-01 12:11:27 -0700</date>
            <delta_ts>2015-07-16 16:24:22 -0700</delta_ts>
            <desc>WIP Do NOT REVIEW!</desc>
            <filename>bug-146335-20150701122403.patch</filename>
            <type>text/plain</type>
            <size>32421</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE1LTA3LTAxICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBw
cm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
MTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRm9yRXZlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZVdpbjo6flNjcm9sbGJhclRoZW1lV2luKToKKyAgICAgICAgKFdlYkNv
cmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisKIDIwMTUtMDctMDEgIE1hdHRoZXcgRGFp
dGVyICA8bWRhaXRlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIE1FRElBX1NUUkVBTSBm
bGFnCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9BVkZvdW5kYXRpb25TdXBwb3J0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0FWRm91bmRhdGlvblN1cHBvcnQucHkJKHJldmlzaW9uIDE4
NjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0FWRm91bmRhdGlvblN1cHBvcnQucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDMgKzUzLDcgQEAgaWYgbG9va0ZvcigiL2luY2x1ZGUvQVZGb3VuZGF0aW9u
Q0YvQVZDRgogICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUoIkFWQ0ZVUkxBc3NldElzUGxheWFibGVF
eHRlbmRlZE1JTUVUeXBlIikKICAgICBpZiBmaWxlQ29udGFpbnMoIi9pbmNsdWRlL0FWRm91bmRh
dGlvbkNGL0FWQ0ZBc3NldC5oIiwgcmVnZXhwKToKICAgICAgICAgcHJpbnQgIiNkZWZpbmUgSEFW
RV9BVkNGVVJMX1BMQVlBQkxFX01JTUVUWVBFIDEiCitpZiBsb29rRm9yKCIvaW5jbHVkZS9RdWFy
dHpDb3JlL0NBQ0ZMYXllci5oIik6CisgICAgcmVnZXhwID0gcmUuY29tcGlsZSgiQ0FDRkxheWVy
U2V0Q29udGVudHNTY2FsZSIpCisgICAgaWYgZmlsZUNvbnRhaW5zKCIvaW5jbHVkZS9RdWFydHpD
b3JlL0NBQ0ZMYXllci5oIiwgcmVnZXhwKToKKyAgICAgICAgcHJpbnQgIiNkZWZpbmUgSEFWRV9D
QUNGTEFZRVJfU0VUQ09OVEVOVFNTQ0FMRSAxIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5jcHAJKHJldmlzaW9uIDE4NjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCwxMSBAQAogI2luY2x1ZGUgIkFic3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QuaCIKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRpbGVDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUhlYWRlckRldGVjdGlvbi5oIgogI2luY2x1ZGUgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbkNGLmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgpAQCAtNTgyLDExICs1ODQsMTggQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEVkZ2VB
bnRpYWxpYQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUoKSBjb25z
dAogewotICAgIHJldHVybiAxOworI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUp
CisgICAgcmV0dXJuIENBQ0ZMYXllckdldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSk7Cisj
ZWxzZQorICAgIHJldHVybiAxLjA7CisjZW5kaWYKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQpCi17Cit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6
c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZUZhY3RvcikKK3sKKyNpZiBIQVZFKENBQ0ZMQVlF
Ul9TRVRDT05URU5UU1NDQUxFKQorICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUobV9sYXll
ci5nZXQoKSwgc2NhbGVGYWN0b3IpOworI2VuZGlmCiB9CiAKIGZsb2F0IFBsYXRmb3JtQ0FMYXll
cldpbjo6Y29ybmVyUmFkaXVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAkocmV2aXNpb24gMTg2MTgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OmFkZFRpbGUKICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdl
dFN1YmxheWVycyhtX3RpbGVQYXJlbnQuZ2V0KCkpOwogICAgIENBQ0ZMYXllckluc2VydFN1Ymxh
eWVyKG1fdGlsZVBhcmVudC5nZXQoKSwgbmV3TGF5ZXIuZ2V0KCksIHN1YmxheWVycyA/IENGQXJy
YXlHZXRDb3VudChzdWJsYXllcnMpIDogMCk7CiAKLSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9yZGVycygpKSB7CisgICAgaWYgKDEpIHsgLy9vd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkpIHsKICAgICAg
ICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IENHQ29sb3JDcmVhdGVHZW5lcmljUkdCKDAuNSwg
MCwgMC41LCAwLjcpOwogICAgICAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihuZXdMYXllci5n
ZXQoKSwgYm9yZGVyQ29sb3IpOwogICAgICAgICBDR0NvbG9yUmVsZWFzZShib3JkZXJDb2xvcik7
CkBAIC01MTAsNiArNTEwLDkgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJh
d1RpbAogICAgIC8vIFNldCB0aGUgY29udGV4dCBjbGlwcGluZyByZWN0YW5nbGUgdG8gdGhlIGN1
cnJlbnQgdGlsZQogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFrZSh0
aWxlUG9zaXRpb24ueCwgdGlsZVBvc2l0aW9uLnksIHRpbGVCb3VuZHMuc2l6ZS53aWR0aCwgdGls
ZUJvdW5kcy5zaXplLmhlaWdodCkpOwogCisgICAgQ0dSZWN0IGNsaXBCb3VuZHMyID0gQ0dDb250
ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgICh2b2lkKWNsaXBCb3VuZHMyOwor
CiAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50
YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVz
VG9wRG93bikgewogICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgcmVuZGVyaW5nIHRvcC1kb3du
LCBpdCB3aWxsIGZsaXAgdGhlIGNvb3JkaW5hdGVzIGluIHkuIFRpbGVkIGxheWVycyBhcmUKICAg
ICAgICAgLy8gYWxyZWFkeSBmbGlwcGluZywgc28gd2UgbmVlZCB0byB1bmRvIHRoYXQgaGVyZS4K
QEAgLTUxNyw2ICs1MjAsOSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3
VGlsCiAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICB9CiAK
KyAgICBDR1JlY3QgY2xpcEJvdW5kczMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29u
dGV4dCk7CisgICAgKHZvaWQpY2xpcEJvdW5kczM7CisKICAgICAvLyBEcmF3IHRoZSB0aWxlCiAg
ICAgZGlzcGxheUNhbGxiYWNrKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgY29udGV4dCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1v
dXNlRXZlbnRXaW4uY3BwCShyZXZpc2lvbiAxODYxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxNSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgg
VG9yY2ggTW9iaWxlIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI1LDEwICsyNSwxMiBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtMzYsOSAr
MzgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIEhJR0hfQklUX01BU0tfU0hP
UlQgMHg4MDAwCiAKK3N0YXRpYyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcihIV05EIHdpbmRvdykK
K3sKKyAgICBIV25kREMgZGMod2luZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRj
LCBMT0dQSVhFTFNYKSAvIDk2LjBmOworfQorCiBzdGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JF
dmVudChIV05EIGhXbmQsIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VU
X1hfTFBBUkFNKGxQYXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pfTsKKyAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworICAgIHBvaW50LnggPSBjbGFtcFRv
PGludD4ocG9pbnQueCAvIHNjYWxlRmFjdG9yKTsKKyAgICBwb2ludC55ID0gY2xhbXBUbzxpbnQ+
KHBvaW50LnkgLyBzY2FsZUZhY3Rvcik7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJ
KHJldmlzaW9uIDE4NjE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxi
YXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVdpbi5oIgogCisjaW5jbHVkZSAi
SFduZERDLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTG9jYWxX
aW5kb3dzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtMTA3
LDE0ICsxMDgsMjIgQEAgU2Nyb2xsYmFyVGhlbWVXaW46On5TY3JvbGxiYXJUaGVtZVdpbigpCiB7
CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJh
ckNvbnRyb2xTaXplKQorc3RhdGljIGludCBzY3JvbGxiYXJUaGlja25lc3NJblBpeGVscygpCiB7
CiAgICAgc3RhdGljIGludCB0aGlja25lc3M7CiAgICAgaWYgKCF0aGlja25lc3MpCiAgICAgICAg
IHRoaWNrbmVzcyA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOworCiAgICAgcmV0
dXJuIHRoaWNrbmVzczsKIH0KIAoraW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCit7CisgICAgSFduZERDIGRjKDApOworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gOTYuMGYgLyA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gp
OworICAgIHJldHVybiBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBzY3JvbGxiYXJUaGlja25l
c3NJblBpeGVscygpKTsKK30KKwogdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6dGhlbWVDaGFuZ2Vk
KCkKIHsKICAgICBpZiAoIXNjcm9sbGJhclRoZW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE4NjE4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpSZW5kZXJMYXllckNvbXBvcwogICAgICwgbV91cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVy
KCp0aGlzLCAmUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1Rp
bWVyRmlyZWQpCiAgICAgLCBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSkKICAgICAs
IG1fY29tcG9zaXRpbmdUcmlnZ2VycyhzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnQ6OkNvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzPihDaHJvbWVDbGllbnQ6OkFsbFRyaWdnZXJzKSkKLSAgICAsIG1fc2hv
d0RlYnVnQm9yZGVycyhmYWxzZSkKKyAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyh0cnVlIC8qZmFs
c2UqLykKICAgICAsIG1fc2hvd1JlcGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9hY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdB
ZnRlckxheW91dChmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjE4MikK
KysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDQ1IEBACisyMDE1LTA3LTAxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgor
CisgICAgICAgIFtXaW5dIEltcGxlbWVudCBwcm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9u
VG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRTYXZlVG9QYWdlQ2FjaGUpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdl
YkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6CisgICAgICAgIChXZWJGcmFtZTo6
cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6Y2xvc2UpOgorICAgICAgICAoV2ViVmlldzo6cmVwYWlu
dCk6CisgICAgICAgIChXZWJWaWV3OjphZGRUb0RpcnR5UmVnaW9uKToKKyAgICAgICAgKFdlYlZp
ZXc6OnNjcm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJWaWV3OjpzaXplQ2hhbmdlZCk6
CisgICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Vmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJl
Tm90aWZ5KToKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorICAgICAgICAoV2ViVmlldzo6
c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKToKKyAgICAgICAgKFdlYlZpZXc6OnJlZ2lzdGVyV2ViVmll
d1dpbmRvd0NsYXNzKToKKyAgICAgICAgKFdlYlZpZXc6OmluaXRpYWxpemVUb29sVGlwV2luZG93
KToKKyAgICAgICAgKFdlYlZpZXc6OmdlbmVyYXRlU2VsZWN0aW9uSW1hZ2UpOgorICAgICAgICAo
V2ViVmlldzo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJWaWV3Ojppc0xvYWRpbmcpOgor
ICAgICAgICAoV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQpOgorICAgICAgICAoV2ViVmlldzo6ZnJh
bWVMb2FkRGVsZWdhdGVQcml2YXRlKToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJWaWV3Ojp2aXNpYmxl
Q29udGVudFJlY3QpOgorICAgICAgICAoV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyk6
CisgICAgICAgIChXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24pOgorICAgICAgICAo
V2ViVmlldzo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJWaWV3Ojpw
YWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYlZpZXc6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJh
bmdlRm9yVGVzdGluZyk6CisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDE1LTA2LTMwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBNYWMgYW5k
IFdpbmRvd3MgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTg2
MTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNiArMzM2LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0Nv
bgogICAgIGRpcnR5UmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKICAgICBnYy5jbGlwKGRpcnR5UmVj
dCk7CiAgICAgZ2MudHJhbnNsYXRlKC1yZWN0LmxlZnQsIC1yZWN0LnRvcCk7CisgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSB3ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ2Muc2Nh
bGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgIHZp
ZXctPnBhaW50Q29udGVudHMoJmdjLCByZWN0KTsKICAgICBnYy5yZXN0b3JlKCk7CiAKQEAgLTM2
MCw2ICszNjIsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludFNjcm9sbFZpZXdSZWN0VG9DCiAg
ICAgZ2Muc2F2ZSgpOwogICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOwogICAgIGRpcnR5UmVj
dC5tb3ZlKC1wdC54LCAtcHQueSk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSB3ZWJWaWV3KCkt
PmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ2Muc2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNj
YWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgIHZpZXctPnBhaW50KCZnYywgZGlydHlSZWN0
KTsKICAgICBnYy5yZXN0b3JlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lv
biAxODYxODIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODE5LDggKzgxOSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmNsb3NlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXZvaWQgV2ViVmlldzo6cmVwYWludChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29s
IGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIFdlYlZpZXc6OnJlcGFp
bnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgbG9naWNhbFdpbmRvd1JlY3QsIGJvb2wgY29udGVu
dENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1JlY3QobG9naWNhbFdpbmRvd1JlY3QpOworICAgIHdp
bmRvd1JlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBpZiAoaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRDaGFuZ2VkLCBpbW1l
ZGlhdGUsIGFuZCByZXBhaW50Q29udGVudE9ubHkgcGFyYW1ldGVycyBhcmUgYWxsIGJhc2VkIG9u
IGEgbm9uLQogICAgICAgICAvLyBjb21wb3NpdGluZyBwYWludGluZy9zY3JvbGxpbmcgbW9kZWwu
CkBAIC05MTgsMTAgKzkyMSwxOSBAQCB2b2lkIFdlYlZpZXc6OmFkZFRvRGlydHlSZWdpb24oR0RJ
T2JqZWN0CiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdEaWRJbnZhbGlkYXRl
KHRoaXMpOwogfQogCi12b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0
b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgbG9naWNhbER4LCBpbnQgbG9naWNhbER5LCBj
b25zdCBJbnRSZWN0JiBsb2dpY2FsU2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2lj
YWxDbGlwUmVjdCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAKKyAgICAvLyBEaW1l
bnNpb25zIHBhc3NlZCB0byB1cyBmcm9tIFdlYkNvcmUgYXJlIGluIGxvZ2ljYWwgdW5pdHMuIFdl
IG11c3QgY29udmVydCB0byBwaXhlbHM6CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgIGludCBkeCA9IGNsYW1wVG88aW50PihzY2FsZUZhY3RvciAqIGxv
Z2ljYWxEeCk7CisgICAgaW50IGR5ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9yICogbG9naWNh
bER5KTsKKyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0KGxvZ2ljYWxTY3JvbGxWaWV3UmVjdCk7
CisgICAgc2Nyb2xsVmlld1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOworICAgIEludFJlY3QgY2xp
cFJlY3QobG9naWNhbENsaXBSZWN0KTsKKyAgICBjbGlwUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7
CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmlu
ZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2Vk
IHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTk1MCw3ICs5NjIsNyBAQCB2
b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgSFduZERDIHdpbmRv
d0RDKG1fdmlld1dpbmRvdyk7CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6
OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmdldCgp
KTsKLSAgICAKKyAgIAogICAgIC8vIFNjcm9sbCB0aGUgYml0bWFwLgogICAgIFJFQ1Qgc2Nyb2xs
UmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7CiAgICAgUkVDVCBjbGlwUmVjdFdpbihjbGlwUmVjdCk7
CkBAIC05ODAsOCArOTkyLDExIEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29uc3QgSW50
U2l6ZSYKIAogICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0gICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKHRvcExldmVsRnJhbWUoKSkpCi0gICAgICAgIGNvcmVGcmFtZS0+dmlldygp
LT5yZXNpemUobmV3U2l6ZSk7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRvcExl
dmVsRnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IG5ld1NpemU7Cisg
ICAgICAgIGxvZ2ljYWxTaXplLnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICAgICAgY29yZUZyYW1lLT52aWV3KCktPnJlc2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgfQogCiAj
aWYgVVNFKENBKQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCkBAIC0xMjQ4LDcgKzEyNjMsMTEg
QEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogCiAgICAgaWYgKGZy
YW1lVmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKICAgICAg
ICAgZ2MuY2xpcChkaXJ0eVJlY3QpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgZ2Muc2NhbGUoRmxv
YXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgICAgICBmcmFtZVZpZXctPnBh
aW50KCZnYywgZGlydHlSZWN0KTsKKyAgICAgICAgZ2MucmVzdG9yZSgpOwogICAgICAgICBpZiAo
bV9zaG91bGRJbnZlcnRDb2xvcnMpCiAgICAgICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3Qs
IENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7
CiAgICAgfQpAQCAtMTQyMCw5ICsxNDM5LDEzIEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4
dE1lbnVFdmVudChXUEEKIAogICAgIGxQYXJhbSA9IE1BS0VMUEFSQU0oY29vcmRzLngsIGNvb3Jk
cy55KTsKIAorICAgIC8vIENvbnZlcnQgY29vcmRpbmF0ZXMgdG8gbG9naWNhbCBwaXhlbHMKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgSW50UG9pbnQg
bG9naWNhbENvb3Jkcyhjb29yZHMueCAvIHNjYWxlRmFjdG9yLCBjb29yZHMueSAvIHNjYWxlRmFj
dG9yKTsKKwogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY2xlYXJDb250ZXh0
TWVudSgpOwogCi0gICAgSW50UG9pbnQgZG9jdW1lbnRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgp
LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhjb29yZHMpKTsKKyAgICBJbnRQb2ludCBkb2N1bWVu
dFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGxvZ2lj
YWxDb29yZHMpKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoZG9jdW1lbnRQb2ludCk7CiAg
ICAgRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMTQ0Nyw3ICsxNDcw
LDggQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29u
dGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5k
ZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSkpOworICAgIEludFBvaW50IGxvZ2ljYWxQb2ludCA9
IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVyLmhpdFRlc3RSZXN1
bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOworICAgIFBPSU5UIHBvaW50ID0g
eyBsb2dpY2FsUG9pbnQueCgpICogc2NhbGVGYWN0b3IsIGxvZ2ljYWxQb2ludC55KCkgKiBzY2Fs
ZUZhY3RvciB9OwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRp
bmF0ZXMKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAmcG9pbnQpKQpA
QCAtMTY0Miw2ICsxNjY2LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0g
d1BhcmEKIAogICAgIGJvb2wgaGl0U2Nyb2xsYmFyID0gZmFsc2U7CiAgICAgUE9JTlQgZ2VzdHVy
ZUJlZ2luUG9pbnQgPSB7Z24tPnB0c0xvY2F0aW9uLngsIGduLT5wdHNMb2NhdGlvbi55fTsKKwor
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRQb2lu
dCBsb2dpY2FsR2VzdHVyZUJlZ2luUG9pbnQoZ2VzdHVyZUJlZ2luUG9pbnQueCAvIHNjYWxlRmFj
dG9yLCBnZXN0dXJlQmVnaW5Qb2ludC55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgSGl0VGVzdFJl
cXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6
RGlzYWxsb3dTaGFkb3dDb250ZW50KTsKICAgICBmb3IgKEZyYW1lKiBjaGlsZEZyYW1lID0gJm1f
cGFnZS0+bWFpbkZyYW1lKCk7IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBFdmVudEhhbmRsZXI6
OnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShtX2dlc3R1cmVUYXJnZXROb2RlLmdldCgpKSkgewogICAg
ICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNoaWxkRnJhbWUtPnZpZXcoKTsKQEAgLTE2NTQs
NyArMTY4Miw3IEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmEKICAg
ICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2lu
dCkpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChmcmFtZVZpZXctPnNjcmVlblRvQ29u
dGVudHMobG9naWNhbEdlc3R1cmVCZWdpblBvaW50KSk7CiAgICAgICAgIGxheWVyLT5oaXRUZXN0
KHJlcXVlc3QsIHJlc3VsdCk7CiAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQu
aW5uZXJOb2RlKCk7CiAKQEAgLTE3NTksMTMgKzE3ODcsMTUgQEAgYm9vbCBXZWJWaWV3OjpnZXN0
dXJlKFdQQVJBTSB3UGFyYW0sIExQQQogICAgICAgICB9CiAKICAgICAgICAgU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGVkQXJlYSA9IDA7CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRh
WCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3IpOwogCiAgICAgICAgIGlmICgh
bV9nZXN0dXJlVGFyZ2V0Tm9kZSB8fCAhbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkg
ewogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRo
b3V0IGhpdHRpbmcgYW55IG5vZGVzCi0gICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Ny
b2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisgICAgICAgICAgICBjb3JlRnJhbWUt
PnZpZXcoKS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9s
bGVkQXJlYSA9IGNvcmVGcmFtZS0+dmlldygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoLWRlbHRh
WCwgLWRlbHRhWSksIFdlYkNvcmU6OlJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAm
c2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNj
cm9sbE9mZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEpOwogCiAgICAgICAgIGlmICghKFVwZGF0
ZVBhbm5pbmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5k
UGFubmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFu
ZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CkBAIC0yMjA0LDcgKzIyMzQsMTEgQEAgdm9pZCBXZWJW
aWV3OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbAogCiAgICAgUkVDVCB3aW5kb3dSZWN0ID0g
ezB9OwogICAgIGZyYW1lUmVjdCgmd2luZG93UmVjdCk7Ci0gICAgcmVwYWludCh3aW5kb3dSZWN0
LCB0cnVlLCB0cnVlKTsKKworICAgIC8vIHJlcGFpbnQgZXhwZWN0cyBsb2dpY2FsIHBpeGVscywg
c28gcmVzY2FsZSBoZXJlLgorICAgIEludFJlY3QgbG9naWNhbFJlY3Qod2luZG93UmVjdCk7Cisg
ICAgbG9naWNhbFJlY3Quc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHJl
cGFpbnQobG9naWNhbFJlY3QsIHRydWUsIHRydWUpOwogfQogCiBib29sIFdlYlZpZXc6OnJlZ2lz
dGVyV2ViVmlld1dpbmRvd0NsYXNzKCkKQEAgLTI5MTAsNyArMjk0NCw3IEBAIHZvaWQgV2ViVmll
dzo6aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKQogICAgIGluZm8udUlkID0gcmVpbnRlcnByZXRf
Y2FzdDxVSU5UX1BUUj4obV92aWV3V2luZG93KTsKIAogICAgIDo6U2VuZE1lc3NhZ2UobV90b29s
VGlwSHduZCwgVFRNX0FERFRPT0wsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmaW5mbykp
OwotICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAw
LCBtYXhUb29sVGlwV2lkdGgpOworICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRN
X1NFVE1BWFRJUFdJRFRILCAwLCBjbGFtcFRvPGludD4obWF4VG9vbFRpcFdpZHRoICogZGV2aWNl
U2NhbGVGYWN0b3IoKSkpOwogCiAgICAgOjpTZXRXaW5kb3dQb3MobV90b29sVGlwSHduZCwgSFdO
RF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZB
VEUpOwogfQpAQCAtMzY4MSwxNyArMzcxNSwxOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlZpZXc6OmdlbmVyCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChSRUNUKiByYykKK0hSRVNVTFQgV2ViVmll
dzo6c2VsZWN0aW9uUmVjdChSRUNUKiByYykKIHsKICAgICBXZWJDb3JlOjpGcmFtZSYgZnJhbWUg
PSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAg
SW50UmVjdCBpciA9IGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
Qm91bmRzKCkpOwogICAgIGlyID0gZnJhbWUudmlldygpLT5jb252ZXJ0VG9Db250YWluaW5nV2lu
ZG93KGlyKTsKICAgICBpci5tb3ZlKC1mcmFtZS52aWV3KCktPnNjcm9sbE9mZnNldCgpLndpZHRo
KCksIC1mcmFtZS52aWV3KCktPnNjcm9sbE9mZnNldCgpLmhlaWdodCgpKTsKLSAgICByYy0+bGVm
dCA9IGlyLngoKTsKLSAgICByYy0+dG9wID0gaXIueSgpOwotICAgIHJjLT5ib3R0b20gPSByYy0+
dG9wICsgaXIuaGVpZ2h0KCk7Ci0gICAgcmMtPnJpZ2h0ID0gcmMtPmxlZnQgKyBpci53aWR0aCgp
OworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJj
LT5sZWZ0ID0gaXIueCgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPnRvcCA9IGlyLnkoKSAqIHNj
YWxlRmFjdG9yOworICAgIHJjLT5ib3R0b20gPSByYy0+dG9wICsgaXIuaGVpZ2h0KCkgKiBzY2Fs
ZUZhY3RvcjsKKyAgICByYy0+cmlnaHQgPSByYy0+bGVmdCArIGlyLndpZHRoKCkgKiBzY2FsZUZh
Y3RvcjsKIAogICAgIHJldHVybiBTX09LOwogfQpAQCAtMzc2OCw5ICszODA0LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojppc0xvYQogICAgIHJldHVybiBTX09LOwogfQog
ICAgIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZW50QXRQb2ludCgg
Ci0gICAgICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBwb2ludCwKLSAgICAgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBJUHJvcGVydHlCYWcqKiBlbGVtZW50RGljdGlvbmFyeSkKK0hSRVNVTFQgV2ViVmll
dzo6ZWxlbWVudEF0UG9pbnQoTFBQT0lOVCBwb2ludCwgSVByb3BlcnR5QmFnKiogZWxlbWVudERp
Y3Rpb25hcnkpCiB7CiAgICAgaWYgKCFlbGVtZW50RGljdGlvbmFyeSkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3ODQsNiArMzgxOCw4IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIElu
dFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50LT54LCBwb2ludC0+eSk7CisgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB3ZWJD
b3JlUG9pbnQuc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsKICAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQod2ViQ29yZVBvaW50KTsKICAgICBpZiAoZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXN1bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQod2ViQ29yZVBvaW50KTsKQEAgLTUzMDAsMzIgKzUzMzYs
MzcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpmcmFtZQogICAgIHJldHVy
biBtX2ZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5jb3B5UmVmVG8oZCk7CiB9CiAKLUhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2Nyb2xsT2Zmc2V0KCAKLSAgICAvKiBbcmV0dmFs
XVtvdXRdICovIExQUE9JTlQgb2Zmc2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxPZmZzZXQo
TFBQT0lOVCBvZmZzZXQpCiB7CiAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CiAgICAgSW50U2l6ZSBvZmZzZXRJbnRTaXplID0gbV9wYWdlLT5tYWluRnJhbWUoKS52
aWV3KCktPnNjcm9sbE9mZnNldCgpOworCisgICAgb2Zmc2V0SW50U2l6ZS5zY2FsZShkZXZpY2VT
Y2FsZUZhY3RvcigpKTsKKwogICAgIG9mZnNldC0+eCA9IG9mZnNldEludFNpemUud2lkdGgoKTsK
ICAgICBvZmZzZXQtPnkgPSBvZmZzZXRJbnRTaXplLmhlaWdodCgpOwogICAgIHJldHVybiBTX09L
OwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnNjcm9sbEJ5KCAKLSAg
ICAvKiBbaW5dICovIExQUE9JTlQgb2Zmc2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxCeShM
UFBPSU5UIG9mZnNldCkKIHsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShv
ZmZzZXQtPngsIG9mZnNldC0+eSkpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YShvZmZzZXQt
PngsIG9mZnNldC0+eSk7CisgICAgc2Nyb2xsRGVsdGEuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zY3JvbGxCeShzY3Jv
bGxEZWx0YSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICov
IExQUkVDVCByZWN0KQorSFJFU1VMVCBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoTFBSRUNU
IHJlY3QpCiB7CiAgICAgaWYgKCFyZWN0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCiAg
ICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkt
PnZpc2libGVDb250ZW50UmVjdCgpOworICAgIHZpc2libGVDb250ZW50LnNjYWxlKGRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIHJlY3QtPmxlZnQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueCgp
OwogICAgIHJlY3QtPnRvcCA9IChMT05HKSB2aXNpYmxlQ29udGVudC55KCk7CiAgICAgcmVjdC0+
cmlnaHQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQubWF4WCgpOwpAQCAtNTY4MCw2ICs1NzIxLDgg
QEAgdm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KEZyYQogICAgICAgICBjYXJl
dCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0
KCkpOwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3coY2FyZXQpOworICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAg
ICAgQ0FORElEQVRFRk9STSBmb3JtOwogICAgIGZvcm0uZHdJbmRleCA9IDA7CiAgICAgZm9ybS5k
d1N0eWxlID0gQ0ZTX0VYQ0xVREU7CkBAIC01OTM5LDYgKzU5ODIsNyBAQCBMUkVTVUxUIFdlYlZp
ZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUt
PmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAg
IGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7Cisg
ICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgY2hhclBvcy0+cHQueCA9
IGNhcmV0LngoKTsKICAgICBjaGFyUG9zLT5wdC55ID0gY2FyZXQueSgpOwogICAgIDo6Q2xpZW50
VG9TY3JlZW4obV92aWV3V2luZG93LCAmY2hhclBvcy0+cHQpOwpAQCAtNjYxNiw3ICs2NjYwLDYg
QEAgdm9pZCBXZWJWaWV3OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nKAogICAgICAgICAgICAg
OjpHZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJmNsaWVudFJlY3QpOwogICAgICAgICAgICAg
bV9iYWNraW5nTGF5ZXItPnNldFNpemUoSW50UmVjdChjbGllbnRSZWN0KS5zaXplKCkpOwogICAg
ICAgICAgICAgbV9iYWNraW5nTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotCiAgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDaGlsZExheWVyKFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKG1fYmFja2luZ0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKIAogICAgICAg
ICAgICAgLy8gV2UgYXJlbid0IGdvaW5nIHRvIGJlIHVzaW5nIG91ciBiYWNraW5nIHN0b3JlIHdo
aWxlIHdlJ3JlIGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCkBAIC02NzY4LDYgKzY4MTEsOCBA
QCB2b2lkIFdlYlZpZXc6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpCiAKICAgICBjb250ZXh0
LnNhdmUoKTsKICAgICBjb250ZXh0LmNsaXAoaW5DbGlwKTsKKyAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoc2Nh
bGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRl
eHQsIGVuY2xvc2luZ0ludFJlY3QoaW5DbGlwKSk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9
CkBAIC03MTExLDYgKzcxNTYsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmZpcnN0CiAgICAgSW50UmVjdCByZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UocmFuZ2UuZ2V0KCkpOwogICAgIHJlc3VsdEludFJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3cocmVjdCk7CiAKKyAgICByZXN1bHRJbnRSZWN0LnNjYWxlKGRldmljZVNjYWxl
RmFjdG9yKCkpOworCiAgICAgcmVzdWx0UmVjdC0+bGVmdCA9IHJlc3VsdEludFJlY3QueCgpOwog
ICAgIHJlc3VsdFJlY3QtPnRvcCA9IHJlc3VsdEludFJlY3QueSgpOwogICAgIHJlc3VsdFJlY3Qt
PnJpZ2h0ID0gcmVzdWx0SW50UmVjdC54KCkgKyByZXN1bHRJbnRSZWN0LndpZHRoKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAxODYxODIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4NSw2ICs5ODUsOSBAQCBwdWJsaWM6CiAgICAg
LyogW291dCwgcmV0dmFsXSAqLyBSRUNUKiByZXN1bHRSZWN0KTsKIAogICAgIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgc2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoLyogW291dF0gKi8gVUlOVCog
bG9jYXRpb24sIC8qIFtvdXRdICovIFVJTlQqIGxlbmd0aCk7CisKKyAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRpcGxp
ZXIoZmxvYXQgbXVsdGlwbGllciwgYm9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29tTXVs
dGlwbGllcihib29sIGlzVGV4dE9ubHkpOwpAQCAtMTAyNyw4ICsxMDMwLDYgQEAgcHJpdmF0ZToK
ICAgICBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNjYWxlV2ViVmlldyhkb3VibGUgc2NhbGUs
IFBPSU5UIG9yaWdpbik7CiAgICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaXNwYXRjaFBl
bmRpbmdMb2FkUmVxdWVzdHMoKTsKIAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3Q7Ci0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCByZWdpc3RlcldlYlZpZXdXaW5kb3dD
bGFzcygpOwogICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXdXbmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDE4NjE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAxNywxMSArMTAxNywxMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0
aW9uVG9DCiB7CiAgICAgV2ViVmlldyogdmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKIAot
ICAgIFJFQ1QgcmVjdDsKLSAgICB2aWV3LT5mcmFtZVJlY3QoJnJlY3QpOworICAgIFJFQ1QgcGl4
ZWxSZWN0OworICAgIHZpZXctPmZyYW1lUmVjdCgmcGl4ZWxSZWN0KTsKICAgICBib29sIHRyYW5z
cGFyZW50ID0gdmlldy0+dHJhbnNwYXJlbnQoKTsKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3Ig
PSB0cmFuc3BhcmVudCA/IENvbG9yOjp0cmFuc3BhcmVudCA6IENvbG9yOjp3aGl0ZTsKLSAgICBj
b3JlKG1fd2ViRnJhbWUpLT5jcmVhdGVWaWV3KEludFJlY3QocmVjdCkuc2l6ZSgpLCBiYWNrZ3Jv
dW5kQ29sb3IsIHRyYW5zcGFyZW50KTsKKyAgICBJbnRSZWN0IGxvZ2ljYWxGcmFtZShwaXhlbFJl
Y3QpOworICAgIGxvZ2ljYWxGcmFtZS5zY2FsZSgxLjBmIC8gdmlldy0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisgICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhsb2dpY2FsRnJhbWUuc2l6
ZSgpLCBiYWNrZ3JvdW5kQ29sb3IsIHRyYW5zcGFyZW50KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjE4MikKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA3LTAxICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxl
bWVudCBwcm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8yMTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAg
IChyZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OmZvY3VzV2ViVmlldyk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVG
YWN0b3IpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAg
ICAgICogV2luTGF1bmNoZXIvQ29tbW9uLmNwcDoKKyAgICAgICAgKFduZFByb2MpOgorICAgICAg
ICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcDoKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpp
bml0KToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjp6b29tT3V0KToKKyAgICAgICAgKFdpbkxhdW5j
aGVyOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgICogV2luTGF1bmNoZXIvV2lu
TGF1bmNoZXIuaDoKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpkZXZpY2VTY2FsZUZhY3Rvcik6Cisg
ICAgICAgICogV2luTGF1bmNoZXIvV2luTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6Cisg
ICAgICAgICogd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHA6CisgICAgICAgICh3
V2luTWFpbik6CisKIDIwMTUtMDctMDEgIE1hdHRoZXcgRGFpdGVyICA8bWRhaXRlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5hYmxlZCBNRURJQV9TVFJFQU0gZmxhZwpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCShyZXZpc2lvbiAxODYxODIpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04ODYsOSArODg2LDE0IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lz
dGVudFN0YXQKICAgICAgICAgd2ViSUJBY3Rpb25zLT5yZXNldFBhZ2Vab29tKDApOwogICAgIH0K
IAorICAgIC8vIE9PUFMhCisgICAgLy8gc2NhbGVXZWJWaWV3KDEuMCwgYXRPcmlnaW46IFpFUk9Q
b2ludCk/CisKICAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlPiB3ZWJWaWV3UHJpdmF0ZShRdWVy
eSwgd2ViVmlldyk7Ci0gICAgaWYgKHdlYlZpZXdQcml2YXRlKQorICAgIGlmICh3ZWJWaWV3UHJp
dmF0ZSkgeworICAgICAgICB3ZWJWaWV3UHJpdmF0ZS0+c2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFj
dG9yKDApOwogICAgICAgICB3ZWJWaWV3UHJpdmF0ZS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKFRSVUUpOworICAgIH0KIAogICAgIHdlYlZpZXctPnNldFBvbGljeURlbGVnYXRlKG51
bGxwdHIpOwogICAgIHBvbGljeURlbGVnYXRlLT5zZXRQZXJtaXNzaXZlKGZhbHNlKTsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHJldmlzaW9uIDE4
NjE4MikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxMyw5ICsxMjEzLDE3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNX
ZWJWaWV3KCkKICAgICBwcmludGYoIkVSUk9SOiBUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcoKSBu
b3QgaW1wbGVtZW50ZWRcbiIpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2Fs
ZUZhY3Rvcihkb3VibGUpCit2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZhY3Rvcihk
b3VibGUgb3ZlcnJpZGVTY2FsZUZhY3RvcikKIHsKLSAgICAvLyBOb3QgYXBwbGljYWJsZQorICAg
IENPTVB0cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT53ZWJWaWV3
KCZ3ZWJWaWV3KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2ViVmlld1ByaXZh
dGU+IHZpZXdQcml2YXRlOworICAgIGlmIChGQUlMRUQod2ViVmlldy0+UXVlcnlJbnRlcmZhY2Uo
JnZpZXdQcml2YXRlKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHZpZXdQcml2YXRlLT5zZXRD
dXN0b21CYWNraW5nU2NhbGVGYWN0b3Iob3ZlcnJpZGVTY2FsZUZhY3Rvcik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCkluZGV4OiBUb29scy9XaW5MYXVuY2hl
ci9Db21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJ
KHJldmlzaW9uIDE4NjE4MikKKysrIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyMSwxMyArNDIxLDEzIEBAIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhI
V05EIGhXbmQsIFVJTlQKICAgICAgICAgICAgIC8vIEZvciB0ZXN0aW5nIG91ciB0cmFuc3BhcmVu
dCB3aW5kb3csIHdlIG5lZWQgYSByZWdpb24gdG8gdXNlIGFzIGEgaGFuZGxlIGZvcgogICAgICAg
ICAgICAgLy8gZHJhZ2dpbmcuIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBx
dWVyeSB0aGUgd2ViIHZpZXcgdG8gc2VlIHdoYXQncwogICAgICAgICAgICAgLy8gdW5kZXIgdGhl
IG1vdXNlLiBIb3dldmVyLCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJp
dHJhcnkKLSAgICAgICAgICAgIC8vIDMwIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmll
dyBhcyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRpb24uCisgICAgICAgICAgICAvLyAzMCBs
b2dpY2FsIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJhcnkg
Z3JpcHBpbmcgbG9jYXRpb24uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gV2hlbiB3
ZSBhcmUgd2l0aGluIHRoaXMgYmFkLCByZXR1cm4gSFRfQ0FQVElPTiB0byB0ZWxsIFdpbmRvd3Mg
d2Ugd2FudCB0bwogICAgICAgICAgICAgLy8gdHJlYXQgdGhpcyByZWdpb24gYXMgaWYgaXQgd2Vy
ZSB0aGUgdGl0bGUgYmFyIG9uIGEgbm9ybWFsIHdpbmRvdy4KICAgICAgICAgICAgIGludCB5ID0g
SElXT1JEKGxQYXJhbSk7CiAKLSAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5
IDwgd2luZG93LnRvcCArIGRyYWdCYXJIZWlnaHQpKQorICAgICAgICAgICAgaWYgKCh5ID4gd2lu
ZG93LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsgKGRyYWdCYXJIZWlnaHQgKiBnV2luTGF1bmNo
ZXItPmRldmljZVNjYWxlRmFjdG9yKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSFRDQVBU
SU9OOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9j
LCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CkluZGV4OiBUb29scy9XaW5MYXVuY2hl
ci9XaW5MYXVuY2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1
bmNoZXIuY3BwCShyZXZpc2lvbiAxODYxODIpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVu
Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1
bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC02
MSw2ICs2MSw4IEBAIFdpbkxhdW5jaGVyOjpXaW5MYXVuY2hlcihIV05EIG1haW5XbmQsIEgKIAog
SFJFU1VMVCBXaW5MYXVuY2hlcjo6aW5pdCgpCiB7CisgICAgdXBkYXRlRGV2aWNlU2NhbGVGYWN0
b3IoKTsKKwogICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJW
aWV3LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3
LkdldEludGVyZmFjZVB0cigpKSk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVy
biBocjsKQEAgLTQ3OCwzICs0ODAsMTAgQEAgdm9pZCBXaW5MYXVuY2hlcjo6em9vbU91dCgpCiAK
ICAgICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChudWxscHRyKTsKIH0KKwordm9pZCBXaW5MYXVu
Y2hlcjo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIEhEQyBkYyA9IDo6R2V0REMo
bV9oTWFpblduZCk7CisgICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IDo6R2V0RGV2aWNlQ2Fwcyhk
YywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKKyAgICA6OlJlbGVhc2VEQyhtX2hNYWluV25kLCBkYyk7
Cit9CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHJldmlzaW9uIDE4NjE4MikKKysrIFRv
b2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2ICs5MCw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHpvb21JbigpOwogICAgIHZvaWQgem9vbU91dCgpOwogCisg
ICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSB7IHJldHVybiBtX2RldmljZVNjYWxlRmFjdG9y
OyB9CisgICAgdm9pZCB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCiBwcml2YXRlOgogICAg
IHN0ZDo6dmVjdG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRlbXM7CiAKQEAgLTEx
NSw1ICsxMTgsNiBAQCBwcml2YXRlOgogICAgIEhXTkQgbV9oTWFpblduZDsKICAgICBIV05EIG1f
aFVSTEJhclduZDsKIAorICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3IgeyAxLjBmIH07CiAg
ICAgYm9vbCBtX3VzZUxheWVyZWRXZWJWaWV3OwogfTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVy
L1dpbk1haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3Bw
CShyZXZpc2lvbiAxODYxODIpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5NYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNyArOTMsMTEgQEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFO
Q0UsIEhJTlNUQU5DRQogCiAgICAgU2V0Rm9jdXMoaFVSTEJhclduZCk7CiAKLSAgICBSRUNUIGNs
aWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55LCBzX3dp
bmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRpb24ueSArIHNf
d2luZG93U2l6ZS5jeSB9OworICAgIFJFQ1QgY2xpZW50UmVjdDsKKyAgICA6OkdldENsaWVudFJl
Y3QoaE1haW5XbmQsICZjbGllbnRSZWN0KTsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcp
CisgICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3Np
dGlvbi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9z
aXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSB9OwogCiAgICAgV2luTGF1bmNoZXJXZWJIb3N0KiB3
ZWJIb3N0ID0gbnVsbHB0cjsKIApJbmRleDogVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5j
aGVyTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5j
aGVyTWFpbi5jcHAJKHJldmlzaW9uIDE4NjE4MikKKysrIFRvb2xzL3dpbi9ETExMYXVuY2hlci9E
TExMYXVuY2hlck1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDkgQEAgaW50
IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlLAogICAgIF9zZXRfRk1BM19lbmFi
bGUoMCk7CiAjZW5kaWYKIAorICAgIEJPT0wgZGlkSXQgPSBTZXRQcm9jZXNzRFBJQXdhcmUoKTsK
KyAgICBfQVNTRVJUKGRpZEl0KTsKKwogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCiAgICAgX0Ny
dFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKICAgICBfQ3J0
U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256938</attachid>
            <date>2015-07-16 16:24:24 -0700</date>
            <delta_ts>2015-07-21 17:38:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150716163728.patch</filename>
            <type>text/plain</type>
            <size>30809</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjkxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA3LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmFkZFRpbGUpOgor
ICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnVwZGF0ZVRpbGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRm9y
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6flNjcm9sbGJhclRoZW1lV2luKToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTUtMDct
MTYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IHNocmluay13cmFwcGVkIGxpbmsgaGlnaGxpZ2h0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAJKHJldmlzaW9uIDE4Njg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MzksNiArNTM5LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCb3JkZXJDb2xvcigK
ICAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUo
Y29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOwogCiAgICAgQ0FDRkxheWVyU2V0Qm9yZGVy
Q29sb3IobV9sYXllci5nZXQoKSwgY29sb3IuZ2V0KCkpOworCisgICAgU3RyaW5nIGxheWVyTmFt
ZSA9IENBQ0ZMYXllckdldE5hbWUobV9sYXllci5nZXQoKSk7CisgICAgRmxvYXRSZWN0IGRlYnVn
Qm91bmRzID0gYm91bmRzKCk7CisgICAgKHZvaWQpbGF5ZXJOYW1lOworICAgICh2b2lkKWRlYnVn
Qm91bmRzOworCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lvbiAxODY4OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsNyArNDMyLDggQEAgdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZQogICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0g
Q0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7CiAgICAgQ0FDRkxheWVy
SW5zZXJ0U3VibGF5ZXIobV90aWxlUGFyZW50LmdldCgpLCBuZXdMYXllci5nZXQoKSwgc3VibGF5
ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwKTsKIAotICAgIGlmIChvd25lcigp
LT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkpIHsKKyAgICAvLyBp
ZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9yZGVycygpKSB7
CisgICAgaWYgKDEpIHsKICAgICAgICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IENHQ29sb3JD
cmVhdGVHZW5lcmljUkdCKDAuNSwgMCwgMC41LCAwLjcpOwogICAgICAgICBDQUNGTGF5ZXJTZXRC
b3JkZXJDb2xvcihuZXdMYXllci5nZXQoKSwgYm9yZGVyQ29sb3IpOwogICAgICAgICBDR0NvbG9y
UmVsZWFzZShib3JkZXJDb2xvcik7CkBAIC00ODQsNiArNDg1LDggQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVAogICAgIC8vIFNldCBjb29yZGluYXRlcyBmb3IgYWxs
IHRpbGVzCiAgICAgQ0ZBcnJheVJlZiB0aWxlQXJyYXkgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMo
bV90aWxlUGFyZW50LmdldCgpKTsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gb3duZXIoKS0+
b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsKKwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtVGlsZXNIb3Jpem9udGFsOyArK2kpIHsKICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCBudW1UaWxlc1ZlcnRpY2FsOyArK2opIHsKICAgICAgICAgICAgIENBQ0ZM
YXllclJlZiB0aWxlID0gc3RhdGljX2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQq
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRpbGVBcnJheSwgaSAqIG51bVRpbGVzVmVydGljYWwg
KyBqKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VF
dmVudFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bs
YXRmb3JtTW91c2VFdmVudFdpbi5jcHAJKHJldmlzaW9uIDE4Njg5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOCBUb3JjaCBNb2JpbGUgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjUsMTAgKzI1
LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogCkBA
IC0zNiw5ICszOCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgSElHSF9CSVRf
TUFTS19TSE9SVCAweDgwMDAKIAorc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKEhXTkQg
d2luZG93KQoreworICAgIEhXbmREQyBkYyh3aW5kb3cpOworICAgIHJldHVybiA6OkdldERldmlj
ZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7Cit9CisKIHN0YXRpYyBJbnRQb2ludCBwb3Np
dGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBQT0lOVCBwb2lu
dCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSl9OworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisgICAgcG9pbnQueCA9
IGNsYW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0b3IpOworICAgIHBvaW50LnkgPSBjbGFt
cFRvPGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1l
V2luLmNwcAkocmV2aXNpb24gMTg2ODk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1Njcm9sbGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lV2luLmgiCiAKKyNp
bmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJMb2NhbFdpbmRvd3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50Lmgi
CkBAIC0xMDcsMTQgKzEwOCwyMiBAQCBTY3JvbGxiYXJUaGVtZVdpbjo6flNjcm9sbGJhclRoZW1l
V2luKCkKIHsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3Mo
U2Nyb2xsYmFyQ29udHJvbFNpemUpCitzdGF0aWMgaW50IHNjcm9sbGJhclRoaWNrbmVzc0luUGl4
ZWxzKCkKIHsKICAgICBzdGF0aWMgaW50IHRoaWNrbmVzczsKICAgICBpZiAoIXRoaWNrbmVzcykK
ICAgICAgICAgdGhpY2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CisK
ICAgICByZXR1cm4gdGhpY2tuZXNzOwogfQogCitpbnQgU2Nyb2xsYmFyVGhlbWVXaW46OnNjcm9s
bGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3sKKyAgICBIV25kREMgZGMoMCk7
CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSA5Ni4wZiAvIDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9H
UElYRUxTWCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50PihzY2FsZUZhY3RvciAqIHNjcm9sbGJh
clRoaWNrbmVzc0luUGl4ZWxzKCkpOworfQorCiB2b2lkIFNjcm9sbGJhclRoZW1lV2luOjp0aGVt
ZUNoYW5nZWQoKQogewogICAgIGlmICghc2Nyb2xsYmFyVGhlbWUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gMTg2ODk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBtX3VwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzVGltZXIoKnRoaXMsICZSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzVGltZXJGaXJlZCkKICAgICAsIG1faGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVl
KQogICAgICwgbV9jb21wb3NpdGluZ1RyaWdnZXJzKHN0YXRpY19jYXN0PENocm9tZUNsaWVudDo6
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KENocm9tZUNsaWVudDo6QWxsVHJpZ2dlcnMpKQotICAg
ICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNlKQorICAgICwgbV9zaG93RGVidWdCb3JkZXJzKHRy
dWUgLypmYWxzZSovKQogICAgICwgbV9zaG93UmVwYWludENvdW50ZXIoZmFsc2UpCiAgICAgLCBt
X2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlZXZhbHVhdGVDb21w
b3NpdGluZ0FmdGVyTGF5b3V0KGZhbHNlKQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24g
MTg2OTE2KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTUtMDctMTYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVy
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMz
NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlv
blRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlkU2F2ZVRvUGFnZUNhY2hlKToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQpOgorICAgICAgICAoV2ViRnJhbWU6
OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KToKKyAgICAgICAgKiBXZWJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OmNsb3NlKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcGFp
bnQpOgorICAgICAgICAoV2ViVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbik6CisgICAgICAgIChXZWJW
aWV3OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6c2l6ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdlYlZp
ZXc6Omdlc3R1cmVOb3RpZnkpOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisgICAgICAg
IChXZWJWaWV3OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMpOgorICAgICAgICAoV2ViVmlldzo6cmVn
aXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MpOgorICAgICAgICAoV2ViVmlldzo6aW5pdGlhbGl6ZVRv
b2xUaXBXaW5kb3cpOgorICAgICAgICAoV2ViVmlldzo6Z2VuZXJhdGVTZWxlY3Rpb25JbWFnZSk6
CisgICAgICAgIChXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYlZpZXc6Omlz
TG9hZGluZyk6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChX
ZWJWaWV3OjpmcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUpOgorICAgICAgICAoV2ViVmlldzo6c2Ny
b2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYlZp
ZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJWaWV3OjpwcmVwYXJlQ2FuZGlk
YXRlV2luZG93KToKKyAgICAgICAgKFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbik6
CisgICAgICAgIChXZWJWaWV3OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAg
KFdlYlZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViVmlldzo6Zmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKiBXZWJWaWV3Lmg6CisKIDIwMTUt
MDctMTYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dp
bl0gR3Jvc3Mgd29ya2Fyb3VuZCB0byBmaXggYnVpbGQgYWZ0ZXIgcjE4Njg1OC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDE4Njg5OCkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIEhSRVNVTFQg
V2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db24KICAgICBkaXJ0eVJlY3Quc2V0SGVpZ2h0
KGhlaWdodCk7CiAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwogICAgIGdjLnRyYW5zbGF0ZSgtcmVj
dC5sZWZ0LCAtcmVjdC50b3ApOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gd2ViVmlldygpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdjLnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZnYywgcmVj
dCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCkBAIC0zNjAsNiArMzYyLDggQEAgSFJFU1VMVCBXZWJG
cmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQwogICAgIGdjLnNhdmUoKTsKICAgICBJbnRSZWN0
IGRpcnR5UmVjdChyZWN0KTsKICAgICBkaXJ0eVJlY3QubW92ZSgtcHQueCwgLXB0LnkpOworICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gd2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAg
IGdjLnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsK
ICAgICB2aWV3LT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTg2ODk4KQorKysgU291cmNlL1dlYktp
dC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMSw4ICs4MjEsMTEgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpjbG9zZQogICAgIHJldHVybiBTX09LOwog
fQogCi12b2lkIFdlYlZpZXc6OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93
UmVjdCwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENv
bnRlbnRPbmx5KQordm9pZCBXZWJWaWV3OjpyZXBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGxvZ2ljYWxXaW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwg
Ym9vbCByZXBhaW50Q29udGVudE9ubHkpCiB7CisgICAgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dS
ZWN0KGxvZ2ljYWxXaW5kb3dSZWN0KTsKKyAgICB3aW5kb3dSZWN0LnNjYWxlKGRldmljZVNjYWxl
RmFjdG9yKCkpOworCiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CiAgICAg
ICAgIC8vIFRoZSBjb250ZW50Q2hhbmdlZCwgaW1tZWRpYXRlLCBhbmQgcmVwYWludENvbnRlbnRP
bmx5IHBhcmFtZXRlcnMgYXJlIGFsbCBiYXNlZCBvbiBhIG5vbi0KICAgICAgICAgLy8gY29tcG9z
aXRpbmcgcGFpbnRpbmcvc2Nyb2xsaW5nIG1vZGVsLgpAQCAtOTIwLDEwICs5MjMsMTkgQEAgdm9p
ZCBXZWJWaWV3OjphZGRUb0RpcnR5UmVnaW9uKEdESU9iamVjdAogICAgICAgICBtX3VpRGVsZWdh
dGVQcml2YXRlLT53ZWJWaWV3RGlkSW52YWxpZGF0ZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJWaWV3
OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGludCBkeCwgaW50IGR5
LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
Cit2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmlldywg
aW50IGxvZ2ljYWxEeCwgaW50IGxvZ2ljYWxEeSwgY29uc3QgSW50UmVjdCYgbG9naWNhbFNjcm9s
bFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsQ2xpcFJlY3QpCiB7CiAgICAgbV9uZWVk
c0Rpc3BsYXkgPSB0cnVlOwogCisgICAgLy8gRGltZW5zaW9ucyBwYXNzZWQgdG8gdXMgZnJvbSBX
ZWJDb3JlIGFyZSBpbiBsb2dpY2FsIHVuaXRzLiBXZSBtdXN0IGNvbnZlcnQgdG8gcGl4ZWxzOgor
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBpbnQgZHgg
PSBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBsb2dpY2FsRHgpOworICAgIGludCBkeSA9IGNs
YW1wVG88aW50PihzY2FsZUZhY3RvciAqIGxvZ2ljYWxEeSk7CisgICAgSW50UmVjdCBzY3JvbGxW
aWV3UmVjdChsb2dpY2FsU2Nyb2xsVmlld1JlY3QpOworICAgIHNjcm9sbFZpZXdSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKKyAgICBJbnRSZWN0IGNsaXBSZWN0KGxvZ2ljYWxDbGlwUmVjdCk7Cisg
ICAgY2xpcFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOworCiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgZG9pbmcgc29t
ZXRoaW5nIHNtYXJ0ZXIgaGVyZSwgbGlrZSBtb3ZpbmcgdGlsZXMgYXJvdW5kIGFuZCBwYWludGlu
ZwogICAgICAgICAvLyBhbnkgbmV3bHktZXhwb3NlZCB0aWxlcy4gPGh0dHA6Ly93ZWJraXQub3Jn
L2IvNTI3MTQ+CkBAIC05NTIsNyArOTY0LDEyIEBAIHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2lu
Z1N0b3JlKEZyYW1lVmkKICAgICBIV25kREMgd2luZG93REMobV92aWV3V2luZG93KTsKICAgICBh
dXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93
REMpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdl
dCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkpOwotICAgIAorICAgCisgICAgLy8gRERE
RERECisgICAgUkVDVCBjaGVjazsKKyAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAm
Y2hlY2spOworICAgIC8vIERERERERAorCiAgICAgLy8gU2Nyb2xsIHRoZSBiaXRtYXAuCiAgICAg
UkVDVCBzY3JvbGxSZWN0V2luKHNjcm9sbFZpZXdSZWN0KTsKICAgICBSRUNUIGNsaXBSZWN0V2lu
KGNsaXBSZWN0KTsKQEAgLTk4Miw4ICs5OTksMTEgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdl
ZChjb25zdCBJbnRTaXplJgogCiAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSAgICBpZiAo
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkKLSAgICAgICAgY29yZUZy
YW1lLT52aWV3KCktPnJlc2l6ZShuZXdTaXplKTsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkgeworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
bmV3U2l6ZTsKKyAgICAgICAgbG9naWNhbFNpemUuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFj
dG9yKCkpOworICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+cmVzaXplKGxvZ2ljYWxTaXplKTsK
KyAgICB9CiAKICNpZiBVU0UoQ0EpCiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKQEAgLTEwNDks
NiArMTA2OSw4IEBAIHZvaWQgV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKIAog
ICAgIEdESU9iamVjdDxIREM+IGJpdG1hcERDT2JqZWN0OwogCisgICAgYmFja2luZ1N0b3JlQ29t
cGxldGVseURpcnR5ID0gdHJ1ZTsKKwogICAgIEhEQyBiaXRtYXBEQyA9IGRjOwogICAgIEhHRElP
Qkogb2xkQml0bWFwID0gMDsKICAgICBpZiAoIWRjKSB7CkBAIC0xMTgzLDYgKzEyMDUsNyBAQCB2
b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBBUkFNIG9wdGlvCiAgICAgSEdESU9CSiBvbGRC
aXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRt
YXAtPmdldCgpKTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgYmFja2luZyBzdG9yZSBpZiBuZWVkZWQu
CisgICAgYmFja2luZ1N0b3JlQ29tcGxldGVseURpcnR5ID0gdHJ1ZTsKICAgICB1cGRhdGVCYWNr
aW5nU3RvcmUoZnJhbWVWaWV3LCBiaXRtYXBEQy5nZXQoKSwgYmFja2luZ1N0b3JlQ29tcGxldGVs
eURpcnR5LCB3aW5kb3dzVG9QYWludCk7CiAKICAgICAvLyBOb3cgd2UgYmxpdCB0aGUgdXBkYXRl
ZCBiYWNraW5nIHN0b3JlCkBAIC0xMjUwLDcgKzEyNzMsMTEgQEAgdm9pZCBXZWJWaWV3OjpwYWlu
dEludG9CYWNraW5nU3RvcmUoRnJhbQogCiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXct
PmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJlY3Qp
OworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAg
ICAgIGdjLnNhdmUoKTsKKyAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBz
Y2FsZUZhY3RvcikpOwogICAgICAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgZGlydHlSZWN0KTsK
KyAgICAgICAgZ2MucmVzdG9yZSgpOwogICAgICAgICBpZiAobV9zaG91bGRJbnZlcnRDb2xvcnMp
CiAgICAgICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7CiAgICAgfQpAQCAtMTQyMiw5ICsx
NDQ5LDEzIEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEKIAogICAg
IGxQYXJhbSA9IE1BS0VMUEFSQU0oY29vcmRzLngsIGNvb3Jkcy55KTsKIAorICAgIC8vIENvbnZl
cnQgY29vcmRpbmF0ZXMgdG8gbG9naWNhbCBwaXhlbHMKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgSW50UG9pbnQgbG9naWNhbENvb3Jkcyhjb29yZHMu
eCAvIHNjYWxlRmFjdG9yLCBjb29yZHMueSAvIHNjYWxlRmFjdG9yKTsKKwogICAgIG1fcGFnZS0+
Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY2xlYXJDb250ZXh0TWVudSgpOwogCi0gICAgSW50UG9p
bnQgZG9jdW1lbnRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhjb29yZHMpKTsKKyAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50KG1fcGFnZS0+bWFpbkZy
YW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGxvZ2ljYWxDb29yZHMpKTsKICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0
VGVzdFJlc3VsdEF0UG9pbnQoZG9jdW1lbnRQb2ludCk7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1l
ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMTQ0OSw3ICsxNDgwLDggQEAgYm9vbCBXZWJWaWV3Ojpo
YW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0
TWVudUNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJh
bWUoKSkpOworICAgIEludFBvaW50IGxvZ2ljYWxQb2ludCA9IHZpZXctPmNvbnRlbnRzVG9XaW5k
b3coY29udGV4dE1lbnVDb250cm9sbGVyLmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklu
bmVyTm9kZUZyYW1lKCkpOworICAgIFBPSU5UIHBvaW50ID0geyBsb2dpY2FsUG9pbnQueCgpICog
c2NhbGVGYWN0b3IsIGxvZ2ljYWxQb2ludC55KCkgKiBzY2FsZUZhY3RvciB9OwogCiAgICAgLy8g
VHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0ZXMKICAgICBpZiAoITo6Q2xp
ZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAmcG9pbnQpKQpAQCAtMTY0NCw2ICsxNjc2LDEwIEBA
IGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmEKIAogICAgIGJvb2wgaGl0
U2Nyb2xsYmFyID0gZmFsc2U7CiAgICAgUE9JTlQgZ2VzdHVyZUJlZ2luUG9pbnQgPSB7Z24tPnB0
c0xvY2F0aW9uLngsIGduLT5wdHNMb2NhdGlvbi55fTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRQb2ludCBsb2dpY2FsR2VzdHVyZUJlZ2lu
UG9pbnQoZ2VzdHVyZUJlZ2luUG9pbnQueCAvIHNjYWxlRmFjdG9yLCBnZXN0dXJlQmVnaW5Qb2lu
dC55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50
KTsKICAgICBmb3IgKEZyYW1lKiBjaGlsZEZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGNo
aWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9yVGFyZ2V0Tm9k
ZShtX2dlc3R1cmVUYXJnZXROb2RlLmdldCgpKSkgewogICAgICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IGNoaWxkRnJhbWUtPnZpZXcoKTsKQEAgLTE2NTYsNyArMTY5Miw3IEBAIGJvb2wgV2Vi
Vmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmEKICAgICAgICAgaWYgKCFsYXllcikKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGZyYW1lVmll
dy0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCkpOworICAgICAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdChmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMobG9naWNhbEdlc3R1cmVC
ZWdpblBvaW50KSk7CiAgICAgICAgIGxheWVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAg
ICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKQEAgLTE3
NjEsMTMgKzE3OTcsMTUgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQ
QQogICAgICAgICB9CiAKICAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGVkQXJlYSA9IDA7
CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAg
ICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRhWCAqIHNjYWxlRmFjdG9yLCAtZGVs
dGFZICogc2NhbGVGYWN0b3IpOwogCiAgICAgICAgIGlmICghbV9nZXN0dXJlVGFyZ2V0Tm9kZSB8
fCAhbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gV2Ug
bWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRob3V0IGhpdHRpbmcgYW55IG5vZGVz
Ci0gICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFY
LCAtZGVsdGFZKSk7CisgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkobG9n
aWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVkQXJlYSA9IGNvcmVGcmFtZS0+
dmlldygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigp
LT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSksIFdlYkNvcmU6
OlJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAg
ICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkt
PmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxT
Y3JvbGxEZWx0YSwgV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQsICZz
Y3JvbGxlZEFyZWEpOwogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigp
ICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkp
KSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRs
ZSk7CkBAIC0yMjA2LDcgKzIyNDQsMTEgQEAgdm9pZCBXZWJWaWV3OjpzZXRTaG91bGRJbnZlcnRD
b2xvcnMoYm9vbAogCiAgICAgUkVDVCB3aW5kb3dSZWN0ID0gezB9OwogICAgIGZyYW1lUmVjdCgm
d2luZG93UmVjdCk7Ci0gICAgcmVwYWludCh3aW5kb3dSZWN0LCB0cnVlLCB0cnVlKTsKKworICAg
IC8vIHJlcGFpbnQgZXhwZWN0cyBsb2dpY2FsIHBpeGVscywgc28gcmVzY2FsZSBoZXJlLgorICAg
IEludFJlY3QgbG9naWNhbFJlY3Qod2luZG93UmVjdCk7CisgICAgbG9naWNhbFJlY3Quc2NhbGUo
MS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHJlcGFpbnQobG9naWNhbFJlY3QsIHRy
dWUsIHRydWUpOwogfQogCiBib29sIFdlYlZpZXc6OnJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNz
KCkKQEAgLTI5MTYsNyArMjk1OCw3IEBAIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZVRvb2xUaXBX
aW5kb3coKQogICAgIGluZm8udUlkID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UX1BUUj4obV92aWV3
V2luZG93KTsKIAogICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX0FERFRPT0ws
IDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmaW5mbykpOwotICAgIDo6U2VuZE1lc3NhZ2Uo
bV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBtYXhUb29sVGlwV2lkdGgpOwor
ICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBj
bGFtcFRvPGludD4obWF4VG9vbFRpcFdpZHRoICogZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwogCiAg
ICAgOjpTZXRXaW5kb3dQb3MobV90b29sVGlwSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNX
UF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOwogfQpAQCAtMzY4NywxNyAr
MzcyOSwxOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmdlbmVyCiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2Vs
ZWN0aW9uUmVjdChSRUNUKiByYykKK0hSRVNVTFQgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChSRUNU
KiByYykKIHsKICAgICBXZWJDb3JlOjpGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgSW50UmVjdCBpciA9IGVuY2xvc2lu
Z0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwogICAgIGlyID0g
ZnJhbWUudmlldygpLT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGlyKTsKICAgICBpci5tb3Zl
KC1mcmFtZS52aWV3KCktPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIC1mcmFtZS52aWV3KCktPnNj
cm9sbE9mZnNldCgpLmhlaWdodCgpKTsKLSAgICByYy0+bGVmdCA9IGlyLngoKTsKLSAgICByYy0+
dG9wID0gaXIueSgpOwotICAgIHJjLT5ib3R0b20gPSByYy0+dG9wICsgaXIuaGVpZ2h0KCk7Ci0g
ICAgcmMtPnJpZ2h0ID0gcmMtPmxlZnQgKyBpci53aWR0aCgpOworCisgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJjLT5sZWZ0ID0gaXIueCgpICogc2Nh
bGVGYWN0b3I7CisgICAgcmMtPnRvcCA9IGlyLnkoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5i
b3R0b20gPSByYy0+dG9wICsgaXIuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+cmln
aHQgPSByYy0+bGVmdCArIGlyLndpZHRoKCkgKiBzY2FsZUZhY3RvcjsKIAogICAgIHJldHVybiBT
X09LOwogfQpAQCAtMzc3NCw5ICszODE4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJWaWV3Ojppc0xvYQogICAgIHJldHVybiBTX09LOwogfQogICAgIAotSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZW50QXRQb2ludCggCi0gICAgICAgIC8qIFtpbl0gKi8g
TFBQT0lOVCBwb2ludCwKLSAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcq
KiBlbGVtZW50RGljdGlvbmFyeSkKK0hSRVNVTFQgV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQoTFBQ
T0lOVCBwb2ludCwgSVByb3BlcnR5QmFnKiogZWxlbWVudERpY3Rpb25hcnkpCiB7CiAgICAgaWYg
KCFlbGVtZW50RGljdGlvbmFyeSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTM3OTAsNiArMzgzMiw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxl
bWUKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9
IEludFBvaW50KHBvaW50LT54LCBwb2ludC0+eSk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAx
LjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB3ZWJDb3JlUG9pbnQuc2NhbGUoc2NhbGVG
YWN0b3IsIHNjYWxlRmFjdG9yKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RS
ZXN1bHQod2ViQ29yZVBvaW50KTsKICAgICBpZiAoZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQog
ICAgICAgICByZXN1bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQod2ViQ29yZVBvaW50KTsKQEAgLTUzMDYsMzIgKzUzNTAsMzcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJWaWV3OjpmcmFtZQogICAgIHJldHVybiBtX2ZyYW1lTG9hZERlbGVnYXRl
UHJpdmF0ZS5jb3B5UmVmVG8oZCk7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Vmlldzo6c2Nyb2xsT2Zmc2V0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUE9JTlQgb2Zm
c2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxPZmZzZXQoTFBQT0lOVCBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgSW50U2l6ZSBv
ZmZzZXRJbnRTaXplID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9sbE9mZnNldCgp
OworCisgICAgb2Zmc2V0SW50U2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwogICAg
IG9mZnNldC0+eCA9IG9mZnNldEludFNpemUud2lkdGgoKTsKICAgICBvZmZzZXQtPnkgPSBvZmZz
ZXRJbnRTaXplLmhlaWdodCgpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYlZpZXc6OnNjcm9sbEJ5KCAKLSAgICAvKiBbaW5dICovIExQUE9JTlQg
b2Zmc2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxCeShMUFBPSU5UIG9mZnNldCkKIHsKICAg
ICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShvZmZzZXQtPngsIG9mZnNldC0+eSkp
OworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YShvZmZzZXQtPngsIG9mZnNldC0+eSk7CisgICAg
c2Nyb2xsRGVsdGEuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6dmlzaWJsZUNv
bnRlbnRSZWN0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUkVDVCByZWN0KQorSFJFU1VM
VCBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoTFBSRUNUIHJlY3QpCiB7CiAgICAgaWYgKCFy
ZWN0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCiAgICAgRmxvYXRSZWN0IHZpc2libGVD
b250ZW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgIHZpc2libGVDb250ZW50LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIHJl
Y3QtPmxlZnQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueCgpOwogICAgIHJlY3QtPnRvcCA9IChM
T05HKSB2aXNpYmxlQ29udGVudC55KCk7CiAgICAgcmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJs
ZUNvbnRlbnQubWF4WCgpOwpAQCAtNTY4Niw2ICs1NzM1LDggQEAgdm9pZCBXZWJWaWV3OjpwcmVw
YXJlQ2FuZGlkYXRlV2luZG93KEZyYQogICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJl
dCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOworICAgIGNh
cmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgQ0FORElEQVRFRk9STSBmb3Jt
OwogICAgIGZvcm0uZHdJbmRleCA9IDA7CiAgICAgZm9ybS5kd1N0eWxlID0gQ0ZTX0VYQ0xVREU7
CkBAIC01OTQ1LDYgKzU5OTYsNyBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQ
b3NpdGlvCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgY2hhclBvcy0+cHQueCA9IGNhcmV0LngoKTsKICAgICBjaGFy
UG9zLT5wdC55ID0gY2FyZXQueSgpOwogICAgIDo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93
LCAmY2hhclBvcy0+cHQpOwpAQCAtNjYyMiw3ICs2Njc0LDYgQEAgdm9pZCBXZWJWaWV3OjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKAogICAgICAgICAgICAgOjpHZXRDbGllbnRSZWN0KG1fdmll
d1dpbmRvdywgJmNsaWVudFJlY3QpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5ZXItPnNldFNp
emUoSW50UmVjdChjbGllbnRSZWN0KS5zaXplKCkpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOwotCiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dFJvb3RDaGlsZExheWVyKFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fYmFja2lu
Z0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKIAogICAgICAgICAgICAgLy8gV2UgYXJlbid0IGdv
aW5nIHRvIGJlIHVzaW5nIG91ciBiYWNraW5nIHN0b3JlIHdoaWxlIHdlJ3JlIGluIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCkBAIC02Nzc5LDYgKzY4MzAsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpCiAKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBjb250ZXh0
LmNsaXAoaW5DbGlwKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9y
KSk7CiAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qo
aW5DbGlwKSk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CkBAIC03MTIyLDYgKzcxNzUsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmZpcnN0CiAgICAgSW50UmVjdCBy
ZWN0ID0gZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAg
IHJlc3VsdEludFJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAK
KyAgICByZXN1bHRJbnRSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgcmVz
dWx0UmVjdC0+bGVmdCA9IHJlc3VsdEludFJlY3QueCgpOwogICAgIHJlc3VsdFJlY3QtPnRvcCA9
IHJlc3VsdEludFJlY3QueSgpOwogICAgIHJlc3VsdFJlY3QtPnJpZ2h0ID0gcmVzdWx0SW50UmVj
dC54KCkgKyByZXN1bHRJbnRSZWN0LndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCShyZXZp
c2lvbiAxODY4OTgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4OCw2ICs5ODgsOSBAQCBwdWJsaWM6CiAgICAgLyogW291dCwgcmV0dmFsXSAqLyBS
RUNUKiByZXN1bHRSZWN0KTsKIAogICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2VsZWN0
ZWRSYW5nZUZvclRlc3RpbmcoLyogW291dF0gKi8gVUlOVCogbG9jYXRpb24sIC8qIFtvdXRdICov
IFVJTlQqIGxlbmd0aCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRpcGxpZXIoZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29tTXVsdGlwbGllcihib29sIGlzVGV4dE9u
bHkpOwpAQCAtMTAyNiw4ICsxMDI5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkSW52
ZXJ0Q29sb3JzOwogICAgIHZvaWQgc2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wpOwogCi0gICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKLQogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBib29sIHJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNzKCk7CiAgICAgc3RhdGljIExSRVNVTFQg
Q0FMTEJBQ0sgV2ViVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24g
MTg2ODk4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE3LDExICsxMDE3LDEzIEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0MKIHsKICAgICBXZWJWaWV3KiB2aWV3
ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwogCi0gICAgUkVDVCByZWN0OwotICAgIHZpZXctPmZy
YW1lUmVjdCgmcmVjdCk7CisgICAgUkVDVCBwaXhlbFJlY3Q7CisgICAgdmlldy0+ZnJhbWVSZWN0
KCZwaXhlbFJlY3QpOwogICAgIGJvb2wgdHJhbnNwYXJlbnQgPSB2aWV3LT50cmFuc3BhcmVudCgp
OwogICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRyYW5zcGFyZW50ID8gQ29sb3I6OnRyYW5z
cGFyZW50IDogQ29sb3I6OndoaXRlOwotICAgIGNvcmUobV93ZWJGcmFtZSktPmNyZWF0ZVZpZXco
SW50UmVjdChyZWN0KS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQpOworICAg
IEludFJlY3QgbG9naWNhbEZyYW1lKHBpeGVsUmVjdCk7CisgICAgbG9naWNhbEZyYW1lLnNjYWxl
KDEuMGYgLyB2aWV3LT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb3JlKG1fd2ViRnJhbWUp
LT5jcmVhdGVWaWV3KGxvZ2ljYWxGcmFtZS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgdHJhbnNw
YXJlbnQpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRTYXZlVG9QYWdlQ2Fj
aGUoKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTg2OTE2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTUtMDctMTYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVy
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMz
NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1
bm5lcldpbi5jcHA6CisgICAgICAgIChUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcpOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL0NvbW1vbi5j
cHA6CisgICAgICAgIChXbmRQcm9jKToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hl
ci5jcHA6CisgICAgICAgIChXaW5MYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChXaW5MYXVuY2hl
cjo6em9vbU91dCk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmg6CisgICAgICAgIChXaW5M
YXVuY2hlcjo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbk1h
aW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOgorICAgICAgICAqIHdpbi9ETExMYXVuY2hlci9E
TExMYXVuY2hlck1haW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOgorCiAyMDE1LTA3LTE2ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIG15
c2VsZiB0byB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCShyZXZpc2lvbiAxODY4OTgpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MTMsOSArMTIxMywxNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldygpCiAgICAgcHJp
bnRmKCJFUlJPUjogVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkgbm90IGltcGxlbWVudGVkXG4i
KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQor
dm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIG92ZXJyaWRlU2Nh
bGVGYWN0b3IpCiB7Ci0gICAgLy8gTm90IGFwcGxpY2FibGUKKyAgICBDT01QdHI8SVdlYlZpZXc+
IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SVdlYlZpZXdQcml2YXRlMj4gdmlld1ByaXZhdGU7
CisgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdmlld1ByaXZhdGUtPnNldEN1c3RvbUJhY2tpbmdTY2Fs
ZUZhY3RvcihvdmVycmlkZVNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNl
dFBhZ2VWaXNpYmlsaXR5KCkKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAkocmV2aXNpb24gMTg2ODk4
KQorKysgVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIx
LDEzICs0MjEsMTMgQEAgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVAog
ICAgICAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVl
ZCBhIHJlZ2lvbiB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCiAgICAgICAgICAgICAvLyBkcmFnZ2lu
Zy4gVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmll
dyB0byBzZWUgd2hhdCdzCiAgICAgICAgICAgICAvLyB1bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIs
IGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNlIGFuIGFyYml0cmFyeQotICAgICAgICAg
ICAgLy8gMzAgcGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFy
eSBncmlwcGluZyBsb2NhdGlvbi4KKyAgICAgICAgICAgIC8vIDMwIGxvZ2ljYWwgcGl4ZWwgYmFu
ZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlv
bi4KICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4gdGhp
cyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCiAgICAg
ICAgICAgICAvLyB0cmVhdCB0aGlzIHJlZ2lvbiBhcyBpZiBpdCB3ZXJlIHRoZSB0aXRsZSBiYXIg
b24gYSBub3JtYWwgd2luZG93LgogICAgICAgICAgICAgaW50IHkgPSBISVdPUkQobFBhcmFtKTsK
IAotICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsg
ZHJhZ0JhckhlaWdodCkpCisgICAgICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8
IHdpbmRvdy50b3AgKyAoZHJhZ0JhckhlaWdodCAqIGdXaW5MYXVuY2hlci0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBIVENBUFRJT047CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHJldmlz
aW9uIDE4Njg5OCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2VsZXJh
dG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxl
eCBDaHJpc3RlbnNlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTYxLDYgKzYxLDggQEAgV2lu
TGF1bmNoZXI6OldpbkxhdW5jaGVyKEhXTkQgbWFpblduZCwgSAogCiBIUkVTVUxUIFdpbkxhdW5j
aGVyOjppbml0KCkKIHsKKyAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCiAgICAgSFJF
U1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYlZpZXcsIDAsIElJRF9JV2Vi
VmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcuR2V0SW50ZXJmYWNlUHRy
KCkpKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwpAQCAtNDc4LDMg
KzQ4MCwxMCBAQCB2b2lkIFdpbkxhdW5jaGVyOjp6b29tT3V0KCkKIAogICAgIHdlYkFjdGlvbnMt
Pnpvb21QYWdlT3V0KG51bGxwdHIpOwogfQorCit2b2lkIFdpbkxhdW5jaGVyOjp1cGRhdGVEZXZp
Y2VTY2FsZUZhY3RvcigpCit7CisgICAgSERDIGRjID0gOjpHZXREQyhtX2hNYWluV25kKTsKKyAg
ICBtX2RldmljZVNjYWxlRmFjdG9yID0gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAv
IDk2LjBmOworICAgIDo6UmVsZWFzZURDKG1faE1haW5XbmQsIGRjKTsKK30KSW5kZXg6IFRvb2xz
L1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNo
ZXIvV2luTGF1bmNoZXIuaAkocmV2aXNpb24gMTg2ODk4KQorKysgVG9vbHMvV2luTGF1bmNoZXIv
V2luTGF1bmNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDYgKzkwLDkgQEAgcHVibGljOgogICAg
IHZvaWQgem9vbUluKCk7CiAgICAgdm9pZCB6b29tT3V0KCk7CiAKKyAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcigpIHsgcmV0dXJuIG1fZGV2aWNlU2NhbGVGYWN0b3I7IH0KKyAgICB2b2lkIHVw
ZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CisKIHByaXZhdGU6CiAgICAgc3RkOjp2ZWN0b3I8SVdl
Ykhpc3RvcnlJdGVtUHRyPiBtX2hpc3RvcnlJdGVtczsKIApAQCAtMTE1LDUgKzExOCw2IEBAIHBy
aXZhdGU6CiAgICAgSFdORCBtX2hNYWluV25kOwogICAgIEhXTkQgbV9oVVJMQmFyV25kOwogCisg
ICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvciB7IDEuMGYgfTsKICAgICBib29sIG1fdXNlTGF5
ZXJlZFdlYlZpZXc7CiB9OwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAJKHJldmlzaW9uIDE4Njg5
OCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5MywxMSBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAK
ICAgICBTZXRGb2N1cyhoVVJMQmFyV25kKTsKIAotICAgIFJFQ1QgY2xpZW50UmVjdCA9IHsgc193
aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24ueCAr
IHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5IH07
CisgICAgUkVDVCBjbGllbnRSZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChoTWFpblduZCwgJmNs
aWVudFJlY3QpOworCisgICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldykKKyAgICAgICAgY2xpZW50
UmVjdCA9IHsgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93
UG9zaXRpb24ueCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5k
b3dTaXplLmN5IH07CiAKICAgICBXaW5MYXVuY2hlcldlYkhvc3QqIHdlYkhvc3QgPSBudWxscHRy
OwogCkluZGV4OiBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAkocmV2
aXNpb24gMTg2ODk4KQorKysgVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOSBAQCBpbnQgV0lOQVBJIHdXaW5NYWlu
KEhJTlNUQU5DRSBoSW5zdGFuY2UsCiAgICAgX3NldF9GTUEzX2VuYWJsZSgwKTsKICNlbmRpZgog
CisgICAgQk9PTCBkaWRJdCA9IFNldFByb2Nlc3NEUElBd2FyZSgpOworICAgIF9BU1NFUlQoZGlk
SXQpOworCiAjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShf
Q1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwogICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9D
UlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257223</attachid>
            <date>2015-07-21 17:38:43 -0700</date>
            <delta_ts>2015-07-21 18:38:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150721175136.patch</filename>
            <type>text/plain</type>
            <size>42328</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE1LTA3LTIxICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBw
cm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
MTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3Mg
dG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxp
bmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclRoaWNrbmVz
c0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxi
YXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1l
Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwOiBVcGRh
dGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50CisgICAgICAgIGNvb3JkaW5hdGVzIGJhc2Vk
IG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKwogMjAxNS0wNy0yMCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVu
c2lvbnNdIENhY2hlIGFjdGlvbnMgd2l0aCBkb21haW5zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91
c2VFdmVudFdpbi5jcHAJKHJldmlzaW9uIDE4NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDE1IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsOCArMjcsMTAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAorI2lu
Y2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtMzYsOSArMzgsMTggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIEhJR0hfQklUX01BU0tfU0hPUlQgMHg4MDAw
CiAKK3N0YXRpYyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcihIV05EIHdpbmRvdykKK3sKKyAgICBI
V25kREMgZGMod2luZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhF
TFNYKSAvIDk2LjBmOworfQorCiBzdGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JFdmVudChIV05E
IGhXbmQsIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFN
KGxQYXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pfTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworICAgIHBvaW50LnggPSBjbGFtcFRvPGludD4ocG9p
bnQueCAvIHNjYWxlRmFjdG9yKTsKKyAgICBwb2ludC55ID0gY2xhbXBUbzxpbnQ+KHBvaW50Lnkg
LyBzY2FsZUZhY3Rvcik7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHJldmlzaW9u
IDE4NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZVdpbi5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SFduZERDLmgiCiAjaW5jbHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgpAQCAtMTA3LDE0ICsx
MDgsMjkgQEAgU2Nyb2xsYmFyVGhlbWVXaW46On5TY3JvbGxiYXJUaGVtZVdpbigpCiB7CiB9CiAK
LWludCBTY3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplKQorc3RhdGljIGludCBzY3JvbGxiYXJUaGlja25lc3NJblBpeGVscygpCiB7CiAgICAg
c3RhdGljIGludCB0aGlja25lc3M7CiAgICAgaWYgKCF0aGlja25lc3MpCiAgICAgICAgIHRoaWNr
bmVzcyA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOworCiAgICAgcmV0dXJuIHRo
aWNrbmVzczsKIH0KIAoraW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3Mo
U2Nyb2xsYmFyQ29udHJvbFNpemUpCit7CisgICAgSFduZERDIGRjKDApOworICAgIGZsb2F0IHNj
YWxlRmFjdG9yID0gOTYuMGYgLyA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpOworICAg
IHJldHVybiBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBzY3JvbGxiYXJUaGlja25lc3NJblBp
eGVscygpKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3Mo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhckNvbnRyb2xTaXplKSBjb25zdAoreworICAg
IEhXbmREQyBkYyhzY3JvbGxiYXIucGxhdGZvcm1XaWRnZXQoKSk7CisgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSA5Ni4wZiAvIDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCk7CisgICAgcmV0
dXJuIGNsYW1wVG88aW50PihzY2FsZUZhY3RvciAqIHNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxz
KCkpOworfQorCiB2b2lkIFNjcm9sbGJhclRoZW1lV2luOjp0aGVtZUNoYW5nZWQoKQogewogICAg
IGlmICghc2Nyb2xsYmFyVGhlbWUpCkBAIC0xNDUsNyArMTYxLDcgQEAgSW50UmVjdCBTY3JvbGxi
YXJUaGVtZVdpbjo6YmFja0J1dHRvblJlYwogICAgIC8vIE91ciBhY3R1YWwgcmVjdCB3aWxsIHNo
cmluayB0byBoYWxmIHRoZSBhdmFpbGFibGUgc3BhY2Ugd2hlbgogICAgIC8vIHdlIGhhdmUgPCAz
NCBwaXhlbHMgbGVmdC4gIFRoaXMgYWxsb3dzIHRoZSBzY3JvbGxiYXIKICAgICAvLyB0byBzY2Fs
ZSBkb3duIGFuZCBmdW5jdGlvbiBldmVuIGF0IHRpbnkgc2l6ZXMuCi0gICAgaW50IHRoaWNrbmVz
cyA9IHNjcm9sbGJhclRoaWNrbmVzcygpOworICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJU
aGlja25lc3Moc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLngo
KSwgc2Nyb2xsYmFyLnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLndpZHRo
KCkgPCAyICogdGhpY2tuZXNzID8gc2Nyb2xsYmFyLndpZHRoKCkgLyAyIDogdGhpY2tuZXNzLCB0
aGlja25lc3MpOwpAQCAtMTY0LDcgKzE4MCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVXaW46
OmZvcndhcmRCdXR0b24KICAgICAvLyBPdXIgYWN0dWFsIHJlY3Qgd2lsbCBzaHJpbmsgdG8gaGFs
ZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHdoZW4KICAgICAvLyB3ZSBoYXZlIDwgMzQgcGl4ZWxzIGxl
ZnQuICBUaGlzIGFsbG93cyB0aGUgc2Nyb2xsYmFyCiAgICAgLy8gdG8gc2NhbGUgZG93biBhbmQg
ZnVuY3Rpb24gZXZlbiBhdCB0aW55IHNpemVzLgotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxi
YXJUaGlja25lc3MoKTsKKyAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNj
cm9sbGJhcik7CiAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpIHsKICAgICAgICAgaW50IHcgPSBzY3JvbGxiYXIud2lkdGgoKSA8IDIgKiB0aGlj
a25lc3MgPyBzY3JvbGxiYXIud2lkdGgoKSAvIDIgOiB0aGlja25lc3M7CiAgICAgICAgIHJldHVy
biBJbnRSZWN0KHNjcm9sbGJhci54KCkgKyBzY3JvbGxiYXIud2lkdGgoKSAtIHcsIHNjcm9sbGJh
ci55KCksIHcsIHRoaWNrbmVzcyk7CkBAIC0xNzYsNyArMTkyLDcgQEAgSW50UmVjdCBTY3JvbGxi
YXJUaGVtZVdpbjo6Zm9yd2FyZEJ1dHRvbgogCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lV2luOjp0
cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiB7Ci0gICAgaW50IHRoaWNrbmVz
cyA9IHNjcm9sbGJhclRoaWNrbmVzcygpOworICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJU
aGlja25lc3Moc2Nyb2xsYmFyKTsKICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLndpZHRoKCkgPCAy
ICogdGhpY2tuZXNzKQogICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTE5OCw3ICsy
MTQsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lV2luOjpzaG91bGRTbmFwQmFja1RvCiAgICAgLy8g
aW4gYm90aCBkaW1lbnNpb25zLgogICAgIEludFJlY3QgcmVjdCA9IHRyYWNrUmVjdChzY3JvbGxi
YXIpOwogICAgIGNvbnN0IGJvb2wgaG9yeiA9IHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXI7Ci0gICAgY29uc3QgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRo
aWNrbmVzcyhzY3JvbGxiYXIuY29udHJvbFNpemUoKSk7CisgICAgY29uc3QgaW50IHRoaWNrbmVz
cyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXIsIHNjcm9sbGJhci5jb250cm9sU2l6ZSgp
KTsKICAgICByZWN0LmluZmxhdGVYKChob3J6ID8ga09mZkVuZE11bHRpcGxpZXIgOiBrT2ZmU2lk
ZU11bHRpcGxpZXIpICogdGhpY2tuZXNzKTsKICAgICByZWN0LmluZmxhdGVZKChob3J6ID8ga09m
ZlNpZGVNdWx0aXBsaWVyIDoga09mZkVuZE11bHRpcGxpZXIpICogdGhpY2tuZXNzKTsKIApAQCAt
MzcwLDcgKzM4Niw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VGh1bWIoR3JhcGgK
ICAgICBSRUNUIHRoZW1lUmVjdChyZWN0KTsKICAgICBpZiAoc2Nyb2xsYmFyVGhlbWUpIHsKICAg
ICAgICAgRHJhd1RoZW1lQmFja2dyb3VuZChzY3JvbGxiYXJUaGVtZSwgd2luZG93c0NvbnRleHQu
aGRjKCksIHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBT
UF9USFVNQkhPUiA6IFNQX1RIVU1CVkVSVCwgc3RhdGUsICZ0aGVtZVJlY3QsIDApOwotICAgICAg
ICBwYWludEdyaXBwZXIoc2Nyb2xsYmFyLCB3aW5kb3dzQ29udGV4dC5oZGMoKSwgZ3JpcHBlclJl
Y3Qoc2Nyb2xsYmFyVGhpY2tuZXNzKCksIHJlY3QpKTsKKyAgICAgICAgcGFpbnRHcmlwcGVyKHNj
cm9sbGJhciwgd2luZG93c0NvbnRleHQuaGRjKCksIGdyaXBwZXJSZWN0KHNjcm9sbGJhclRoaWNr
bmVzcyhzY3JvbGxiYXIpLCByZWN0KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIDo6RHJhd0VkZ2Uo
d2luZG93c0NvbnRleHQuaGRjKCksICZ0aGVtZVJlY3QsIEVER0VfUkFJU0VELCBCRl9SRUNUIHwg
QkZfTUlERExFKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJh
clRoZW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmgJKHJldmlzaW9uIDE4NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1
Niw4IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRl
eHQmLCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmLCBTY3JvbGxiYXImLCBjb25z
dCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYWludFRodW1i
KEdyYXBoaWNzQ29udGV4dCYsIFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
KworICAgIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyJiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHJldmlzaW9uIDE4NzA0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogCkBAIC0zNiwxNiArMzcsMjggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4ODAwMAogI2Rl
ZmluZSBTUElfR0VUV0hFRUxTQ1JPTExDSEFSUyAweDAwNkMKIAorc3RhdGljIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKEhXTkQgd2luZG93KQoreworICAgIEhXbmREQyBkYyh3aW5kb3cpOworICAg
IHJldHVybiA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7Cit9CisKIHN0
YXRpYyBJbnRQb2ludCBwb3NpdGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFNIGxQYXJhbSkK
IHsKICAgICBQT0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFN
KGxQYXJhbSl9OwogICAgIFNjcmVlblRvQ2xpZW50KGhXbmQsICZwb2ludCk7CisgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcihoV25kKTsKKyAgICBwb2ludC54ID0gY2xh
bXBUbzxpbnQ+KHBvaW50LnggLyBzY2FsZUZhY3Rvcik7CisgICAgcG9pbnQueSA9IGNsYW1wVG88
aW50Pihwb2ludC55IC8gc2NhbGVGYWN0b3IpOwogICAgIHJldHVybiBwb2ludDsKIH0KIAogc3Rh
dGljIEludFBvaW50IGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoSFdORCBoV25kLCBMUEFSQU0gbFBh
cmFtKQogewogICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9M
UEFSQU0obFBhcmFtKX07CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3Rv
cihoV25kKTsKKyAgICBwb2ludC54ID0gY2xhbXBUbzxpbnQ+KHBvaW50LnggLyBzY2FsZUZhY3Rv
cik7CisgICAgcG9pbnQueSA9IGNsYW1wVG88aW50Pihwb2ludC55IC8gc2NhbGVGYWN0b3IpOwog
ICAgIHJldHVybiBwb2ludDsKIH0KIApAQCAtNzcsMTEgKzkwLDE0IEBAIFBsYXRmb3JtV2hlZWxF
dmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKIAogICAgIC8vIEdsb2JhbCBQb3NpdGlvbiBpcyBq
dXN0IHgsIHkgbG9jYXRpb24gb2YgZXZlbnQKICAgICBQT0lOVCBwb2ludCA9IHtsb2NhdGlvbi54
KCksIGxvY2F0aW9uLnkoKX07CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNl
U2NhbGVGYWN0b3IoaFduZCk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IHBvaW50OworICAgIG1f
Z2xvYmFsUG9zaXRpb24uc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsKIAogICAgIC8v
IFBvc2l0aW9uIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gb3VyIGNsaWVudAogICAgIFNjcmVl
blRvQ2xpZW50KGhXbmQsICZwb2ludCk7CiAgICAgbV9wb3NpdGlvbiA9IHBvaW50OworICAgIG1f
cG9zaXRpb24uc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsKIH0KIAogUGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCBoV25kLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtLCBib29sIGlzTW91c2VIV2hlZWwpCkBAIC05MCw2ICsxMDYsOCBAQCBQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoaFduZCwgbFBhcmFtKSkKICAgICAsIG1fZGlyZWN0
aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogeworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
ZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisKICAgICAvLyBIb3cgbWFueSBwaXhlbHMgc2hvdWxk
IHdlIHNjcm9sbCBwZXIgbGluZT8gIEdlY2tvIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUKICAgICAv
LyBjdXJyZW50IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFuZ2VzIGFzIHlv
dSBnbyB0aHJvdWdoIHRoZQogICAgIC8vIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50IHBhZ2VzLiAg
SUUgNyBpcyB+NTAgcHgvbGluZSwgYWx0aG91Z2ggdGhlIHZhbHVlCkBAIC05Nyw4ICsxMTUsOCBA
QCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAgLy8gc21vb3Ro
aW5nIGFsZ29yaXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5
IGxhcmdlcgogICAgIC8vIHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVy
ZSB3ZSB1c2UgMTAwIHB4IHBlciB0aHJlZSBsaW5lcwogICAgIC8vICh0aGUgZGVmYXVsdCBzY3Jv
bGwgYW1vdW50IG9uIFdpbmRvd3MgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgotICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMu
MGY7Ci0gICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJhbSkgLyBz
dGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBj
U2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IHNjYWxlRmFjdG9yICogMTAwLjBmIC8gMy4wZjsKKyAg
ICBmbG9hdCBkZWx0YSA9IEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od1BhcmFtKSAvIChzY2FsZUZh
Y3RvciAqIHN0YXRpY19jYXN0PGZsb2F0PihXSEVFTF9ERUxUQSkpOwogICAgIGlmIChpc01vdXNl
SFdoZWVsKSB7CiAgICAgICAgIC8vIFdpbmRvd3MgaXMgPC0tIC0vKyAtLT4sIFdlYktpdCB3YW50
cyA8LS0gKy8tIC0tPiwgc28gd2UgbmVnYXRlCiAgICAgICAgIC8vIHxkZWx0YXwgYWZ0ZXIgc2F2
aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiB0aGUgd2hlZWwgdGljayBtZW1iZXIuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxODcwNDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAxNS0wNy0yMSAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQg
cHJvcGVyIEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IFRh
a2UgZGV2aWNlIHNjYWxlIGZhY3RvciBpbnRvCisgICAgICAgIGFjY291bnQgd2hlbiBmaXJzdCBs
b2FkaW5nIHRoZSBwYWdlLgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZy
YW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6IEFjY291bnQgZm9yIGRldmljZSBzY2Fs
aW5nIGZhY3RvciB3aGVuIGRyYXdpbmcuCisgICAgICAgIChXZWJGcmFtZTo6cGFpbnRTY3JvbGxW
aWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3LmNwcDog
QWRqdXN0IHZhcmlvdXMgbWV0aG9kcyB0byB0YWtlIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGlu
dG8gYWNjb3VudAorICAgICAgICB3aGVuIHByb2Nlc3NpbmcgY29udGVudC4KKyAgICAgICAgKFdl
YlZpZXc6OnJlcGFpbnQpOgorICAgICAgICAoV2ViVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbik6Cisg
ICAgICAgIChXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViVmlldzo6
c2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2Vi
Vmlldzo6Z2VzdHVyZU5vdGlmeSk6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToKKyAgICAg
ICAgKFdlYlZpZXc6OnNldFNob3VsZEludmVydENvbG9ycyk6CisgICAgICAgIChXZWJWaWV3Ojpy
ZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJWaWV3Ojppbml0aWFsaXpl
VG9vbFRpcFdpbmRvdyk6CisgICAgICAgIChXZWJWaWV3OjpnZW5lcmF0ZVNlbGVjdGlvbkltYWdl
KToKKyAgICAgICAgKFdlYlZpZXc6OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViVmlldzo6
aXNMb2FkaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAg
KFdlYlZpZXc6OmZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSk6CisgICAgICAgIChXZWJWaWV3Ojpz
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViVmlldzo6c2Nyb2xsQnkpOgorICAgICAgICAoV2Vi
Vmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYlZpZXc6OnByZXBhcmVDYW5k
aWRhdGVXaW5kb3cpOgorICAgICAgICAoV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9u
KToKKyAgICAgICAgKFdlYlZpZXc6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAg
ICAoV2ViVmlldzo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJWaWV3OjpmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZUZvclRlc3RpbmcpOgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAx
NS0wNy0xOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04gKHIxODcwMDIpOiBCcm9rZSB0aGUgV2luZG93cyBidWlsZDogUmVkdWNlIFBhc3NS
ZWZQdHIgaW4gV2ViS2l0MiAtIDMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9u
IDE4NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzM2LDYgKzMzNiw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0
VG9Db24KICAgICBkaXJ0eVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgZ2MuY2xpcChkaXJ0
eVJlY3QpOwogICAgIGdjLnRyYW5zbGF0ZSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gd2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdj
LnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAg
ICB2aWV3LT5wYWludENvbnRlbnRzKCZnYywgcmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCkBA
IC0zNjAsNiArMzYyLDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRv
QwogICAgIGdjLnNhdmUoKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdChyZWN0KTsKICAgICBkaXJ0
eVJlY3QubW92ZSgtcHQueCwgLXB0LnkpOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gd2ViVmll
dygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdjLnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6
ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICB2aWV3LT5wYWludCgmZ2MsIGRpcnR5
UmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2
aXNpb24gMTg3MDQ5KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Myw2ICszNjMsNyBAQCBjb25zdCBMUENXU1RSIGtXZWJWaWV3V2luZG93Q2xh
c3NOYW1lID0KIAogY29uc3QgaW50IFdNX1hQX1RIRU1FQ0hBTkdFRCA9IDB4MDMxQTsKIGNvbnN0
IGludCBXTV9WSVNUQV9NT1VTRUhXSEVFTCA9IDB4MDIwRTsKK2NvbnN0IGludCBXTV9EUElDSEFO
R0VEID0gMHgwMkUwOwogCiBzdGF0aWMgY29uc3QgaW50IG1heFRvb2xUaXBXaWR0aCA9IDI1MDsK
IApAQCAtODIxLDggKzgyMiwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmNsb3NlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXZvaWQgV2ViVmlldzo6cmVwYWludChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29s
IGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIFdlYlZpZXc6OnJlcGFp
bnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgbG9naWNhbFdpbmRvd1JlY3QsIGJvb2wgY29udGVu
dENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1JlY3QobG9naWNhbFdpbmRvd1JlY3QpOworICAgIHdp
bmRvd1JlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBpZiAoaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRDaGFuZ2VkLCBpbW1l
ZGlhdGUsIGFuZCByZXBhaW50Q29udGVudE9ubHkgcGFyYW1ldGVycyBhcmUgYWxsIGJhc2VkIG9u
IGEgbm9uLQogICAgICAgICAvLyBjb21wb3NpdGluZyBwYWludGluZy9zY3JvbGxpbmcgbW9kZWwu
CkBAIC05MjAsMTAgKzkyNCwxOSBAQCB2b2lkIFdlYlZpZXc6OmFkZFRvRGlydHlSZWdpb24oR0RJ
T2JqZWN0CiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdEaWRJbnZhbGlkYXRl
KHRoaXMpOwogfQogCi12b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0
b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgbG9naWNhbER4LCBpbnQgbG9naWNhbER5LCBj
b25zdCBJbnRSZWN0JiBsb2dpY2FsU2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2lj
YWxDbGlwUmVjdCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAKKyAgICAvLyBEaW1l
bnNpb25zIHBhc3NlZCB0byB1cyBmcm9tIFdlYkNvcmUgYXJlIGluIGxvZ2ljYWwgdW5pdHMuIFdl
IG11c3QgY29udmVydCB0byBwaXhlbHM6CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgIGludCBkeCA9IGNsYW1wVG88aW50PihzY2FsZUZhY3RvciAqIGxv
Z2ljYWxEeCk7CisgICAgaW50IGR5ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9yICogbG9naWNh
bER5KTsKKyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0KGxvZ2ljYWxTY3JvbGxWaWV3UmVjdCk7
CisgICAgc2Nyb2xsVmlld1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOworICAgIEludFJlY3QgY2xp
cFJlY3QobG9naWNhbENsaXBSZWN0KTsKKyAgICBjbGlwUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7
CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBsaWtlIG1vdmlu
ZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXdseS1leHBvc2Vk
IHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTk1Miw3ICs5NjUsNyBAQCB2
b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgSFduZERDIHdpbmRv
d0RDKG1fdmlld1dpbmRvdyk7CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6
OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmdldCgp
KTsKLSAgICAKKwogICAgIC8vIFNjcm9sbCB0aGUgYml0bWFwLgogICAgIFJFQ1Qgc2Nyb2xsUmVj
dFdpbihzY3JvbGxWaWV3UmVjdCk7CiAgICAgUkVDVCBjbGlwUmVjdFdpbihjbGlwUmVjdCk7CkBA
IC05ODIsOCArOTk1LDExIEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6
ZSYKIAogICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKHRvcExldmVsRnJhbWUoKSkpCi0gICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5y
ZXNpemUobmV3U2l6ZSk7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRvcExldmVs
RnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IG5ld1NpemU7CisgICAg
ICAgIGxvZ2ljYWxTaXplLnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAg
ICAgY29yZUZyYW1lLT52aWV3KCktPnJlc2l6ZShsb2dpY2FsU2l6ZSk7CisgICAgfQogCiAjaWYg
VVNFKENBKQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCkBAIC0xMjUwLDcgKzEyNjYsMTEgQEAg
dm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogCiAgICAgaWYgKGZyYW1l
VmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAg
Z2MuY2xpcChkaXJ0eVJlY3QpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNj
YWxlRmFjdG9yKCk7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgZ2Muc2NhbGUoRmxvYXRT
aXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgICAgICBmcmFtZVZpZXctPnBhaW50
KCZnYywgZGlydHlSZWN0KTsKKyAgICAgICAgZ2MucmVzdG9yZSgpOwogICAgICAgICBpZiAobV9z
aG91bGRJbnZlcnRDb2xvcnMpCiAgICAgICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENv
bG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7CiAg
ICAgfQpAQCAtMTQyMiw5ICsxNDQyLDEzIEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1l
bnVFdmVudChXUEEKIAogICAgIGxQYXJhbSA9IE1BS0VMUEFSQU0oY29vcmRzLngsIGNvb3Jkcy55
KTsKIAorICAgIC8vIENvbnZlcnQgY29vcmRpbmF0ZXMgdG8gbG9naWNhbCBwaXhlbHMKKyAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgSW50UG9pbnQgbG9n
aWNhbENvb3Jkcyhjb29yZHMueCAvIHNjYWxlRmFjdG9yLCBjb29yZHMueSAvIHNjYWxlRmFjdG9y
KTsKKwogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY2xlYXJDb250ZXh0TWVu
dSgpOwogCi0gICAgSW50UG9pbnQgZG9jdW1lbnRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKS0+d2luZG93VG9Db250ZW50cyhjb29yZHMpKTsKKyAgICBJbnRQb2ludCBkb2N1bWVudFBv
aW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGxvZ2ljYWxD
b29yZHMpKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoZG9jdW1lbnRQb2ludCk7CiAgICAg
RnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMTQ0OSw3ICsxNDczLDgg
QEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmll
dykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVu
dHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQ
b2ludEluSW5uZXJOb2RlRnJhbWUoKSkpOworICAgIEludFBvaW50IGxvZ2ljYWxQb2ludCA9IHZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVyLmhpdFRlc3RSZXN1bHQo
KS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOworICAgIFBPSU5UIHBvaW50ID0geyBs
b2dpY2FsUG9pbnQueCgpICogc2NhbGVGYWN0b3IsIGxvZ2ljYWxQb2ludC55KCkgKiBzY2FsZUZh
Y3RvciB9OwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0
ZXMKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAmcG9pbnQpKQpAQCAt
MTY0NCw2ICsxNjY5LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1Bh
cmEKIAogICAgIGJvb2wgaGl0U2Nyb2xsYmFyID0gZmFsc2U7CiAgICAgUE9JTlQgZ2VzdHVyZUJl
Z2luUG9pbnQgPSB7Z24tPnB0c0xvY2F0aW9uLngsIGduLT5wdHNMb2NhdGlvbi55fTsKKworICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRQb2ludCBs
b2dpY2FsR2VzdHVyZUJlZ2luUG9pbnQoZ2VzdHVyZUJlZ2luUG9pbnQueCAvIHNjYWxlRmFjdG9y
LCBnZXN0dXJlQmVnaW5Qb2ludC55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgSGl0VGVzdFJlcXVl
c3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6RGlz
YWxsb3dTaGFkb3dDb250ZW50KTsKICAgICBmb3IgKEZyYW1lKiBjaGlsZEZyYW1lID0gJm1fcGFn
ZS0+bWFpbkZyYW1lKCk7IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBFdmVudEhhbmRsZXI6OnN1
YmZyYW1lRm9yVGFyZ2V0Tm9kZShtX2dlc3R1cmVUYXJnZXROb2RlLmdldCgpKSkgewogICAgICAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNoaWxkRnJhbWUtPnZpZXcoKTsKQEAgLTE2NTYsNyAr
MTY4NSw3IEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmEKICAgICAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0KGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCkp
OworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChmcmFtZVZpZXctPnNjcmVlblRvQ29udGVu
dHMobG9naWNhbEdlc3R1cmVCZWdpblBvaW50KSk7CiAgICAgICAgIGxheWVyLT5oaXRUZXN0KHJl
cXVlc3QsIHJlc3VsdCk7CiAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5u
ZXJOb2RlKCk7CiAKQEAgLTE3NjEsMTMgKzE3OTAsMTUgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJl
KFdQQVJBTSB3UGFyYW0sIExQQQogICAgICAgICB9CiAKICAgICAgICAgU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGVkQXJlYSA9IDA7CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRhWCAq
IHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3IpOwogCiAgICAgICAgIGlmICghbV9n
ZXN0dXJlVGFyZ2V0Tm9kZSB8fCAhbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewog
ICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRob3V0
IGhpdHRpbmcgYW55IG5vZGVzCi0gICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xs
QnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisgICAgICAgICAgICBjb3JlRnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVk
QXJlYSA9IGNvcmVGcmFtZS0+dmlldygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
Z2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoLWRlbHRhWCwg
LWRlbHRhWSksIFdlYkNvcmU6OlJlbmRlckxheWVyOjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAmc2Ny
b2xsZWRBcmVhKTsKKyAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNjcm9s
bE9mZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEpOwogCiAgICAgICAgIGlmICghKFVwZGF0ZVBh
bm5pbmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFu
bmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxl
UHRyKCkoZ2VzdHVyZUhhbmRsZSk7CkBAIC0yMjA2LDcgKzIyMzcsMTEgQEAgdm9pZCBXZWJWaWV3
OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbAogCiAgICAgUkVDVCB3aW5kb3dSZWN0ID0gezB9
OwogICAgIGZyYW1lUmVjdCgmd2luZG93UmVjdCk7Ci0gICAgcmVwYWludCh3aW5kb3dSZWN0LCB0
cnVlLCB0cnVlKTsKKworICAgIC8vIHJlcGFpbnQgZXhwZWN0cyBsb2dpY2FsIHBpeGVscywgc28g
cmVzY2FsZSBoZXJlLgorICAgIEludFJlY3QgbG9naWNhbFJlY3Qod2luZG93UmVjdCk7CisgICAg
bG9naWNhbFJlY3Quc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHJlcGFp
bnQobG9naWNhbFJlY3QsIHRydWUsIHRydWUpOwogfQogCiBib29sIFdlYlZpZXc6OnJlZ2lzdGVy
V2ViVmlld1dpbmRvd0NsYXNzKCkKQEAgLTI1MTcsNiArMjU1Miw5IEBAIExSRVNVTFQgQ0FMTEJB
Q0sgV2ViVmlldzo6V2ViVmlld1duZFByb2MKICAgICAgICAgY2FzZSBXTV9IU0NST0xMOgogICAg
ICAgICAgICAgaGFuZGxlZCA9IHdlYlZpZXctPmhvcml6b250YWxTY3JvbGwod1BhcmFtLCBsUGFy
YW0pOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fRFBJQ0hBTkdFRDoKKyAg
ICAgICAgICAgIGhhbmRsZWQgPSB3ZWJWaWV3LT5kcGlDaGFuZ2VkKHdQYXJhbSwgbFBhcmFtKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaGFuZGxl
ZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzc1LDEwICsyODEzLDEzIEBAIGJv
b2wgV2ViVmlldzo6c2hvdWxkSW5pdGlhbGl6ZVRyYWNrUG9pbnQKICAgICByZXR1cm4gc2hvdWxk
Q3JlYXRlU2Nyb2xsYmFyczsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3
Ojppbml0V2l0aEZyYW1lKCAKLSAgICAvKiBbaW5dICovIFJFQ1QgZnJhbWUsCi0gICAgLyogW2lu
XSAqLyBCU1RSIGZyYW1lTmFtZSwKLSAgICAvKiBbaW5dICovIEJTVFIgZ3JvdXBOYW1lKQorc3Rh
dGljIGZsb2F0IHNjYWxlRmFjdG9yRnJvbVdpbmRvdyhIV05EIHdpbmRvdykKK3sKKyAgICBIV25k
REMgZGMod2luZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNY
KSAvIDk2LjBmOworfQorCitIUkVTVUxUIFdlYlZpZXc6OmluaXRXaXRoRnJhbWUoUkVDVCBmcmFt
ZSwgQlNUUiBmcmFtZU5hbWUsIEJTVFIgZ3JvdXBOYW1lKQogewogICAgIEhSRVNVTFQgaHIgPSBT
X09LOwogCkBAIC0yNzkwLDYgKzI4MzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YlZpZXc6OmluaXRXCiAgICAgbV92aWV3V2luZG93ID0gQ3JlYXRlV2luZG93RXgoMCwga1dlYlZp
ZXdXaW5kb3dDbGFzc05hbWUsIDAsIFdTX0NISUxEIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQ0xJ
UENISUxEUkVOLAogICAgICAgICBmcmFtZS5sZWZ0LCBmcmFtZS50b3AsIGZyYW1lLnJpZ2h0IC0g
ZnJhbWUubGVmdCwgZnJhbWUuYm90dG9tIC0gZnJhbWUudG9wLCBtX2hvc3RXaW5kb3cgPyBtX2hv
c3RXaW5kb3cgOiBIV05EX01FU1NBR0UsIDAsIGdJbnN0YW5jZSwgMCk7CiAgICAgQVNTRVJUKDo6
SXNXaW5kb3cobV92aWV3V2luZG93KSk7CisgICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IHNjYWxl
RmFjdG9yRnJvbVdpbmRvdyhtX3ZpZXdXaW5kb3cpOwogCiAgICAgaWYgKHNob3VsZEluaXRpYWxp
emVUcmFja1BvaW50SGFjaygpKSB7CiAgICAgICAgIC8vIElmIHdlIGRldGVjdGVkIGEgcmVnaXN0
cnkga2V5IGJlbG9uZ2luZyB0byBhIFRyYWNrUG9pbnQgZHJpdmVyLCB0aGVuIGNyZWF0ZSBmYWtl
IHRyYWNrcG9pbnQKQEAgLTI5MTYsNyArMjk1OCw3IEBAIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6
ZVRvb2xUaXBXaW5kb3coKQogICAgIGluZm8udUlkID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UX1BU
Uj4obV92aWV3V2luZG93KTsKIAogICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRN
X0FERFRPT0wsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmaW5mbykpOwotICAgIDo6U2Vu
ZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBtYXhUb29sVGlw
V2lkdGgpOworICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJ
RFRILCAwLCBjbGFtcFRvPGludD4obWF4VG9vbFRpcFdpZHRoICogZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOwogCiAgICAgOjpTZXRXaW5kb3dQb3MobV90b29sVGlwSHduZCwgSFdORF9UT1AsIDAsIDAs
IDAsIDAsIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOwogfQpAQCAt
MzU0MSw2ICszNTgzLDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpzZXRIb3N0V2luZG93KC8qIFtpbl0g
KgogICAgIH0KIAogICAgIG1faG9zdFdpbmRvdyA9IHdpbmRvdzsKKyAgICBtX2RldmljZVNjYWxl
RmFjdG9yID0gc2NhbGVGYWN0b3JGcm9tV2luZG93KG1faG9zdFdpbmRvdyk7CiAKICAgICB3aW5k
b3dBbmNlc3RyeURpZENoYW5nZSgpOwogCkBAIC0zNjg3LDE3ICszNzMwLDE5IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Z2VuZXIKICAgICByZXR1cm4gU19PSzsKIH0KIAot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJj
KQorSFJFU1VMVCBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQogewogICAgIFdlYkNv
cmU6OkZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7CiAKICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaXIgPSBmcmFtZS52aWV3KCktPmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kb3coaXIpOwogICAgIGlyLm1vdmUoLWZyYW1lLnZpZXcoKS0+c2Ny
b2xsT2Zmc2V0KCkud2lkdGgoKSwgLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0
KCkpOwotICAgIHJjLT5sZWZ0ID0gaXIueCgpOwotICAgIHJjLT50b3AgPSBpci55KCk7Ci0gICAg
cmMtPmJvdHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKTsKLSAgICByYy0+cmlnaHQgPSByYy0+
bGVmdCArIGlyLndpZHRoKCk7CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgcmMtPmxlZnQgPSBpci54KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+
dG9wID0gaXIueSgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPmJvdHRvbSA9IHJjLT50b3AgKyBp
ci5oZWlnaHQoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5yaWdodCA9IHJjLT5sZWZ0ICsgaXIu
d2lkdGgoKSAqIHNjYWxlRmFjdG9yOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzc0LDkg
KzM4MTksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmlzTG9hCiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAgICAgCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmVsZW1lbnRBdFBvaW50KCAKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50LAotICAg
ICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIGVsZW1lbnREaWN0aW9uYXJ5
KQorSFJFU1VMVCBXZWJWaWV3OjplbGVtZW50QXRQb2ludChMUFBPSU5UIHBvaW50LCBJUHJvcGVy
dHlCYWcqKiBlbGVtZW50RGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWVsZW1lbnREaWN0aW9uYXJ5
KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc5MCw2ICszODMzLDggQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZQogICAgICAgICByZXR1cm4g
RV9GQUlMOwogCiAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQtPngs
IHBvaW50LT55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIHdlYkNvcmVQb2ludC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3Ip
OwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJlc3VsdCh3ZWJDb3JlUG9pbnQp
OwogICAgIGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJlc3VsdCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCh3ZWJDb3JlUG9pbnQpOwpA
QCAtNTMwNiwzMiArNTM1MSwzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmZyYW1lCiAgICAgcmV0dXJuIG1fZnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmNvcHlSZWZUbyhk
KTsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzY3JvbGxPZmZzZXQo
IAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdlYlZp
ZXc6OnNjcm9sbE9mZnNldChMUFBPSU5UIG9mZnNldCkKIHsKICAgICBpZiAoIW9mZnNldCkKICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICBJbnRTaXplIG9mZnNldEludFNpemUgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBvZmZzZXRJbnRT
aXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgb2Zmc2V0LT54ID0gb2Zmc2V0
SW50U2l6ZS53aWR0aCgpOwogICAgIG9mZnNldC0+eSA9IG9mZnNldEludFNpemUuaGVpZ2h0KCk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6c2Nyb2xsQnkoIAotICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdl
YlZpZXc6OnNjcm9sbEJ5KExQUE9JTlQgb2Zmc2V0KQogewogICAgIGlmICghb2Zmc2V0KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5z
Y3JvbGxCeShJbnRTaXplKG9mZnNldC0+eCwgb2Zmc2V0LT55KSk7CisKKyAgICBJbnRTaXplIHNj
cm9sbERlbHRhKG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZSgx
LjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3
KCktPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoIAotICAgIC8q
IFtyZXR2YWxdW291dF0gKi8gTFBSRUNUIHJlY3QpCitIUkVTVUxUIFdlYlZpZXc6OnZpc2libGVD
b250ZW50UmVjdChMUFJFQ1QgcmVjdCkKIHsKICAgICBpZiAoIXJlY3QpCiAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnQgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgdmlzaWJsZUNvbnRl
bnQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgcmVjdC0+bGVmdCA9IChMT05HKSB2
aXNpYmxlQ29udGVudC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcpIHZpc2libGVDb250ZW50
LnkoKTsKICAgICByZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhYKCk7CkBA
IC01Njg2LDYgKzU3MzYsOCBAQCB2b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3co
RnJhCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJh
bmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisKICAgICBDQU5ESURBVEVGT1JNIGZvcm07CiAgICAgZm9ybS5kd0luZGV4
ID0gMDsKICAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsKQEAgLTU5NDUsNiArNTk5Nyw3
IEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW8KICAgICAgICAgY2Fy
ZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdl
dCgpKTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1Rv
V2luZG93KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKICAg
ICBjaGFyUG9zLT5wdC54ID0gY2FyZXQueCgpOwogICAgIGNoYXJQb3MtPnB0LnkgPSBjYXJldC55
KCk7CiAgICAgOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZjaGFyUG9zLT5wdCk7CkBA
IC02NjIyLDcgKzY2NzUsNiBAQCB2b2lkIFdlYlZpZXc6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoCiAgICAgICAgICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVj
dCk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0U2l6ZShJbnRSZWN0KGNsaWVudFJl
Y3QpLnNpemUoKSk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7Ci0KICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENoaWxkTGF5ZXIoUGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV9iYWNraW5nTGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKSkpOwogCiAgICAgICAgICAgICAvLyBXZSBhcmVuJ3QgZ29pbmcgdG8gYmUgdXNpbmcgb3Vy
IGJhY2tpbmcgc3RvcmUgd2hpbGUgd2UncmUgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKQEAg
LTY3NzksNiArNjgzMSw4IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFw
aGkKIAogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcChpbkNsaXApOworICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBjb250ZXh0LnNj
YWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICBmcmFtZS0+dmll
dygpLT5wYWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChpbkNsaXApKTsKICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKIH0KQEAgLTcxMjIsNiArNzE3Niw4IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6Zmlyc3QKICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAgcmVzdWx0SW50UmVjdCA9IGZy
YW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAorICAgIHJlc3VsdEludFJlY3Qu
c2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICByZXN1bHRSZWN0LT5sZWZ0ID0gcmVz
dWx0SW50UmVjdC54KCk7CiAgICAgcmVzdWx0UmVjdC0+dG9wID0gcmVzdWx0SW50UmVjdC55KCk7
CiAgICAgcmVzdWx0UmVjdC0+cmlnaHQgPSByZXN1bHRJbnRSZWN0LngoKSArIHJlc3VsdEludFJl
Y3Qud2lkdGgoKTsKQEAgLTcxNzMsMTIgKzcyMjksNiBAQCBIUkVTVUxUIFdlYlZpZXc6OmRpc3Bh
dGNoUGVuZGluZ0xvYWRSZXF1CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXN0YXRpYyBmbG9hdCBz
Y2FsZUZhY3RvckZyb21XaW5kb3coSFdORCB3aW5kb3cpCi17Ci0gICAgSFduZERDIGRjKHdpbmRv
dyk7Ci0gICAgcmV0dXJuIDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsK
LX0KLQogZmxvYXQgV2ViVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIGlm
IChtX2N1c3RvbURldmljZVNjYWxlRmFjdG9yKQpAQCAtNzE4Niw2ICs3MjM2LDkgQEAgZmxvYXQg
V2ViVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogCiAgICAgLy8gRklYTUUoMTQ2MzM1
KTogU2hvdWxkIGNoZWNrIGZvciBXaW5kb3dzIDguMSBIaWdoIERQSSBGZWF0dXJlcyBoZXJlIGZp
cnN0LgogCisgICAgaWYgKG1fZGV2aWNlU2NhbGVGYWN0b3IpCisgICAgICAgIHJldHVybiBtX2Rl
dmljZVNjYWxlRmFjdG9yOworCiAgICAgaWYgKG1fdmlld1dpbmRvdykKICAgICAgICAgcmV0dXJu
IHNjYWxlRmFjdG9yRnJvbVdpbmRvdyhtX3ZpZXdXaW5kb3cpOwogCkBAIC03MjE2LDMgKzcyNjks
MjUgQEAgSFJFU1VMVCBXZWJWaWV3OjpiYWNraW5nU2NhbGVGYWN0b3IoZG91YgogCiAgICAgcmV0
dXJuIFNfT0s7CiB9CisKK2Jvb2wgV2ViVmlldzo6ZHBpQ2hhbmdlZChXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQoreworICAgIGlmICghOjpJc1Byb2Nlc3NEUElBd2FyZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBkcGkgPSBMT1dPUkQod1BhcmFtKTsKKworICAg
IGlmIChkcGkpCisgICAgICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkcGkgLyA5Ni4wZjsKKyAg
ICBlbHNlIGlmIChtX3ZpZXdXaW5kb3cpCisgICAgICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBz
Y2FsZUZhY3RvckZyb21XaW5kb3cobV92aWV3V2luZG93KTsKKyAgICBlbHNlIGlmIChtX2hvc3RX
aW5kb3cpCisgICAgICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvckZyb21XaW5k
b3cobV9ob3N0V2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIG1fZGV2aWNlU2NhbGVGYWN0b3Ig
PSBzY2FsZUZhY3RvckZyb21XaW5kb3coMCk7CisKKyAgICBpZiAobFBhcmFtKQorICAgICAgICBz
aXplQ2hhbmdlZChJbnRTaXplKExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAxODcwNDkp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEJyZW50IEZ1bGdoYW0uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtODgxLDYgKzg4MSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsb3NlV2luZG93U29vbigpOwogICAgIHZvaWQgY2xvc2VXaW5kb3dUaW1lckZpcmVkKCk7
CiAgICAgYm9vbCBkaWRDbG9zZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvc2U7IH0KKyAgICBi
b29sIGRwaUNoYW5nZWQoV1BBUkFNLCBMUEFSQU0pOwogCiAgICAgYm9vbCB0cmFuc3BhcmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNwYXJlbnQ7IH0KICAgICBib29sIHVzZXNMYXllcmVkV2lu
ZG93KCkgY29uc3QgeyByZXR1cm4gbV91c2VzTGF5ZXJlZFdpbmRvdzsgfQpAQCAtOTg4LDYgKzk4
OSw5IEBAIHB1YmxpYzoKICAgICAvKiBbb3V0LCByZXR2YWxdICovIFJFQ1QqIHJlc3VsdFJlY3Qp
OwogCiAgICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZWxlY3RlZFJhbmdlRm9yVGVzdGlu
ZygvKiBbb3V0XSAqLyBVSU5UKiBsb2NhdGlvbiwgLyogW291dF0gKi8gVUlOVCogbGVuZ3RoKTsK
KworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRab29tTXVsdGlwbGllcihmbG9hdCBtdWx0aXBsaWVyLCBib29sIGlzVGV4dE9ubHkp
OwogICAgIGZsb2F0IHpvb21NdWx0aXBsaWVyKGJvb2wgaXNUZXh0T25seSk7CkBAIC0xMDI2LDgg
KzEwMzAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRJbnZlcnRDb2xvcnM7CiAgICAg
dm9pZCBzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCk7CiAKLSAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJX
ZWJWaWV3V2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSk7CkBAIC0xMTAyLDYgKzExMDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV1RGOjpTdHJpbmcg
bV91c2VyQWdlbnRTdGFuZGFyZDsKICAgICBmbG9hdCBtX3pvb21NdWx0aXBsaWVyOwogICAgIGZs
b2F0IG1fY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3IgeyAwIH07CisgICAgZmxvYXQgbV9kZXZpY2VT
Y2FsZUZhY3RvciB7IDAgfTsKICAgICBib29sIG1fem9vbXNUZXh0T25seTsKICAgICBXVEY6OlN0
cmluZyBtX292ZXJyaWRlRW5jb2Rpbmc7CiAgICAgV1RGOjpTdHJpbmcgbV9hcHBsaWNhdGlvbk5h
bWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAxODcwNDkpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTcsMTEgKzEwMTcsMTMgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6dHJhbnNpdGlvblRvQwogewogICAgIFdlYlZpZXcqIHZpZXcgPSBtX3dlYkZyYW1lLT53ZWJW
aWV3KCk7CiAKLSAgICBSRUNUIHJlY3Q7Ci0gICAgdmlldy0+ZnJhbWVSZWN0KCZyZWN0KTsKKyAg
ICBSRUNUIHBpeGVsUmVjdDsKKyAgICB2aWV3LT5mcmFtZVJlY3QoJnBpeGVsUmVjdCk7CiAgICAg
Ym9vbCB0cmFuc3BhcmVudCA9IHZpZXctPnRyYW5zcGFyZW50KCk7CiAgICAgQ29sb3IgYmFja2dy
b3VuZENvbG9yID0gdHJhbnNwYXJlbnQgPyBDb2xvcjo6dHJhbnNwYXJlbnQgOiBDb2xvcjo6d2hp
dGU7Ci0gICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhJbnRSZWN0KHJlY3QpLnNpemUo
KSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CisgICAgSW50UmVjdCBsb2dpY2FsRnJh
bWUocGl4ZWxSZWN0KTsKKyAgICBsb2dpY2FsRnJhbWUuc2NhbGUoMS4wZiAvIHZpZXctPmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgIGNvcmUobV93ZWJGcmFtZSktPmNyZWF0ZVZpZXcobG9naWNh
bEZyYW1lLnNpemUoKSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODcxNDIp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAx
NS0wNy0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
V2luXSBJbXBsZW1lbnQgcHJvcGVyIEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVyZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzNQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRlIFdpbkxhdW5jaGVyIHRvIHRha2UgZGV2aWNlIHNjYWxp
bmcgZmFjdG9yIGludG8gYWNjb3VudC4KKworICAgICAgICAqIFdpbkxhdW5jaGVyL0NvbW1vbi5j
cHA6CisgICAgICAgIChyZXNpemVTdWJWaWV3cyk6CisgICAgICAgIChzdWJjbGFzc0ZvckxheWVy
ZWRXaW5kb3cpOgorICAgICAgICAoY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUpOgorICAgICAgICAo
RGxsTWFpbik6CisgICAgICAgIChXbmRQcm9jKToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5M
YXVuY2hlci5jcHA6CisgICAgICAgIChXaW5MYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChXaW5M
YXVuY2hlcjo6em9vbU91dCk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6dXBkYXRlRGV2aWNlU2Nh
bGVGYWN0b3IpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmg6CisgICAgICAg
IChXaW5MYXVuY2hlcjo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAqIFdpbkxhdW5jaGVy
L1dpbkxhdW5jaGVyV2ViSG9zdC5jcHA6CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6Omxv
YWRVUkwpOgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpkaWRGYWlsUHJvdmlzaW9uYWxM
b2FkV2l0aEVycm9yKToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3Qu
aDoKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5NYWluLmNwcDoKKyAgICAgICAgKHdXaW5NYWlu
KToKKyAgICAgICAgKiB3aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcDoKKyAgICAg
ICAgKHdXaW5NYWluKToKKwogMjAxNS0wNy0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeGVkIFZNIHBvb2wgYWxsb2NhdGlvbiBzaG91bGQgaGF2ZSBhIHJl
c2VydmUgZm9yIGFsbG9jYXRpb25zIHRoYXQgY2Fubm90IGZhaWwKSW5kZXg6IFRvb2xzL1dpbkxh
dW5jaGVyL0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9u
LmNwcAkocmV2aXNpb24gMTg3MDQ5KQorKysgVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9J
SUlEPElXZWJNdXRhYmxlCiBISU5TVEFOQ0UgaEluc3Q7CiBIV05EIGhNYWluV25kOwogSFdORCBo
VVJMQmFyV25kOworSEdESU9CSiBoT2xkRm9udDsKK0hHRElPQkogaFVSTEZvbnQ7CiBIV05EIGhC
YWNrQnV0dG9uV25kOwogSFdORCBoRm9yd2FyZEJ1dHRvblduZDsKIEhXTkQgaENhY2hlV25kOwpA
QCAtMTAxLDE3ICsxMDMsMzggQEAgSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMoSFdORCwgVUlOVCwg
V1BBUgogc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHVybEJTdHIpOwogc3RhdGljIHZvaWQgdXBk
YXRlU3RhdGlzdGljcyhIV05EIGhEbGcpOwogCitzdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3JGb3JXaW5kb3coSFdORCB3aW5kb3cpCit7CisgICAgSERDIGRjID0gOjpHZXREQyh3aW5kb3cp
OworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQ
SVhFTFNYKSAvIDk2LjBmOworICAgIDo6UmVsZWFzZURDKHdpbmRvdywgZGMpOworICAgIHJldHVy
biBkZXZpY2VTY2FsZUZhY3RvcjsKK30KKwogc3RhdGljIHZvaWQgcmVzaXplU3ViVmlld3MoKQog
ewogICAgIGlmIChnV2luTGF1bmNoZXItPnVzZXNMYXllcmVkV2ViVmlldygpIHx8ICFnVmlld1dp
bmRvdykKICAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvckZvcldpbmRvdyhnVmlld1dpbmRvdyk7CisKICAgICBSRUNUIHJjQ2xpZW50Owog
ICAgIEdldENsaWVudFJlY3QoaE1haW5XbmQsICZyY0NsaWVudCk7Ci0gICAgTW92ZVdpbmRvdyho
QmFja0J1dHRvblduZCwgMCwgMCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJMQkFSX0hFSUdIVCwg
VFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgQ09OVFJPTEJVVFRPTl9X
SURUSCwgMCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAg
TW92ZVdpbmRvdyhoVVJMQmFyV25kLCBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgcmNDbGll
bnQucmlnaHQsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coZ1ZpZXdXaW5k
b3csIDAsIFVSTEJBUl9IRUlHSFQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBV
UkxCQVJfSEVJR0hULCBUUlVFKTsKKworICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVS
TEJBUl9IRUlHSFQ7CisgICAgaW50IHdpZHRoID0gc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9O
X1dJRFRIOworCisgICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhl
aWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAs
IHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgd2lkdGgg
KiAyLCAwLCByY0NsaWVudC5yaWdodCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KGdW
aWV3V2luZG93LCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBo
ZWlnaHQsIFRSVUUpOworCisgICAgaWYgKCFoVVJMRm9udCkgeworICAgICAgICBoVVJMRm9udCA9
IDo6Q3JlYXRlRm9udChzY2FsZUZhY3RvciAqIDE4LCAwLCAwLCAwLCBGV19OT1JNQUwsIEZBTFNF
LCBGQUxTRSwgRkFMU0UsIERFRkFVTFRfQ0hBUlNFVCwKKyAgICAgICAgICAgIE9VVF9UVF9PTkxZ
X1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywgQU5USUFMSUFTRURfUVVBTElUWSwgRkZfRE9O
VENBUkUsIEwiVGltZXMgTmV3IFJvbWFuIik7CisgICAgfQorCisgICAgOjpTZW5kTWVzc2FnZSho
VVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRGT05UKSwgcmVpbnRlcnByZXRfY2Fz
dDxXUEFSQU0+KGhVUkxGb250KSwgVFJVRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN1YmNsYXNzRm9y
TGF5ZXJlZFdpbmRvdygpCkBAIC0xMzIsMTAgKzE1NSwxMiBAQCBzdGF0aWMgdm9pZCBjb21wdXRl
RnVsbERlc2t0b3BGcmFtZSgpCiAgICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9H
RVRXT1JLQVJFQSwgMCwgc3RhdGljX2Nhc3Q8dm9pZCo+KCZkZXNrdG9wKSwgMCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3JGb3JX
aW5kb3coMCk7CisKICAgICBzX3dpbmRvd1Bvc2l0aW9uLnggPSAwOwogICAgIHNfd2luZG93UG9z
aXRpb24ueSA9IDA7Ci0gICAgc193aW5kb3dTaXplLmN4ID0gZGVza3RvcC5yaWdodCAtIGRlc2t0
b3AubGVmdDsKLSAgICBzX3dpbmRvd1NpemUuY3kgPSBkZXNrdG9wLmJvdHRvbSAtIGRlc2t0b3Au
dG9wOworICAgIHNfd2luZG93U2l6ZS5jeCA9IHNjYWxlRmFjdG9yICogKGRlc2t0b3AucmlnaHQg
LSBkZXNrdG9wLmxlZnQpOworICAgIHNfd2luZG93U2l6ZS5jeSA9IHNjYWxlRmFjdG9yICogKGRl
c2t0b3AuYm90dG9tIC0gZGVza3RvcC50b3ApOwogfQogCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJ
TlNUQU5DRSBkbGxJbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQpCkBAIC00MjEsMTMgKzQ0
NiwxMyBAQCBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UCiAgICAgICAg
ICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNwYXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVn
aW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKICAgICAgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUg
cmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNl
ZSB3aGF0J3MKICAgICAgICAgICAgIC8vIHVuZGVyIHRoZSBtb3VzZS4gSG93ZXZlciwgZm9yIHRl
c3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4gYXJiaXRyYXJ5Ci0gICAgICAgICAgICAvLyAz
MCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBw
aW5nIGxvY2F0aW9uLgorICAgICAgICAgICAgLy8gMzAgbG9naWNhbCBwaXhlbCBiYW5kIGF0IHRo
ZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgogICAg
ICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwg
cmV0dXJuIEhUX0NBUFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KICAgICAgICAgICAg
IC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5v
cm1hbCB3aW5kb3cuCiAgICAgICAgICAgICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOwogCi0gICAg
ICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBkcmFnQmFy
SGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5IDwgd2luZG93
LnRvcCArIChkcmFnQmFySGVpZ2h0ICogZ1dpbkxhdW5jaGVyLT5kZXZpY2VTY2FsZUZhY3Rvcigp
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkocmV2aXNpb24gMTg3
MDQ5KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlz
dGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNjEsNiArNjEsOCBAQCBXaW5MYXVuY2hl
cjo6V2luTGF1bmNoZXIoSFdORCBtYWluV25kLCBICiAKIEhSRVNVTFQgV2luTGF1bmNoZXI6Omlu
aXQoKQogeworICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CisKICAgICBIUkVTVUxUIGhy
ID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJWaWV3LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQdHIoKSkpOwog
ICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CkBAIC00NzgsMyArNDgwLDEw
IEBAIHZvaWQgV2luTGF1bmNoZXI6Onpvb21PdXQoKQogCiAgICAgd2ViQWN0aW9ucy0+em9vbVBh
Z2VPdXQobnVsbHB0cik7CiB9CisKK3ZvaWQgV2luTGF1bmNoZXI6OnVwZGF0ZURldmljZVNjYWxl
RmFjdG9yKCkKK3sKKyAgICBIREMgZGMgPSA6OkdldERDKG1faE1haW5XbmQpOworICAgIG1fZGV2
aWNlU2NhbGVGYWN0b3IgPSA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7
CisgICAgOjpSZWxlYXNlREMobV9oTWFpblduZCwgZGMpOworfQpJbmRleDogVG9vbHMvV2luTGF1
bmNoZXIvV2luTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5M
YXVuY2hlci5oCShyZXZpc2lvbiAxODcwNDkpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVu
Y2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB6
b29tSW4oKTsKICAgICB2b2lkIHpvb21PdXQoKTsKIAorICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKCkgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQorICAgIHZvaWQgdXBkYXRlRGV2
aWNlU2NhbGVGYWN0b3IoKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9y
eUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOwogCkBAIC0xMTUsNSArMTE4LDYgQEAgcHJpdmF0ZToK
ICAgICBIV05EIG1faE1haW5XbmQ7CiAgICAgSFdORCBtX2hVUkxCYXJXbmQ7CiAKKyAgICBmbG9h
dCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMS4wZiB9OwogICAgIGJvb2wgbV91c2VMYXllcmVkV2Vi
VmlldzsKIH07CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAkocmV2
aXNpb24gMTg3MDQ5KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDkgQEAgcHJvdGVjdGVkOgogICAgIEhSRVNVTFQg
dXBkYXRlQWRkcmVzc0JhcihJV2ViVmlldyYpOwogCiBwcml2YXRlOgotICAgIEhXTkQgbV9oVVJM
QmFyV25kOwotICAgIFVMT05HIG1fcmVmQ291bnQ7Ci0gICAgV2luTGF1bmNoZXIqIG1fY2xpZW50
OworICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgMCB9OworICAgIEhHRElPQkogbV9VUkxCYXJGb250
IHsgMCB9OworICAgIEhHRElPQkogbV9vbGRGb250IHsgMCB9OworICAgIFVMT05HIG1fcmVmQ291
bnQgeyAwIH07CisgICAgV2luTGF1bmNoZXIqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogfTsKSW5k
ZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dp
bkxhdW5jaGVyL1dpbk1haW4uY3BwCShyZXZpc2lvbiAxODcwNDkpCisrKyBUb29scy9XaW5MYXVu
Y2hlci9XaW5NYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTAgKzY1LDEyIEBAIGludCBX
SU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UKICAgICAvLyBJbml0IENPTQogICAg
IE9sZUluaXRpYWxpemUobnVsbHB0cik7CiAKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yRm9yV2luZG93KDApOworCiAgICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldykg
ewogICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIEwiVHlwZSBVUkwg
SGVyZSIsCiAgICAgICAgICAgICBXU19PVkVSTEFQUEVEV0lORE9XIHwgV1NfVklTSUJMRSB8IFdT
X0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgCi0gICAgICAgICAgICBzX3dpbmRv
d1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSwgc193aW5k
b3dTaXplLmN4LCBVUkxCQVJfSEVJR0hULAorICAgICAgICAgICAgc2NhbGVGYWN0b3IgKiBzX3dp
bmRvd1Bvc2l0aW9uLngsIHNjYWxlRmFjdG9yICogKHNfd2luZG93UG9zaXRpb24ueSArIHNfd2lu
ZG93U2l6ZS5jeSksIHNjYWxlRmFjdG9yICogc193aW5kb3dTaXplLmN4LCBzY2FsZUZhY3RvciAq
IFVSTEJBUl9IRUlHSFQsCiAgICAgICAgICAgICAwLCAwLCBoSW5zdCwgMCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaE1haW5XbmQgPSBDcmVhdGVXaW5kb3coc3pXaW5kb3dDbGFzcywgc3pUaXRs
ZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKQEAgLTc4LDggKzgwLDggQEAgaW50IFdJTkFQSSB3V2lu
TWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRQogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAg
ICAgICAgIGhCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8IiwgV1Nf
Q0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBo
SW5zdCwgMCk7Ci0gICAgICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVU
VE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIENPTlRST0xCVVRU
T05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgICAgIGhVUkxC
YXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwg
V1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBDT05UUk9MQlVUVE9OX1dJRFRI
ICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKyAgICAgICAgaEZvcndhcmRC
dXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJ
U0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAs
IDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVX
aW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNf
TEVGVCB8IEVTX0FVVE9WU0NST0xMLCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEgg
KiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwogCiAgICAgICAgIFNob3dXaW5k
b3coaE1haW5XbmQsIG5DbWRTaG93KTsKICAgICAgICAgVXBkYXRlV2luZG93KGhNYWluV25kKTsK
QEAgLTkzLDcgKzk1LDExIEBAIGludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFO
Q0UKIAogICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOwogCi0gICAgUkVDVCBjbGllbnRSZWN0ID0g
eyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlv
bi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUu
Y3kgfTsKKyAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KGhNYWluV25k
LCAmY2xpZW50UmVjdCk7CisKKyAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KQorICAgICAgICBj
bGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193
aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBz
X3dpbmRvd1NpemUuY3kgfTsKIAogICAgIFdpbkxhdW5jaGVyV2ViSG9zdCogd2ViSG9zdCA9IG51
bGxwdHI7CiAKSW5kZXg6IFRvb2xzL3dpbi9ETExMYXVuY2hlci9ETExMYXVuY2hlck1haW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3dpbi9ETExMYXVuY2hlci9ETExMYXVuY2hlck1haW4uY3Bw
CShyZXZpc2lvbiAxODcwNDkpCisrKyBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJN
YWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw5IEBAIGludCBXSU5BUEkgd1dp
bk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKICAgICBfc2V0X0ZNQTNfZW5hYmxlKDApOwogI2Vu
ZGlmCiAKKyAgICBCT09MIGRpZEl0ID0gU2V0UHJvY2Vzc0RQSUF3YXJlKCk7CisgICAgX0FTU0VS
VChkaWRJdCk7CisKICNpZmRlZiBfQ1JUREJHX01BUF9BTExPQwogICAgIF9DcnRTZXRSZXBvcnRG
aWxlKF9DUlRfV0FSTiwgX0NSVERCR19GSUxFX1NUREVSUik7CiAgICAgX0NydFNldFJlcG9ydE1v
ZGUoX0NSVF9XQVJOLCBfQ1JUREJHX01PREVfRklMRSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257235</attachid>
            <date>2015-07-21 18:38:42 -0700</date>
            <delta_ts>2015-07-22 09:27:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150721185135.patch</filename>
            <type>text/plain</type>
            <size>35873</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE1LTA3LTIxICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBw
cm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
MTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3Mg
dG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxp
bmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclRoaWNrbmVz
c0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxi
YXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1l
Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwOiBVcGRh
dGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50CisgICAgICAgIGNvb3JkaW5hdGVzIGJhc2Vk
IG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKwogMjAxNS0wNy0yMSAgTWF0dGhldyBEYWl0
ZXIgIDxtZGFpdGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBvc2VkIG1ldGhvZCB0byBxdWVy
eSBkZXZpY2UgYnkgVUlECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZv
cm1Nb3VzZUV2ZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkocmV2aXNpb24gMTg3MTQzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
Nyw4ICsyNywxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgogCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogCkBA
IC0zNiw5ICszOCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgSElHSF9CSVRf
TUFTS19TSE9SVCAweDgwMDAKIAorc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKEhXTkQg
d2luZG93KQoreworICAgIEhXbmREQyBkYyh3aW5kb3cpOworICAgIHJldHVybiA6OkdldERldmlj
ZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7Cit9CisKIHN0YXRpYyBJbnRQb2ludCBwb3Np
dGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBQT0lOVCBwb2lu
dCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSl9OworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisgICAgcG9pbnQueCA9
IGNsYW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0b3IpOworICAgIHBvaW50LnkgPSBjbGFt
cFRvPGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1l
V2luLmNwcAkocmV2aXNpb24gMTg3MTQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1Njcm9sbGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lV2luLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJMb2NhbFdpbmRvd3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCkBAIC0xMDcsMTQgKzEwOCwyMiBAQCBTY3JvbGxiYXJUaGVtZVdpbjo6flNjcm9sbGJhclRo
ZW1lV2luKCkKIHsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCitzdGF0aWMgaW50IHNjcm9sbGJhclRoaWNrbmVzc0lu
UGl4ZWxzKCkKIHsKICAgICBzdGF0aWMgaW50IHRoaWNrbmVzczsKICAgICBpZiAoIXRoaWNrbmVz
cykKICAgICAgICAgdGhpY2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7
CisKICAgICByZXR1cm4gdGhpY2tuZXNzOwogfQogCitpbnQgU2Nyb2xsYmFyVGhlbWVXaW46OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3sKKyAgICBIV25kREMgZGMo
MCk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSA5Ni4wZiAvIDo6R2V0RGV2aWNlQ2FwcyhkYywg
TE9HUElYRUxTWCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50PihzY2FsZUZhY3RvciAqIHNjcm9s
bGJhclRoaWNrbmVzc0luUGl4ZWxzKCkpOworfQorCiB2b2lkIFNjcm9sbGJhclRoZW1lV2luOjp0
aGVtZUNoYW5nZWQoKQogewogICAgIGlmICghc2Nyb2xsYmFyVGhlbWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCShyZXZpc2lvbiAxODcx
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlIDx3
aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtMzYsMTYgKzM3LDI4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNkZWZpbmUgSElHSF9CSVRfTUFTS19TSE9SVCAweDgwMDAKICNk
ZWZpbmUgU1BJX0dFVFdIRUVMU0NST0xMQ0hBUlMgMHgwMDZDCiAKK3N0YXRpYyBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcihIV05EIHdpbmRvdykKK3sKKyAgICBIV25kREMgZGMod2luZG93KTsKKyAg
ICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBmOworfQorCiBz
dGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JFdmVudChIV05EIGhXbmQsIExQQVJBTSBsUGFyYW0p
CiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFNKGxQYXJhbSksIEdFVF9ZX0xQQVJB
TShsUGFyYW0pfTsKICAgICBTY3JlZW5Ub0NsaWVudChoV25kLCAmcG9pbnQpOworICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisgICAgcG9pbnQueCA9IGNs
YW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0b3IpOworICAgIHBvaW50LnkgPSBjbGFtcFRv
PGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKIHN0
YXRpYyBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFNIGxQ
YXJhbSkKIHsKICAgICBQT0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lf
TFBBUkFNKGxQYXJhbSl9OworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0
b3IoaFduZCk7CisgICAgcG9pbnQueCA9IGNsYW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0
b3IpOworICAgIHBvaW50LnkgPSBjbGFtcFRvPGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsK
ICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKQEAgLTc3LDExICs5MCwxNCBAQCBQbGF0Zm9ybVdoZWVs
RXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAKICAgICAvLyBHbG9iYWwgUG9zaXRpb24gaXMg
anVzdCB4LCB5IGxvY2F0aW9uIG9mIGV2ZW50CiAgICAgUE9JTlQgcG9pbnQgPSB7bG9jYXRpb24u
eCgpLCBsb2NhdGlvbi55KCl9OworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmlj
ZVNjYWxlRmFjdG9yKGhXbmQpOwogICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBwb2ludDsKKyAgICBt
X2dsb2JhbFBvc2l0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7CiAKICAgICAv
LyBQb3NpdGlvbiBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIHRvIG91ciBjbGllbnQKICAgICBTY3Jl
ZW5Ub0NsaWVudChoV25kLCAmcG9pbnQpOwogICAgIG1fcG9zaXRpb24gPSBwb2ludDsKKyAgICBt
X3Bvc2l0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7CiB9CiAKIFBsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQgaFduZCwgV1BBUkFNIHdQYXJhbSwg
TFBBUkFNIGxQYXJhbSwgYm9vbCBpc01vdXNlSFdoZWVsKQpAQCAtOTAsNiArMTA2LDggQEAgUGxh
dGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogICAgICwgbV9nbG9iYWxQb3Np
dGlvbihnbG9iYWxQb3NpdGlvbkZvckV2ZW50KGhXbmQsIGxQYXJhbSkpCiAgICAgLCBtX2RpcmVj
dGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKIHsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworCiAgICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3Vs
ZCB3ZSBzY3JvbGwgcGVyIGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCiAgICAg
Ly8gY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5
b3UgZ28gdGhyb3VnaCB0aGUKICAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4g
IElFIDcgaXMgfjUwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQpAQCAtOTcsOCArMTE1LDgg
QEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogICAgIC8vIHNtb290
aGluZyBhbGdvcml0aG0gb24gc2Nyb2xsaW5nLCBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzbGlnaHRs
eSBsYXJnZXIKICAgICAvLyBzY3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBqZXJreS4gIEhl
cmUgd2UgdXNlIDEwMCBweCBwZXIgdGhyZWUgbGluZXMKICAgICAvLyAodGhlIGRlZmF1bHQgc2Ny
b2xsIGFtb3VudCBvbiBXaW5kb3dzIGlzIHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KLSAg
ICBzdGF0aWMgY29uc3QgZmxvYXQgY1Njcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAz
LjBmOwotICAgIGZsb2F0IGRlbHRhID0gR0VUX1dIRUVMX0RFTFRBX1dQQVJBTSh3UGFyYW0pIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KFdIRUVMX0RFTFRBKTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQg
Y1Njcm9sbGJhclBpeGVsc1BlckxpbmUgPSBzY2FsZUZhY3RvciAqIDEwMC4wZiAvIDMuMGY7Cisg
ICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJhbSkgLyAoc2NhbGVG
YWN0b3IgKiBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpKTsKICAgICBpZiAoaXNNb3Vz
ZUhXaGVlbCkgewogICAgICAgICAvLyBXaW5kb3dzIGlzIDwtLSAtLysgLS0+LCBXZWJLaXQgd2Fu
dHMgPC0tICsvLSAtLT4sIHNvIHdlIG5lZ2F0ZQogICAgICAgICAvLyB8ZGVsdGF8IGFmdGVyIHNh
dmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgb24gdGhlIHdoZWVsIHRpY2sgbWVtYmVyLgpJbmRleDog
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MTQzKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTUtMDctMjEgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50
IHByb3BlciBIaWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzIxNTU4MjY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBU
YWtlIGRldmljZSBzY2FsZSBmYWN0b3IgaW50bworICAgICAgICBhY2NvdW50IHdoZW4gZmlyc3Qg
bG9hZGluZyB0aGUgcGFnZS4KKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJG
cmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQpOiBBY2NvdW50IGZvciBkZXZpY2Ugc2Nh
bGluZyBmYWN0b3Igd2hlbiBkcmF3aW5nLgorICAgICAgICAoV2ViRnJhbWU6OnBhaW50U2Nyb2xs
Vmlld1JlY3RUb0NvbnRleHRBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy5jcHA6
IEFkanVzdCB2YXJpb3VzIG1ldGhvZHMgdG8gdGFrZSB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciBp
bnRvIGFjY291bnQKKyAgICAgICAgd2hlbiBwcm9jZXNzaW5nIGNvbnRlbnQuCisgICAgICAgIChX
ZWJWaWV3OjpyZXBhaW50KToKKyAgICAgICAgKFdlYlZpZXc6OmFkZFRvRGlydHlSZWdpb24pOgor
ICAgICAgICAoV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYlZpZXc6
OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdl
YlZpZXc6Omdlc3R1cmVOb3RpZnkpOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisgICAg
ICAgIChXZWJWaWV3OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMpOgorICAgICAgICAoV2ViVmlldzo6
cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MpOgorICAgICAgICAoV2ViVmlldzo6aW5pdGlhbGl6
ZVRvb2xUaXBXaW5kb3cpOgorICAgICAgICAoV2ViVmlldzo6Z2VuZXJhdGVTZWxlY3Rpb25JbWFn
ZSk6CisgICAgICAgIChXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYlZpZXc6
OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50QXRQb2ludCk6CisgICAgICAg
IChXZWJWaWV3OjpmcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUpOgorICAgICAgICAoV2ViVmlldzo6
c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdl
YlZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJWaWV3OjpwcmVwYXJlQ2Fu
ZGlkYXRlV2luZG93KToKKyAgICAgICAgKFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlv
bik6CisgICAgICAgIChXZWJWaWV3OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAg
ICAgKFdlYlZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViVmlldzo6Zmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKiBXZWJWaWV3Lmg6CisKIDIw
MTUtMDctMjEgIFN1bmdtYW5uIENobyAgPHN1bmdtYW5uLmNob0BuYXZlcmNvcnAuY29tPgogCiAg
ICAgICAgIFtXaW5dIEFkZCBuZWVkVG91Y2hFdmVudHMoKSBzdHViIHRvIFdlYkNocm9tZUNsaWVu
dC5oIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQgd2l0aCBFTkFCTEVfVE9VQ0hfRVZFTlRTPU9OCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxODcxNDMpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw2ICszMzYsOCBAQCBI
UkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29uCiAgICAgZGlydHlSZWN0LnNl
dEhlaWdodChoZWlnaHQpOwogICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKICAgICBnYy50cmFuc2xh
dGUoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHdlYlZp
ZXcoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBnYy5zY2FsZShXZWJDb3JlOjpGbG9hdFNp
emUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgdmlldy0+cGFpbnRDb250ZW50cygm
Z2MsIHJlY3QpOwogICAgIGdjLnJlc3RvcmUoKTsKIApAQCAtMzYwLDYgKzM2Miw4IEBAIEhSRVNV
TFQgV2ViRnJhbWU6OnBhaW50U2Nyb2xsVmlld1JlY3RUb0MKICAgICBnYy5zYXZlKCk7CiAgICAg
SW50UmVjdCBkaXJ0eVJlY3QocmVjdCk7CiAgICAgZGlydHlSZWN0Lm1vdmUoLXB0LngsIC1wdC55
KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHdlYlZpZXcoKS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KTsKKyAgICBnYy5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFj
dG9yKSk7CiAgICAgdmlldy0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwogICAgIGdjLnJlc3RvcmUo
KTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE4NzE0MykKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjEsOCArODIxLDEx
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Y2xvc2UKICAgICByZXR1cm4g
U19PSzsKIH0KIAotdm9pZCBXZWJWaWV3OjpyZXBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHdpbmRvd1JlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJl
cGFpbnRDb250ZW50T25seSkKK3ZvaWQgV2ViVmlldzo6cmVwYWludChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBsb2dpY2FsV2luZG93UmVjdCwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1l
ZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQogeworICAgIFdlYkNvcmU6OkludFJlY3Qg
d2luZG93UmVjdChsb2dpY2FsV2luZG93UmVjdCk7CisgICAgd2luZG93UmVjdC5zY2FsZShkZXZp
Y2VTY2FsZUZhY3RvcigpKTsKKwogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkg
ewogICAgICAgICAvLyBUaGUgY29udGVudENoYW5nZWQsIGltbWVkaWF0ZSwgYW5kIHJlcGFpbnRD
b250ZW50T25seSBwYXJhbWV0ZXJzIGFyZSBhbGwgYmFzZWQgb24gYSBub24tCiAgICAgICAgIC8v
IGNvbXBvc2l0aW5nIHBhaW50aW5nL3Njcm9sbGluZyBtb2RlbC4KQEAgLTkyMCwxMCArOTIzLDE5
IEBAIHZvaWQgV2ViVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihHRElPYmplY3QKICAgICAgICAgbV91
aURlbGVnYXRlUHJpdmF0ZS0+d2ViVmlld0RpZEludmFsaWRhdGUodGhpcyk7CiB9CiAKLXZvaWQg
V2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgZHgs
IGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KQordm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFt
ZVZpZXcsIGludCBsb2dpY2FsRHgsIGludCBsb2dpY2FsRHksIGNvbnN0IEludFJlY3QmIGxvZ2lj
YWxTY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbENsaXBSZWN0KQogewogICAg
IG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKIAorICAgIC8vIERpbWVuc2lvbnMgcGFzc2VkIHRvIHVz
IGZyb20gV2ViQ29yZSBhcmUgaW4gbG9naWNhbCB1bml0cy4gV2UgbXVzdCBjb252ZXJ0IHRvIHBp
eGVsczoKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAg
aW50IGR4ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9yICogbG9naWNhbER4KTsKKyAgICBpbnQg
ZHkgPSBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBsb2dpY2FsRHkpOworICAgIEludFJlY3Qg
c2Nyb2xsVmlld1JlY3QobG9naWNhbFNjcm9sbFZpZXdSZWN0KTsKKyAgICBzY3JvbGxWaWV3UmVj
dC5zY2FsZShzY2FsZUZhY3Rvcik7CisgICAgSW50UmVjdCBjbGlwUmVjdChsb2dpY2FsQ2xpcFJl
Y3QpOworICAgIGNsaXBSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKKwogICAgIGlmIChpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGRv
aW5nIHNvbWV0aGluZyBzbWFydGVyIGhlcmUsIGxpa2UgbW92aW5nIHRpbGVzIGFyb3VuZCBhbmQg
cGFpbnRpbmcKICAgICAgICAgLy8gYW55IG5ld2x5LWV4cG9zZWQgdGlsZXMuIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzUyNzE0PgpAQCAtOTUyLDcgKzk2NCw3IEBAIHZvaWQgV2ViVmlldzo6c2Nyb2xs
QmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICBIV25kREMgd2luZG93REMobV92aWV3V2luZG93KTsK
ICAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMo
d2luZG93REMpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1h
cERDLmdldCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0KCkpOwotICAgIAorCiAgICAgLy8g
U2Nyb2xsIHRoZSBiaXRtYXAuCiAgICAgUkVDVCBzY3JvbGxSZWN0V2luKHNjcm9sbFZpZXdSZWN0
KTsKICAgICBSRUNUIGNsaXBSZWN0V2luKGNsaXBSZWN0KTsKQEAgLTk4Miw4ICs5OTQsMTEgQEAg
dm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJgogCiAgICAgZGVsZXRlQmFj
a2luZ1N0b3JlKCk7CiAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodG9wTGV2ZWxG
cmFtZSgpKSkKLSAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnJlc2l6ZShuZXdTaXplKTsKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkgeworICAgICAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplID0gbmV3U2l6ZTsKKyAgICAgICAgbG9naWNhbFNpemUuc2Nh
bGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBjb3JlRnJhbWUtPnZpZXco
KS0+cmVzaXplKGxvZ2ljYWxTaXplKTsKKyAgICB9CiAKICNpZiBVU0UoQ0EpCiAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkKQEAgLTEyNTAsNyArMTI2NSwxMSBAQCB2b2lkIFdlYlZpZXc6OnBhaW50
SW50b0JhY2tpbmdTdG9yZShGcmFtCiAKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+
ZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7
CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAg
ICAgZ2Muc2F2ZSgpOworICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNj
YWxlRmFjdG9yKSk7CiAgICAgICAgIGZyYW1lVmlldy0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOwor
ICAgICAgICBnYy5yZXN0b3JlKCk7CiAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9ycykK
ICAgICAgICAgICAgIGdjLmZpbGxSZWN0KGRpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBDb21wb3NpdGVEaWZmZXJlbmNlKTsKICAgICB9CkBAIC0xNDIyLDkgKzE0
NDEsMTMgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogCiAgICAg
bFBhcmFtID0gTUFLRUxQQVJBTShjb29yZHMueCwgY29vcmRzLnkpOwogCisgICAgLy8gQ29udmVy
dCBjb29yZGluYXRlcyB0byBsb2dpY2FsIHBpeGVscworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRQb2ludCBsb2dpY2FsQ29vcmRzKGNvb3Jkcy54
IC8gc2NhbGVGYWN0b3IsIGNvb3Jkcy55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgbV9wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS5jbGVhckNvbnRleHRNZW51KCk7CiAKLSAgICBJbnRQb2lu
dCBkb2N1bWVudFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKGNvb3JkcykpOworICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQobV9wYWdlLT5tYWluRnJh
bWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMobG9naWNhbENvb3JkcykpOwogICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRU
ZXN0UmVzdWx0QXRQb2ludChkb2N1bWVudFBvaW50KTsKICAgICBGcmFtZSogdGFyZ2V0RnJhbWUg
PSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCktPmRvY3VtZW50KCkuZnJhbWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogCkBAIC0xNDQ5LDcgKzE0NzIsOCBAQCBib29sIFdlYlZpZXc6Omhh
bmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRN
ZW51Q29udHJvbGxlci5oaXRUZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFt
ZSgpKSk7CisgICAgSW50UG9pbnQgbG9naWNhbFBvaW50ID0gdmlldy0+Y29udGVudHNUb1dpbmRv
dyhjb250ZXh0TWVudUNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5u
ZXJOb2RlRnJhbWUoKSk7CisgICAgUE9JTlQgcG9pbnQgPSB7IGxvZ2ljYWxQb2ludC54KCkgKiBz
Y2FsZUZhY3RvciwgbG9naWNhbFBvaW50LnkoKSAqIHNjYWxlRmFjdG9yIH07CiAKICAgICAvLyBU
cmFuc2xhdGUgdGhlIHBvaW50IHRvIHNjcmVlbiBjb29yZGluYXRlcwogICAgIGlmICghOjpDbGll
bnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZwb2ludCkpCkBAIC0xNjQ0LDYgKzE2NjgsMTAgQEAg
Ym9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3UGFyYQogCiAgICAgYm9vbCBoaXRT
Y3JvbGxiYXIgPSBmYWxzZTsKICAgICBQT0lOVCBnZXN0dXJlQmVnaW5Qb2ludCA9IHtnbi0+cHRz
TG9jYXRpb24ueCwgZ24tPnB0c0xvY2F0aW9uLnl9OworCisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIEludFBvaW50IGxvZ2ljYWxHZXN0dXJlQmVnaW5Q
b2ludChnZXN0dXJlQmVnaW5Qb2ludC54IC8gc2NhbGVGYWN0b3IsIGdlc3R1cmVCZWdpblBvaW50
LnkgLyBzY2FsZUZhY3Rvcik7CisKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RS
ZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQp
OwogICAgIGZvciAoRnJhbWUqIGNoaWxkRnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgY2hp
bGRGcmFtZTsgY2hpbGRGcmFtZSA9IEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2Rl
KG1fZ2VzdHVyZVRhcmdldE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gY2hpbGRGcmFtZS0+dmlldygpOwpAQCAtMTY1Niw3ICsxNjg0LDcgQEAgYm9vbCBXZWJW
aWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3UGFyYQogICAgICAgICBpZiAoIWxheWVyKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3
LT5zY3JlZW5Ub0NvbnRlbnRzKGdlc3R1cmVCZWdpblBvaW50KSk7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhsb2dpY2FsR2VzdHVyZUJl
Z2luUG9pbnQpKTsKICAgICAgICAgbGF5ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAg
ICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKIApAQCAtMTc2
MSwxMyArMTc4OSwxNSBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBB
CiAgICAgICAgIH0KIAogICAgICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsZWRBcmVhID0gMDsK
KyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAg
ICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0
YVkgKiBzY2FsZUZhY3Rvcik7CiAKICAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8
ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBXZSBt
aWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMK
LSAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShJbnRTaXplKC1kZWx0YVgs
IC1kZWx0YVkpKTsKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dp
Y2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52
aWV3KCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSwgV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEpOworICAgICAg
ICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNj
cm9sbERlbHRhLCBXZWJDb3JlOjpSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCwgJnNj
cm9sbGVkQXJlYSk7CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkg
JiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkp
IHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxl
KTsKQEAgLTIyMDYsNyArMjIzNiwxMSBAQCB2b2lkIFdlYlZpZXc6OnNldFNob3VsZEludmVydENv
bG9ycyhib29sCiAKICAgICBSRUNUIHdpbmRvd1JlY3QgPSB7MH07CiAgICAgZnJhbWVSZWN0KCZ3
aW5kb3dSZWN0KTsKLSAgICByZXBhaW50KHdpbmRvd1JlY3QsIHRydWUsIHRydWUpOworCisgICAg
Ly8gcmVwYWludCBleHBlY3RzIGxvZ2ljYWwgcGl4ZWxzLCBzbyByZXNjYWxlIGhlcmUuCisgICAg
SW50UmVjdCBsb2dpY2FsUmVjdCh3aW5kb3dSZWN0KTsKKyAgICBsb2dpY2FsUmVjdC5zY2FsZSgx
LjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgcmVwYWludChsb2dpY2FsUmVjdCwgdHJ1
ZSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3Mo
KQpAQCAtMjc3NSwxMCArMjgwOSwxMyBAQCBib29sIFdlYlZpZXc6OnNob3VsZEluaXRpYWxpemVU
cmFja1BvaW50CiAgICAgcmV0dXJuIHNob3VsZENyZWF0ZVNjcm9sbGJhcnM7CiB9CiAKLUhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6aW5pdFdpdGhGcmFtZSggCi0gICAgLyogW2lu
XSAqLyBSRUNUIGZyYW1lLAotICAgIC8qIFtpbl0gKi8gQlNUUiBmcmFtZU5hbWUsCi0gICAgLyog
W2luXSAqLyBCU1RSIGdyb3VwTmFtZSkKK3N0YXRpYyBmbG9hdCBzY2FsZUZhY3RvckZyb21XaW5k
b3coSFdORCB3aW5kb3cpCit7CisgICAgSFduZERDIGRjKHdpbmRvdyk7CisgICAgcmV0dXJuIDo6
R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKK30KKworSFJFU1VMVCBXZWJW
aWV3Ojppbml0V2l0aEZyYW1lKFJFQ1QgZnJhbWUsIEJTVFIgZnJhbWVOYW1lLCBCU1RSIGdyb3Vw
TmFtZSkKIHsKICAgICBIUkVTVUxUIGhyID0gU19PSzsKIApAQCAtMjkxNiw3ICsyOTUzLDcgQEAg
dm9pZCBXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdpbmRvdygpCiAgICAgaW5mby51SWQgPSBy
ZWludGVycHJldF9jYXN0PFVJTlRfUFRSPihtX3ZpZXdXaW5kb3cpOwogCiAgICAgOjpTZW5kTWVz
c2FnZShtX3Rvb2xUaXBId25kLCBUVE1fQUREVE9PTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxMUEFS
QU0+KCZpbmZvKSk7Ci0gICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fU0VUTUFY
VElQV0lEVEgsIDAsIG1heFRvb2xUaXBXaWR0aCk7CisgICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xU
aXBId25kLCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIGNsYW1wVG88aW50PihtYXhUb29sVGlwV2lk
dGggKiBkZXZpY2VTY2FsZUZhY3RvcigpKSk7CiAKICAgICA6OlNldFdpbmRvd1BvcyhtX3Rvb2xU
aXBId25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUgfCBT
V1BfTk9BQ1RJVkFURSk7CiB9CkBAIC0zNjg3LDE3ICszNzI0LDE5IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6Z2VuZXIKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQorSFJF
U1VMVCBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQogewogICAgIFdlYkNvcmU6OkZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaXIgPSBmcmFtZS52aWV3KCktPmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3coaXIpOwogICAgIGlyLm1vdmUoLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zm
c2V0KCkud2lkdGgoKSwgLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOwot
ICAgIHJjLT5sZWZ0ID0gaXIueCgpOwotICAgIHJjLT50b3AgPSBpci55KCk7Ci0gICAgcmMtPmJv
dHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKTsKLSAgICByYy0+cmlnaHQgPSByYy0+bGVmdCAr
IGlyLndpZHRoKCk7CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgcmMtPmxlZnQgPSBpci54KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+dG9wID0g
aXIueSgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPmJvdHRvbSA9IHJjLT50b3AgKyBpci5oZWln
aHQoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5yaWdodCA9IHJjLT5sZWZ0ICsgaXIud2lkdGgo
KSAqIHNjYWxlRmFjdG9yOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzc0LDkgKzM4MTMs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmlzTG9hCiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAgICAgCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmVsZW1l
bnRBdFBvaW50KCAKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50LAotICAgICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIGVsZW1lbnREaWN0aW9uYXJ5KQorSFJF
U1VMVCBXZWJWaWV3OjplbGVtZW50QXRQb2ludChMUFBPSU5UIHBvaW50LCBJUHJvcGVydHlCYWcq
KiBlbGVtZW50RGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWVsZW1lbnREaWN0aW9uYXJ5KSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc5MCw2ICszODI3LDggQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZQogICAgICAgICByZXR1cm4gRV9GQUlM
OwogCiAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQtPngsIHBvaW50
LT55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rvcigp
OworICAgIHdlYkNvcmVQb2ludC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwogICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJlc3VsdCh3ZWJDb3JlUG9pbnQpOwogICAg
IGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJlc3VsdCA9IGZyYW1lLT5l
dmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCh3ZWJDb3JlUG9pbnQpOwpAQCAtNTMw
NiwzMiArNTM0NSwzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmZyYW1l
CiAgICAgcmV0dXJuIG1fZnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmNvcHlSZWZUbyhkKTsKIH0K
IAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzY3JvbGxPZmZzZXQoIAotICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdlYlZpZXc6OnNj
cm9sbE9mZnNldChMUFBPSU5UIG9mZnNldCkKIHsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKICAgICBJbnRTaXplIG9mZnNldEludFNpemUgPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBvZmZzZXRJbnRTaXplLnNj
YWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgb2Zmc2V0LT54ID0gb2Zmc2V0SW50U2l6
ZS53aWR0aCgpOwogICAgIG9mZnNldC0+eSA9IG9mZnNldEludFNpemUuaGVpZ2h0KCk7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2Ny
b2xsQnkoIAotICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdlYlZpZXc6
OnNjcm9sbEJ5KExQUE9JTlQgb2Zmc2V0KQogewogICAgIGlmICghb2Zmc2V0KQogICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zY3JvbGxC
eShJbnRTaXplKG9mZnNldC0+eCwgb2Zmc2V0LT55KSk7CisKKyAgICBJbnRTaXplIHNjcm9sbERl
bHRhKG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZSgxLjBmIC8g
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNj
cm9sbEJ5KHNjcm9sbERlbHRhKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoIAotICAgIC8qIFtyZXR2
YWxdW291dF0gKi8gTFBSRUNUIHJlY3QpCitIUkVTVUxUIFdlYlZpZXc6OnZpc2libGVDb250ZW50
UmVjdChMUFJFQ1QgcmVjdCkKIHsKICAgICBpZiAoIXJlY3QpCiAgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnQgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgdmlzaWJsZUNvbnRlbnQuc2Nh
bGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgcmVjdC0+bGVmdCA9IChMT05HKSB2aXNpYmxl
Q29udGVudC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcpIHZpc2libGVDb250ZW50LnkoKTsK
ICAgICByZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhYKCk7CkBAIC01Njg2
LDYgKzU3MzAsOCBAQCB2b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3coRnJhCiAg
ICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHRl
bXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisKICAgICBDQU5ESURBVEVGT1JNIGZvcm07CiAgICAgZm9ybS5kd0luZGV4ID0gMDsK
ICAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsKQEAgLTU5NDUsNiArNTk5MSw3IEBAIExS
RVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW8KICAgICAgICAgY2FyZXQgPSB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsK
ICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBjaGFy
UG9zLT5wdC54ID0gY2FyZXQueCgpOwogICAgIGNoYXJQb3MtPnB0LnkgPSBjYXJldC55KCk7CiAg
ICAgOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZjaGFyUG9zLT5wdCk7CkBAIC02NjIy
LDcgKzY2NjksNiBAQCB2b2lkIFdlYlZpZXc6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoCiAg
ICAgICAgICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7CiAg
ICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0U2l6ZShJbnRSZWN0KGNsaWVudFJlY3QpLnNp
emUoKSk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0K
ICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENoaWxkTGF5ZXIoUGxhdGZvcm1D
QUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV9iYWNraW5nTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkp
OwogCiAgICAgICAgICAgICAvLyBXZSBhcmVuJ3QgZ29pbmcgdG8gYmUgdXNpbmcgb3VyIGJhY2tp
bmcgc3RvcmUgd2hpbGUgd2UncmUgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKQEAgLTY3Nzks
NiArNjgyNSw4IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGkKIAog
ICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcChpbkNsaXApOworICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBjb250ZXh0LnNjYWxlKEZs
b2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICBmcmFtZS0+dmlldygpLT5w
YWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChpbkNsaXApKTsKICAgICBjb250ZXh0LnJl
c3RvcmUoKTsKIH0KQEAgLTcxMjIsNiArNzE3MCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViVmlldzo6Zmlyc3QKICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAgcmVzdWx0SW50UmVjdCA9IGZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAorICAgIHJlc3VsdEludFJlY3Quc2NhbGUo
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICByZXN1bHRSZWN0LT5sZWZ0ID0gcmVzdWx0SW50
UmVjdC54KCk7CiAgICAgcmVzdWx0UmVjdC0+dG9wID0gcmVzdWx0SW50UmVjdC55KCk7CiAgICAg
cmVzdWx0UmVjdC0+cmlnaHQgPSByZXN1bHRJbnRSZWN0LngoKSArIHJlc3VsdEludFJlY3Qud2lk
dGgoKTsKQEAgLTcxNzMsMTIgKzcyMjMsNiBAQCBIUkVTVUxUIFdlYlZpZXc6OmRpc3BhdGNoUGVu
ZGluZ0xvYWRSZXF1CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXN0YXRpYyBmbG9hdCBzY2FsZUZh
Y3RvckZyb21XaW5kb3coSFdORCB3aW5kb3cpCi17Ci0gICAgSFduZERDIGRjKHdpbmRvdyk7Ci0g
ICAgcmV0dXJuIDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKLX0KLQog
ZmxvYXQgV2ViVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX2N1
c3RvbURldmljZVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gMTg3
MTQzKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVudCBGdWxnaGFt
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTk4OCw2ICs5ODgsOSBAQCBwdWJsaWM6CiAg
ICAgLyogW291dCwgcmV0dmFsXSAqLyBSRUNUKiByZXN1bHRSZWN0KTsKIAogICAgIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgc2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoLyogW291dF0gKi8gVUlO
VCogbG9jYXRpb24sIC8qIFtvdXRdICovIFVJTlQqIGxlbmd0aCk7CisKKyAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRp
cGxpZXIoZmxvYXQgbXVsdGlwbGllciwgYm9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29t
TXVsdGlwbGllcihib29sIGlzVGV4dE9ubHkpOwpAQCAtMTAyNiw4ICsxMDI5LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc2hvdWxkSW52ZXJ0Q29sb3JzOwogICAgIHZvaWQgc2V0U2hvdWxkSW52
ZXJ0Q29sb3JzKGJvb2wpOwogCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsK
LQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNz
KCk7CiAgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlld1duZFByb2MoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwpJbmRleDogU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTg3MTQzKQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE3LDExICsxMDE3LDEzIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25U
b0MKIHsKICAgICBXZWJWaWV3KiB2aWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwogCi0gICAg
UkVDVCByZWN0OwotICAgIHZpZXctPmZyYW1lUmVjdCgmcmVjdCk7CisgICAgUkVDVCBwaXhlbFJl
Y3Q7CisgICAgdmlldy0+ZnJhbWVSZWN0KCZwaXhlbFJlY3QpOwogICAgIGJvb2wgdHJhbnNwYXJl
bnQgPSB2aWV3LT50cmFuc3BhcmVudCgpOwogICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRy
YW5zcGFyZW50ID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29sb3I6OndoaXRlOwotICAgIGNvcmUo
bV93ZWJGcmFtZSktPmNyZWF0ZVZpZXcoSW50UmVjdChyZWN0KS5zaXplKCksIGJhY2tncm91bmRD
b2xvciwgdHJhbnNwYXJlbnQpOworICAgIEludFJlY3QgbG9naWNhbEZyYW1lKHBpeGVsUmVjdCk7
CisgICAgbG9naWNhbEZyYW1lLnNjYWxlKDEuMGYgLyB2aWV3LT5kZXZpY2VTY2FsZUZhY3Rvcigp
KTsKKyAgICBjb3JlKG1fd2ViRnJhbWUpLT5jcmVhdGVWaWV3KGxvZ2ljYWxGcmFtZS5zaXplKCks
IGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpkaWRTYXZlVG9QYWdlQ2FjaGUoKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MTQzKQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTUtMDctMjEgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50
IHByb3BlciBIaWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzIxNTU4MjY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZSBXaW5MYXVuY2hlciB0byB0YWtlIGRldmljZSBzY2FsaW5nIGZhY3RvciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiBXaW5MYXVuY2hlci9Db21tb24uY3BwOgorICAgICAgICAo
cmVzaXplU3ViVmlld3MpOgorICAgICAgICAoc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KToKKyAg
ICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKToKKyAgICAgICAgKERsbE1haW4pOgorICAg
ICAgICAoV25kUHJvYyk6CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwOgor
ICAgICAgICAoV2luTGF1bmNoZXI6OmluaXQpOgorICAgICAgICAoV2luTGF1bmNoZXI6Onpvb21P
dXQpOgorICAgICAgICAoV2luTGF1bmNoZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKToKKyAg
ICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oOgorICAgICAgICAoV2luTGF1bmNoZXI6
OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlcldl
Ykhvc3QuY3BwOgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0Ojpsb2FkVVJMKToKKyAgICAg
ICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcik6
CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0Lmg6CisgICAgICAgICog
V2luTGF1bmNoZXIvV2luTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6CisgICAgICAgICog
d2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6
CisKIDIwMTUtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXhlZCBWTSBwb29sIGFsbG9jYXRpb24gc2hvdWxkIGhhdmUgYSByZXNlcnZlIGZvciBhbGxv
Y2F0aW9ucyB0aGF0IGNhbm5vdCBmYWlsCkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9Db21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJKHJldmlzaW9u
IDE4NzE0MykKKysrIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDggQEAgdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJs
ZQogSElOU1RBTkNFIGhJbnN0OwogSFdORCBoTWFpblduZDsKIEhXTkQgaFVSTEJhclduZDsKK0hH
RElPQkogaE9sZEZvbnQ7CitIR0RJT0JKIGhVUkxGb250OwogSFdORCBoQmFja0J1dHRvblduZDsK
IEhXTkQgaEZvcndhcmRCdXR0b25XbmQ7CiBIV05EIGhDYWNoZVduZDsKQEAgLTEwMSwxNyArMTAz
LDM4IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVIKIHN0YXRpYyB2
b2lkIGxvYWRVUkwoQlNUUiB1cmxCU3RyKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZVN0YXRpc3RpY3Mo
SFdORCBoRGxnKTsKIAorc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KEhX
TkQgd2luZG93KQoreworICAgIEhEQyBkYyA9IDo6R2V0REMod2luZG93KTsKKyAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciA9IDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4w
ZjsKKyAgICA6OlJlbGVhc2VEQyh3aW5kb3csIGRjKTsKKyAgICByZXR1cm4gZGV2aWNlU2NhbGVG
YWN0b3I7Cit9CisKIHN0YXRpYyB2b2lkIHJlc2l6ZVN1YlZpZXdzKCkKIHsKICAgICBpZiAoZ1dp
bkxhdW5jaGVyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSB8fCAhZ1ZpZXdXaW5kb3cpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3JGb3JX
aW5kb3coZ1ZpZXdXaW5kb3cpOworCiAgICAgUkVDVCByY0NsaWVudDsKICAgICBHZXRDbGllbnRS
ZWN0KGhNYWluV25kLCAmcmNDbGllbnQpOwotICAgIE1vdmVXaW5kb3coaEJhY2tCdXR0b25XbmQs
IDAsIDAsIENPTlRST0xCVVRUT05fV0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1v
dmVXaW5kb3coaEZvcndhcmRCdXR0b25XbmQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIENPTlRS
T0xCVVRUT05fV0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaFVS
TEJhclduZCwgQ09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBVUkxC
QVJfSEVJR0hULCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBVUkxCQVJf
SEVJR0hULCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gVVJMQkFSX0hFSUdIVCwg
VFJVRSk7CisKKyAgICBpbnQgaGVpZ2h0ID0gc2NhbGVGYWN0b3IgKiBVUkxCQVJfSEVJR0hUOwor
ICAgIGludCB3aWR0aCA9IHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURUSDsKKworICAg
IE1vdmVXaW5kb3coaEJhY2tCdXR0b25XbmQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOwor
ICAgIE1vdmVXaW5kb3coaEZvcndhcmRCdXR0b25XbmQsIHdpZHRoLCAwLCB3aWR0aCwgaGVpZ2h0
LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KGhVUkxCYXJXbmQsIHdpZHRoICogMiwgMCwgcmNDbGll
bnQucmlnaHQsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhnVmlld1dpbmRvdywgMCwg
aGVpZ2h0LCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsK
KworICAgIGlmICghaFVSTEZvbnQpIHsKKyAgICAgICAgaFVSTEZvbnQgPSA6OkNyZWF0ZUZvbnQo
c2NhbGVGYWN0b3IgKiAxOCwgMCwgMCwgMCwgRldfTk9STUFMLCBGQUxTRSwgRkFMU0UsIEZBTFNF
LCBERUZBVUxUX0NIQVJTRVQsCisgICAgICAgICAgICBPVVRfVFRfT05MWV9QUkVDSVMsIENMSVBf
REVGQVVMVF9QUkVDSVMsIEFOVElBTElBU0VEX1FVQUxJVFksIEZGX0RPTlRDQVJFLCBMIlRpbWVz
IE5ldyBSb21hbiIpOworICAgIH0KKworICAgIDo6U2VuZE1lc3NhZ2UoaFVSTEJhclduZCwgc3Rh
dGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFNPihoVVJM
Rm9udCksIFRSVUUpOwogfQogCiBzdGF0aWMgdm9pZCBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3co
KQpAQCAtMTMyLDEwICsxNTUsMTIgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJh
bWUoKQogICAgIGlmICghOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV09SS0FSRUEsIDAs
IHN0YXRpY19jYXN0PHZvaWQqPigmZGVza3RvcCksIDApKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KDApOworCiAg
ICAgc193aW5kb3dQb3NpdGlvbi54ID0gMDsKICAgICBzX3dpbmRvd1Bvc2l0aW9uLnkgPSAwOwot
ICAgIHNfd2luZG93U2l6ZS5jeCA9IGRlc2t0b3AucmlnaHQgLSBkZXNrdG9wLmxlZnQ7Ci0gICAg
c193aW5kb3dTaXplLmN5ID0gZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcDsKKyAgICBzX3dp
bmRvd1NpemUuY3ggPSBzY2FsZUZhY3RvciAqIChkZXNrdG9wLnJpZ2h0IC0gZGVza3RvcC5sZWZ0
KTsKKyAgICBzX3dpbmRvd1NpemUuY3kgPSBzY2FsZUZhY3RvciAqIChkZXNrdG9wLmJvdHRvbSAt
IGRlc2t0b3AudG9wKTsKIH0KIAogQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgZGxsSW5z
dGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEKQpAQCAtNDIxLDEzICs0NDYsMTMgQEAgTFJFU1VM
VCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVAogICAgICAgICAgICAgLy8gRm9yIHRl
c3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lvbiB0byB1c2UgYXMg
YSBoYW5kbGUgZm9yCiAgICAgICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJpZ2h0IHdheSB0byBk
byB0aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUgd2hhdCdzCiAgICAg
ICAgICAgICAvLyB1bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
IHdlIGp1c3QgdXNlIGFuIGFyYml0cmFyeQotICAgICAgICAgICAgLy8gMzAgcGl4ZWwgYmFuZCBh
dCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4K
KyAgICAgICAgICAgIC8vIDMwIGxvZ2ljYWwgcGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2
aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4KICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4gdGhpcyBiYWQsIHJldHVybiBIVF9DQVBU
SU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCiAgICAgICAgICAgICAvLyB0cmVhdCB0aGlz
IHJlZ2lvbiBhcyBpZiBpdCB3ZXJlIHRoZSB0aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93Lgog
ICAgICAgICAgICAgaW50IHkgPSBISVdPUkQobFBhcmFtKTsKIAotICAgICAgICAgICAgaWYgKCh5
ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsgZHJhZ0JhckhlaWdodCkpCisgICAg
ICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyAoZHJhZ0Jh
ckhlaWdodCAqIGdXaW5MYXVuY2hlci0+ZGV2aWNlU2NhbGVGYWN0b3IoKSkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBIVENBUFRJT047CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIENhbGxX
aW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKSW5k
ZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHJldmlzaW9uIDE4NzE0MykKKysrIFRvb2xz
L1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAx
My0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2VsZXJhdG9yLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KQEAgLTYxLDYgKzYxLDggQEAgV2luTGF1bmNoZXI6OldpbkxhdW5jaGVy
KEhXTkQgbWFpblduZCwgSAogCiBIUkVTVUxUIFdpbkxhdW5jaGVyOjppbml0KCkKIHsKKyAgICB1
cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCiAgICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0
ZUluc3RhbmNlKENMU0lEX1dlYlZpZXcsIDAsIElJRF9JV2ViVmlldywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZtX3dlYlZpZXcuR2V0SW50ZXJmYWNlUHRyKCkpKTsKICAgICBpZiAoRkFJTEVE
KGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwpAQCAtNDc4LDMgKzQ4MCwxMCBAQCB2b2lkIFdpbkxh
dW5jaGVyOjp6b29tT3V0KCkKIAogICAgIHdlYkFjdGlvbnMtPnpvb21QYWdlT3V0KG51bGxwdHIp
OwogfQorCit2b2lkIFdpbkxhdW5jaGVyOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpCit7Cisg
ICAgSERDIGRjID0gOjpHZXREQyhtX2hNYWluV25kKTsKKyAgICBtX2RldmljZVNjYWxlRmFjdG9y
ID0gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBmOworICAgIDo6UmVsZWFz
ZURDKG1faE1haW5XbmQsIGRjKTsKK30KSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5j
aGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAkocmV2
aXNpb24gMTg3MTQzKQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkwLDYgKzkwLDkgQEAgcHVibGljOgogICAgIHZvaWQgem9vbUluKCk7CiAgICAg
dm9pZCB6b29tT3V0KCk7CiAKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIHsgcmV0dXJu
IG1fZGV2aWNlU2NhbGVGYWN0b3I7IH0KKyAgICB2b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9y
KCk7CisKIHByaXZhdGU6CiAgICAgc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJdGVtUHRyPiBtX2hp
c3RvcnlJdGVtczsKIApAQCAtMTE1LDUgKzExOCw2IEBAIHByaXZhdGU6CiAgICAgSFdORCBtX2hN
YWluV25kOwogICAgIEhXTkQgbV9oVVJMQmFyV25kOwogCisgICAgZmxvYXQgbV9kZXZpY2VTY2Fs
ZUZhY3RvciB7IDEuMGYgfTsKICAgICBib29sIG1fdXNlTGF5ZXJlZFdlYlZpZXc7CiB9OwpJbmRl
eDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgJKHJldmlzaW9uIDE4NzE0MykK
KysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIHVwZGF0ZUFkZHJlc3NC
YXIoSVdlYlZpZXcmKTsKIAogcHJpdmF0ZToKLSAgICBIV05EIG1faFVSTEJhclduZDsKLSAgICBV
TE9ORyBtX3JlZkNvdW50OwotICAgIFdpbkxhdW5jaGVyKiBtX2NsaWVudDsKKyAgICBIV05EIG1f
aFVSTEJhclduZCB7IDAgfTsKKyAgICBIR0RJT0JKIG1fVVJMQmFyRm9udCB7IDAgfTsKKyAgICBI
R0RJT0JKIG1fb2xkRm9udCB7IDAgfTsKKyAgICBVTE9ORyBtX3JlZkNvdW50IHsgMCB9OworICAg
IFdpbkxhdW5jaGVyKiBtX2NsaWVudCB7IG51bGxwdHIgfTsKIH07CkluZGV4OiBUb29scy9XaW5M
YXVuY2hlci9XaW5NYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5N
YWluLmNwcAkocmV2aXNpb24gMTg3MTQzKQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEwICs2NSwxMiBAQCBpbnQgV0lOQVBJIHdXaW5NYWlu
KEhJTlNUQU5DRSwgSElOU1RBTkNFCiAgICAgLy8gSW5pdCBDT00KICAgICBPbGVJbml0aWFsaXpl
KG51bGxwdHIpOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvckZv
cldpbmRvdygwKTsKKwogICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcpIHsKICAgICAgICAgaFVS
TEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCBMIlR5cGUgVVJMIEhlcmUiLAogICAgICAg
ICAgICAgV1NfT1ZFUkxBUFBFRFdJTkRPVyB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19M
RUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIAotICAgICAgICAgICAgc193aW5kb3dQb3NpdGlvbi54LCBz
X3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3ksIHNfd2luZG93U2l6ZS5jeCwgVVJM
QkFSX0hFSUdIVCwKKyAgICAgICAgICAgIHNjYWxlRmFjdG9yICogc193aW5kb3dQb3NpdGlvbi54
LCBzY2FsZUZhY3RvciAqIChzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kpLCBz
Y2FsZUZhY3RvciAqIHNfd2luZG93U2l6ZS5jeCwgc2NhbGVGYWN0b3IgKiBVUkxCQVJfSEVJR0hU
LAogICAgICAgICAgICAgMCwgMCwgaEluc3QsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGhN
YWluV25kID0gQ3JlYXRlV2luZG93KHN6V2luZG93Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQ
RURXSU5ET1csCkBAIC03OCw4ICs4MCw4IEBAIGludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNF
LCBISU5TVEFOQ0UKICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgICAgICBoQmFja0J1
dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPCIsIFdTX0NISUxEIHwgV1NfVklT
SUJMRSAgfCBCU19URVhULCAwLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwotICAg
ICAgICBoRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdT
X0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19URVhULCBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAw
LCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwotICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRl
V2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVT
X0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgQ09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAs
IGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3Jl
YXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgQlNfVEVY
VCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBoTWFpblduZCwg
MCwgaEluc3QsIDApOworICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIs
IDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRP
VlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwg
aE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKIAogICAgICAgICBTaG93V2luZG93KGhNYWluV25kLCBu
Q21kU2hvdyk7CiAgICAgICAgIFVwZGF0ZVdpbmRvdyhoTWFpblduZCk7CkBAIC05Myw3ICs5NSwx
MSBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAKICAgICBTZXRG
b2N1cyhoVVJMQmFyV25kKTsKIAotICAgIFJFQ1QgY2xpZW50UmVjdCA9IHsgc193aW5kb3dQb3Np
dGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24ueCArIHNfd2luZG93
U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5IH07CisgICAgUkVD
VCBjbGllbnRSZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChoTWFpblduZCwgJmNsaWVudFJlY3Qp
OworCisgICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldykKKyAgICAgICAgY2xpZW50UmVjdCA9IHsg
c193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24u
eCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5
IH07CiAKICAgICBXaW5MYXVuY2hlcldlYkhvc3QqIHdlYkhvc3QgPSBudWxscHRyOwogCkluZGV4
OiBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAkocmV2aXNpb24gMTg3
MTQzKQorKysgVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOSBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5D
RSBoSW5zdGFuY2UsCiAgICAgX3NldF9GTUEzX2VuYWJsZSgwKTsKICNlbmRpZgogCisgICAgQk9P
TCBkaWRJdCA9IFNldFByb2Nlc3NEUElBd2FyZSgpOworICAgIF9BU1NFUlQoZGlkSXQpOworCiAj
aWZkZWYgX0NSVERCR19NQVBfQUxMT0MKICAgICBfQ3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4s
IF9DUlREQkdfRklMRV9TVERFUlIpOwogICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwg
X0NSVERCR19NT0RFX0ZJTEUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257277</attachid>
            <date>2015-07-22 09:27:03 -0700</date>
            <delta_ts>2015-07-22 09:53:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150722093952.patch</filename>
            <type>text/plain</type>
            <size>39895</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE1LTA3LTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBw
cm9wZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
MTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3Mg
dG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxp
bmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Nj
cm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclRoaWNrbmVz
c0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxi
YXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1l
Q2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwOiBVcGRh
dGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50CisgICAgICAgIGNvb3JkaW5hdGVzIGJhc2Vk
IG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hl
ZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKworMjAxNS0wNy0yMSAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBJbXBsZW1lbnQgSGlnaCBE
UEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMTU1ODI2OT4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3Bw
OgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCb3JkZXJDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNw
cDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjphZGRUaWxlKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp1cGRhdGVUaWxlcyk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkZvckV2ZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46On5TY3JvbGxiYXJUaGVtZVdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxiYXJUaGlja25lc3NJblBpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjp0aGVtZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorCiAyMDE1LTA3LTIxICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWZhdWx0IG1lZGlhIGNv
bnRyb2xzIHVzZSBhIHNlcmlmIGZvbnQsIHdoaWNoIHNlZW1zIHdyb25nCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzOSw2ICs1MzksMTIgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJv
cmRlckNvbG9yKAogICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dD
b2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7CiAKICAgICBDQUNGTGF5
ZXJTZXRCb3JkZXJDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7CisKKyAgICBTdHJp
bmcgbGF5ZXJOYW1lID0gQ0FDRkxheWVyR2V0TmFtZShtX2xheWVyLmdldCgpKTsKKyAgICBGbG9h
dFJlY3QgZGVidWdCb3VuZHMgPSBib3VuZHMoKTsKKyAgICAodm9pZClsYXllck5hbWU7CisgICAg
KHZvaWQpZGVidWdCb3VuZHM7CisKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDE4NzE0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiw3ICs0MzIsOCBAQCB2
b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjphZGRUaWxlCiAgICAgQ0ZBcnJheVJlZiBz
dWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobV90aWxlUGFyZW50LmdldCgpKTsKICAg
ICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihtX3RpbGVQYXJlbnQuZ2V0KCksIG5ld0xheWVyLmdl
dCgpLCBzdWJsYXllcnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA6IDApOwogCi0gICAg
aWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSkg
eworICAgIC8vIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdC
b3JkZXJzKCkpIHsKKyAgICBpZiAoMSkgewogICAgICAgICBDR0NvbG9yUmVmIGJvcmRlckNvbG9y
ID0gQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0IoMC41LCAwLCAwLjUsIDAuNyk7CiAgICAgICAgIENB
Q0ZMYXllclNldEJvcmRlckNvbG9yKG5ld0xheWVyLmdldCgpLCBib3JkZXJDb2xvcik7CiAgICAg
ICAgIENHQ29sb3JSZWxlYXNlKGJvcmRlckNvbG9yKTsKQEAgLTQ4NCw2ICs0ODUsOCBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp1cGRhdGVUCiAgICAgLy8gU2V0IGNvb3JkaW5h
dGVzIGZvciBhbGwgdGlsZXMKICAgICBDRkFycmF5UmVmIHRpbGVBcnJheSA9IENBQ0ZMYXllckdl
dFN1YmxheWVycyhtX3RpbGVQYXJlbnQuZ2V0KCkpOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpOwor
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlc0hvcml6b250YWw7ICsraSkgewogICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVRpbGVzVmVydGljYWw7ICsraikgewogICAgICAg
ICAgICAgQ0FDRkxheWVyUmVmIHRpbGUgPSBzdGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0
X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGlsZUFycmF5LCBpICogbnVtVGls
ZXNWZXJ0aWNhbCArIGopKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxh
dGZvcm1Nb3VzZUV2ZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSBJbmMuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0yNSwxMCArMjUsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SFduZERDLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHdpbmRv
d3N4Lmg+CiAKQEAgLTM2LDkgKzM4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmlu
ZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4ODAwMAogCitzdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IoSFdORCB3aW5kb3cpCit7CisgICAgSFduZERDIGRjKHdpbmRvdyk7CisgICAgcmV0dXJu
IDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKK30KKwogc3RhdGljIElu
dFBvaW50IHBvc2l0aW9uRm9yRXZlbnQoSFdORCBoV25kLCBMUEFSQU0gbFBhcmFtKQogewogICAg
IFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBhcmFt
KX07CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcihoV25kKTsKKyAg
ICBwb2ludC54ID0gY2xhbXBUbzxpbnQ+KHBvaW50LnggLyBzY2FsZUZhY3Rvcik7CisgICAgcG9p
bnQueSA9IGNsYW1wVG88aW50Pihwb2ludC55IC8gc2NhbGVGYWN0b3IpOwogICAgIHJldHVybiBw
b2ludDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRo
ZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Ny
b2xsYmFyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVX
aW4uaCIKIAorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkxvY2FsV2luZG93c0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKQEAgLTEwNywxNCArMTA4LDIyIEBAIFNjcm9sbGJhclRoZW1lV2luOjp+U2Ny
b2xsYmFyVGhlbWVXaW4oKQogewogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVXaW46OnNjcm9sbGJh
clRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3N0YXRpYyBpbnQgc2Nyb2xsYmFyVGhp
Y2tuZXNzSW5QaXhlbHMoKQogewogICAgIHN0YXRpYyBpbnQgdGhpY2tuZXNzOwogICAgIGlmICgh
dGhpY2tuZXNzKQogICAgICAgICB0aGlja25lc3MgPSA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1hW
U0NST0xMKTsKKwogICAgIHJldHVybiB0aGlja25lc3M7CiB9CiAKK2ludCBTY3JvbGxiYXJUaGVt
ZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQoreworICAgIEhX
bmREQyBkYygwKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDk2LjBmIC8gOjpHZXREZXZpY2VD
YXBzKGRjLCBMT0dQSVhFTFNYKTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9y
ICogc2Nyb2xsYmFyVGhpY2tuZXNzSW5QaXhlbHMoKSk7Cit9CisKIHZvaWQgU2Nyb2xsYmFyVGhl
bWVXaW46OnRoZW1lQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHJldmlz
aW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgogI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogCkBAIC0zNiwxNiArMzcs
MjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBISUdIX0JJVF9NQVNLX1NIT1JUIDB4
ODAwMAogI2RlZmluZSBTUElfR0VUV0hFRUxTQ1JPTExDSEFSUyAweDAwNkMKIAorc3RhdGljIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKEhXTkQgd2luZG93KQoreworICAgIEhXbmREQyBkYyh3aW5k
b3cpOworICAgIHJldHVybiA6OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7
Cit9CisKIHN0YXRpYyBJbnRQb2ludCBwb3NpdGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFN
IGxQYXJhbSkKIHsKICAgICBQT0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VU
X1lfTFBBUkFNKGxQYXJhbSl9OwogICAgIFNjcmVlblRvQ2xpZW50KGhXbmQsICZwb2ludCk7Cisg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcihoV25kKTsKKyAgICBwb2lu
dC54ID0gY2xhbXBUbzxpbnQ+KHBvaW50LnggLyBzY2FsZUZhY3Rvcik7CisgICAgcG9pbnQueSA9
IGNsYW1wVG88aW50Pihwb2ludC55IC8gc2NhbGVGYWN0b3IpOwogICAgIHJldHVybiBwb2ludDsK
IH0KIAogc3RhdGljIEludFBvaW50IGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoSFdORCBoV25kLCBM
UEFSQU0gbFBhcmFtKQogewogICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFyYW0p
LCBHRVRfWV9MUEFSQU0obFBhcmFtKX07CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvcihoV25kKTsKKyAgICBwb2ludC54ID0gY2xhbXBUbzxpbnQ+KHBvaW50LnggLyBz
Y2FsZUZhY3Rvcik7CisgICAgcG9pbnQueSA9IGNsYW1wVG88aW50Pihwb2ludC55IC8gc2NhbGVG
YWN0b3IpOwogICAgIHJldHVybiBwb2ludDsKIH0KIApAQCAtNzcsMTEgKzkwLDE0IEBAIFBsYXRm
b3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKIAogICAgIC8vIEdsb2JhbCBQb3Np
dGlvbiBpcyBqdXN0IHgsIHkgbG9jYXRpb24gb2YgZXZlbnQKICAgICBQT0lOVCBwb2ludCA9IHts
b2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKX07CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBm
IC8gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CiAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IHBvaW50
OworICAgIG1fZ2xvYmFsUG9zaXRpb24uc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsK
IAogICAgIC8vIFBvc2l0aW9uIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gb3VyIGNsaWVudAog
ICAgIFNjcmVlblRvQ2xpZW50KGhXbmQsICZwb2ludCk7CiAgICAgbV9wb3NpdGlvbiA9IHBvaW50
OworICAgIG1fcG9zaXRpb24uc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsKIH0KIAog
UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCBoV25kLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sIGlzTW91c2VIV2hlZWwpCkBAIC05MCw2ICsxMDYs
OCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAgLCBtX2ds
b2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoaFduZCwgbFBhcmFtKSkKICAgICAs
IG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogeworICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisKICAgICAvLyBIb3cgbWFueSBwaXhl
bHMgc2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEdlY2tvIHVzZXMgdGhlIGhlaWdodCBvZiB0
aGUKICAgICAvLyBjdXJyZW50IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFu
Z2VzIGFzIHlvdSBnbyB0aHJvdWdoIHRoZQogICAgIC8vIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50
IHBhZ2VzLiAgSUUgNyBpcyB+NTAgcHgvbGluZSwgYWx0aG91Z2ggdGhlIHZhbHVlCkBAIC05Nyw4
ICsxMTUsOCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAg
Ly8gc21vb3RoaW5nIGFsZ29yaXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRo
IHNsaWdodGx5IGxhcmdlcgogICAgIC8vIHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGpl
cmt5LiAgSGVyZSB3ZSB1c2UgMTAwIHB4IHBlciB0aHJlZSBsaW5lcwogICAgIC8vICh0aGUgZGVm
YXVsdCBzY3JvbGwgYW1vdW50IG9uIFdpbmRvd3MgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRp
Y2spLgotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEw
MC4wZiAvIDMuMGY7Ci0gICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQ
YXJhbSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOworICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IHNjYWxlRmFjdG9yICogMTAwLjBmIC8g
My4wZjsKKyAgICBmbG9hdCBkZWx0YSA9IEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od1BhcmFtKSAv
IChzY2FsZUZhY3RvciAqIHN0YXRpY19jYXN0PGZsb2F0PihXSEVFTF9ERUxUQSkpOwogICAgIGlm
IChpc01vdXNlSFdoZWVsKSB7CiAgICAgICAgIC8vIFdpbmRvd3MgaXMgPC0tIC0vKyAtLT4sIFdl
YktpdCB3YW50cyA8LS0gKy8tIC0tPiwgc28gd2UgbmVnYXRlCiAgICAgICAgIC8vIHxkZWx0YXwg
YWZ0ZXIgc2F2aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiB0aGUgd2hlZWwgdGljayBtZW1iZXIu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUs
NyBAQCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBtX3Vw
ZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXIoKnRoaXMsICZSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXJGaXJlZCkKICAgICAsIG1faGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyh0cnVlKQogICAgICwgbV9jb21wb3NpdGluZ1RyaWdnZXJzKHN0YXRpY19j
YXN0PENocm9tZUNsaWVudDo6Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KENocm9tZUNsaWVudDo6
QWxsVHJpZ2dlcnMpKQotICAgICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNlKQorICAgICwgbV9z
aG93RGVidWdCb3JkZXJzKHRydWUgLypmYWxzZSovKQogICAgICwgbV9zaG93UmVwYWludENvdW50
ZXIoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX3JlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0KGZhbHNlKQpJbmRleDogU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTUtMDctMjEgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IEhpZ2gg
RFBJIHN1cHBvcnQgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NjMzNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE1NTgyNjk+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IFNpemUKKyAgICAgICAg
cGFnZSBmb3IgY3VycmVudCBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgICAgICAqIFdlYkZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6IEFj
Y291bnQgZm9yIGRldmljZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJGcmFtZTo6cGFpbnRT
Y3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnJlcGFpbnQpOiBBZGp1c3QgcGFpbnQgcmVjdCBmb3Ig
ZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9y
ZSk6IEFkanVzdCBjb29yZGluYXRlcyBmb3Igc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViVmll
dzo6c2l6ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViVmll
dzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6Z2Vz
dHVyZU5vdGlmeSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6IERpdHRvLgor
ICAgICAgICAoV2ViVmlldzo6aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3cpOiBBZGp1c3QgbWF4IHRv
b2wgdGlwIHdpZHRoCisgICAgICAgIGZvciBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgICAgICAo
V2ViVmlldzo6c2VsZWN0aW9uUmVjdCk6IEFkanVzdCBjb29yZGluYXRlcyBmb3Igc2NhbGUgZmFj
dG9yLgorICAgICAgICAoV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYlZpZXc6OnNjcm9sbE9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6c2Nyb2xs
QnkpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViVmlldzo6cGFpbnRDb250ZW50cyk6IERpdHRvLgorICAgICAgICAqIFdl
YlZpZXcuaDoKKwogMjAxNS0wNy0yMSAgU3VuZ21hbm4gQ2hvICA8c3VuZ21hbm4uY2hvQG5hdmVy
Y29ycC5jb20+CiAKICAgICAgICAgW1dpbl0gQWRkIG5lZWRUb3VjaEV2ZW50cygpIHN0dWIgdG8g
V2ViQ2hyb21lQ2xpZW50LmggZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZCB3aXRoIEVOQUJMRV9UT1VD
SF9FVkVOVFM9T04KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDE4NzE0NCkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2
LDYgKzMzNiw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db24KICAg
ICBkaXJ0eVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwog
ICAgIGdjLnRyYW5zbGF0ZSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOworICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gd2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdjLnNjYWxlKFdl
YkNvcmU6OkZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICB2aWV3LT5w
YWludENvbnRlbnRzKCZnYywgcmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCkBAIC0zNjAsNiAr
MzYyLDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQwogICAgIGdj
LnNhdmUoKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdChyZWN0KTsKICAgICBkaXJ0eVJlY3QubW92
ZSgtcHQueCwgLXB0LnkpOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gd2ViVmlldygpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgIGdjLnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZUZh
Y3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICB2aWV3LT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CiAg
ICAgZ2MucmVzdG9yZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3Bw
CShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2Vz
Ojppbml0aWFsaXplRGVmYXVsdFNlCiAKICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGRlZmF1
bHRzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKIAotICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRTdGFuZGFyZEZvbnRQcmVm
ZXJlbmNlS2V5KSwgQ0ZTVFIoIlNlZ29lIFVJIikpOworICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KGRlZmF1bHRzLCBDRlNUUihXZWJLaXRTdGFuZGFyZEZvbnRQcmVmZXJlbmNlS2V5KSwgQ0ZTVFIo
IlRpbWVzIE5ldyBSb21hbiIpKTsKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0Rml4ZWRGb250UHJlZmVyZW5jZUtleSksIENGU1RSKCJDb3VyaWVyIE5ldyIp
KTsKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U2VyaWZG
b250UHJlZmVyZW5jZUtleSksIENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSk7CiAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFNhbnNTZXJpZkZvbnRQcmVmZXJl
bmNlS2V5KSwgQ0ZTVFIoIkFyaWFsIikpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlz
aW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MjEsOCArODIxLDExIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6Y2xvc2UKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBXZWJWaWV3OjpyZXBhaW50KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJv
b2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKK3ZvaWQgV2ViVmlldzo6cmVw
YWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBsb2dpY2FsV2luZG93UmVjdCwgYm9vbCBjb250
ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQogewor
ICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVjdChsb2dpY2FsV2luZG93UmVjdCk7CisgICAg
d2luZG93UmVjdC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwogICAgIGlmIChpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICAvLyBUaGUgY29udGVudENoYW5nZWQsIGlt
bWVkaWF0ZSwgYW5kIHJlcGFpbnRDb250ZW50T25seSBwYXJhbWV0ZXJzIGFyZSBhbGwgYmFzZWQg
b24gYSBub24tCiAgICAgICAgIC8vIGNvbXBvc2l0aW5nIHBhaW50aW5nL3Njcm9sbGluZyBtb2Rl
bC4KQEAgLTkyMCwxMCArOTIzLDE5IEBAIHZvaWQgV2ViVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihH
RElPYmplY3QKICAgICAgICAgbV91aURlbGVnYXRlUHJpdmF0ZS0+d2ViVmlld0RpZEludmFsaWRh
dGUodGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmll
dyogZnJhbWVWaWV3LCBpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1Jl
Y3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQordm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5n
U3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGludCBsb2dpY2FsRHgsIGludCBsb2dpY2FsRHks
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxTY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgbG9n
aWNhbENsaXBSZWN0KQogewogICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsKIAorICAgIC8vIERp
bWVuc2lvbnMgcGFzc2VkIHRvIHVzIGZyb20gV2ViQ29yZSBhcmUgaW4gbG9naWNhbCB1bml0cy4g
V2UgbXVzdCBjb252ZXJ0IHRvIHBpeGVsczoKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgaW50IGR4ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9yICog
bG9naWNhbER4KTsKKyAgICBpbnQgZHkgPSBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBsb2dp
Y2FsRHkpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QobG9naWNhbFNjcm9sbFZpZXdSZWN0
KTsKKyAgICBzY3JvbGxWaWV3UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CisgICAgSW50UmVjdCBj
bGlwUmVjdChsb2dpY2FsQ2xpcFJlY3QpOworICAgIGNsaXBSZWN0LnNjYWxlKHNjYWxlRmFjdG9y
KTsKKwogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGluZyBzbWFydGVyIGhlcmUsIGxpa2UgbW92
aW5nIHRpbGVzIGFyb3VuZCBhbmQgcGFpbnRpbmcKICAgICAgICAgLy8gYW55IG5ld2x5LWV4cG9z
ZWQgdGlsZXMuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzUyNzE0PgpAQCAtOTUyLDcgKzk2NCw3IEBA
IHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICBIV25kREMgd2lu
ZG93REMobV92aWV3V2luZG93KTsKICAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9
IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+Z2V0
KCkpOwotICAgIAorCiAgICAgLy8gU2Nyb2xsIHRoZSBiaXRtYXAuCiAgICAgUkVDVCBzY3JvbGxS
ZWN0V2luKHNjcm9sbFZpZXdSZWN0KTsKICAgICBSRUNUIGNsaXBSZWN0V2luKGNsaXBSZWN0KTsK
QEAgLTk4Miw4ICs5OTQsMTEgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJbnRT
aXplJgogCiAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSAgICBpZiAoRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkKLSAgICAgICAgY29yZUZyYW1lLT52aWV3KCkt
PnJlc2l6ZShuZXdTaXplKTsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodG9wTGV2
ZWxGcmFtZSgpKSkgeworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gbmV3U2l6ZTsKKyAg
ICAgICAgbG9naWNhbFNpemUuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAg
ICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+cmVzaXplKGxvZ2ljYWxTaXplKTsKKyAgICB9CiAKICNp
ZiBVU0UoQ0EpCiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKQEAgLTEwNDksNiArMTA2NCw4IEBA
IHZvaWQgV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIEdESU9iamVj
dDxIREM+IGJpdG1hcERDT2JqZWN0OwogCisgICAgYmFja2luZ1N0b3JlQ29tcGxldGVseURpcnR5
ID0gdHJ1ZTsKKwogICAgIEhEQyBiaXRtYXBEQyA9IGRjOwogICAgIEhHRElPQkogb2xkQml0bWFw
ID0gMDsKICAgICBpZiAoIWRjKSB7CkBAIC0xMTgzLDYgKzEyMDAsNyBAQCB2b2lkIFdlYlZpZXc6
OnBhaW50KEhEQyBkYywgTFBBUkFNIG9wdGlvCiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNl
bGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmdldCgpKTsK
IAogICAgIC8vIFVwZGF0ZSBvdXIgYmFja2luZyBzdG9yZSBpZiBuZWVkZWQuCisgICAgYmFja2lu
Z1N0b3JlQ29tcGxldGVseURpcnR5ID0gdHJ1ZTsKICAgICB1cGRhdGVCYWNraW5nU3RvcmUoZnJh
bWVWaWV3LCBiaXRtYXBEQy5nZXQoKSwgYmFja2luZ1N0b3JlQ29tcGxldGVseURpcnR5LCB3aW5k
b3dzVG9QYWludCk7CiAKICAgICAvLyBOb3cgd2UgYmxpdCB0aGUgdXBkYXRlZCBiYWNraW5nIHN0
b3JlCkBAIC0xMjUwLDcgKzEyNjgsMTEgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5n
U3RvcmUoRnJhbQogCiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkuY29u
dGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOworICAgICAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGdjLnNhdmUo
KTsKKyAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcikp
OwogICAgICAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgZGlydHlSZWN0KTsKKyAgICAgICAgZ2Mu
cmVzdG9yZSgpOwogICAgICAgICBpZiAobV9zaG91bGRJbnZlcnRDb2xvcnMpCiAgICAgICAgICAg
ICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7CiAgICAgfQpAQCAtMTQyMiw5ICsxNDQ0LDEzIEBAIGJv
b2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEKIAogICAgIGxQYXJhbSA9IE1B
S0VMUEFSQU0oY29vcmRzLngsIGNvb3Jkcy55KTsKIAorICAgIC8vIENvbnZlcnQgY29vcmRpbmF0
ZXMgdG8gbG9naWNhbCBwaXhlbHMKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgSW50UG9pbnQgbG9naWNhbENvb3Jkcyhjb29yZHMueCAvIHNjYWxlRmFj
dG9yLCBjb29yZHMueSAvIHNjYWxlRmFjdG9yKTsKKwogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCkuY2xlYXJDb250ZXh0TWVudSgpOwogCi0gICAgSW50UG9pbnQgZG9jdW1lbnRQ
b2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhjb29yZHMp
KTsKKyAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygp
LT53aW5kb3dUb0NvbnRlbnRzKGxvZ2ljYWxDb29yZHMpKTsKICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0
UG9pbnQoZG9jdW1lbnRQb2ludCk7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpLmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKIApAQCAtMTQ0OSw3ICsxNDc1LDggQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0
TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xs
ZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSkpOworICAg
IEludFBvaW50IGxvZ2ljYWxQb2ludCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1l
bnVDb250cm9sbGVyLmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1l
KCkpOworICAgIFBPSU5UIHBvaW50ID0geyBsb2dpY2FsUG9pbnQueCgpICogc2NhbGVGYWN0b3Is
IGxvZ2ljYWxQb2ludC55KCkgKiBzY2FsZUZhY3RvciB9OwogCiAgICAgLy8gVHJhbnNsYXRlIHRo
ZSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0ZXMKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4o
bV92aWV3V2luZG93LCAmcG9pbnQpKQpAQCAtMTY0NCw2ICsxNjcxLDEwIEBAIGJvb2wgV2ViVmll
dzo6Z2VzdHVyZU5vdGlmeShXUEFSQU0gd1BhcmEKIAogICAgIGJvb2wgaGl0U2Nyb2xsYmFyID0g
ZmFsc2U7CiAgICAgUE9JTlQgZ2VzdHVyZUJlZ2luUG9pbnQgPSB7Z24tPnB0c0xvY2F0aW9uLngs
IGduLT5wdHNMb2NhdGlvbi55fTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKKyAgICBJbnRQb2ludCBsb2dpY2FsR2VzdHVyZUJlZ2luUG9pbnQoZ2VzdHVy
ZUJlZ2luUG9pbnQueCAvIHNjYWxlRmFjdG9yLCBnZXN0dXJlQmVnaW5Qb2ludC55IC8gc2NhbGVG
YWN0b3IpOworCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVh
ZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dTaGFkb3dDb250ZW50KTsKICAgICBmb3Ig
KEZyYW1lKiBjaGlsZEZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGNoaWxkRnJhbWU7IGNo
aWxkRnJhbWUgPSBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShtX2dlc3R1cmVU
YXJnZXROb2RlLmdldCgpKSkgewogICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNoaWxk
RnJhbWUtPnZpZXcoKTsKQEAgLTE2NTYsNyArMTY4Nyw3IEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVy
ZU5vdGlmeShXUEFSQU0gd1BhcmEKICAgICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGZyYW1lVmlldy0+c2NyZWVuVG9D
b250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCkpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dChmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMobG9naWNhbEdlc3R1cmVCZWdpblBvaW50KSk7
CiAgICAgICAgIGxheWVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAgICAgICAgIG1fZ2Vz
dHVyZVRhcmdldE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAKQEAgLTE3NjEsMTMgKzE3OTIs
MTUgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQQogICAgICAgICB9
CiAKICAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGVkQXJlYSA9IDA7CisgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgSW50U2l6ZSBs
b2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRhWCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVG
YWN0b3IpOwogCiAgICAgICAgIGlmICghbV9nZXN0dXJlVGFyZ2V0Tm9kZSB8fCAhbV9nZXN0dXJl
VGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0
bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRob3V0IGhpdHRpbmcgYW55IG5vZGVzCi0gICAgICAgICAg
ICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7
CisgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERl
bHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVkQXJlYSA9IGNvcmVGcmFtZS0+dmlldygpOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJl
Y3Vyc2l2ZWx5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSksIFdlYkNvcmU6OlJlbmRlckxheWVy
OjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIG1fZ2Vz
dHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPmVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwg
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEp
OwogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFu
bmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAg
ICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CkBAIC0yMjA2
LDcgKzIyMzksMTEgQEAgdm9pZCBXZWJWaWV3OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbAog
CiAgICAgUkVDVCB3aW5kb3dSZWN0ID0gezB9OwogICAgIGZyYW1lUmVjdCgmd2luZG93UmVjdCk7
Ci0gICAgcmVwYWludCh3aW5kb3dSZWN0LCB0cnVlLCB0cnVlKTsKKworICAgIC8vIHJlcGFpbnQg
ZXhwZWN0cyBsb2dpY2FsIHBpeGVscywgc28gcmVzY2FsZSBoZXJlLgorICAgIEludFJlY3QgbG9n
aWNhbFJlY3Qod2luZG93UmVjdCk7CisgICAgbG9naWNhbFJlY3Quc2NhbGUoMS4wZiAvIGRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgIHJlcGFpbnQobG9naWNhbFJlY3QsIHRydWUsIHRydWUpOwog
fQogCiBib29sIFdlYlZpZXc6OnJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNzKCkKQEAgLTI5MTYs
NyArMjk1Myw3IEBAIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKQogICAg
IGluZm8udUlkID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UX1BUUj4obV92aWV3V2luZG93KTsKIAog
ICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX0FERFRPT0wsIDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8TFBBUkFNPigmaW5mbykpOwotICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHdu
ZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBtYXhUb29sVGlwV2lkdGgpOworICAgIDo6U2VuZE1l
c3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBjbGFtcFRvPGludD4o
bWF4VG9vbFRpcFdpZHRoICogZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwogCiAgICAgOjpTZXRXaW5k
b3dQb3MobV90b29sVGlwSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9OT01PVkUgfCBT
V1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOwogfQpAQCAtMzY4NywxNyArMzcyNCwxOSBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmdlbmVyCiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChS
RUNUKiByYykKK0hSRVNVTFQgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChSRUNUKiByYykKIHsKICAg
ICBXZWJDb3JlOjpGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogCiAgICAgSW50UmVjdCBpciA9IGVuY2xvc2luZ0ludFJlY3QoZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwogICAgIGlyID0gZnJhbWUudmlldygp
LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGlyKTsKICAgICBpci5tb3ZlKC1mcmFtZS52aWV3
KCktPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIC1mcmFtZS52aWV3KCktPnNjcm9sbE9mZnNldCgp
LmhlaWdodCgpKTsKLSAgICByYy0+bGVmdCA9IGlyLngoKTsKLSAgICByYy0+dG9wID0gaXIueSgp
OwotICAgIHJjLT5ib3R0b20gPSByYy0+dG9wICsgaXIuaGVpZ2h0KCk7Ci0gICAgcmMtPnJpZ2h0
ID0gcmMtPmxlZnQgKyBpci53aWR0aCgpOworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgIHJjLT5sZWZ0ID0gaXIueCgpICogc2NhbGVGYWN0b3I7Cisg
ICAgcmMtPnRvcCA9IGlyLnkoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5ib3R0b20gPSByYy0+
dG9wICsgaXIuaGVpZ2h0KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+cmlnaHQgPSByYy0+bGVm
dCArIGlyLndpZHRoKCkgKiBzY2FsZUZhY3RvcjsKIAogICAgIHJldHVybiBTX09LOwogfQpAQCAt
Mzc3NCw5ICszODEzLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojppc0xv
YQogICAgIHJldHVybiBTX09LOwogfQogICAgIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJWaWV3OjplbGVtZW50QXRQb2ludCggCi0gICAgICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBwb2lu
dCwKLSAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcqKiBlbGVtZW50RGlj
dGlvbmFyeSkKK0hSRVNVTFQgV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQoTFBQT0lOVCBwb2ludCwg
SVByb3BlcnR5QmFnKiogZWxlbWVudERpY3Rpb25hcnkpCiB7CiAgICAgaWYgKCFlbGVtZW50RGlj
dGlvbmFyeSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3OTAsNiArMzgy
Nyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICAgICAg
cmV0dXJuIEVfRkFJTDsKIAogICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBv
aW50LT54LCBwb2ludC0+eSk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyAgICB3ZWJDb3JlUG9pbnQuc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxl
RmFjdG9yKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQod2ViQ29y
ZVBvaW50KTsKICAgICBpZiAoZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXN1
bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQod2ViQ29yZVBv
aW50KTsKQEAgLTUzMDYsMzIgKzUzNDUsMzcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJWaWV3OjpmcmFtZQogICAgIHJldHVybiBtX2ZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZS5jb3B5
UmVmVG8oZCk7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2Nyb2xs
T2Zmc2V0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUE9JTlQgb2Zmc2V0KQorSFJFU1VM
VCBXZWJWaWV3OjpzY3JvbGxPZmZzZXQoTFBQT0lOVCBvZmZzZXQpCiB7CiAgICAgaWYgKCFvZmZz
ZXQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgSW50U2l6ZSBvZmZzZXRJbnRTaXpl
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9sbE9mZnNldCgpOworCisgICAgb2Zm
c2V0SW50U2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwogICAgIG9mZnNldC0+eCA9
IG9mZnNldEludFNpemUud2lkdGgoKTsKICAgICBvZmZzZXQtPnkgPSBvZmZzZXRJbnRTaXplLmhl
aWdodCgpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlZpZXc6OnNjcm9sbEJ5KCAKLSAgICAvKiBbaW5dICovIExQUE9JTlQgb2Zmc2V0KQorSFJF
U1VMVCBXZWJWaWV3OjpzY3JvbGxCeShMUFBPSU5UIG9mZnNldCkKIHsKICAgICBpZiAoIW9mZnNl
dCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShvZmZzZXQtPngsIG9mZnNldC0+eSkpOworCisgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YShvZmZzZXQtPngsIG9mZnNldC0+eSk7CisgICAgc2Nyb2xsRGVsdGEu
c2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCkudmlldygpLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
LUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCAK
LSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUkVDVCByZWN0KQorSFJFU1VMVCBXZWJWaWV3Ojp2
aXNpYmxlQ29udGVudFJlY3QoTFBSRUNUIHJlY3QpCiB7CiAgICAgaWYgKCFyZWN0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOworCiAgICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIHZpc2li
bGVDb250ZW50LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIHJlY3QtPmxlZnQgPSAo
TE9ORykgdmlzaWJsZUNvbnRlbnQueCgpOwogICAgIHJlY3QtPnRvcCA9IChMT05HKSB2aXNpYmxl
Q29udGVudC55KCk7CiAgICAgcmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQubWF4
WCgpOwpAQCAtNTY4Niw2ICs1NzMwLDggQEAgdm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRl
V2luZG93KEZyYQogICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJl
Y3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZy
YW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOworICAgIGNhcmV0LnNjYWxlKGRl
dmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgQ0FORElEQVRFRk9STSBmb3JtOwogICAgIGZvcm0u
ZHdJbmRleCA9IDA7CiAgICAgZm9ybS5kd1N0eWxlID0gQ0ZTX0VYQ0xVREU7CkBAIC01OTQ1LDYg
KzU5OTEsNyBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvCiAgICAg
ICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHRlbXBS
YW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29u
dGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CiAgICAgY2hhclBvcy0+cHQueCA9IGNhcmV0LngoKTsKICAgICBjaGFyUG9zLT5wdC55ID0g
Y2FyZXQueSgpOwogICAgIDo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAmY2hhclBvcy0+
cHQpOwpAQCAtNjYyMiw3ICs2NjY5LDYgQEAgdm9pZCBXZWJWaWV3OjpzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKAogICAgICAgICAgICAgOjpHZXRDbGllbnRSZWN0KG1fdmlld1dpbmRvdywgJmNs
aWVudFJlY3QpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5ZXItPnNldFNpemUoSW50UmVjdChj
bGllbnRSZWN0KS5zaXplKCkpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5ZXItPnNldE5lZWRz
RGlzcGxheSgpOwotCiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDaGlsZExh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fYmFja2luZ0xheWVyLT5wbGF0
Zm9ybUxheWVyKCkpKTsKIAogICAgICAgICAgICAgLy8gV2UgYXJlbid0IGdvaW5nIHRvIGJlIHVz
aW5nIG91ciBiYWNraW5nIHN0b3JlIHdoaWxlIHdlJ3JlIGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nCkBAIC02Nzc5LDYgKzY4MjUsOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50Q29udGVudHMoY29u
c3QgR3JhcGhpCiAKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBjb250ZXh0LmNsaXAoaW5DbGlw
KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgY29u
dGV4dC5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgZnJh
bWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoaW5DbGlwKSk7CiAg
ICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CkBAIC03MTIyLDYgKzcxNzAsOCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmZpcnN0CiAgICAgSW50UmVjdCByZWN0ID0gZnJhbWUu
ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAgIHJlc3VsdEludFJl
Y3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CiAKKyAgICByZXN1bHRJ
bnRSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgcmVzdWx0UmVjdC0+bGVm
dCA9IHJlc3VsdEludFJlY3QueCgpOwogICAgIHJlc3VsdFJlY3QtPnRvcCA9IHJlc3VsdEludFJl
Y3QueSgpOwogICAgIHJlc3VsdFJlY3QtPnJpZ2h0ID0gcmVzdWx0SW50UmVjdC54KCkgKyByZXN1
bHRJbnRSZWN0LndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAxODcxNDQp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4OCw2
ICs5ODgsOSBAQCBwdWJsaWM6CiAgICAgLyogW291dCwgcmV0dmFsXSAqLyBSRUNUKiByZXN1bHRS
ZWN0KTsKIAogICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2VsZWN0ZWRSYW5nZUZvclRl
c3RpbmcoLyogW291dF0gKi8gVUlOVCogbG9jYXRpb24sIC8qIFtvdXRdICovIFVJTlQqIGxlbmd0
aCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIHZvaWQgc2V0Wm9vbU11bHRpcGxpZXIoZmxvYXQgbXVsdGlwbGllciwgYm9vbCBpc1RleHRP
bmx5KTsKICAgICBmbG9hdCB6b29tTXVsdGlwbGllcihib29sIGlzVGV4dE9ubHkpOwpAQCAtMTAy
Niw4ICsxMDI5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkSW52ZXJ0Q29sb3JzOwog
ICAgIHZvaWQgc2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wpOwogCi0gICAgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdDsKLQogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIHJlZ2lz
dGVyV2ViVmlld1dpbmRvd0NsYXNzKCk7CiAgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2Vi
Vmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0pOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDE3LDExICsxMDE3LDEzIEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0MKIHsKICAgICBXZWJWaWV3KiB2aWV3ID0gbV93ZWJGcmFt
ZS0+d2ViVmlldygpOwogCi0gICAgUkVDVCByZWN0OwotICAgIHZpZXctPmZyYW1lUmVjdCgmcmVj
dCk7CisgICAgUkVDVCBwaXhlbFJlY3Q7CisgICAgdmlldy0+ZnJhbWVSZWN0KCZwaXhlbFJlY3Qp
OwogICAgIGJvb2wgdHJhbnNwYXJlbnQgPSB2aWV3LT50cmFuc3BhcmVudCgpOwogICAgIENvbG9y
IGJhY2tncm91bmRDb2xvciA9IHRyYW5zcGFyZW50ID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29s
b3I6OndoaXRlOwotICAgIGNvcmUobV93ZWJGcmFtZSktPmNyZWF0ZVZpZXcoSW50UmVjdChyZWN0
KS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQpOworICAgIEludFJlY3QgbG9n
aWNhbEZyYW1lKHBpeGVsUmVjdCk7CisgICAgbG9naWNhbEZyYW1lLnNjYWxlKDEuMGYgLyB2aWV3
LT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb3JlKG1fd2ViRnJhbWUpLT5jcmVhdGVWaWV3
KGxvZ2ljYWxGcmFtZS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQpOwogfQog
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRTYXZlVG9QYWdlQ2FjaGUoKQpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTg3MTQ0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTUtMDctMjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW1dpbl0gSW1wbGVtZW50IHByb3BlciBIaWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBXaW5MYXVuY2hlciB0byB0YWtlIGRldmlj
ZSBzY2FsaW5nIGZhY3RvciBpbnRvIGFjY291bnQuCisKKyAgICAgICAgKiBXaW5MYXVuY2hlci9D
b21tb24uY3BwOgorICAgICAgICAocmVzaXplU3ViVmlld3MpOiBNYWtlIHN1cmUgdG9vbGJhcnMg
YW5kIFVSTCBiYXIgYXJlIHByb3Blcmx5IHNpemVkIGFuZCB1c2luZworICAgICAgICBhIHZhbGlk
IGZvbnQuCisgICAgICAgIChjb21wdXRlRnVsbERlc2t0b3BGcmFtZSk6IEhhbmRsZSBoaWdoIERQ
SSBkZXNrdG9wcy4KKyAgICAgICAgKFduZFByb2MpOiBNYWtlIGNvbW1lbnRzIG1vcmUgcHJlY2lz
ZS4KKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHA6CisgICAgICAgIChXaW5M
YXVuY2hlcjo6aW5pdCk6IERldGVybWluZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGF0IGxhdW5jaC4K
KyAgICAgICAgKFdpbkxhdW5jaGVyOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcik6IEFkZGVkLgor
ICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmg6CisgICAgICAgICogV2luTGF1bmNo
ZXIvV2luTGF1bmNoZXJXZWJIb3N0Lmg6IFVzZSBDKysxMSBpbml0aWFsaXphdGlvbi4KKyAgICAg
ICAgKiBXaW5MYXVuY2hlci9XaW5NYWluLmNwcDogU2l6ZSBpbnRlcmZhY2UgYmFzZWQgb24gc2Nh
bGluZyBmYWN0b3IuCisgICAgICAgICh3V2luTWFpbik6IERpdHRvLgorICAgICAgICAqIHdpbi9E
TExMYXVuY2hlci9ETExMYXVuY2hlck1haW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOiBUZWxs
IFdpbmRvd3Mgd2UgdW5kZXJzdGFuZCBoaWdoIERQSS4KKwogMjAxNS0wNy0yMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeGVkIFZNIHBvb2wgYWxsb2NhdGlv
biBzaG91bGQgaGF2ZSBhIHJlc2VydmUgZm9yIGFsbG9jYXRpb25zIHRoYXQgY2Fubm90IGZhaWwK
SW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2luTGF1bmNoZXIvQ29tbW9uLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1
bmNoZXIvQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCB0eXBlZGVm
IF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlCiBISU5TVEFOQ0UgaEluc3Q7CiBIV05E
IGhNYWluV25kOwogSFdORCBoVVJMQmFyV25kOworSEdESU9CSiBoT2xkRm9udDsKK0hHRElPQkog
aFVSTEZvbnQ7CiBIV05EIGhCYWNrQnV0dG9uV25kOwogSFdORCBoRm9yd2FyZEJ1dHRvblduZDsK
IEhXTkQgaENhY2hlV25kOwpAQCAtMTAxLDE3ICsxMDMsMzggQEAgSU5UX1BUUiBDQUxMQkFDSyBD
YWNoZXMoSFdORCwgVUlOVCwgV1BBUgogc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHVybEJTdHIp
Owogc3RhdGljIHZvaWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpOwogCitzdGF0aWMgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCB3aW5kb3cpCit7CisgICAgSERDIGRj
ID0gOjpHZXREQyh3aW5kb3cpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gOjpHZXRE
ZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBmOworICAgIDo6UmVsZWFzZURDKHdpbmRv
dywgZGMpOworICAgIHJldHVybiBkZXZpY2VTY2FsZUZhY3RvcjsKK30KKwogc3RhdGljIHZvaWQg
cmVzaXplU3ViVmlld3MoKQogewogICAgIGlmIChnV2luTGF1bmNoZXItPnVzZXNMYXllcmVkV2Vi
VmlldygpIHx8ICFnVmlld1dpbmRvdykKICAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhnVmlld1dpbmRvdyk7CisKICAg
ICBSRUNUIHJjQ2xpZW50OwogICAgIEdldENsaWVudFJlY3QoaE1haW5XbmQsICZyY0NsaWVudCk7
Ci0gICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgQ09OVFJPTEJVVFRPTl9XSURU
SCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvbldu
ZCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgMCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJMQkFSX0hF
SUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoVVJMQmFyV25kLCBDT05UUk9MQlVUVE9OX1dJ
RFRIICogMiwgMCwgcmNDbGllbnQucmlnaHQsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1v
dmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAsIFVSTEJBUl9IRUlHSFQsIHJjQ2xpZW50LnJpZ2h0LCBy
Y0NsaWVudC5ib3R0b20gLSBVUkxCQVJfSEVJR0hULCBUUlVFKTsKKworICAgIGludCBoZWlnaHQg
PSBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQ7CisgICAgaW50IHdpZHRoID0gc2NhbGVGYWN0
b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIOworCisgICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvbldu
ZCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1
dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3co
aFVSTEJhclduZCwgd2lkdGggKiAyLCAwLCByY0NsaWVudC5yaWdodCwgaGVpZ2h0LCBUUlVFKTsK
KyAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0LCBy
Y0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRSVUUpOworCisgICAgaWYgKCFoVVJMRm9udCkgewor
ICAgICAgICBoVVJMRm9udCA9IDo6Q3JlYXRlRm9udChzY2FsZUZhY3RvciAqIDE4LCAwLCAwLCAw
LCBGV19OT1JNQUwsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIERFRkFVTFRfQ0hBUlNFVCwKKyAgICAg
ICAgICAgIE9VVF9UVF9PTkxZX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywgQU5USUFMSUFT
RURfUVVBTElUWSwgRkZfRE9OVENBUkUsIEwiVGltZXMgTmV3IFJvbWFuIik7CisgICAgfQorCisg
ICAgOjpTZW5kTWVzc2FnZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRGT05U
KSwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGhVUkxGb250KSwgVFJVRSk7CiB9CiAKIHN0YXRp
YyB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCkBAIC0xMzIsMTAgKzE1NSwxMiBAQCBz
dGF0aWMgdm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCiAgICAgaWYgKCE6OlN5c3RlbVBh
cmFtZXRlcnNJbmZvKFNQSV9HRVRXT1JLQVJFQSwgMCwgc3RhdGljX2Nhc3Q8dm9pZCo+KCZkZXNr
dG9wKSwgMCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coMCk7CisKICAgICBzX3dpbmRvd1Bvc2l0aW9uLnggPSAw
OwogICAgIHNfd2luZG93UG9zaXRpb24ueSA9IDA7Ci0gICAgc193aW5kb3dTaXplLmN4ID0gZGVz
a3RvcC5yaWdodCAtIGRlc2t0b3AubGVmdDsKLSAgICBzX3dpbmRvd1NpemUuY3kgPSBkZXNrdG9w
LmJvdHRvbSAtIGRlc2t0b3AudG9wOworICAgIHNfd2luZG93U2l6ZS5jeCA9IHNjYWxlRmFjdG9y
ICogKGRlc2t0b3AucmlnaHQgLSBkZXNrdG9wLmxlZnQpOworICAgIHNfd2luZG93U2l6ZS5jeSA9
IHNjYWxlRmFjdG9yICogKGRlc2t0b3AuYm90dG9tIC0gZGVza3RvcC50b3ApOwogfQogCiBCT09M
IFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBkbGxJbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZP
SUQpCkBAIC00MjEsMTMgKzQ0NiwxMyBAQCBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBo
V25kLCBVSU5UCiAgICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNwYXJlbnQgd2lu
ZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKICAgICAgICAgICAg
IC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkg
dGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKICAgICAgICAgICAgIC8vIHVuZGVyIHRoZSBtb3Vz
ZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4gYXJiaXRyYXJ5
Ci0gICAgICAgICAgICAvLyAzMCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMg
YW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgorICAgICAgICAgICAgLy8gMzAgbG9naWNh
bCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBw
aW5nIGxvY2F0aW9uLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJl
IHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NBUFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdh
bnQgdG8KICAgICAgICAgICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhl
IHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cuCiAgICAgICAgICAgICBpbnQgeSA9IEhJV09S
RChsUGFyYW0pOwogCi0gICAgICAgICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdp
bmRvdy50b3AgKyBkcmFnQmFySGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50
b3ApICYmICh5IDwgd2luZG93LnRvcCArIChkcmFnQmFySGVpZ2h0ICogZ1dpbkxhdW5jaGVyLT5k
ZXZpY2VTY2FsZUZhY3RvcigpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2lu
TGF1bmNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVy
LmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFt
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNjEsNiAr
NjEsOCBAQCBXaW5MYXVuY2hlcjo6V2luTGF1bmNoZXIoSFdORCBtYWluV25kLCBICiAKIEhSRVNV
TFQgV2luTGF1bmNoZXI6OmluaXQoKQogeworICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7
CisKICAgICBIUkVTVUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywg
MCwgSUlEX0lXZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJ
bnRlcmZhY2VQdHIoKSkpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7
CkBAIC00NzgsMyArNDgwLDEwIEBAIHZvaWQgV2luTGF1bmNoZXI6Onpvb21PdXQoKQogCiAgICAg
d2ViQWN0aW9ucy0+em9vbVBhZ2VPdXQobnVsbHB0cik7CiB9CisKK3ZvaWQgV2luTGF1bmNoZXI6
OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICBIREMgZGMgPSA6OkdldERDKG1faE1h
aW5XbmQpOworICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSA6OkdldERldmljZUNhcHMoZGMsIExP
R1BJWEVMU1gpIC8gOTYuMGY7CisgICAgOjpSZWxlYXNlREMobV9oTWFpblduZCwgZGMpOworfQpJ
bmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9X
aW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCB6b29tSW4oKTsKICAgICB2b2lkIHpvb21PdXQoKTsKIAorICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQor
ICAgIHZvaWQgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6
OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOwogCkBAIC0xMTUsNSAr
MTE4LDYgQEAgcHJpdmF0ZToKICAgICBIV05EIG1faE1haW5XbmQ7CiAgICAgSFdORCBtX2hVUkxC
YXJXbmQ7CiAKKyAgICBmbG9hdCBtX2RldmljZVNjYWxlRmFjdG9yIHsgMS4wZiB9OwogICAgIGJv
b2wgbV91c2VMYXllcmVkV2ViVmlldzsKIH07CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5M
YXVuY2hlcldlYkhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVu
Y2hlcldlYkhvc3QuaAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2lu
TGF1bmNoZXJXZWJIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDkgQEAgcHJvdGVj
dGVkOgogICAgIEhSRVNVTFQgdXBkYXRlQWRkcmVzc0JhcihJV2ViVmlldyYpOwogCiBwcml2YXRl
OgotICAgIEhXTkQgbV9oVVJMQmFyV25kOwotICAgIFVMT05HIG1fcmVmQ291bnQ7Ci0gICAgV2lu
TGF1bmNoZXIqIG1fY2xpZW50OworICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgMCB9OworICAgIEhH
RElPQkogbV9VUkxCYXJGb250IHsgMCB9OworICAgIEhHRElPQkogbV9vbGRGb250IHsgMCB9Owor
ICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07CisgICAgV2luTGF1bmNoZXIqIG1fY2xpZW50IHsg
bnVsbHB0ciB9OwogfTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCShyZXZpc2lvbiAxODcxNDQp
CisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5NYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
MTAgKzY1LDEyIEBAIGludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UKICAg
ICAvLyBJbml0IENPTQogICAgIE9sZUluaXRpYWxpemUobnVsbHB0cik7CiAKKyAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KDApOworCiAgICAgaWYgKHVz
ZXNMYXllcmVkV2ViVmlldykgewogICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwi
RURJVCIsIEwiVHlwZSBVUkwgSGVyZSIsCiAgICAgICAgICAgICBXU19PVkVSTEFQUEVEV0lORE9X
IHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgCi0g
ICAgICAgICAgICBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSArIHNfd2lu
ZG93U2l6ZS5jeSwgc193aW5kb3dTaXplLmN4LCBVUkxCQVJfSEVJR0hULAorICAgICAgICAgICAg
c2NhbGVGYWN0b3IgKiBzX3dpbmRvd1Bvc2l0aW9uLngsIHNjYWxlRmFjdG9yICogKHNfd2luZG93
UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSksIHNjYWxlRmFjdG9yICogc193aW5kb3dTaXpl
LmN4LCBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQsCiAgICAgICAgICAgICAwLCAwLCBoSW5z
dCwgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaE1haW5XbmQgPSBDcmVhdGVXaW5kb3coc3pX
aW5kb3dDbGFzcywgc3pUaXRsZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKQEAgLTc4LDggKzgwLDgg
QEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRQogICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOwogCiAgICAgICAgIGhCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwi
QlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAs
IDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgICAgIGhGb3J3YXJkQnV0dG9uV25kID0g
Q3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJT
X1RFWFQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwg
MCk7Ci0gICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJ
TEQgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBD
T05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsK
KyAgICAgICAgaEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4i
LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xC
VVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhV
UkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxF
IHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBzY2FsZUZhY3RvciAqIENP
TlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwog
CiAgICAgICAgIFNob3dXaW5kb3coaE1haW5XbmQsIG5DbWRTaG93KTsKICAgICAgICAgVXBkYXRl
V2luZG93KGhNYWluV25kKTsKQEAgLTkzLDcgKzk1LDExIEBAIGludCBXSU5BUEkgd1dpbk1haW4o
SElOU1RBTkNFLCBISU5TVEFOQ0UKIAogICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOwogCi0gICAg
UkVDVCBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24u
eSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9u
LnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKKyAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRD
bGllbnRSZWN0KGhNYWluV25kLCAmY2xpZW50UmVjdCk7CisKKyAgICBpZiAodXNlc0xheWVyZWRX
ZWJWaWV3KQorICAgICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2lu
ZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dp
bmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKIAogICAgIFdpbkxhdW5jaGVyV2Vi
SG9zdCogd2ViSG9zdCA9IG51bGxwdHI7CiAKSW5kZXg6IFRvb2xzL3dpbi9ETExMYXVuY2hlci9E
TExMYXVuY2hlck1haW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3dpbi9ETExMYXVuY2hlci9E
TExMYXVuY2hlck1haW4uY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy93aW4vRExMTGF1
bmNoZXIvRExMTGF1bmNoZXJNYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw5
IEBAIGludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKICAgICBfc2V0X0ZN
QTNfZW5hYmxlKDApOwogI2VuZGlmCiAKKyAgICBCT09MIGRpZEl0ID0gU2V0UHJvY2Vzc0RQSUF3
YXJlKCk7CisgICAgX0FTU0VSVChkaWRJdCk7CisKICNpZmRlZiBfQ1JUREJHX01BUF9BTExPQwog
ICAgIF9DcnRTZXRSZXBvcnRGaWxlKF9DUlRfV0FSTiwgX0NSVERCR19GSUxFX1NUREVSUik7CiAg
ICAgX0NydFNldFJlcG9ydE1vZGUoX0NSVF9XQVJOLCBfQ1JUREJHX01PREVfRklMRSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257279</attachid>
            <date>2015-07-22 09:53:06 -0700</date>
            <delta_ts>2015-07-22 13:38:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150722100556.patch</filename>
            <type>text/plain</type>
            <size>35439</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE1LTA3LTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHA6IFVwZGF0ZSBjbGFzcyB0byBhZGp1
c3QgbW91c2UKKyAgICAgICAgZXZlbnQgY29vcmRpbmF0ZXMgYmFzZWQgb24gc2NhbGluZyBmYWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpwb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFy
VGhlbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFyVGhpY2tuZXNzSW5QaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnNjcm9sbGJhclRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVdpbjo6dGhlbWVDaGFuZ2Vk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHA6IFVwZGF0ZSBjbGFz
cyB0byBhZGp1c3Qgd2hlZWwgZXZlbnQKKyAgICAgICAgY29vcmRpbmF0ZXMgYmFzZWQgb24gc2Nh
bGluZyBmYWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpwb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2Jh
bFBvc2l0aW9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50
OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorCiAyMDE1LTA3LTIxICBEZWFuIEphY2tzb24gIDxkaW5v
QGFwcGxlLmNvbT4KIAogICAgICAgICBEZWZhdWx0IG1lZGlhIGNvbnRyb2xzIHVzZSBhIHNlcmlm
IGZvbnQsIHdoaWNoIHNlZW1zIHdyb25nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkocmV2aXNpb24gMTg3MTQ0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSBJbmMuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgogCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dz
eC5oPgogCkBAIC0zNiw5ICszOCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUg
SElHSF9CSVRfTUFTS19TSE9SVCAweDgwMDAKIAorc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKEhXTkQgd2luZG93KQoreworICAgIEhXbmREQyBkYyh3aW5kb3cpOworICAgIHJldHVybiA6
OkdldERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7Cit9CisKIHN0YXRpYyBJbnRQ
b2ludCBwb3NpdGlvbkZvckV2ZW50KEhXTkQgaFduZCwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBQ
T0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSl9
OworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisgICAg
cG9pbnQueCA9IGNsYW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0b3IpOworICAgIHBvaW50
LnkgPSBjbGFtcFRvPGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKICAgICByZXR1cm4gcG9p
bnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9s
bGJhclRoZW1lV2luLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lV2luLmgiCiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJMb2NhbFdpbmRv
d3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCkBAIC0xMDcsMTQgKzEwOCwyMiBAQCBTY3JvbGxiYXJUaGVtZVdpbjo6flNj
cm9sbGJhclRoZW1lV2luKCkKIHsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV2luOjpzY3JvbGxi
YXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCitzdGF0aWMgaW50IHNjcm9sbGJhclRo
aWNrbmVzc0luUGl4ZWxzKCkKIHsKICAgICBzdGF0aWMgaW50IHRoaWNrbmVzczsKICAgICBpZiAo
IXRoaWNrbmVzcykKICAgICAgICAgdGhpY2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NY
VlNDUk9MTCk7CisKICAgICByZXR1cm4gdGhpY2tuZXNzOwogfQogCitpbnQgU2Nyb2xsYmFyVGhl
bWVXaW46OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3sKKyAgICBI
V25kREMgZGMoMCk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSA5Ni4wZiAvIDo6R2V0RGV2aWNl
Q2FwcyhkYywgTE9HUElYRUxTWCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50PihzY2FsZUZhY3Rv
ciAqIHNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKCkpOworfQorCiB2b2lkIFNjcm9sbGJhclRo
ZW1lV2luOjp0aGVtZUNoYW5nZWQoKQogewogICAgIGlmICghc2Nyb2xsYmFyVGhlbWUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCShyZXZp
c2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtMzYsMTYgKzM3
LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNkZWZpbmUgSElHSF9CSVRfTUFTS19TSE9SVCAw
eDgwMDAKICNkZWZpbmUgU1BJX0dFVFdIRUVMU0NST0xMQ0hBUlMgMHgwMDZDCiAKK3N0YXRpYyBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcihIV05EIHdpbmRvdykKK3sKKyAgICBIV25kREMgZGMod2lu
ZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBm
OworfQorCiBzdGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JFdmVudChIV05EIGhXbmQsIExQQVJB
TSBsUGFyYW0pCiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFNKGxQYXJhbSksIEdF
VF9ZX0xQQVJBTShsUGFyYW0pfTsKICAgICBTY3JlZW5Ub0NsaWVudChoV25kLCAmcG9pbnQpOwor
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoaFduZCk7CisgICAgcG9p
bnQueCA9IGNsYW1wVG88aW50Pihwb2ludC54IC8gc2NhbGVGYWN0b3IpOworICAgIHBvaW50Lnkg
PSBjbGFtcFRvPGludD4ocG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKICAgICByZXR1cm4gcG9pbnQ7
CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KEhXTkQgaFduZCwg
TFBBUkFNIGxQYXJhbSkKIHsKICAgICBQT0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0obFBhcmFt
KSwgR0VUX1lfTFBBUkFNKGxQYXJhbSl9OworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNl
U2NhbGVGYWN0b3IoaFduZCk7CisgICAgcG9pbnQueCA9IGNsYW1wVG88aW50Pihwb2ludC54IC8g
c2NhbGVGYWN0b3IpOworICAgIHBvaW50LnkgPSBjbGFtcFRvPGludD4ocG9pbnQueSAvIHNjYWxl
RmFjdG9yKTsKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKQEAgLTc3LDExICs5MCwxNCBAQCBQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAKICAgICAvLyBHbG9iYWwgUG9z
aXRpb24gaXMganVzdCB4LCB5IGxvY2F0aW9uIG9mIGV2ZW50CiAgICAgUE9JTlQgcG9pbnQgPSB7
bG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCl9OworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4w
ZiAvIGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOwogICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBwb2lu
dDsKKyAgICBtX2dsb2JhbFBvc2l0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7
CiAKICAgICAvLyBQb3NpdGlvbiBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIHRvIG91ciBjbGllbnQK
ICAgICBTY3JlZW5Ub0NsaWVudChoV25kLCAmcG9pbnQpOwogICAgIG1fcG9zaXRpb24gPSBwb2lu
dDsKKyAgICBtX3Bvc2l0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7CiB9CiAK
IFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQgaFduZCwgV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCBpc01vdXNlSFdoZWVsKQpAQCAtOTAsNiArMTA2
LDggQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogICAgICwgbV9n
bG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbkZvckV2ZW50KGhXbmQsIGxQYXJhbSkpCiAgICAg
LCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKIHsKKyAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworCiAgICAgLy8gSG93IG1hbnkgcGl4
ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVyIGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2Yg
dGhlCiAgICAgLy8gY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hh
bmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0aGUKICAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVu
dCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQpAQCAtOTcs
OCArMTE1LDggQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogICAg
IC8vIHNtb290aGluZyBhbGdvcml0aG0gb24gc2Nyb2xsaW5nLCBpdCBjYW4gZ2V0IGF3YXkgd2l0
aCBzbGlnaHRseSBsYXJnZXIKICAgICAvLyBzY3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBq
ZXJreS4gIEhlcmUgd2UgdXNlIDEwMCBweCBwZXIgdGhyZWUgbGluZXMKICAgICAvLyAodGhlIGRl
ZmF1bHQgc2Nyb2xsIGFtb3VudCBvbiBXaW5kb3dzIGlzIHRocmVlIGxpbmVzIHBlciB3aGVlbCB0
aWNrKS4KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgY1Njcm9sbGJhclBpeGVsc1BlckxpbmUgPSAx
MDAuMGYgLyAzLjBmOwotICAgIGZsb2F0IGRlbHRhID0gR0VUX1dIRUVMX0RFTFRBX1dQQVJBTSh3
UGFyYW0pIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdIRUVMX0RFTFRBKTsKKyAgICBzdGF0aWMgY29u
c3QgZmxvYXQgY1Njcm9sbGJhclBpeGVsc1BlckxpbmUgPSBzY2FsZUZhY3RvciAqIDEwMC4wZiAv
IDMuMGY7CisgICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQYXJhbSkg
LyAoc2NhbGVGYWN0b3IgKiBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpKTsKICAgICBp
ZiAoaXNNb3VzZUhXaGVlbCkgewogICAgICAgICAvLyBXaW5kb3dzIGlzIDwtLSAtLysgLS0+LCBX
ZWJLaXQgd2FudHMgPC0tICsvLSAtLT4sIHNvIHdlIG5lZ2F0ZQogICAgICAgICAvLyB8ZGVsdGF8
IGFmdGVyIHNhdmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgb24gdGhlIHdoZWVsIHRpY2sgbWVtYmVy
LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTUtMDct
MjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0g
SW1wbGVtZW50IEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzNQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6
IFNpemUKKyAgICAgICAgcGFnZSBmb3IgY3VycmVudCBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAg
ICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVj
dFRvQ29udGV4dCk6IEFjY291bnQgZm9yIGRldmljZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnJlcGFpbnQpOiBBZGp1c3Qg
cGFpbnQgcmVjdCBmb3IgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYlZpZXc6OnNj
cm9sbEJhY2tpbmdTdG9yZSk6IEFkanVzdCBjb29yZGluYXRlcyBmb3Igc2NhbGUgZmFjdG9yLgor
ICAgICAgICAoV2ViVmlldzo6c2l6ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6
OnVwZGF0ZUJhY2tpbmdTdG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6IERpdHRvLgor
ICAgICAgICAoV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViVmlldzo6Z2VzdHVyZU5vdGlmeSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6Z2Vz
dHVyZSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3cp
OiBBZGp1c3QgbWF4IHRvb2wgdGlwIHdpZHRoCisgICAgICAgIGZvciBkZXZpY2Ugc2NhbGUgZmFj
dG9yLgorICAgICAgICAoV2ViVmlldzo6c2VsZWN0aW9uUmVjdCk6IEFkanVzdCBjb29yZGluYXRl
cyBmb3Igc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnNjcm9sbE9mZnNldCk6IERpdHRvLgorICAgICAgICAo
V2ViVmlldzo6c2Nyb2xsQnkpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnZpc2libGVDb250
ZW50UmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6cGFpbnRDb250ZW50cyk6IERpdHRv
LgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAxNS0wNy0yMSAgU3VuZ21hbm4gQ2hvICA8c3Vu
Z21hbm4uY2hvQG5hdmVyY29ycC5jb20+CiAKICAgICAgICAgW1dpbl0gQWRkIG5lZWRUb3VjaEV2
ZW50cygpIHN0dWIgdG8gV2ViQ2hyb21lQ2xpZW50LmggZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZCB3
aXRoIEVOQUJMRV9UT1VDSF9FVkVOVFM9T04KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50RG9jdW1l
bnRSZWN0VG9Db24KICAgICBkaXJ0eVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7CiAgICAgZ2MuY2xp
cChkaXJ0eVJlY3QpOwogICAgIGdjLnRyYW5zbGF0ZSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOwor
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gd2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIGdjLnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3Ip
KTsKICAgICB2aWV3LT5wYWludENvbnRlbnRzKCZnYywgcmVjdCk7CiAgICAgZ2MucmVzdG9yZSgp
OwogCkBAIC0zNjAsNiArMzYyLDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3
UmVjdFRvQwogICAgIGdjLnNhdmUoKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdChyZWN0KTsKICAg
ICBkaXJ0eVJlY3QubW92ZSgtcHQueCwgLXB0LnkpOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
d2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdjLnNjYWxlKFdlYkNvcmU6OkZs
b2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICB2aWV3LT5wYWludCgmZ2Ms
IGRpcnR5UmVjdCk7CiAgICAgZ2MucmVzdG9yZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
UHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lk
IFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVmYXVsdFNlCiAKICAgICBDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGRlZmF1bHRzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRT
dGFuZGFyZEZvbnRQcmVmZXJlbmNlS2V5KSwgQ0ZTVFIoIlNlZ29lIFVJIikpOworICAgIENGRGlj
dGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRTdGFuZGFyZEZvbnRQcmVmZXJl
bmNlS2V5KSwgQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpKTsKICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0Rml4ZWRGb250UHJlZmVyZW5jZUtleSksIENGU1RS
KCJDb3VyaWVyIE5ldyIpKTsKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZT
VFIoV2ViS2l0U2VyaWZGb250UHJlZmVyZW5jZUtleSksIENGU1RSKCJUaW1lcyBOZXcgUm9tYW4i
KSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFNhbnNT
ZXJpZkZvbnRQcmVmZXJlbmNlS2V5KSwgQ0ZTVFIoIkFyaWFsIikpOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjEsOCArODIxLDExIEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6Y2xvc2UKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBXZWJW
aWV3OjpyZXBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd1JlY3QsIGJvb2wgY29u
dGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25seSkKK3Zv
aWQgV2ViVmlldzo6cmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBsb2dpY2FsV2luZG93
UmVjdCwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENv
bnRlbnRPbmx5KQogeworICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVjdChsb2dpY2FsV2lu
ZG93UmVjdCk7CisgICAgd2luZG93UmVjdC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwog
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewogICAgICAgICAvLyBUaGUgY29u
dGVudENoYW5nZWQsIGltbWVkaWF0ZSwgYW5kIHJlcGFpbnRDb250ZW50T25seSBwYXJhbWV0ZXJz
IGFyZSBhbGwgYmFzZWQgb24gYSBub24tCiAgICAgICAgIC8vIGNvbXBvc2l0aW5nIHBhaW50aW5n
L3Njcm9sbGluZyBtb2RlbC4KQEAgLTkyMCwxMCArOTIzLDE5IEBAIHZvaWQgV2ViVmlldzo6YWRk
VG9EaXJ0eVJlZ2lvbihHRElPYmplY3QKICAgICAgICAgbV91aURlbGVnYXRlUHJpdmF0ZS0+d2Vi
Vmlld0RpZEludmFsaWRhdGUodGhpcyk7CiB9CiAKLXZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2lu
Z1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVj
dCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQordm9pZCBXZWJWaWV3
OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGludCBsb2dpY2FsRHgs
IGludCBsb2dpY2FsRHksIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxTY3JvbGxWaWV3UmVjdCwgY29u
c3QgSW50UmVjdCYgbG9naWNhbENsaXBSZWN0KQogewogICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1
ZTsKIAorICAgIC8vIERpbWVuc2lvbnMgcGFzc2VkIHRvIHVzIGZyb20gV2ViQ29yZSBhcmUgaW4g
bG9naWNhbCB1bml0cy4gV2UgbXVzdCBjb252ZXJ0IHRvIHBpeGVsczoKKyAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgaW50IGR4ID0gY2xhbXBUbzxpbnQ+
KHNjYWxlRmFjdG9yICogbG9naWNhbER4KTsKKyAgICBpbnQgZHkgPSBjbGFtcFRvPGludD4oc2Nh
bGVGYWN0b3IgKiBsb2dpY2FsRHkpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QobG9naWNh
bFNjcm9sbFZpZXdSZWN0KTsKKyAgICBzY3JvbGxWaWV3UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7
CisgICAgSW50UmVjdCBjbGlwUmVjdChsb2dpY2FsQ2xpcFJlY3QpOworICAgIGNsaXBSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yKTsKKwogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkg
ewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGRvaW5nIHNvbWV0aGluZyBzbWFydGVy
IGhlcmUsIGxpa2UgbW92aW5nIHRpbGVzIGFyb3VuZCBhbmQgcGFpbnRpbmcKICAgICAgICAgLy8g
YW55IG5ld2x5LWV4cG9zZWQgdGlsZXMuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzUyNzE0PgpAQCAt
OTUyLDcgKzk2NCw3IEBAIHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFja2luZ1N0b3JlKEZyYW1lVmkK
ICAgICBIV25kREMgd2luZG93REMobV92aWV3V2luZG93KTsKICAgICBhdXRvIGJpdG1hcERDID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpKTsKICAgICBIR0RJ
T0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBtX2JhY2tpbmdT
dG9yZUJpdG1hcC0+Z2V0KCkpOwotICAgIAorCiAgICAgLy8gU2Nyb2xsIHRoZSBiaXRtYXAuCiAg
ICAgUkVDVCBzY3JvbGxSZWN0V2luKHNjcm9sbFZpZXdSZWN0KTsKICAgICBSRUNUIGNsaXBSZWN0
V2luKGNsaXBSZWN0KTsKQEAgLTk4Miw4ICs5OTQsMTEgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hh
bmdlZChjb25zdCBJbnRTaXplJgogCiAgICAgZGVsZXRlQmFja2luZ1N0b3JlKCk7CiAKLSAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkKLSAgICAgICAgY29y
ZUZyYW1lLT52aWV3KCktPnJlc2l6ZShuZXdTaXplKTsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUodG9wTGV2ZWxGcmFtZSgpKSkgeworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
ID0gbmV3U2l6ZTsKKyAgICAgICAgbG9naWNhbFNpemUuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+cmVzaXplKGxvZ2ljYWxTaXpl
KTsKKyAgICB9CiAKICNpZiBVU0UoQ0EpCiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKQEAgLTEy
NTAsNyArMTI2NSwxMSBAQCB2b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFt
CiAKICAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+ZnJhbWUoKS5jb250ZW50UmVuZGVy
ZXIoKSkgewogICAgICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CisgICAgICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgZ2Muc2F2ZSgpOworICAgICAg
ICBnYy5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgICAg
IGZyYW1lVmlldy0+cGFpbnQoJmdjLCBkaXJ0eVJlY3QpOworICAgICAgICBnYy5yZXN0b3JlKCk7
CiAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9ycykKICAgICAgICAgICAgIGdjLmZpbGxS
ZWN0KGRpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVEaWZmZXJlbmNlKTsKICAgICB9CkBAIC0xNDIyLDkgKzE0NDEsMTMgQEAgYm9vbCBXZWJWaWV3
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogCiAgICAgbFBhcmFtID0gTUFLRUxQQVJBTShj
b29yZHMueCwgY29vcmRzLnkpOwogCisgICAgLy8gQ29udmVydCBjb29yZGluYXRlcyB0byBsb2dp
Y2FsIHBpeGVscworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsK
KyAgICBJbnRQb2ludCBsb2dpY2FsQ29vcmRzKGNvb3Jkcy54IC8gc2NhbGVGYWN0b3IsIGNvb3Jk
cy55IC8gc2NhbGVGYWN0b3IpOworCiAgICAgbV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIo
KS5jbGVhckNvbnRleHRNZW51KCk7CiAKLSAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50KG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGNvb3JkcykpOworICAgIElu
dFBvaW50IGRvY3VtZW50UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMobG9naWNhbENvb3JkcykpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChkb2N1
bWVudFBvaW50KTsKICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUo
KSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCkBA
IC0xNDQ5LDcgKzE0NzIsOCBAQCBib29sIFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQo
V1BBCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQT0lOVCBw
b2ludCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRNZW51Q29udHJvbGxlci5oaXRUZXN0
UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKSk7CisgICAgSW50UG9pbnQg
bG9naWNhbFBvaW50ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xs
ZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSk7CisgICAg
UE9JTlQgcG9pbnQgPSB7IGxvZ2ljYWxQb2ludC54KCkgKiBzY2FsZUZhY3RvciwgbG9naWNhbFBv
aW50LnkoKSAqIHNjYWxlRmFjdG9yIH07CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIHBvaW50IHRv
IHNjcmVlbiBjb29yZGluYXRlcwogICAgIGlmICghOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5k
b3csICZwb2ludCkpCkBAIC0xNjQ0LDYgKzE2NjgsMTAgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJl
Tm90aWZ5KFdQQVJBTSB3UGFyYQogCiAgICAgYm9vbCBoaXRTY3JvbGxiYXIgPSBmYWxzZTsKICAg
ICBQT0lOVCBnZXN0dXJlQmVnaW5Qb2ludCA9IHtnbi0+cHRzTG9jYXRpb24ueCwgZ24tPnB0c0xv
Y2F0aW9uLnl9OworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3Rvcigp
OworICAgIEludFBvaW50IGxvZ2ljYWxHZXN0dXJlQmVnaW5Qb2ludChnZXN0dXJlQmVnaW5Qb2lu
dC54IC8gc2NhbGVGYWN0b3IsIGdlc3R1cmVCZWdpblBvaW50LnkgLyBzY2FsZUZhY3Rvcik7CisK
ICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQpOwogICAgIGZvciAoRnJhbWUqIGNo
aWxkRnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9
IEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKG1fZ2VzdHVyZVRhcmdldE5vZGUu
Z2V0KCkpKSB7CiAgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY2hpbGRGcmFtZS0+dmll
dygpOwpAQCAtMTY1Niw3ICsxNjg0LDcgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQ
QVJBTSB3UGFyYQogICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKGdl
c3R1cmVCZWdpblBvaW50KSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGZyYW1lVmll
dy0+c2NyZWVuVG9Db250ZW50cyhsb2dpY2FsR2VzdHVyZUJlZ2luUG9pbnQpKTsKICAgICAgICAg
bGF5ZXItPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0
Tm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKIApAQCAtMTc2MSwxMyArMTc4OSwxNSBAQCBib29s
IFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBCiAgICAgICAgIH0KIAogICAgICAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsZWRBcmVhID0gMDsKKyAgICAgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTY3Jv
bGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0YVkgKiBzY2FsZUZhY3Rvcik7CiAK
ICAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFtX2dlc3R1cmVUYXJnZXROb2Rl
LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhl
IGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKLSAgICAgICAgICAgIGNvcmVGcmFt
ZS0+dmlldygpLT5zY3JvbGxCeShJbnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKyAgICAgICAg
ICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAg
ICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5n
TGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHko
SW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSwgV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNjcm9sbE9m
ZnNldENsYW1wZWQsICZzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCBXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCwgJnNjcm9sbGVkQXJlYSk7CiAKICAgICAg
ICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJh
Y2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3Nl
R2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsKQEAgLTIyMDYsNyArMjIzNiwx
MSBAQCB2b2lkIFdlYlZpZXc6OnNldFNob3VsZEludmVydENvbG9ycyhib29sCiAKICAgICBSRUNU
IHdpbmRvd1JlY3QgPSB7MH07CiAgICAgZnJhbWVSZWN0KCZ3aW5kb3dSZWN0KTsKLSAgICByZXBh
aW50KHdpbmRvd1JlY3QsIHRydWUsIHRydWUpOworCisgICAgLy8gcmVwYWludCBleHBlY3RzIGxv
Z2ljYWwgcGl4ZWxzLCBzbyByZXNjYWxlIGhlcmUuCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCh3
aW5kb3dSZWN0KTsKKyAgICBsb2dpY2FsUmVjdC5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisgICAgcmVwYWludChsb2dpY2FsUmVjdCwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIGJvb2wg
V2ViVmlldzo6cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKQpAQCAtMjkxNiw3ICsyOTUwLDcg
QEAgdm9pZCBXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdpbmRvdygpCiAgICAgaW5mby51SWQg
PSByZWludGVycHJldF9jYXN0PFVJTlRfUFRSPihtX3ZpZXdXaW5kb3cpOwogCiAgICAgOjpTZW5k
TWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fQUREVE9PTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxM
UEFSQU0+KCZpbmZvKSk7Ci0gICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fU0VU
TUFYVElQV0lEVEgsIDAsIG1heFRvb2xUaXBXaWR0aCk7CisgICAgOjpTZW5kTWVzc2FnZShtX3Rv
b2xUaXBId25kLCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIGNsYW1wVG88aW50PihtYXhUb29sVGlw
V2lkdGggKiBkZXZpY2VTY2FsZUZhY3RvcigpKSk7CiAKICAgICA6OlNldFdpbmRvd1BvcyhtX3Rv
b2xUaXBId25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUg
fCBTV1BfTk9BQ1RJVkFURSk7CiB9CkBAIC0zNjg3LDE3ICszNzIxLDE5IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Z2VuZXIKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQor
SFJFU1VMVCBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQogewogICAgIFdlYkNvcmU6
OkZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAKICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaXIgPSBmcmFtZS52aWV3KCktPmNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3coaXIpOwogICAgIGlyLm1vdmUoLWZyYW1lLnZpZXcoKS0+c2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKSwgLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkp
OwotICAgIHJjLT5sZWZ0ID0gaXIueCgpOwotICAgIHJjLT50b3AgPSBpci55KCk7Ci0gICAgcmMt
PmJvdHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKTsKLSAgICByYy0+cmlnaHQgPSByYy0+bGVm
dCArIGlyLndpZHRoKCk7CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgcmMtPmxlZnQgPSBpci54KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+dG9w
ID0gaXIueSgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPmJvdHRvbSA9IHJjLT50b3AgKyBpci5o
ZWlnaHQoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5yaWdodCA9IHJjLT5sZWZ0ICsgaXIud2lk
dGgoKSAqIHNjYWxlRmFjdG9yOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzc0LDkgKzM4
MTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmlzTG9hCiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAgICAgCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmVs
ZW1lbnRBdFBvaW50KCAKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50LAotICAgICAg
ICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIGVsZW1lbnREaWN0aW9uYXJ5KQor
SFJFU1VMVCBXZWJWaWV3OjplbGVtZW50QXRQb2ludChMUFBPSU5UIHBvaW50LCBJUHJvcGVydHlC
YWcqKiBlbGVtZW50RGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWVsZW1lbnREaWN0aW9uYXJ5KSB7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc5MCw2ICszODI0LDggQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogCiAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQtPngsIHBv
aW50LT55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rv
cigpOworICAgIHdlYkNvcmVQb2ludC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwog
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJlc3VsdCh3ZWJDb3JlUG9pbnQpOwog
ICAgIGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJlc3VsdCA9IGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCh3ZWJDb3JlUG9pbnQpOwpAQCAt
NTMwNiwzMiArNTM0MiwzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmZy
YW1lCiAgICAgcmV0dXJuIG1fZnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmNvcHlSZWZUbyhkKTsK
IH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzY3JvbGxPZmZzZXQoIAot
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdlYlZpZXc6
OnNjcm9sbE9mZnNldChMUFBPSU5UIG9mZnNldCkKIHsKICAgICBpZiAoIW9mZnNldCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICBJbnRTaXplIG9mZnNldEludFNpemUgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBvZmZzZXRJbnRTaXpl
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgb2Zmc2V0LT54ID0gb2Zmc2V0SW50
U2l6ZS53aWR0aCgpOwogICAgIG9mZnNldC0+eSA9IG9mZnNldEludFNpemUuaGVpZ2h0KCk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6
c2Nyb2xsQnkoIAotICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBvZmZzZXQpCitIUkVTVUxUIFdlYlZp
ZXc6OnNjcm9sbEJ5KExQUE9JTlQgb2Zmc2V0KQogewogICAgIGlmICghb2Zmc2V0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zY3Jv
bGxCeShJbnRTaXplKG9mZnNldC0+eCwgb2Zmc2V0LT55KSk7CisKKyAgICBJbnRTaXplIHNjcm9s
bERlbHRhKG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKyAgICBzY3JvbGxEZWx0YS5zY2FsZSgxLjBm
IC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoIAotICAgIC8qIFty
ZXR2YWxdW291dF0gKi8gTFBSRUNUIHJlY3QpCitIUkVTVUxUIFdlYlZpZXc6OnZpc2libGVDb250
ZW50UmVjdChMUFJFQ1QgcmVjdCkKIHsKICAgICBpZiAoIXJlY3QpCiAgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnQgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgdmlzaWJsZUNvbnRlbnQu
c2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgcmVjdC0+bGVmdCA9IChMT05HKSB2aXNp
YmxlQ29udGVudC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcpIHZpc2libGVDb250ZW50Lnko
KTsKICAgICByZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhYKCk7CkBAIC01
Njg2LDYgKzU3MjcsOCBAQCB2b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3coRnJh
CiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdl
KHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CisKICAgICBDQU5ESURBVEVGT1JNIGZvcm07CiAgICAgZm9ybS5kd0luZGV4ID0g
MDsKICAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsKQEAgLTU5NDUsNiArNTk4OCw3IEBA
IExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW8KICAgICAgICAgY2FyZXQg
PSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgp
KTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBj
aGFyUG9zLT5wdC54ID0gY2FyZXQueCgpOwogICAgIGNoYXJQb3MtPnB0LnkgPSBjYXJldC55KCk7
CiAgICAgOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZjaGFyUG9zLT5wdCk7CkBAIC02
NjIyLDcgKzY2NjYsNiBAQCB2b2lkIFdlYlZpZXc6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmco
CiAgICAgICAgICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2luZG93LCAmY2xpZW50UmVjdCk7
CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0U2l6ZShJbnRSZWN0KGNsaWVudFJlY3Qp
LnNpemUoKSk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
Ci0KICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENoaWxkTGF5ZXIoUGxhdGZv
cm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV9iYWNraW5nTGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSkpOwogCiAgICAgICAgICAgICAvLyBXZSBhcmVuJ3QgZ29pbmcgdG8gYmUgdXNpbmcgb3VyIGJh
Y2tpbmcgc3RvcmUgd2hpbGUgd2UncmUgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKQEAgLTY3
NzksNiArNjgyMiw4IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGkK
IAogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcChpbkNsaXApOworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBjb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICBmcmFtZS0+dmlldygp
LT5wYWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChpbkNsaXApKTsKICAgICBjb250ZXh0
LnJlc3RvcmUoKTsKIH0KQEAgLTcxMjIsNiArNzE2Nyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVmlldzo6Zmlyc3QKICAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5m
aXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAgcmVzdWx0SW50UmVjdCA9IGZyYW1l
LnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAorICAgIHJlc3VsdEludFJlY3Quc2Nh
bGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICByZXN1bHRSZWN0LT5sZWZ0ID0gcmVzdWx0
SW50UmVjdC54KCk7CiAgICAgcmVzdWx0UmVjdC0+dG9wID0gcmVzdWx0SW50UmVjdC55KCk7CiAg
ICAgcmVzdWx0UmVjdC0+cmlnaHQgPSByZXN1bHRJbnRSZWN0LngoKSArIHJlc3VsdEludFJlY3Qu
d2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTg4LDYgKzk4OCw5IEBA
IHB1YmxpYzoKICAgICAvKiBbb3V0LCByZXR2YWxdICovIFJFQ1QqIHJlc3VsdFJlY3QpOwogCiAg
ICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZWxlY3RlZFJhbmdlRm9yVGVzdGluZygvKiBb
b3V0XSAqLyBVSU5UKiBsb2NhdGlvbiwgLyogW291dF0gKi8gVUlOVCogbGVuZ3RoKTsKKworICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRab29tTXVsdGlwbGllcihmbG9hdCBtdWx0aXBsaWVyLCBib29sIGlzVGV4dE9ubHkpOwogICAg
IGZsb2F0IHpvb21NdWx0aXBsaWVyKGJvb2wgaXNUZXh0T25seSk7CkBAIC0xMDI2LDggKzEwMjks
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRJbnZlcnRDb2xvcnM7CiAgICAgdm9pZCBz
ZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCk7CiAKLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJXZWJWaWV3
V2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3V25kUHJv
YyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMTcsMTEgKzEwMTcsMTMgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
dHJhbnNpdGlvblRvQwogewogICAgIFdlYlZpZXcqIHZpZXcgPSBtX3dlYkZyYW1lLT53ZWJWaWV3
KCk7CiAKLSAgICBSRUNUIHJlY3Q7Ci0gICAgdmlldy0+ZnJhbWVSZWN0KCZyZWN0KTsKKyAgICBS
RUNUIHBpeGVsUmVjdDsKKyAgICB2aWV3LT5mcmFtZVJlY3QoJnBpeGVsUmVjdCk7CiAgICAgYm9v
bCB0cmFuc3BhcmVudCA9IHZpZXctPnRyYW5zcGFyZW50KCk7CiAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yID0gdHJhbnNwYXJlbnQgPyBDb2xvcjo6dHJhbnNwYXJlbnQgOiBDb2xvcjo6d2hpdGU7
Ci0gICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhJbnRSZWN0KHJlY3QpLnNpemUoKSwg
YmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CisgICAgSW50UmVjdCBsb2dpY2FsRnJhbWUo
cGl4ZWxSZWN0KTsKKyAgICBsb2dpY2FsRnJhbWUuc2NhbGUoMS4wZiAvIHZpZXctPmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgIGNvcmUobV93ZWJGcmFtZSktPmNyZWF0ZVZpZXcobG9naWNhbEZy
YW1lLnNpemUoKSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CiB9CiAKIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODcxNDQpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNS0w
Ny0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2lu
XSBJbXBsZW1lbnQgcHJvcGVyIEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVyZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzNQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBkYXRlIFdpbkxhdW5jaGVyIHRvIHRha2UgZGV2aWNlIHNjYWxpbmcg
ZmFjdG9yIGludG8gYWNjb3VudC4KKworICAgICAgICAqIFdpbkxhdW5jaGVyL0NvbW1vbi5jcHA6
CisgICAgICAgIChyZXNpemVTdWJWaWV3cyk6IE1ha2Ugc3VyZSB0b29sYmFycyBhbmQgVVJMIGJh
ciBhcmUgcHJvcGVybHkgc2l6ZWQgYW5kIHVzaW5nCisgICAgICAgIGEgdmFsaWQgZm9udC4KKyAg
ICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKTogSGFuZGxlIGhpZ2ggRFBJIGRlc2t0b3Bz
LgorICAgICAgICAoV25kUHJvYyk6IE1ha2UgY29tbWVudHMgbW9yZSBwcmVjaXNlLgorICAgICAg
ICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcDoKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpp
bml0KTogRGV0ZXJtaW5lIGRldmljZSBzY2FsZSBmYWN0b3IgYXQgbGF1bmNoLgorICAgICAgICAo
V2luTGF1bmNoZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKTogQWRkZWQuCisgICAgICAgICog
V2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaDoKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVu
Y2hlcldlYkhvc3QuaDogVXNlIEMrKzExIGluaXRpYWxpemF0aW9uLgorICAgICAgICAqIFdpbkxh
dW5jaGVyL1dpbk1haW4uY3BwOiBTaXplIGludGVyZmFjZSBiYXNlZCBvbiBzY2FsaW5nIGZhY3Rv
ci4KKyAgICAgICAgKHdXaW5NYWluKTogRGl0dG8uCisgICAgICAgICogd2luL0RMTExhdW5jaGVy
L0RMTExhdW5jaGVyTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6IFRlbGwgV2luZG93cyB3
ZSB1bmRlcnN0YW5kIGhpZ2ggRFBJLgorCiAyMDE1LTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgVk0gcG9vbCBhbGxvY2F0aW9uIHNob3VsZCBo
YXZlIGEgcmVzZXJ2ZSBmb3IgYWxsb2NhdGlvbnMgdGhhdCBjYW5ub3QgZmFpbApJbmRleDogVG9v
bHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hl
ci9Db21tb24uY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9Db21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBAIHR5cGVkZWYgX2NvbV9wdHJf
dDxfY29tX0lJSUQ8SVdlYk11dGFibGUKIEhJTlNUQU5DRSBoSW5zdDsKIEhXTkQgaE1haW5XbmQ7
CiBIV05EIGhVUkxCYXJXbmQ7CitIR0RJT0JKIGhPbGRGb250OworSEdESU9CSiBoVVJMRm9udDsK
IEhXTkQgaEJhY2tCdXR0b25XbmQ7CiBIV05EIGhGb3J3YXJkQnV0dG9uV25kOwogSFdORCBoQ2Fj
aGVXbmQ7CkBAIC0xMDEsMTcgKzEwMywzOCBAQCBJTlRfUFRSIENBTExCQUNLIENhY2hlcyhIV05E
LCBVSU5ULCBXUEFSCiBzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJsQlN0cik7CiBzdGF0aWMg
dm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhXTkQgaERsZyk7CiAKK3N0YXRpYyBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvckZvcldpbmRvdyhIV05EIHdpbmRvdykKK3sKKyAgICBIREMgZGMgPSA6OkdldERD
KHdpbmRvdyk7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSA6OkdldERldmljZUNhcHMo
ZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7CisgICAgOjpSZWxlYXNlREMod2luZG93LCBkYyk7Cisg
ICAgcmV0dXJuIGRldmljZVNjYWxlRmFjdG9yOworfQorCiBzdGF0aWMgdm9pZCByZXNpemVTdWJW
aWV3cygpCiB7CiAgICAgaWYgKGdXaW5MYXVuY2hlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwg
IWdWaWV3V2luZG93KQogICAgICAgICByZXR1cm47CiAKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGdWaWV3V2luZG93KTsKKwogICAgIFJFQ1QgcmND
bGllbnQ7CiAgICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJjQ2xpZW50KTsKLSAgICBNb3Zl
V2luZG93KGhCYWNrQnV0dG9uV25kLCAwLCAwLCBDT05UUk9MQlVUVE9OX1dJRFRILCBVUkxCQVJf
SEVJR0hULCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJkQnV0dG9uV25kLCBDT05UUk9M
QlVUVE9OX1dJRFRILCAwLCBDT05UUk9MQlVUVE9OX1dJRFRILCBVUkxCQVJfSEVJR0hULCBUUlVF
KTsKLSAgICBNb3ZlV2luZG93KGhVUkxCYXJXbmQsIENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAw
LCByY0NsaWVudC5yaWdodCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhn
Vmlld1dpbmRvdywgMCwgVVJMQkFSX0hFSUdIVCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJv
dHRvbSAtIFVSTEJBUl9IRUlHSFQsIFRSVUUpOworCisgICAgaW50IGhlaWdodCA9IHNjYWxlRmFj
dG9yICogVVJMQkFSX0hFSUdIVDsKKyAgICBpbnQgd2lkdGggPSBzY2FsZUZhY3RvciAqIENPTlRS
T0xCVVRUT05fV0lEVEg7CisKKyAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9uV25kLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KGhGb3J3YXJkQnV0dG9uV25kLCB3
aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhoVVJMQmFyV25k
LCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVX
aW5kb3coZ1ZpZXdXaW5kb3csIDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJv
dHRvbSAtIGhlaWdodCwgVFJVRSk7CisKKyAgICBpZiAoIWhVUkxGb250KSB7CisgICAgICAgIGhV
UkxGb250ID0gOjpDcmVhdGVGb250KHNjYWxlRmFjdG9yICogMTgsIDAsIDAsIDAsIEZXX05PUk1B
TCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgREVGQVVMVF9DSEFSU0VULAorICAgICAgICAgICAgT1VU
X1RUX09OTFlfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJFQ0lTLCBBTlRJQUxJQVNFRF9RVUFMSVRZ
LCBGRl9ET05UQ0FSRSwgTCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICB9CisKKyAgICA6OlNlbmRN
ZXNzYWdlKGhVUkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZPTlQpLCByZWludGVy
cHJldF9jYXN0PFdQQVJBTT4oaFVSTEZvbnQpLCBUUlVFKTsKIH0KIAogc3RhdGljIHZvaWQgc3Vi
Y2xhc3NGb3JMYXllcmVkV2luZG93KCkKQEAgLTEzMiwxMCArMTU1LDEyIEBAIHN0YXRpYyB2b2lk
IGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCkKICAgICBpZiAoITo6U3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVFdPUktBUkVBLCAwLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmRlc2t0b3ApLCAwKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZh
Y3RvckZvcldpbmRvdygwKTsKKwogICAgIHNfd2luZG93UG9zaXRpb24ueCA9IDA7CiAgICAgc193
aW5kb3dQb3NpdGlvbi55ID0gMDsKLSAgICBzX3dpbmRvd1NpemUuY3ggPSBkZXNrdG9wLnJpZ2h0
IC0gZGVza3RvcC5sZWZ0OwotICAgIHNfd2luZG93U2l6ZS5jeSA9IGRlc2t0b3AuYm90dG9tIC0g
ZGVza3RvcC50b3A7CisgICAgc193aW5kb3dTaXplLmN4ID0gc2NhbGVGYWN0b3IgKiAoZGVza3Rv
cC5yaWdodCAtIGRlc2t0b3AubGVmdCk7CisgICAgc193aW5kb3dTaXplLmN5ID0gc2NhbGVGYWN0
b3IgKiAoZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcCk7CiB9CiAKIEJPT0wgV0lOQVBJIERs
bE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCkKQEAgLTQy
MSwxMyArNDQ2LDEzIEBAIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQK
ICAgICAgICAgICAgIC8vIEZvciB0ZXN0aW5nIG91ciB0cmFuc3BhcmVudCB3aW5kb3csIHdlIG5l
ZWQgYSByZWdpb24gdG8gdXNlIGFzIGEgaGFuZGxlIGZvcgogICAgICAgICAgICAgLy8gZHJhZ2dp
bmcuIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBxdWVyeSB0aGUgd2ViIHZp
ZXcgdG8gc2VlIHdoYXQncwogICAgICAgICAgICAgLy8gdW5kZXIgdGhlIG1vdXNlLiBIb3dldmVy
LCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKLSAgICAgICAg
ICAgIC8vIDMwIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJh
cnkgZ3JpcHBpbmcgbG9jYXRpb24uCisgICAgICAgICAgICAvLyAzMCBsb2dpY2FsIHBpeGVsIGJh
bmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRp
b24uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgd2l0aGluIHRo
aXMgYmFkLCByZXR1cm4gSFRfQ0FQVElPTiB0byB0ZWxsIFdpbmRvd3Mgd2Ugd2FudCB0bwogICAg
ICAgICAgICAgLy8gdHJlYXQgdGhpcyByZWdpb24gYXMgaWYgaXQgd2VyZSB0aGUgdGl0bGUgYmFy
IG9uIGEgbm9ybWFsIHdpbmRvdy4KICAgICAgICAgICAgIGludCB5ID0gSElXT1JEKGxQYXJhbSk7
CiAKLSAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5IDwgd2luZG93LnRvcCAr
IGRyYWdCYXJIZWlnaHQpKQorICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkg
PCB3aW5kb3cudG9wICsgKGRyYWdCYXJIZWlnaHQgKiBnV2luTGF1bmNoZXItPmRldmljZVNjYWxl
RmFjdG9yKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSFRDQVBUSU9OOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdl
LCB3UGFyYW0sIGxQYXJhbSk7CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCShyZXZp
c2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVy
YXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEFs
ZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC02MSw2ICs2MSw4IEBAIFdp
bkxhdW5jaGVyOjpXaW5MYXVuY2hlcihIV05EIG1haW5XbmQsIEgKIAogSFJFU1VMVCBXaW5MYXVu
Y2hlcjo6aW5pdCgpCiB7CisgICAgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKwogICAgIEhS
RVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJWaWV3LCAwLCBJSURfSVdl
YlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3LkdldEludGVyZmFjZVB0
cigpKSk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKQEAgLTQ3OCwz
ICs0ODAsMTAgQEAgdm9pZCBXaW5MYXVuY2hlcjo6em9vbU91dCgpCiAKICAgICB3ZWJBY3Rpb25z
LT56b29tUGFnZU91dChudWxscHRyKTsKIH0KKwordm9pZCBXaW5MYXVuY2hlcjo6dXBkYXRlRGV2
aWNlU2NhbGVGYWN0b3IoKQoreworICAgIEhEQyBkYyA9IDo6R2V0REMobV9oTWFpblduZCk7Cisg
ICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkg
LyA5Ni4wZjsKKyAgICA6OlJlbGVhc2VEQyhtX2hNYWluV25kLCBkYyk7Cit9CkluZGV4OiBUb29s
cy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5j
aGVyL1dpbkxhdW5jaGVyLmgJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL1dpbkxhdW5jaGVy
L1dpbkxhdW5jaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2ICs5MCw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHpvb21JbigpOwogICAgIHZvaWQgem9vbU91dCgpOwogCisgICAgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IoKSB7IHJldHVybiBtX2RldmljZVNjYWxlRmFjdG9yOyB9CisgICAgdm9pZCB1
cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCiBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPElX
ZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRlbXM7CiAKQEAgLTExNSw1ICsxMTgsNiBAQCBw
cml2YXRlOgogICAgIEhXTkQgbV9oTWFpblduZDsKICAgICBIV05EIG1faFVSTEJhclduZDsKIAor
ICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3IgeyAxLjBmIH07CiAgICAgYm9vbCBtX3VzZUxh
eWVyZWRXZWJWaWV3OwogfTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2Vi
SG9zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9z
dC5oCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldl
Ykhvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
SFJFU1VMVCB1cGRhdGVBZGRyZXNzQmFyKElXZWJWaWV3Jik7CiAKIHByaXZhdGU6Ci0gICAgSFdO
RCBtX2hVUkxCYXJXbmQ7Ci0gICAgVUxPTkcgbV9yZWZDb3VudDsKLSAgICBXaW5MYXVuY2hlciog
bV9jbGllbnQ7CisgICAgSFdORCBtX2hVUkxCYXJXbmQgeyAwIH07CisgICAgSEdESU9CSiBtX1VS
TEJhckZvbnQgeyAwIH07CisgICAgSEdESU9CSiBtX29sZEZvbnQgeyAwIH07CisgICAgVUxPTkcg
bV9yZWZDb3VudCB7IDAgfTsKKyAgICBXaW5MYXVuY2hlciogbV9jbGllbnQgeyBudWxscHRyIH07
CiB9OwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xz
L1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMCArNjUsMTIg
QEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRQogICAgIC8vIEluaXQg
Q09NCiAgICAgT2xlSW5pdGlhbGl6ZShudWxscHRyKTsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coMCk7CisKICAgICBpZiAodXNlc0xheWVyZWRX
ZWJWaWV3KSB7CiAgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgTCJU
eXBlIFVSTCBIZXJlIiwKICAgICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5ET1cgfCBXU19WSVNJ
QkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAKLSAgICAgICAgICAg
IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5
LCBzX3dpbmRvd1NpemUuY3gsIFVSTEJBUl9IRUlHSFQsCisgICAgICAgICAgICBzY2FsZUZhY3Rv
ciAqIHNfd2luZG93UG9zaXRpb24ueCwgc2NhbGVGYWN0b3IgKiAoc193aW5kb3dQb3NpdGlvbi55
ICsgc193aW5kb3dTaXplLmN5KSwgc2NhbGVGYWN0b3IgKiBzX3dpbmRvd1NpemUuY3gsIHNjYWxl
RmFjdG9yICogVVJMQkFSX0hFSUdIVCwKICAgICAgICAgICAgIDAsIDAsIGhJbnN0LCAwKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNz
LCBzelRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLApAQCAtNzgsOCArODAsOCBAQCBpbnQgV0lO
QVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CiAKICAgICAgICAgaEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBM
IjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwgaE1haW5X
bmQsIDAsIGhJbnN0LCAwKTsKLSAgICAgICAgaEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5k
b3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgQ09O
VFJPTEJVVFRPTl9XSURUSCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICAg
ICAgaFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJ
U0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIENPTlRST0xCVVRU
T05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOworICAgICAgICBo
Rm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdTX0NISUxE
IHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURU
SCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKyAgICAgICAgaFVSTEJhclduZCA9
IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JE
RVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRP
Tl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CiAKICAgICAgICAg
U2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwogICAgICAgICBVcGRhdGVXaW5kb3coaE1h
aW5XbmQpOwpAQCAtOTMsNyArOTUsMTEgQEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0Us
IEhJTlNUQU5DRQogCiAgICAgU2V0Rm9jdXMoaFVSTEJhclduZCk7CiAKLSAgICBSRUNUIGNsaWVu
dFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55LCBzX3dpbmRv
d1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRpb24ueSArIHNfd2lu
ZG93U2l6ZS5jeSB9OworICAgIFJFQ1QgY2xpZW50UmVjdDsKKyAgICA6OkdldENsaWVudFJlY3Qo
aE1haW5XbmQsICZjbGllbnRSZWN0KTsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcpCisg
ICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlv
bi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRp
b24ueSArIHNfd2luZG93U2l6ZS5jeSB9OwogCiAgICAgV2luTGF1bmNoZXJXZWJIb3N0KiB3ZWJI
b3N0ID0gbnVsbHB0cjsKIApJbmRleDogVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVy
TWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvd2luL0RMTExhdW5jaGVyL0RMTExhdW5jaGVy
TWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL3dpbi9ETExMYXVuY2hlci9ETExM
YXVuY2hlck1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDkgQEAgaW50IFdJ
TkFQSSB3V2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlLAogICAgIF9zZXRfRk1BM19lbmFibGUo
MCk7CiAjZW5kaWYKIAorICAgIEJPT0wgZGlkSXQgPSBTZXRQcm9jZXNzRFBJQXdhcmUoKTsKKyAg
ICBfQVNTRVJUKGRpZEl0KTsKKwogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCiAgICAgX0NydFNl
dFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKICAgICBfQ3J0U2V0
UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257291</attachid>
            <date>2015-07-22 13:38:11 -0700</date>
            <delta_ts>2015-07-22 17:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150722135059.patch</filename>
            <type>text/plain</type>
            <size>40239</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA3LTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGlsZSk6IERv
bid0IHRyYW5zbGF0ZSB0aGUgQ0dDb250ZXh0IHRvIHRoZSBwb3NpdGlvbgorICAgICAgICBvZiB0
aGUgQ0FDRkxheWVyUmVmOyB0aGUgdW5kZXJseWluZyBjb250ZXh0IGlzIGFscmVhZHkgaW4gdGhl
IHJpZ2h0IHBvc2l0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZl
bnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNv
b3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1doZWVsRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50Cisg
ICAgICAgIGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKwog
MjAxNS0wNy0yMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRGVm
YXVsdCBtZWRpYSBjb250cm9scyB1c2UgYSBzZXJpZiBmb250LCB3aGljaCBzZWVtcyB3cm9uZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lv
biAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTIsOSArNTEy
LDYgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJhd1RpbAogCiAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAotICAgIC8vIFRyYW5zZm9ybSBjb250ZXh0IHRv
IGJlIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHBhcmVudCBsYXllcgotICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShjb250ZXh0LCAtdGlsZVBvc2l0aW9uLngsIC10aWxlUG9zaXRpb24ueSk7Ci0KICAg
ICAvLyBTZXQgdGhlIGNvbnRleHQgY2xpcHBpbmcgcmVjdGFuZ2xlIHRvIHRoZSBjdXJyZW50IHRp
bGUKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UodGlsZVBvc2l0
aW9uLngsIHRpbGVQb3NpdGlvbi55LCB0aWxlQm91bmRzLnNpemUud2lkdGgsIHRpbGVCb3VuZHMu
c2l6ZS5oZWlnaHQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRm
b3JtTW91c2VFdmVudFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOCBUb3JjaCBNb2JpbGUgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjcsOCArMjcsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKIAorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApA
QCAtMzYsOSArMzgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIEhJR0hfQklU
X01BU0tfU0hPUlQgMHg4MDAwCiAKK3N0YXRpYyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcihIV05E
IHdpbmRvdykKK3sKKyAgICBIV25kREMgZGMod2luZG93KTsKKyAgICByZXR1cm4gOjpHZXREZXZp
Y2VDYXBzKGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBmOworfQorCiBzdGF0aWMgSW50UG9pbnQgcG9z
aXRpb25Gb3JFdmVudChIV05EIGhXbmQsIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgUE9JTlQgcG9p
bnQgPSB7R0VUX1hfTFBBUkFNKGxQYXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pfTsKKyAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworICAgIHBvaW50Lngg
PSBjbGFtcFRvPGludD4ocG9pbnQueCAvIHNjYWxlRmFjdG9yKTsKKyAgICBwb2ludC55ID0gY2xh
bXBUbzxpbnQ+KHBvaW50LnkgLyBzY2FsZUZhY3Rvcik7CiAgICAgcmV0dXJuIHBvaW50OwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVdpbi5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJh
ci5oIgpAQCAtMTA3LDE0ICsxMDgsMjIgQEAgU2Nyb2xsYmFyVGhlbWVXaW46On5TY3JvbGxiYXJU
aGVtZVdpbigpCiB7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQorc3RhdGljIGludCBzY3JvbGxiYXJUaGlja25lc3NJ
blBpeGVscygpCiB7CiAgICAgc3RhdGljIGludCB0aGlja25lc3M7CiAgICAgaWYgKCF0aGlja25l
c3MpCiAgICAgICAgIHRoaWNrbmVzcyA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwp
OworCiAgICAgcmV0dXJuIHRoaWNrbmVzczsKIH0KIAoraW50IFNjcm9sbGJhclRoZW1lV2luOjpz
Y3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCit7CisgICAgSFduZERDIGRj
KDApOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gOTYuMGYgLyA6OkdldERldmljZUNhcHMoZGMs
IExPR1BJWEVMU1gpOworICAgIHJldHVybiBjbGFtcFRvPGludD4oc2NhbGVGYWN0b3IgKiBzY3Jv
bGxiYXJUaGlja25lc3NJblBpeGVscygpKTsKK30KKwogdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6
dGhlbWVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIXNjcm9sbGJhclRoZW1lKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAkocmV2aXNpb24gMTg3
MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSA8
d2luZG93cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKQEAgLTM2LDE2ICszNywyOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjZGVmaW5lIEhJR0hfQklUX01BU0tfU0hPUlQgMHg4MDAwCiAj
ZGVmaW5lIFNQSV9HRVRXSEVFTFNDUk9MTENIQVJTIDB4MDA2QwogCitzdGF0aWMgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IoSFdORCB3aW5kb3cpCit7CisgICAgSFduZERDIGRjKHdpbmRvdyk7Cisg
ICAgcmV0dXJuIDo6R2V0RGV2aWNlQ2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKK30KKwog
c3RhdGljIEludFBvaW50IHBvc2l0aW9uRm9yRXZlbnQoSFdORCBoV25kLCBMUEFSQU0gbFBhcmFt
KQogewogICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9MUEFS
QU0obFBhcmFtKX07CiAgICAgU2NyZWVuVG9DbGllbnQoaFduZCwgJnBvaW50KTsKKyAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKGhXbmQpOworICAgIHBvaW50LnggPSBj
bGFtcFRvPGludD4ocG9pbnQueCAvIHNjYWxlRmFjdG9yKTsKKyAgICBwb2ludC55ID0gY2xhbXBU
bzxpbnQ+KHBvaW50LnkgLyBzY2FsZUZhY3Rvcik7CiAgICAgcmV0dXJuIHBvaW50OwogfQogCiBz
dGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChIV05EIGhXbmQsIExQQVJBTSBs
UGFyYW0pCiB7CiAgICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFNKGxQYXJhbSksIEdFVF9Z
X0xQQVJBTShsUGFyYW0pfTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFj
dG9yKGhXbmQpOworICAgIHBvaW50LnggPSBjbGFtcFRvPGludD4ocG9pbnQueCAvIHNjYWxlRmFj
dG9yKTsKKyAgICBwb2ludC55ID0gY2xhbXBUbzxpbnQ+KHBvaW50LnkgLyBzY2FsZUZhY3Rvcik7
CiAgICAgcmV0dXJuIHBvaW50OwogfQogCkBAIC03NywxMSArOTAsMTQgQEAgUGxhdGZvcm1XaGVl
bEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSAogCiAgICAgLy8gR2xvYmFsIFBvc2l0aW9uIGlz
IGp1c3QgeCwgeSBsb2NhdGlvbiBvZiBldmVudAogICAgIFBPSU5UIHBvaW50ID0ge2xvY2F0aW9u
LngoKSwgbG9jYXRpb24ueSgpfTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZp
Y2VTY2FsZUZhY3RvcihoV25kKTsKICAgICBtX2dsb2JhbFBvc2l0aW9uID0gcG9pbnQ7CisgICAg
bV9nbG9iYWxQb3NpdGlvbi5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwogCiAgICAg
Ly8gUG9zaXRpb24gbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCB0byBvdXIgY2xpZW50CiAgICAgU2Ny
ZWVuVG9DbGllbnQoaFduZCwgJnBvaW50KTsKICAgICBtX3Bvc2l0aW9uID0gcG9pbnQ7CisgICAg
bV9wb3NpdGlvbi5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwogfQogCiBQbGF0Zm9y
bVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChIV05EIGhXbmQsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0sIGJvb2wgaXNNb3VzZUhXaGVlbCkKQEAgLTkwLDYgKzEwNiw4IEBAIFBs
YXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKICAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChoV25kLCBsUGFyYW0pKQogICAgICwgbV9kaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCiB7CisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcihoV25kKTsKKwogICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91
bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgR2Vja28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQogICAg
IC8vIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMg
eW91IGdvIHRocm91Z2ggdGhlCiAgICAgLy8gcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMu
ICBJRSA3IGlzIH41MCBweC9saW5lLCBhbHRob3VnaCB0aGUgdmFsdWUKQEAgLTk3LDggKzExNSw4
IEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKICAgICAvLyBzbW9v
dGhpbmcgYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0
bHkgbGFyZ2VyCiAgICAgLy8gc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBI
ZXJlIHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzCiAgICAgLy8gKHRoZSBkZWZhdWx0IHNj
cm9sbCBhbW91bnQgb24gV2luZG93cyBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljaykuCi0g
ICAgc3RhdGljIGNvbnN0IGZsb2F0IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8g
My4wZjsKLSAgICBmbG9hdCBkZWx0YSA9IEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od1BhcmFtKSAv
IHN0YXRpY19jYXN0PGZsb2F0PihXSEVFTF9ERUxUQSk7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0
IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gc2NhbGVGYWN0b3IgKiAxMDAuMGYgLyAzLjBmOwor
ICAgIGZsb2F0IGRlbHRhID0gR0VUX1dIRUVMX0RFTFRBX1dQQVJBTSh3UGFyYW0pIC8gKHNjYWxl
RmFjdG9yICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdIRUVMX0RFTFRBKSk7CiAgICAgaWYgKGlzTW91
c2VIV2hlZWwpIHsKICAgICAgICAgLy8gV2luZG93cyBpcyA8LS0gLS8rIC0tPiwgV2ViS2l0IHdh
bnRzIDwtLSArLy0gLS0+LCBzbyB3ZSBuZWdhdGUKICAgICAgICAgLy8gfGRlbHRhfCBhZnRlciBz
YXZpbmcgdGhlIG9yaWdpbmFsIHZhbHVlIG9uIHRoZSB3aGVlbCB0aWNrIG1lbWJlci4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE1LTA3LTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVu
dCBIaWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4
MjY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBTaXplCisg
ICAgICAgIHBhZ2UgZm9yIGN1cnJlbnQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKiBX
ZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRl
eHQpOiBBY2NvdW50IGZvciBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViRnJhbWU6
OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KTogRGl0dG8uCisgICAgICAgICog
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpyZXBhaW50KTogQWRqdXN0IHBhaW50IHJl
Y3QgZm9yIGRldmljZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxCYWNr
aW5nU3RvcmUpOiBBZGp1c3QgY29vcmRpbmF0ZXMgZm9yIHNjYWxlIGZhY3Rvci4KKyAgICAgICAg
KFdlYlZpZXc6OnNpemVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp1cGRhdGVC
YWNraW5nU3RvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOiBEaXR0by4KKyAgICAgICAg
KFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZp
ZXc6Omdlc3R1cmVOb3RpZnkpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOiBE
aXR0by4KKyAgICAgICAgKFdlYlZpZXc6OmluaXRpYWxpemVUb29sVGlwV2luZG93KTogQWRqdXN0
IG1heCB0b29sIHRpcCB3aWR0aAorICAgICAgICBmb3IgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAg
ICAgICAgKFdlYlZpZXc6OnNlbGVjdGlvblJlY3QpOiBBZGp1c3QgY29vcmRpbmF0ZXMgZm9yIHNj
YWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJWaWV3OjpzY3JvbGxPZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6
OnNjcm9sbEJ5KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50Q29udGVudHMpOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJWaWV3Lmg6CisKIDIwMTUtMDctMjEgIFN1bmdtYW5uIENobyAgPHN1bmdtYW5uLmNo
b0BuYXZlcmNvcnAuY29tPgogCiAgICAgICAgIFtXaW5dIEFkZCBuZWVkVG91Y2hFdmVudHMoKSBz
dHViIHRvIFdlYkNocm9tZUNsaWVudC5oIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQgd2l0aCBFTkFC
TEVfVE9VQ0hfRVZFTlRTPU9OCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAx
ODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzNiw2ICszMzYsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRv
Q29uCiAgICAgZGlydHlSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIGdjLmNsaXAoZGlydHlS
ZWN0KTsKICAgICBnYy50cmFuc2xhdGUoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IHdlYlZpZXcoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBnYy5z
Y2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAg
dmlldy0+cGFpbnRDb250ZW50cygmZ2MsIHJlY3QpOwogICAgIGdjLnJlc3RvcmUoKTsKIApAQCAt
MzYwLDYgKzM2Miw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50U2Nyb2xsVmlld1JlY3RUb0MK
ICAgICBnYy5zYXZlKCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QocmVjdCk7CiAgICAgZGlydHlS
ZWN0Lm1vdmUoLXB0LngsIC1wdC55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHdlYlZpZXco
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBnYy5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUo
c2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgdmlldy0+cGFpbnQoJmdjLCBkaXJ0eVJl
Y3QpOwogICAgIGdjLnJlc3RvcmUoKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViUHJl
ZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlByZWZlcmVu
Y2VzLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVy
ZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQcmVm
ZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1bHRTZQogCiAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBkZWZhdWx0cyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CiAK
LSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U3RhbmRhcmRG
b250UHJlZmVyZW5jZUtleSksIENGU1RSKCJTZWdvZSBVSSIpKTsKKyAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U3RhbmRhcmRGb250UHJlZmVyZW5jZUtleSks
IENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVm
YXVsdHMsIENGU1RSKFdlYktpdEZpeGVkRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiQ291cmll
ciBOZXciKSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktp
dFNlcmlmRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiVGltZXMgTmV3IFJvbWFuIikpOwogICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRTYW5zU2VyaWZGb250
UHJlZmVyZW5jZUtleSksIENGU1RSKCJBcmlhbCIpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIxLDggKzgyMSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlZpZXc6OmNsb3NlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXZvaWQgV2ViVmlldzo6cmVw
YWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNvbnRlbnRDaGFu
Z2VkLCBib29sIGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIFdlYlZp
ZXc6OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgbG9naWNhbFdpbmRvd1JlY3QsIGJv
b2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50T25s
eSkKIHsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1JlY3QobG9naWNhbFdpbmRvd1JlY3Qp
OworICAgIHdpbmRvd1JlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBpZiAo
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRDaGFu
Z2VkLCBpbW1lZGlhdGUsIGFuZCByZXBhaW50Q29udGVudE9ubHkgcGFyYW1ldGVycyBhcmUgYWxs
IGJhc2VkIG9uIGEgbm9uLQogICAgICAgICAvLyBjb21wb3NpdGluZyBwYWludGluZy9zY3JvbGxp
bmcgbW9kZWwuCkBAIC05MjAsMTAgKzkyMywxOSBAQCB2b2lkIFdlYlZpZXc6OmFkZFRvRGlydHlS
ZWdpb24oR0RJT2JqZWN0CiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdEaWRJ
bnZhbGlkYXRlKHRoaXMpOwogfQogCi12b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShG
cmFtZVZpZXcqIGZyYW1lVmlldywgaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9s
bFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlldzo6c2Nyb2xs
QmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgbG9naWNhbER4LCBpbnQgbG9n
aWNhbER5LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsU2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJl
Y3QmIGxvZ2ljYWxDbGlwUmVjdCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAKKyAg
ICAvLyBEaW1lbnNpb25zIHBhc3NlZCB0byB1cyBmcm9tIFdlYkNvcmUgYXJlIGluIGxvZ2ljYWwg
dW5pdHMuIFdlIG11c3QgY29udmVydCB0byBwaXhlbHM6CisgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGludCBkeCA9IGNsYW1wVG88aW50PihzY2FsZUZh
Y3RvciAqIGxvZ2ljYWxEeCk7CisgICAgaW50IGR5ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFjdG9y
ICogbG9naWNhbER5KTsKKyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0KGxvZ2ljYWxTY3JvbGxW
aWV3UmVjdCk7CisgICAgc2Nyb2xsVmlld1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOworICAgIElu
dFJlY3QgY2xpcFJlY3QobG9naWNhbENsaXBSZWN0KTsKKyAgICBjbGlwUmVjdC5zY2FsZShzY2Fs
ZUZhY3Rvcik7CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJlLCBs
aWtlIG1vdmluZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBuZXds
eS1leHBvc2VkIHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTk1Miw3ICs5
NjQsNyBAQCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgSFdu
ZERDIHdpbmRvd0RDKG1fdmlld1dpbmRvdyk7CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBvbGRC
aXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRt
YXAtPmdldCgpKTsKLSAgICAKKwogICAgIC8vIFNjcm9sbCB0aGUgYml0bWFwLgogICAgIFJFQ1Qg
c2Nyb2xsUmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7CiAgICAgUkVDVCBjbGlwUmVjdFdpbihjbGlw
UmVjdCk7CkBAIC05ODIsOCArOTk0LDExIEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29u
c3QgSW50U2l6ZSYKIAogICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0gICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKHRvcExldmVsRnJhbWUoKSkpCi0gICAgICAgIGNvcmVGcmFtZS0+
dmlldygpLT5yZXNpemUobmV3U2l6ZSk7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KHRvcExldmVsRnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IG5ld1Np
emU7CisgICAgICAgIGxvZ2ljYWxTaXplLnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rvcigp
KTsKKyAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnJlc2l6ZShsb2dpY2FsU2l6ZSk7CisgICAg
fQogCiAjaWYgVVNFKENBKQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCkBAIC0xMjExLDcgKzEy
MjYsNyBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBBUkFNIG9wdGlvCiAgICAgICAg
IGRlbGV0ZUJhY2tpbmdTdG9yZVNvb24oKTsKIH0KIAotdm9pZCBXZWJWaWV3OjpwYWludEludG9C
YWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEhEQyBiaXRtYXBEQywgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0LCBXaW5kb3dzVG9QYWludCB3aW5kb3dzVG9QYWludCkKK3ZvaWQgV2Vi
Vmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0
bWFwREMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdFBpeGVscywgV2luZG93c1RvUGFpbnQgd2lu
ZG93c1RvUGFpbnQpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVy
IGJlIGNhbGxlZCBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBhbmQgd2Ugc2hvdWxk
CiAgICAgLy8gYXNzZXJ0IGFzIHN1Y2guIEJ1dCBjdXJyZW50bHkgaXQgKmlzKiBzb21ldGltZXMg
Y2FsbGVkLCBzbyB3ZSBjYW4ndCBhc3NlcnQgeWV0LiBTZWUKQEAgLTEyMjMsNyArMTIzOCw3IEBA
IHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW0KICAgICAvLyBidXQgaXQg
d2FzIGJlaW5nIGhpdCBkdXJpbmcgb3VyIGxheW91dCB0ZXN0cywgYW5kIGlzIGJlaW5nIGludmVz
dGlnYXRlZCBpbgogICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMjkzNTAuCiAKLSAgICBSRUNU
IHJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgUkVDVCByZWN0ID0gZGlydHlSZWN0UGl4ZWxzOwogCiAj
aWYgRkxBU0hfQkFDS0lOR19TVE9SRV9SRURSQVcKICAgICB7CkBAIC0xMjMyLDE1ICsxMjQ3LDIx
IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW0KICAgICAgICAgRmls
bFJlY3QoZGMsICZyZWN0LCB5ZWxsb3dCcnVzaC5nZXQoKSk7CiAgICAgICAgIEdkaUZsdXNoKCk7
CiAgICAgICAgIFNsZWVwKDUwKTsKLSAgICAgICAgcGFpbnRJbnRvV2luZG93KGJpdG1hcERDLCBk
YywgZGlydHlSZWN0KTsKKyAgICAgICAgcGFpbnRJbnRvV2luZG93KGJpdG1hcERDLCBkYywgZGly
dHlSZWN0UGl4ZWxzKTsKICAgICB9CiAjZW5kaWYKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0b3IgPSAxLjBm
IC8gc2NhbGVGYWN0b3I7CisKKyAgICBJbnRSZWN0IGxvZ2ljYWxEaXJ0eVJlY3QgPSBkaXJ0eVJl
Y3RQaXhlbHM7CisgICAgbG9naWNhbERpcnR5UmVjdC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3Ip
OworCiAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGJpdG1hcERDLCBtX3RyYW5zcGFyZW50KTsKICAg
ICBnYy5zZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHdpbmRvd3NUb1BhaW50ID09IFBhaW50
V2ViVmlld0FuZENoaWxkcmVuKTsKICAgICBnYy5zYXZlKCk7CiAgICAgaWYgKG1fdHJhbnNwYXJl
bnQpCi0gICAgICAgIGdjLmNsZWFyUmVjdChkaXJ0eVJlY3QpOworICAgICAgICBnYy5jbGVhclJl
Y3QobG9naWNhbERpcnR5UmVjdCk7CiAgICAgZWxzZQogICAgICAgICBGaWxsUmVjdChiaXRtYXBE
QywgJnJlY3QsIChIQlJVU0gpR2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpKTsKIApAQCAtMTI0
OSwxNSArMTI3MCwxOCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFt
CiAgICAgICAgIHVpUHJpdmF0ZS0+ZHJhd0JhY2tncm91bmQodGhpcywgYml0bWFwREMsICZyZWN0
KTsKIAogICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5mcmFtZSgpLmNvbnRlbnRSZW5k
ZXJlcigpKSB7Ci0gICAgICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKLSAgICAgICAgZnJhbWVWaWV3
LT5wYWludCgmZ2MsIGRpcnR5UmVjdCk7CisgICAgICAgIGdjLnNhdmUoKTsKKyAgICAgICAgZ2Mu
c2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOworICAgICAgICBnYy5j
bGlwKGxvZ2ljYWxEaXJ0eVJlY3QpOworICAgICAgICBmcmFtZVZpZXctPnBhaW50KCZnYywgbG9n
aWNhbERpcnR5UmVjdCk7CisgICAgICAgIGdjLnJlc3RvcmUoKTsKICAgICAgICAgaWYgKG1fc2hv
dWxkSW52ZXJ0Q29sb3JzKQotICAgICAgICAgICAgZ2MuZmlsbFJlY3QoZGlydHlSZWN0LCBDb2xv
cjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZURpZmZlcmVuY2UpOworICAg
ICAgICAgICAgZ2MuZmlsbFJlY3QobG9naWNhbERpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVEaWZmZXJlbmNlKTsKICAgICB9CiAgICAgZ2MucmVz
dG9yZSgpOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwREMs
IEhEQyB3aW5kb3dEQywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBXZWJWaWV3Ojpw
YWludEludG9XaW5kb3coSERDIGJpdG1hcERDLCBIREMgd2luZG93REMsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdFBpeGVscykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGFuZCB3ZSBz
aG91bGQKICAgICAvLyBhc3NlcnQgYXMgc3VjaC4gQnV0IGN1cnJlbnRseSBpdCAqaXMqIHNvbWV0
aW1lcyBjYWxsZWQsIHNvIHdlIGNhbid0IGFzc2VydCB5ZXQuIFNlZQpAQCAtMTI2Niw3ICsxMjkw
LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9XaW5kb3coSERDIGJpdG1hcAogICAgIExPQ0FM
X0dESV9DT1VOVEVSKDAsIF9fRlVOQ1RJT05fXyk7CiAjaWYgRkxBU0hfV0lORE9XX1JFRFJBVwog
ICAgIGF1dG8gZ3JlZW5CcnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChS
R0IoMCwgMjU1LCAwKSkpOwotICAgIFJFQ1QgcmVjdCA9IGRpcnR5UmVjdDsKKyAgICBSRUNUIHJl
Y3QgPSBkaXJ0eVJlY3RQaXhlbHM7CiAgICAgRmlsbFJlY3Qod2luZG93REMsICZyZWN0LCBncmVl
bkJydXNoLmdldCgpKTsKICAgICBHZGlGbHVzaCgpOwogICAgIFNsZWVwKDUwKTsKQEAgLTEyNzQs
OCArMTI5OCw4IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KEhEQyBiaXRtYXAKIAog
ICAgIC8vIEJsaXQgdGhlIGRpcnR5IHJlY3QgZnJvbSB0aGUgYmFja2luZyBzdG9yZSBpbnRvIHRo
ZSBzYW1lIHBvc2l0aW9uCiAgICAgLy8gaW4gdGhlIGRlc3RpbmF0aW9uIERDLgotICAgIEJpdEJs
dCh3aW5kb3dEQywgZGlydHlSZWN0LngoKSwgZGlydHlSZWN0LnkoKSwgZGlydHlSZWN0LndpZHRo
KCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgYml0bWFwREMsCi0gICAgICAgICAgIGRpcnR5UmVjdC54
KCksIGRpcnR5UmVjdC55KCksIFNSQ0NPUFkpOworICAgIEJpdEJsdCh3aW5kb3dEQywgZGlydHlS
ZWN0UGl4ZWxzLngoKSwgZGlydHlSZWN0UGl4ZWxzLnkoKSwgZGlydHlSZWN0UGl4ZWxzLndpZHRo
KCksIGRpcnR5UmVjdFBpeGVscy5oZWlnaHQoKSwgYml0bWFwREMsCisgICAgICAgIGRpcnR5UmVj
dFBpeGVscy54KCksIGRpcnR5UmVjdFBpeGVscy55KCksIFNSQ0NPUFkpOwogCiAgICAgbV9uZWVk
c0Rpc3BsYXkgPSBmYWxzZTsKIH0KQEAgLTE0MjIsOSArMTQ0NiwxMyBAQCBib29sIFdlYlZpZXc6
OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAKICAgICBsUGFyYW0gPSBNQUtFTFBBUkFNKGNv
b3Jkcy54LCBjb29yZHMueSk7CiAKKyAgICAvLyBDb252ZXJ0IGNvb3JkaW5hdGVzIHRvIGxvZ2lj
YWwgcGl4ZWxzCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIEludFBvaW50IGxvZ2ljYWxDb29yZHMoY29vcmRzLnggLyBzY2FsZUZhY3RvciwgY29vcmRz
LnkgLyBzY2FsZUZhY3Rvcik7CisKICAgICBtX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigp
LmNsZWFyQ29udGV4dE1lbnUoKTsKIAotICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQobV9wYWdl
LT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMoY29vcmRzKSk7CisgICAgSW50
UG9pbnQgZG9jdW1lbnRQb2ludChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9D
b250ZW50cyhsb2dpY2FsQ29vcmRzKSk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KGRvY3Vt
ZW50UG9pbnQpOwogICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgp
IDogJm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKQEAg
LTE0NDksNyArMTQ3Nyw4IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChX
UEEKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBPSU5UIHBv
aW50KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVyLmhpdFRlc3RS
ZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpKTsKKyAgICBJbnRQb2ludCBs
b2dpY2FsUG9pbnQgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRNZW51Q29udHJvbGxl
ci5oaXRUZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKTsKKyAgICBQ
T0lOVCBwb2ludCA9IHsgbG9naWNhbFBvaW50LngoKSAqIHNjYWxlRmFjdG9yLCBsb2dpY2FsUG9p
bnQueSgpICogc2NhbGVGYWN0b3IgfTsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8g
c2NyZWVuIGNvb3JkaW5hdGVzCiAgICAgaWYgKCE6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRv
dywgJnBvaW50KSkKQEAgLTE2NDQsNiArMTY3MywxMCBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmVO
b3RpZnkoV1BBUkFNIHdQYXJhCiAKICAgICBib29sIGhpdFNjcm9sbGJhciA9IGZhbHNlOwogICAg
IFBPSU5UIGdlc3R1cmVCZWdpblBvaW50ID0ge2duLT5wdHNMb2NhdGlvbi54LCBnbi0+cHRzTG9j
YXRpb24ueX07CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7
CisgICAgSW50UG9pbnQgbG9naWNhbEdlc3R1cmVCZWdpblBvaW50KGdlc3R1cmVCZWdpblBvaW50
LnggLyBzY2FsZUZhY3RvciwgZ2VzdHVyZUJlZ2luUG9pbnQueSAvIHNjYWxlRmFjdG9yKTsKKwog
ICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCk7CiAgICAgZm9yIChGcmFtZSogY2hp
bGRGcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBjaGlsZEZyYW1lOyBjaGlsZEZyYW1lID0g
RXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUobV9nZXN0dXJlVGFyZ2V0Tm9kZS5n
ZXQoKSkpIHsKICAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjaGlsZEZyYW1lLT52aWV3
KCk7CkBAIC0xNjU2LDcgKzE2ODksNyBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmVOb3RpZnkoV1BB
UkFNIHdQYXJhCiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMoZ2Vz
dHVyZUJlZ2luUG9pbnQpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3
LT5zY3JlZW5Ub0NvbnRlbnRzKGxvZ2ljYWxHZXN0dXJlQmVnaW5Qb2ludCkpOwogICAgICAgICBs
YXllci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogICAgICAgICBtX2dlc3R1cmVUYXJnZXRO
b2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogCkBAIC0xNzYxLDEzICsxNzk0LDE1IEBAIGJvb2wg
V2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEEKICAgICAgICAgfQogCiAgICAgICAg
IFNjcm9sbGFibGVBcmVhKiBzY3JvbGxlZEFyZWEgPSAwOworICAgICAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNjcm9s
bERlbHRhKC1kZWx0YVggKiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNjYWxlRmFjdG9yKTsKIAog
ICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdldE5vZGUgfHwgIW1fZ2VzdHVyZVRhcmdldE5vZGUt
PnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGRpcmVjdGx5IGhpdCB0aGUg
ZG9jdW1lbnQgd2l0aG91dCBoaXR0aW5nIGFueSBub2RlcwotICAgICAgICAgICAgY29yZUZyYW1l
LT52aWV3KCktPnNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSkpOworICAgICAgICAg
ICAgY29yZUZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KGxvZ2ljYWxTY3JvbGxEZWx0YSk7CiAgICAg
ICAgICAgICBzY3JvbGxlZEFyZWEgPSBjb3JlRnJhbWUtPnZpZXcoKTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdM
YXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJ
bnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpLCBXZWJDb3JlOjpSZW5kZXJMYXllcjo6U2Nyb2xsT2Zm
c2V0Q2xhbXBlZCwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXRO
b2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsIFdlYkNvcmU6OlJl
bmRlckxheWVyOjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAmc2Nyb2xsZWRBcmVhKTsKIAogICAgICAg
ICBpZiAoIShVcGRhdGVQYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBCZWdpblBhbm5pbmdGZWVkYmFj
a1B0cigpICYmIEVuZFBhbm5pbmdGZWVkYmFja1B0cigpKSkgewogICAgICAgICAgICAgQ2xvc2VH
ZXN0dXJlSW5mb0hhbmRsZVB0cigpKGdlc3R1cmVIYW5kbGUpOwpAQCAtMjIwNiw3ICsyMjQxLDEx
IEBAIHZvaWQgV2ViVmlldzo6c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wKIAogICAgIFJFQ1Qg
d2luZG93UmVjdCA9IHswfTsKICAgICBmcmFtZVJlY3QoJndpbmRvd1JlY3QpOwotICAgIHJlcGFp
bnQod2luZG93UmVjdCwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAvLyByZXBhaW50IGV4cGVjdHMgbG9n
aWNhbCBwaXhlbHMsIHNvIHJlc2NhbGUgaGVyZS4KKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KHdp
bmRvd1JlY3QpOworICAgIGxvZ2ljYWxSZWN0LnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICByZXBhaW50KGxvZ2ljYWxSZWN0LCB0cnVlLCB0cnVlKTsKIH0KIAogYm9vbCBX
ZWJWaWV3OjpyZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcygpCkBAIC0yOTE2LDcgKzI5NTUsNyBA
QCB2b2lkIFdlYlZpZXc6OmluaXRpYWxpemVUb29sVGlwV2luZG93KCkKICAgICBpbmZvLnVJZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8VUlOVF9QVFI+KG1fdmlld1dpbmRvdyk7CiAKICAgICA6OlNlbmRN
ZXNzYWdlKG1fdG9vbFRpcEh3bmQsIFRUTV9BRERUT09MLCAwLCByZWludGVycHJldF9jYXN0PExQ
QVJBTT4oJmluZm8pKTsKLSAgICA6OlNlbmRNZXNzYWdlKG1fdG9vbFRpcEh3bmQsIFRUTV9TRVRN
QVhUSVBXSURUSCwgMCwgbWF4VG9vbFRpcFdpZHRoKTsKKyAgICA6OlNlbmRNZXNzYWdlKG1fdG9v
bFRpcEh3bmQsIFRUTV9TRVRNQVhUSVBXSURUSCwgMCwgY2xhbXBUbzxpbnQ+KG1heFRvb2xUaXBX
aWR0aCAqIGRldmljZVNjYWxlRmFjdG9yKCkpKTsKIAogICAgIDo6U2V0V2luZG93UG9zKG1fdG9v
bFRpcEh3bmQsIEhXTkRfVE9QLCAwLCAwLCAwLCAwLCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSB8
IFNXUF9OT0FDVElWQVRFKTsKIH0KQEAgLTM2ODcsMTcgKzM3MjYsMTkgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpnZW5lcgogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnNlbGVjdGlvblJlY3QoUkVDVCogcmMpCitI
UkVTVUxUIFdlYlZpZXc6OnNlbGVjdGlvblJlY3QoUkVDVCogcmMpCiB7CiAgICAgV2ViQ29yZTo6
RnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKIAogICAgIEludFJlY3QgaXIgPSBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbkJvdW5kcygpKTsKICAgICBpciA9IGZyYW1lLnZpZXcoKS0+Y29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhpcik7CiAgICAgaXIubW92ZSgtZnJhbWUudmlldygpLT5zY3JvbGxP
ZmZzZXQoKS53aWR0aCgpLCAtZnJhbWUudmlldygpLT5zY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSk7
Ci0gICAgcmMtPmxlZnQgPSBpci54KCk7Ci0gICAgcmMtPnRvcCA9IGlyLnkoKTsKLSAgICByYy0+
Ym90dG9tID0gcmMtPnRvcCArIGlyLmhlaWdodCgpOwotICAgIHJjLT5yaWdodCA9IHJjLT5sZWZ0
ICsgaXIud2lkdGgoKTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0
b3IoKTsKKyAgICByYy0+bGVmdCA9IGlyLngoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT50b3Ag
PSBpci55KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+Ym90dG9tID0gcmMtPnRvcCArIGlyLmhl
aWdodCgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPnJpZ2h0ID0gcmMtPmxlZnQgKyBpci53aWR0
aCgpICogc2NhbGVGYWN0b3I7CiAKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTM3NzQsOSArMzgx
NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6aXNMb2EKICAgICByZXR1
cm4gU19PSzsKIH0KICAgICAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxl
bWVudEF0UG9pbnQoIAotICAgICAgICAvKiBbaW5dICovIExQUE9JTlQgcG9pbnQsCi0gICAgICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gSVByb3BlcnR5QmFnKiogZWxlbWVudERpY3Rpb25hcnkpCitI
UkVTVUxUIFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KExQUE9JTlQgcG9pbnQsIElQcm9wZXJ0eUJh
ZyoqIGVsZW1lbnREaWN0aW9uYXJ5KQogewogICAgIGlmICghZWxlbWVudERpY3Rpb25hcnkpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zNzkwLDYgKzM4MjksOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmVsZW1lCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAKICAgICBJbnRQb2ludCB3ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2ludC0+eCwgcG9p
bnQtPnkpOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgd2ViQ29yZVBvaW50LnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7CiAg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHdlYkNvcmVQb2ludCk7CiAg
ICAgaWYgKGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmVzdWx0ID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KHdlYkNvcmVQb2ludCk7CkBAIC01
MzA2LDMyICs1MzQ3LDM3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZnJh
bWUKICAgICByZXR1cm4gbV9mcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuY29weVJlZlRvKGQpOwog
fQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnNjcm9sbE9mZnNldCggCi0g
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBMUFBPSU5UIG9mZnNldCkKK0hSRVNVTFQgV2ViVmlldzo6
c2Nyb2xsT2Zmc2V0KExQUE9JTlQgb2Zmc2V0KQogewogICAgIGlmICghb2Zmc2V0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwogICAgIEludFNpemUgb2Zmc2V0SW50U2l6ZSA9IG1fcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLT5zY3JvbGxPZmZzZXQoKTsKKworICAgIG9mZnNldEludFNpemUu
c2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBvZmZzZXQtPnggPSBvZmZzZXRJbnRT
aXplLndpZHRoKCk7CiAgICAgb2Zmc2V0LT55ID0gb2Zmc2V0SW50U2l6ZS5oZWlnaHQoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojpz
Y3JvbGxCeSggCi0gICAgLyogW2luXSAqLyBMUFBPSU5UIG9mZnNldCkKK0hSRVNVTFQgV2ViVmll
dzo6c2Nyb2xsQnkoTFBQT0lOVCBvZmZzZXQpCiB7CiAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7Ci0gICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9s
bEJ5KEludFNpemUob2Zmc2V0LT54LCBvZmZzZXQtPnkpKTsKKworICAgIEludFNpemUgc2Nyb2xs
RGVsdGEob2Zmc2V0LT54LCBvZmZzZXQtPnkpOworICAgIHNjcm9sbERlbHRhLnNjYWxlKDEuMGYg
LyBkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+
c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnZpc2libGVDb250ZW50UmVjdCggCi0gICAgLyogW3Jl
dHZhbF1bb3V0XSAqLyBMUFJFQ1QgcmVjdCkKK0hSRVNVTFQgV2ViVmlldzo6dmlzaWJsZUNvbnRl
bnRSZWN0KExQUkVDVCByZWN0KQogewogICAgIGlmICghcmVjdCkKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKwogICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudCA9IG1fcGFnZS0+bWFpbkZy
YW1lKCkudmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICB2aXNpYmxlQ29udGVudC5z
Y2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICByZWN0LT5sZWZ0ID0gKExPTkcpIHZpc2li
bGVDb250ZW50LngoKTsKICAgICByZWN0LT50b3AgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueSgp
OwogICAgIHJlY3QtPnJpZ2h0ID0gKExPTkcpIHZpc2libGVDb250ZW50Lm1heFgoKTsKQEAgLTU2
ODYsNiArNTczMiw4IEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhGcmEK
ICAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
dGVtcFJhbmdlLmdldCgpKTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VTY2FsZUZh
Y3RvcigpKTsKKwogICAgIENBTkRJREFURUZPUk0gZm9ybTsKICAgICBmb3JtLmR3SW5kZXggPSAw
OwogICAgIGZvcm0uZHdTdHlsZSA9IENGU19FWENMVURFOwpAQCAtNTk0NSw2ICs1OTkzLDcgQEAg
TFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpbwogICAgICAgICBjYXJldCA9
IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkp
OwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5k
b3coY2FyZXQpOworICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGNo
YXJQb3MtPnB0LnggPSBjYXJldC54KCk7CiAgICAgY2hhclBvcy0+cHQueSA9IGNhcmV0LnkoKTsK
ICAgICA6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRvdywgJmNoYXJQb3MtPnB0KTsKQEAgLTY2
MjIsNyArNjY3MSw2IEBAIHZvaWQgV2ViVmlldzo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZygK
ICAgICAgICAgICAgIDo6R2V0Q2xpZW50UmVjdChtX3ZpZXdXaW5kb3csICZjbGllbnRSZWN0KTsK
ICAgICAgICAgICAgIG1fYmFja2luZ0xheWVyLT5zZXRTaXplKEludFJlY3QoY2xpZW50UmVjdCku
c2l6ZSgpKTsKICAgICAgICAgICAgIG1fYmFja2luZ0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
LQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q2hpbGRMYXllcihQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX2JhY2tpbmdMYXllci0+cGxhdGZvcm1MYXllcigp
KSk7CiAKICAgICAgICAgICAgIC8vIFdlIGFyZW4ndCBnb2luZyB0byBiZSB1c2luZyBvdXIgYmFj
a2luZyBzdG9yZSB3aGlsZSB3ZSdyZSBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZwpAQCAtNjc3
MSwxNSArNjgxOSwyMiBAQCB2b2lkIFdlYlZpZXc6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QK
ICAgICBmbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlc1Nvb24oKTsKIH0KIAotdm9pZCBX
ZWJWaWV3OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3Qm
IGluQ2xpcCkKK3ZvaWQgV2ViVmlldzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVy
KiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgRmxvYXRSZWN0JiBpbkNsaXBQaXhlbHMpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShtX21haW5GcmFtZSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IGludmVy
dGVkU2NhbGVGYWN0b3IgPSAxLjBmIC8gc2NhbGVGYWN0b3I7CisKKyAgICBGbG9hdFJlY3QgbG9n
aWNhbENsaXAgPSBpbkNsaXBQaXhlbHM7CisgICAgbG9naWNhbENsaXAuc2NhbGUoaW52ZXJ0ZWRT
Y2FsZUZhY3Rvcik7CisKICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBjb250ZXh0LmNsaXAoaW5D
bGlwKTsKLSAgICBmcmFtZS0+dmlldygpLT5wYWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVj
dChpbkNsaXApKTsKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rvciwgc2Nh
bGVGYWN0b3IpKTsKKyAgICBjb250ZXh0LmNsaXAobG9naWNhbENsaXApOworICAgIGZyYW1lLT52
aWV3KCktPnBhaW50KCZjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGxvZ2ljYWxDbGlwKSk7CiAg
ICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKQEAgLTcxMjIsNiArNzE3Nyw4IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Zmlyc3QKICAgICBJbnRSZWN0IHJlY3QgPSBmcmFt
ZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAgcmVzdWx0SW50
UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIAorICAgIHJlc3Vs
dEludFJlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICByZXN1bHRSZWN0LT5s
ZWZ0ID0gcmVzdWx0SW50UmVjdC54KCk7CiAgICAgcmVzdWx0UmVjdC0+dG9wID0gcmVzdWx0SW50
UmVjdC55KCk7CiAgICAgcmVzdWx0UmVjdC0+cmlnaHQgPSByZXN1bHRJbnRSZWN0LngoKSArIHJl
c3VsdEludFJlY3Qud2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDE4NzE0
NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTg4
LDYgKzk4OCw5IEBAIHB1YmxpYzoKICAgICAvKiBbb3V0LCByZXR2YWxdICovIFJFQ1QqIHJlc3Vs
dFJlY3QpOwogCiAgICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZWxlY3RlZFJhbmdlRm9y
VGVzdGluZygvKiBbb3V0XSAqLyBVSU5UKiBsb2NhdGlvbiwgLyogW291dF0gKi8gVUlOVCogbGVu
Z3RoKTsKKworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRab29tTXVsdGlwbGllcihmbG9hdCBtdWx0aXBsaWVyLCBib29sIGlzVGV4
dE9ubHkpOwogICAgIGZsb2F0IHpvb21NdWx0aXBsaWVyKGJvb2wgaXNUZXh0T25seSk7CkBAIC0x
MDI2LDggKzEwMjksNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRJbnZlcnRDb2xvcnM7
CiAgICAgdm9pZCBzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCk7CiAKLSAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0OwotCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgcmVn
aXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBX
ZWJWaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAxODcxNDQpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTcsMTEgKzEwMTcsMTMgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6dHJhbnNpdGlvblRvQwogewogICAgIFdlYlZpZXcqIHZpZXcgPSBtX3dlYkZy
YW1lLT53ZWJWaWV3KCk7CiAKLSAgICBSRUNUIHJlY3Q7Ci0gICAgdmlldy0+ZnJhbWVSZWN0KCZy
ZWN0KTsKKyAgICBSRUNUIHBpeGVsUmVjdDsKKyAgICB2aWV3LT5mcmFtZVJlY3QoJnBpeGVsUmVj
dCk7CiAgICAgYm9vbCB0cmFuc3BhcmVudCA9IHZpZXctPnRyYW5zcGFyZW50KCk7CiAgICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yID0gdHJhbnNwYXJlbnQgPyBDb2xvcjo6dHJhbnNwYXJlbnQgOiBD
b2xvcjo6d2hpdGU7Ci0gICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhJbnRSZWN0KHJl
Y3QpLnNpemUoKSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CisgICAgSW50UmVjdCBs
b2dpY2FsRnJhbWUocGl4ZWxSZWN0KTsKKyAgICBsb2dpY2FsRnJhbWUuc2NhbGUoMS4wZiAvIHZp
ZXctPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGNvcmUobV93ZWJGcmFtZSktPmNyZWF0ZVZp
ZXcobG9naWNhbEZyYW1lLnNpemUoKSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCk7CiB9
CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFNhdmVUb1BhZ2VDYWNoZSgpCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODcxNDQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
OCBAQAorMjAxNS0wNy0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbV2luXSBJbXBsZW1lbnQgcHJvcGVyIEhpZ2ggRFBJIHN1cHBvcnQgZmVhdHVyZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzNQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjE1NTgyNjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFdpbkxhdW5jaGVyIHRvIHRha2UgZGV2
aWNlIHNjYWxpbmcgZmFjdG9yIGludG8gYWNjb3VudC4KKworICAgICAgICAqIFdpbkxhdW5jaGVy
L0NvbW1vbi5jcHA6CisgICAgICAgIChyZXNpemVTdWJWaWV3cyk6IE1ha2Ugc3VyZSB0b29sYmFy
cyBhbmQgVVJMIGJhciBhcmUgcHJvcGVybHkgc2l6ZWQgYW5kIHVzaW5nCisgICAgICAgIGEgdmFs
aWQgZm9udC4KKyAgICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKTogSGFuZGxlIGhpZ2gg
RFBJIGRlc2t0b3BzLgorICAgICAgICAoV25kUHJvYyk6IE1ha2UgY29tbWVudHMgbW9yZSBwcmVj
aXNlLgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcDoKKyAgICAgICAgKFdp
bkxhdW5jaGVyOjppbml0KTogRGV0ZXJtaW5lIGRldmljZSBzY2FsZSBmYWN0b3IgYXQgbGF1bmNo
LgorICAgICAgICAoV2luTGF1bmNoZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKTogQWRkZWQu
CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaDoKKyAgICAgICAgKiBXaW5MYXVu
Y2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaDogVXNlIEMrKzExIGluaXRpYWxpemF0aW9uLgorICAg
ICAgICAqIFdpbkxhdW5jaGVyL1dpbk1haW4uY3BwOiBTaXplIGludGVyZmFjZSBiYXNlZCBvbiBz
Y2FsaW5nIGZhY3Rvci4KKyAgICAgICAgKHdXaW5NYWluKTogRGl0dG8uCisgICAgICAgICogd2lu
L0RMTExhdW5jaGVyL0RMTExhdW5jaGVyTWFpbi5jcHA6CisgICAgICAgICh3V2luTWFpbik6IFRl
bGwgV2luZG93cyB3ZSB1bmRlcnN0YW5kIGhpZ2ggRFBJLgorCiAyMDE1LTA3LTIxICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgVk0gcG9vbCBhbGxvY2F0
aW9uIHNob3VsZCBoYXZlIGEgcmVzZXJ2ZSBmb3IgYWxsb2NhdGlvbnMgdGhhdCBjYW5ub3QgZmFp
bApJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XaW5MYXVuY2hlci9Db21tb24uY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5M
YXVuY2hlci9Db21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBAIHR5cGVk
ZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYk11dGFibGUKIEhJTlNUQU5DRSBoSW5zdDsKIEhX
TkQgaE1haW5XbmQ7CiBIV05EIGhVUkxCYXJXbmQ7CitIR0RJT0JKIGhPbGRGb250OworSEdESU9C
SiBoVVJMRm9udDsKIEhXTkQgaEJhY2tCdXR0b25XbmQ7CiBIV05EIGhGb3J3YXJkQnV0dG9uV25k
OwogSFdORCBoQ2FjaGVXbmQ7CkBAIC0xMDEsMTcgKzEwMywzOCBAQCBJTlRfUFRSIENBTExCQUNL
IENhY2hlcyhIV05ELCBVSU5ULCBXUEFSCiBzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJsQlN0
cik7CiBzdGF0aWMgdm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhXTkQgaERsZyk7CiAKK3N0YXRpYyBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EIHdpbmRvdykKK3sKKyAgICBIREMg
ZGMgPSA6OkdldERDKHdpbmRvdyk7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSA6Okdl
dERldmljZUNhcHMoZGMsIExPR1BJWEVMU1gpIC8gOTYuMGY7CisgICAgOjpSZWxlYXNlREMod2lu
ZG93LCBkYyk7CisgICAgcmV0dXJuIGRldmljZVNjYWxlRmFjdG9yOworfQorCiBzdGF0aWMgdm9p
ZCByZXNpemVTdWJWaWV3cygpCiB7CiAgICAgaWYgKGdXaW5MYXVuY2hlci0+dXNlc0xheWVyZWRX
ZWJWaWV3KCkgfHwgIWdWaWV3V2luZG93KQogICAgICAgICByZXR1cm47CiAKKyAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGdWaWV3V2luZG93KTsKKwog
ICAgIFJFQ1QgcmNDbGllbnQ7CiAgICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJjQ2xpZW50
KTsKLSAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9uV25kLCAwLCAwLCBDT05UUk9MQlVUVE9OX1dJ
RFRILCBVUkxCQVJfSEVJR0hULCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJkQnV0dG9u
V25kLCBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCBDT05UUk9MQlVUVE9OX1dJRFRILCBVUkxCQVJf
SEVJR0hULCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhVUkxCYXJXbmQsIENPTlRST0xCVVRUT05f
V0lEVEggKiAyLCAwLCByY0NsaWVudC5yaWdodCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAg
TW92ZVdpbmRvdyhnVmlld1dpbmRvdywgMCwgVVJMQkFSX0hFSUdIVCwgcmNDbGllbnQucmlnaHQs
IHJjQ2xpZW50LmJvdHRvbSAtIFVSTEJBUl9IRUlHSFQsIFRSVUUpOworCisgICAgaW50IGhlaWdo
dCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsKKyAgICBpbnQgd2lkdGggPSBzY2FsZUZh
Y3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7CisKKyAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9u
V25kLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KGhGb3J3YXJk
QnV0dG9uV25kLCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRv
dyhoVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUp
OworICAgIE1vdmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQs
IHJjQ2xpZW50LmJvdHRvbSAtIGhlaWdodCwgVFJVRSk7CisKKyAgICBpZiAoIWhVUkxGb250KSB7
CisgICAgICAgIGhVUkxGb250ID0gOjpDcmVhdGVGb250KHNjYWxlRmFjdG9yICogMTgsIDAsIDAs
IDAsIEZXX05PUk1BTCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgREVGQVVMVF9DSEFSU0VULAorICAg
ICAgICAgICAgT1VUX1RUX09OTFlfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJFQ0lTLCBBTlRJQUxJ
QVNFRF9RVUFMSVRZLCBGRl9ET05UQ0FSRSwgTCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICB9CisK
KyAgICA6OlNlbmRNZXNzYWdlKGhVUkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZP
TlQpLCByZWludGVycHJldF9jYXN0PFdQQVJBTT4oaFVSTEZvbnQpLCBUUlVFKTsKIH0KIAogc3Rh
dGljIHZvaWQgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCkKQEAgLTEzMiwxMCArMTU1LDEyIEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCkKICAgICBpZiAoITo6U3lzdGVt
UGFyYW1ldGVyc0luZm8oU1BJX0dFVFdPUktBUkVBLCAwLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmRl
c2t0b3ApLCAwKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBk
ZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdygwKTsKKwogICAgIHNfd2luZG93UG9zaXRpb24ueCA9
IDA7CiAgICAgc193aW5kb3dQb3NpdGlvbi55ID0gMDsKLSAgICBzX3dpbmRvd1NpemUuY3ggPSBk
ZXNrdG9wLnJpZ2h0IC0gZGVza3RvcC5sZWZ0OwotICAgIHNfd2luZG93U2l6ZS5jeSA9IGRlc2t0
b3AuYm90dG9tIC0gZGVza3RvcC50b3A7CisgICAgc193aW5kb3dTaXplLmN4ID0gc2NhbGVGYWN0
b3IgKiAoZGVza3RvcC5yaWdodCAtIGRlc2t0b3AubGVmdCk7CisgICAgc193aW5kb3dTaXplLmN5
ID0gc2NhbGVGYWN0b3IgKiAoZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcCk7CiB9CiAKIEJP
T0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNlLCBEV09SRCByZWFzb24sIExQ
Vk9JRCkKQEAgLTQyMSwxMyArNDQ2LDEzIEBAIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05E
IGhXbmQsIFVJTlQKICAgICAgICAgICAgIC8vIEZvciB0ZXN0aW5nIG91ciB0cmFuc3BhcmVudCB3
aW5kb3csIHdlIG5lZWQgYSByZWdpb24gdG8gdXNlIGFzIGEgaGFuZGxlIGZvcgogICAgICAgICAg
ICAgLy8gZHJhZ2dpbmcuIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBxdWVy
eSB0aGUgd2ViIHZpZXcgdG8gc2VlIHdoYXQncwogICAgICAgICAgICAgLy8gdW5kZXIgdGhlIG1v
dXNlLiBIb3dldmVyLCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJh
cnkKLSAgICAgICAgICAgIC8vIDMwIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBh
cyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRpb24uCisgICAgICAgICAgICAvLyAzMCBsb2dp
Y2FsIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJhcnkgZ3Jp
cHBpbmcgbG9jYXRpb24uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gV2hlbiB3ZSBh
cmUgd2l0aGluIHRoaXMgYmFkLCByZXR1cm4gSFRfQ0FQVElPTiB0byB0ZWxsIFdpbmRvd3Mgd2Ug
d2FudCB0bwogICAgICAgICAgICAgLy8gdHJlYXQgdGhpcyByZWdpb24gYXMgaWYgaXQgd2VyZSB0
aGUgdGl0bGUgYmFyIG9uIGEgbm9ybWFsIHdpbmRvdy4KICAgICAgICAgICAgIGludCB5ID0gSElX
T1JEKGxQYXJhbSk7CiAKLSAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5IDwg
d2luZG93LnRvcCArIGRyYWdCYXJIZWlnaHQpKQorICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93
LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsgKGRyYWdCYXJIZWlnaHQgKiBnV2luTGF1bmNoZXIt
PmRldmljZVNjYWxlRmFjdG9yKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSFRDQVBUSU9O
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBo
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9X
aW5MYXVuY2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNo
ZXIuY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdo
YW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC02MSw2
ICs2MSw4IEBAIFdpbkxhdW5jaGVyOjpXaW5MYXVuY2hlcihIV05EIG1haW5XbmQsIEgKIAogSFJF
U1VMVCBXaW5MYXVuY2hlcjo6aW5pdCgpCiB7CisgICAgdXBkYXRlRGV2aWNlU2NhbGVGYWN0b3Io
KTsKKwogICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJWaWV3
LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3Lkdl
dEludGVyZmFjZVB0cigpKSk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBo
cjsKQEAgLTQ3OCwzICs0ODAsMTAgQEAgdm9pZCBXaW5MYXVuY2hlcjo6em9vbU91dCgpCiAKICAg
ICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChudWxscHRyKTsKIH0KKwordm9pZCBXaW5MYXVuY2hl
cjo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIEhEQyBkYyA9IDo6R2V0REMobV9o
TWFpblduZCk7CisgICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IDo6R2V0RGV2aWNlQ2FwcyhkYywg
TE9HUElYRUxTWCkgLyA5Ni4wZjsKKyAgICA6OlJlbGVhc2VEQyhtX2hNYWluV25kLCBkYyk7Cit9
CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xz
L1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2ICs5MCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHpvb21JbigpOwogICAgIHZvaWQgem9vbU91dCgpOwogCisgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSB7IHJldHVybiBtX2RldmljZVNjYWxlRmFjdG9yOyB9
CisgICAgdm9pZCB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCiBwcml2YXRlOgogICAgIHN0
ZDo6dmVjdG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRlbXM7CiAKQEAgLTExNSw1
ICsxMTgsNiBAQCBwcml2YXRlOgogICAgIEhXTkQgbV9oTWFpblduZDsKICAgICBIV05EIG1faFVS
TEJhclduZDsKIAorICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3IgeyAxLjBmIH07CiAgICAg
Ym9vbCBtX3VzZUxheWVyZWRXZWJWaWV3OwogfTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dp
bkxhdW5jaGVyV2ViSG9zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxh
dW5jaGVyV2ViSG9zdC5oCShyZXZpc2lvbiAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9X
aW5MYXVuY2hlcldlYkhvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgSFJFU1VMVCB1cGRhdGVBZGRyZXNzQmFyKElXZWJWaWV3Jik7CiAKIHByaXZh
dGU6Ci0gICAgSFdORCBtX2hVUkxCYXJXbmQ7Ci0gICAgVUxPTkcgbV9yZWZDb3VudDsKLSAgICBX
aW5MYXVuY2hlciogbV9jbGllbnQ7CisgICAgSFdORCBtX2hVUkxCYXJXbmQgeyAwIH07CisgICAg
SEdESU9CSiBtX1VSTEJhckZvbnQgeyAwIH07CisgICAgSEdESU9CSiBtX29sZEZvbnQgeyAwIH07
CisgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKKyAgICBXaW5MYXVuY2hlciogbV9jbGllbnQg
eyBudWxscHRyIH07CiB9OwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0
NCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbk1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSwxMCArNjUsMTIgQEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRQog
ICAgIC8vIEluaXQgQ09NCiAgICAgT2xlSW5pdGlhbGl6ZShudWxscHRyKTsKIAorICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coMCk7CisKICAgICBpZiAo
dXNlc0xheWVyZWRXZWJWaWV3KSB7CiAgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3co
TCJFRElUIiwgTCJUeXBlIFVSTCBIZXJlIiwKICAgICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5E
T1cgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAK
LSAgICAgICAgICAgIHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193
aW5kb3dTaXplLmN5LCBzX3dpbmRvd1NpemUuY3gsIFVSTEJBUl9IRUlHSFQsCisgICAgICAgICAg
ICBzY2FsZUZhY3RvciAqIHNfd2luZG93UG9zaXRpb24ueCwgc2NhbGVGYWN0b3IgKiAoc193aW5k
b3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5KSwgc2NhbGVGYWN0b3IgKiBzX3dpbmRvd1Np
emUuY3gsIHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVCwKICAgICAgICAgICAgIDAsIDAsIGhJ
bnN0LCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhz
eldpbmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLApAQCAtNzgsOCArODAs
OCBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAgICAgICAgICAg
ICByZXR1cm4gRkFMU0U7CiAKICAgICAgICAgaEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3co
TCJCVVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwg
MCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICAgICAgaEZvcndhcmRCdXR0b25XbmQg
PSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwg
QlNfVEVYVCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0
LCAwKTsKLSAgICAgICAgaFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19D
SElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEws
IENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDAp
OworICAgICAgICBoRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwi
PiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogQ09OVFJP
TEJVVFRPTl9XSURUSCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKyAgICAgICAg
aFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lC
TEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICog
Q09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7
CiAKICAgICAgICAgU2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwogICAgICAgICBVcGRh
dGVXaW5kb3coaE1haW5XbmQpOwpAQCAtOTMsNyArOTUsMTEgQEAgaW50IFdJTkFQSSB3V2luTWFp
bihISU5TVEFOQ0UsIEhJTlNUQU5DRQogCiAgICAgU2V0Rm9jdXMoaFVSTEJhclduZCk7CiAKLSAg
ICBSRUNUIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlv
bi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRp
b24ueSArIHNfd2luZG93U2l6ZS5jeSB9OworICAgIFJFQ1QgY2xpZW50UmVjdDsKKyAgICA6Okdl
dENsaWVudFJlY3QoaE1haW5XbmQsICZjbGllbnRSZWN0KTsKKworICAgIGlmICh1c2VzTGF5ZXJl
ZFdlYlZpZXcpCisgICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193
aW5kb3dQb3NpdGlvbi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNf
d2luZG93UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSB9OwogCiAgICAgV2luTGF1bmNoZXJX
ZWJIb3N0KiB3ZWJIb3N0ID0gbnVsbHB0cjsKIApJbmRleDogVG9vbHMvd2luL0RMTExhdW5jaGVy
L0RMTExhdW5jaGVyTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvd2luL0RMTExhdW5jaGVy
L0RMTExhdW5jaGVyTWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL3dpbi9ETExM
YXVuY2hlci9ETExMYXVuY2hlck1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkz
LDkgQEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlLAogICAgIF9zZXRf
Rk1BM19lbmFibGUoMCk7CiAjZW5kaWYKIAorICAgIEJPT0wgZGlkSXQgPSBTZXRQcm9jZXNzRFBJ
QXdhcmUoKTsKKyAgICBfQVNTRVJUKGRpZEl0KTsKKwogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9D
CiAgICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsK
ICAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257312</attachid>
            <date>2015-07-22 17:22:17 -0700</date>
            <delta_ts>2015-07-22 22:06:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150722173505.patch</filename>
            <type>text/plain</type>
            <size>47019</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA3LTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGlsZSk6IERv
bid0IHRyYW5zbGF0ZSB0aGUgQ0dDb250ZXh0IHRvIHRoZSBwb3NpdGlvbgorICAgICAgICBvZiB0
aGUgQ0FDRkxheWVyUmVmOyB0aGUgdW5kZXJseWluZyBjb250ZXh0IGlzIGFscmVhZHkgaW4gdGhl
IHJpZ2h0IHBvc2l0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZl
bnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNv
b3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1doZWVsRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50Cisg
ICAgICAgIGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKwog
MjAxNS0wNy0yMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRGVm
YXVsdCBtZWRpYSBjb250cm9scyB1c2UgYSBzZXJpZiBmb250LCB3aGljaCBzZWVtcyB3cm9uZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MTIyLDYgKzgxMjIsNyBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEV2ZW50TG9vcFdpbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cRmlsZVN5c3RlbVdpbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJT2JqZWN0Q291
bnRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJ
VXRpbGl0aWVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHdp
blxJbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cd2luXEltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEtleUV2ZW50V2luLmNwcCIg
Lz4KQEAgLTIwMjM1LDYgKzIwMjM2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXHdpblxEZWZXbmRQcm9jV2luZG93Q2xhc3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXHdpblxEZWxheUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJT2JqZWN0Q291bnRl
ci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEdESVV0aWxp
dGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEhXbmRE
Qy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEltcG9ydGVk
RnVuY3Rpb25zRW51bWVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cd2luXEltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNzI2OSw2ICs3MjY5LDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFBhdGhVdGls
aXRpZXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHdpblxH
RElVdGlsaXRpZXMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncd2luPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxDb29yZGluYXRl
cy5oIj4KQEAgLTE1MjU4LDYgKzE1MjYxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFBhdGhVdGlsaXRpZXMuaCI+CiAgICAgICA8RmlsdGVyPnBsYXRm
b3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJVXRpbGl0aWVzLmgiPgorICAgICAgPEZpbHRlcj5w
bGF0Zm9ybVxncmFwaGljc1x3aW48L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVt
R3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1t
YXIueS5pbiI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5j
cHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxMiw5ICs1MTIsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGls
CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgLy8gVHJhbnNmb3Jt
IGNvbnRleHQgdG8gYmUgYXQgdGhlIG9yaWdpbiBvZiB0aGUgcGFyZW50IGxheWVyCi0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC10aWxlUG9zaXRpb24ueCwgLXRpbGVQb3NpdGlv
bi55KTsKLQogICAgIC8vIFNldCB0aGUgY29udGV4dCBjbGlwcGluZyByZWN0YW5nbGUgdG8gdGhl
IGN1cnJlbnQgdGlsZQogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFr
ZSh0aWxlUG9zaXRpb24ueCwgdGlsZVBvc2l0aW9uLnksIHRpbGVCb3VuZHMuc2l6ZS53aWR0aCwg
dGlsZUJvdW5kcy5zaXplLmhlaWdodCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNwcAkocmV2aXNpb24gMTg3
MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtTW91c2VFdmVudFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSBJbmMuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yNyw4ICsyNywxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgogCisjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzeC5oPgogCkBAIC0zOCw3ICs0MSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEludFBvaW50IHBvc2l0aW9uRm9yRXZlbnQoSFdO
RCBoV25kLCBMUEFSQU0gbFBhcmFtKQogewotICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJB
TShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKX07CisgICAgSW50UG9pbnQgcG9pbnQoR0VU
X1hfTFBBUkFNKGxQYXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pKTsKKyAgICBmbG9hdCBpbnZl
cnNlU2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7
CisgICAgcG9pbnQuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9yLCBpbnZlcnNlU2NhbGVGYWN0b3Ip
OwogICAgIHJldHVybiBwb2ludDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVXaW4uaCIKIAorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkxv
Y2FsV2luZG93c0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKQEAgLTEwNywxNCArMTA5LDE4IEBAIFNjcm9sbGJhclRoZW1l
V2luOjp+U2Nyb2xsYmFyVGhlbWVXaW4oKQogewogfQogCi1pbnQgU2Nyb2xsYmFyVGhlbWVXaW46
OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3N0YXRpYyBpbnQgc2Ny
b2xsYmFyVGhpY2tuZXNzSW5QaXhlbHMoKQogewotICAgIHN0YXRpYyBpbnQgdGhpY2tuZXNzOwot
ICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICB0aGlja25lc3MgPSA6OkdldFN5c3RlbU1ldHJp
Y3MoU01fQ1hWU0NST0xMKTsKKyAgICBzdGF0aWMgaW50IHRoaWNrbmVzcyA9IDo6R2V0U3lzdGVt
TWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIHJldHVybiB0aGlja25lc3M7CiB9CiAKK2ludCBT
Y3JvbGxiYXJUaGVtZVdpbjo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
KQoreworICAgIGZsb2F0IGludmVyc2VTY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZh
Y3RvckZvcldpbmRvdygwKTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KGludmVyc2VTY2FsZUZh
Y3RvciAqIHNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKCkpOworfQorCiB2b2lkIFNjcm9sbGJh
clRoZW1lV2luOjp0aGVtZUNoYW5nZWQoKQogewogICAgIGlmICghc2Nyb2xsYmFyVGhlbWUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4uY3BwCShy
ZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVu
dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHRElVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVk
ZSA8d2luZG93c3guaD4KIApAQCAtNDAsMTMgKzQyLDE4IEBAIHN0YXRpYyBJbnRQb2ludCBwb3Np
dGlvbkZvckV2ZW50KEhXTkQgaFcKIHsKICAgICBQT0lOVCBwb2ludCA9IHtHRVRfWF9MUEFSQU0o
bFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSl9OwogICAgIFNjcmVlblRvQ2xpZW50KGhXbmQs
ICZwb2ludCk7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IGxvZ2ljYWxQb2ludChw
b2ludCk7CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmljZVNjYWxl
RmFjdG9yRm9yV2luZG93KGhXbmQpOworICAgIGxvZ2ljYWxQb2ludC5zY2FsZShpbnZlcnNlU2Nh
bGVGYWN0b3IsIGludmVyc2VTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIGxvZ2ljYWxQb2ludDsK
IH0KIAogc3RhdGljIEludFBvaW50IGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoSFdORCBoV25kLCBM
UEFSQU0gbFBhcmFtKQogewotICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFyYW0p
LCBHRVRfWV9MUEFSQU0obFBhcmFtKX07Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50
IGxvZ2ljYWxQb2ludChHRVRfWF9MUEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSkp
OworICAgIGZsb2F0IGludmVyc2VTY2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rv
ckZvcldpbmRvdyhoV25kKTsKKyAgICBsb2dpY2FsUG9pbnQuc2NhbGUoaW52ZXJzZVNjYWxlRmFj
dG9yLCBpbnZlcnNlU2NhbGVGYWN0b3IpOworICAgIHJldHVybiBsb2dpY2FsUG9pbnQ7CiB9CiAK
IHN0YXRpYyBpbnQgaG9yaXpvbnRhbFNjcm9sbENoYXJzKCkKQEAgLTc3LDExICs4NCwxNCBAQCBQ
bGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAKICAgICAvLyBHbG9iYWwg
UG9zaXRpb24gaXMganVzdCB4LCB5IGxvY2F0aW9uIG9mIGV2ZW50CiAgICAgUE9JTlQgcG9pbnQg
PSB7bG9jYXRpb24ueCgpLCBsb2NhdGlvbi55KCl9OworICAgIGZsb2F0IGludmVyc2VTY2FsZUZh
Y3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhoV25kKTsKICAgICBtX2ds
b2JhbFBvc2l0aW9uID0gcG9pbnQ7CisgICAgbV9nbG9iYWxQb3NpdGlvbi5zY2FsZShpbnZlcnNl
U2NhbGVGYWN0b3IsIGludmVyc2VTY2FsZUZhY3Rvcik7CiAKICAgICAvLyBQb3NpdGlvbiBuZWVk
cyB0byBiZSB0cmFuc2xhdGVkIHRvIG91ciBjbGllbnQKICAgICBTY3JlZW5Ub0NsaWVudChoV25k
LCAmcG9pbnQpOwogICAgIG1fcG9zaXRpb24gPSBwb2ludDsKKyAgICBtX3Bvc2l0aW9uLnNjYWxl
KGludmVyc2VTY2FsZUZhY3RvciwgaW52ZXJzZVNjYWxlRmFjdG9yKTsKIH0KIAogUGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCBoV25kLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtLCBib29sIGlzTW91c2VIV2hlZWwpCkBAIC05MCw2ICsxMDAsOCBAQCBQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoaFduZCwgbFBhcmFtKSkKICAgICAsIG1fZGlyZWN0
aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKGZhbHNlKQogeworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7CisKICAgICAvLyBIb3cgbWFueSBwaXhl
bHMgc2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEdlY2tvIHVzZXMgdGhlIGhlaWdodCBvZiB0
aGUKICAgICAvLyBjdXJyZW50IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFu
Z2VzIGFzIHlvdSBnbyB0aHJvdWdoIHRoZQogICAgIC8vIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50
IHBhZ2VzLiAgSUUgNyBpcyB+NTAgcHgvbGluZSwgYWx0aG91Z2ggdGhlIHZhbHVlCkBAIC05Nyw4
ICsxMDksOCBAQCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChICiAgICAg
Ly8gc21vb3RoaW5nIGFsZ29yaXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRo
IHNsaWdodGx5IGxhcmdlcgogICAgIC8vIHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGpl
cmt5LiAgSGVyZSB3ZSB1c2UgMTAwIHB4IHBlciB0aHJlZSBsaW5lcwogICAgIC8vICh0aGUgZGVm
YXVsdCBzY3JvbGwgYW1vdW50IG9uIFdpbmRvd3MgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRp
Y2spLgotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEw
MC4wZiAvIDMuMGY7Ci0gICAgZmxvYXQgZGVsdGEgPSBHRVRfV0hFRUxfREVMVEFfV1BBUkFNKHdQ
YXJhbSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oV0hFRUxfREVMVEEpOworICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IHNjYWxlRmFjdG9yICogMTAwLjBmIC8g
My4wZjsKKyAgICBmbG9hdCBkZWx0YSA9IEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od1BhcmFtKSAv
IChzY2FsZUZhY3RvciAqIHN0YXRpY19jYXN0PGZsb2F0PihXSEVFTF9ERUxUQSkpOwogICAgIGlm
IChpc01vdXNlSFdoZWVsKSB7CiAgICAgICAgIC8vIFdpbmRvd3MgaXMgPC0tIC0vKyAtLT4sIFdl
YktpdCB3YW50cyA8LS0gKy8tIC0tPiwgc28gd2UgbmVnYXRlCiAgICAgICAgIC8vIHxkZWx0YXwg
YWZ0ZXIgc2F2aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiB0aGUgd2hlZWwgdGljayBtZW1iZXIu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxNS0wNy0y
MSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBJ
bXBsZW1lbnQgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8yMTU1ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKTog
U2l6ZQorICAgICAgICBwYWdlIGZvciBjdXJyZW50IGRldmljZSBzY2FsZSBmYWN0b3IuCisgICAg
ICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0
VG9Db250ZXh0KTogQWNjb3VudCBmb3IgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdl
YkZyYW1lOjpwYWludFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludCk6IERpdHRvLgorICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6cmVwYWludCk6IEFkanVzdCBw
YWludCByZWN0IGZvciBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViVmlldzo6c2Ny
b2xsQmFja2luZ1N0b3JlKTogQWRqdXN0IGNvb3JkaW5hdGVzIGZvciBzY2FsZSBmYWN0b3IuCisg
ICAgICAgIChXZWJWaWV3OjpzaXplQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6
dXBkYXRlQmFja2luZ1N0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpwYWludCk6IERp
dHRvLgorICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKTogRGl0dG8uCisg
ICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpnZXN0
dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdpbmRvdyk6
IEFkanVzdCBtYXggdG9vbCB0aXAgd2lkdGgKKyAgICAgICAgZm9yIGRldmljZSBzY2FsZSBmYWN0
b3IuCisgICAgICAgIChXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KTogQWRqdXN0IGNvb3JkaW5hdGVz
IGZvciBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJWaWV3OjplbGVtZW50QXRQb2ludCk6IERp
dHRvLgorICAgICAgICAoV2ViVmlldzo6c2Nyb2xsT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJWaWV3OjpzY3JvbGxCeSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6dmlzaWJsZUNvbnRl
bnRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpwYWludENvbnRlbnRzKTogRGl0dG8u
CisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDE1LTA3LTIxICBTdW5nbWFubiBDaG8gIDxzdW5n
bWFubi5jaG9AbmF2ZXJjb3JwLmNvbT4KIAogICAgICAgICBbV2luXSBBZGQgbmVlZFRvdWNoRXZl
bnRzKCkgc3R1YiB0byBXZWJDaHJvbWVDbGllbnQuaCBmb3IgYSBzdWNjZXNzZnVsIGJ1aWxkIHdp
dGggRU5BQkxFX1RPVUNIX0VWRU5UUz1PTgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2
aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzYsNiArMzM2LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnREb2N1bWVu
dFJlY3RUb0NvbgogICAgIGRpcnR5UmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKICAgICBnYy5jbGlw
KGRpcnR5UmVjdCk7CiAgICAgZ2MudHJhbnNsYXRlKC1yZWN0LmxlZnQsIC1yZWN0LnRvcCk7Cisg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSB3ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCk7Cisg
ICAgZ2Muc2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcikp
OwogICAgIHZpZXctPnBhaW50Q29udGVudHMoJmdjLCByZWN0KTsKICAgICBnYy5yZXN0b3JlKCk7
CiAKQEAgLTM2MCw2ICszNjIsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludFNjcm9sbFZpZXdS
ZWN0VG9DCiAgICAgZ2Muc2F2ZSgpOwogICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOwogICAg
IGRpcnR5UmVjdC5tb3ZlKC1wdC54LCAtcHQueSk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSB3
ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ2Muc2NhbGUoV2ViQ29yZTo6Rmxv
YXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgIHZpZXctPnBhaW50KCZnYywg
ZGlydHlSZWN0KTsKICAgICBnYy5yZXN0b3JlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQ
cmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dl
YlByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQg
V2ViUHJlZmVyZW5jZXM6OmluaXRpYWxpemVEZWZhdWx0U2UKIAogICAgIENGTXV0YWJsZURpY3Rp
b25hcnlSZWYgZGVmYXVsdHMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFN0
YW5kYXJkRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiU2Vnb2UgVUkiKSk7CisgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFN0YW5kYXJkRm9udFByZWZlcmVu
Y2VLZXkpLCBDRlNUUigiVGltZXMgTmV3IFJvbWFuIikpOwogICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRGaXhlZEZvbnRQcmVmZXJlbmNlS2V5KSwgQ0ZTVFIo
IkNvdXJpZXIgTmV3IikpOwogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNU
UihXZWJLaXRTZXJpZkZvbnRQcmVmZXJlbmNlS2V5KSwgQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIp
KTsKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U2Fuc1Nl
cmlmRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiQXJpYWwiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5Db250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HRElPYmplY3RDb3VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
RElVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+CkBAIC0zNjMsNiArMzY0LDcgQEAgY29uc3QgTFBDV1NUUiBr
V2ViVmlld1dpbmRvd0NsYXNzTmFtZSA9CiAKIGNvbnN0IGludCBXTV9YUF9USEVNRUNIQU5HRUQg
PSAweDAzMUE7CiBjb25zdCBpbnQgV01fVklTVEFfTU9VU0VIV0hFRUwgPSAweDAyMEU7Citjb25z
dCBpbnQgV01fRFBJQ0hBTkdFRCA9IDB4MDJFMDsKIAogc3RhdGljIGNvbnN0IGludCBtYXhUb29s
VGlwV2lkdGggPSAyNTA7CiAKQEAgLTgyMSw4ICs4MjMsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJWaWV3OjpjbG9zZQogICAgIHJldHVybiBTX09LOwogfQogCi12b2lkIFdlYlZp
ZXc6OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93UmVjdCwgYm9vbCBjb250
ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUsIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQordm9p
ZCBXZWJWaWV3OjpyZXBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGxvZ2ljYWxXaW5kb3dS
ZWN0LCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29u
dGVudE9ubHkpCiB7CisgICAgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dSZWN0KGxvZ2ljYWxXaW5k
b3dSZWN0KTsKKyAgICB3aW5kb3dSZWN0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAg
ICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIFRoZSBjb250
ZW50Q2hhbmdlZCwgaW1tZWRpYXRlLCBhbmQgcmVwYWludENvbnRlbnRPbmx5IHBhcmFtZXRlcnMg
YXJlIGFsbCBiYXNlZCBvbiBhIG5vbi0KICAgICAgICAgLy8gY29tcG9zaXRpbmcgcGFpbnRpbmcv
c2Nyb2xsaW5nIG1vZGVsLgpAQCAtOTIwLDEwICs5MjUsMTkgQEAgdm9pZCBXZWJWaWV3OjphZGRU
b0RpcnR5UmVnaW9uKEdESU9iamVjdAogICAgICAgICBtX3VpRGVsZWdhdGVQcml2YXRlLT53ZWJW
aWV3RGlkSW52YWxpZGF0ZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5n
U3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0
JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit2b2lkIFdlYlZpZXc6
OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmlldywgaW50IGxvZ2ljYWxEeCwg
aW50IGxvZ2ljYWxEeSwgY29uc3QgSW50UmVjdCYgbG9naWNhbFNjcm9sbFZpZXdSZWN0LCBjb25z
dCBJbnRSZWN0JiBsb2dpY2FsQ2xpcFJlY3QpCiB7CiAgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVl
OwogCisgICAgLy8gRGltZW5zaW9ucyBwYXNzZWQgdG8gdXMgZnJvbSBXZWJDb3JlIGFyZSBpbiBs
b2dpY2FsIHVuaXRzLiBXZSBtdXN0IGNvbnZlcnQgdG8gcGl4ZWxzOgorICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBpbnQgZHggPSBjbGFtcFRvPGludD4o
c2NhbGVGYWN0b3IgKiBsb2dpY2FsRHgpOworICAgIGludCBkeSA9IGNsYW1wVG88aW50PihzY2Fs
ZUZhY3RvciAqIGxvZ2ljYWxEeSk7CisgICAgSW50UmVjdCBzY3JvbGxWaWV3UmVjdChsb2dpY2Fs
U2Nyb2xsVmlld1JlY3QpOworICAgIHNjcm9sbFZpZXdSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsK
KyAgICBJbnRSZWN0IGNsaXBSZWN0KGxvZ2ljYWxDbGlwUmVjdCk7CisgICAgY2xpcFJlY3Quc2Nh
bGUoc2NhbGVGYWN0b3IpOworCiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgZG9pbmcgc29tZXRoaW5nIHNtYXJ0ZXIg
aGVyZSwgbGlrZSBtb3ZpbmcgdGlsZXMgYXJvdW5kIGFuZCBwYWludGluZwogICAgICAgICAvLyBh
bnkgbmV3bHktZXhwb3NlZCB0aWxlcy4gPGh0dHA6Ly93ZWJraXQub3JnL2IvNTI3MTQ+CkBAIC05
NTIsNyArOTY2LDcgQEAgdm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJhbWVWaQog
ICAgIEhXbmREQyB3aW5kb3dEQyhtX3ZpZXdXaW5kb3cpOwogICAgIGF1dG8gYml0bWFwREMgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyh3aW5kb3dEQykpOwogICAgIEhHRElP
Qkogb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG1fYmFja2luZ1N0
b3JlQml0bWFwLT5nZXQoKSk7Ci0gICAgCisKICAgICAvLyBTY3JvbGwgdGhlIGJpdG1hcC4KICAg
ICBSRUNUIHNjcm9sbFJlY3RXaW4oc2Nyb2xsVmlld1JlY3QpOwogICAgIFJFQ1QgY2xpcFJlY3RX
aW4oY2xpcFJlY3QpOwpAQCAtOTgyLDggKzk5NiwxMSBAQCB2b2lkIFdlYlZpZXc6OnNpemVDaGFu
Z2VkKGNvbnN0IEludFNpemUmCiAKICAgICBkZWxldGVCYWNraW5nU3RvcmUoKTsKIAotICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZSh0b3BMZXZlbEZyYW1lKCkpKQotICAgICAgICBjb3Jl
RnJhbWUtPnZpZXcoKS0+cmVzaXplKG5ld1NpemUpOworICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZSh0b3BMZXZlbEZyYW1lKCkpKSB7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBuZXdTaXplOworICAgICAgICBsb2dpY2FsU2l6ZS5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CisgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5yZXNpemUobG9naWNhbFNpemUp
OworICAgIH0KIAogI2lmIFVTRShDQSkKICAgICBpZiAobV9sYXllclRyZWVIb3N0KQpAQCAtOTk5
LDYgKzEwMTYsMTYgQEAgdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJgog
I2VuZGlmCiB9CiAKK2Jvb2wgV2ViVmlldzo6ZHBpQ2hhbmdlZChmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIUlzUHJvY2Vzc0RQSUF3YXJlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemVDaGFuZ2VkKG5ld1NpemUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIC8vIFRoaXMgZW11bGF0ZXMgdGhlIE1hYyBzbWFydHMgZm9yIHBh
aW50aW5nIHJlY3RzIGludGVsbGlnZW50bHkuICBUaGlzIGlzIHZlcnkKIC8vIGltcG9ydGFudCBm
b3IgdXMsIHNpbmNlIHdlIGRvdWJsZSBidWZmZXIgYmFzZWQgb2ZmIGRpcnR5IHJlY3RzLgogc3Rh
dGljIHZvaWQgZ2V0VXBkYXRlUmVjdHMoSFJHTiByZWdpb24sIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCwgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKQEAgLTEyMTEsNyArMTIzOCw3IEBAIHZvaWQg
V2ViVmlldzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW8KICAgICAgICAgZGVsZXRlQmFja2lu
Z1N0b3JlU29vbigpOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShG
cmFtZVZpZXcqIGZyYW1lVmlldywgSERDIGJpdG1hcERDLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QsIFdpbmRvd3NUb1BhaW50IHdpbmRvd3NUb1BhaW50KQordm9pZCBXZWJWaWV3OjpwYWludElu
dG9CYWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEhEQyBiaXRtYXBEQywgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0UGl4ZWxzLCBXaW5kb3dzVG9QYWludCB3aW5kb3dzVG9QYWludCkK
IHsKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGFuZCB3ZSBzaG91bGQKICAgICAvLyBhc3Nl
cnQgYXMgc3VjaC4gQnV0IGN1cnJlbnRseSBpdCAqaXMqIHNvbWV0aW1lcyBjYWxsZWQsIHNvIHdl
IGNhbid0IGFzc2VydCB5ZXQuIFNlZQpAQCAtMTIyMyw3ICsxMjUwLDcgQEAgdm9pZCBXZWJWaWV3
OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogICAgIC8vIGJ1dCBpdCB3YXMgYmVpbmcgaGl0
IGR1cmluZyBvdXIgbGF5b3V0IHRlc3RzLCBhbmQgaXMgYmVpbmcgaW52ZXN0aWdhdGVkIGluCiAg
ICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8yOTM1MC4KIAotICAgIFJFQ1QgcmVjdCA9IGRpcnR5
UmVjdDsKKyAgICBSRUNUIHJlY3QgPSBkaXJ0eVJlY3RQaXhlbHM7CiAKICNpZiBGTEFTSF9CQUNL
SU5HX1NUT1JFX1JFRFJBVwogICAgIHsKQEAgLTEyMzIsMTUgKzEyNTksMjEgQEAgdm9pZCBXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogICAgICAgICBGaWxsUmVjdChkYywgJnJl
Y3QsIHllbGxvd0JydXNoLmdldCgpKTsKICAgICAgICAgR2RpRmx1c2goKTsKICAgICAgICAgU2xl
ZXAoNTApOwotICAgICAgICBwYWludEludG9XaW5kb3coYml0bWFwREMsIGRjLCBkaXJ0eVJlY3Qp
OworICAgICAgICBwYWludEludG9XaW5kb3coYml0bWFwREMsIGRjLCBkaXJ0eVJlY3RQaXhlbHMp
OwogICAgIH0KICNlbmRpZgogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIGZsb2F0IGludmVyc2VTY2FsZUZhY3RvciA9IDEuMGYgLyBzY2FsZUZhY3Rv
cjsKKworICAgIEludFJlY3QgbG9naWNhbERpcnR5UmVjdCA9IGRpcnR5UmVjdFBpeGVsczsKKyAg
ICBsb2dpY2FsRGlydHlSZWN0LnNjYWxlKGludmVyc2VTY2FsZUZhY3Rvcik7CisKICAgICBHcmFw
aGljc0NvbnRleHQgZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOwogICAgIGdjLnNldFNob3Vs
ZEluY2x1ZGVDaGlsZFdpbmRvd3Mod2luZG93c1RvUGFpbnQgPT0gUGFpbnRXZWJWaWV3QW5kQ2hp
bGRyZW4pOwogICAgIGdjLnNhdmUoKTsKICAgICBpZiAobV90cmFuc3BhcmVudCkKLSAgICAgICAg
Z2MuY2xlYXJSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGdjLmNsZWFyUmVjdChsb2dpY2FsRGly
dHlSZWN0KTsKICAgICBlbHNlCiAgICAgICAgIEZpbGxSZWN0KGJpdG1hcERDLCAmcmVjdCwgKEhC
UlVTSClHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCkpOwogCkBAIC0xMjQ5LDE1ICsxMjgyLDE4
IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW0KICAgICAgICAgdWlQ
cml2YXRlLT5kcmF3QmFja2dyb3VuZCh0aGlzLCBiaXRtYXBEQywgJnJlY3QpOwogCiAgICAgaWYg
KGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmZyYW1lKCkuY29udGVudFJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwotICAgICAgICBmcmFtZVZpZXctPnBhaW50KCZnYywg
ZGlydHlSZWN0KTsKKyAgICAgICAgZ2Muc2F2ZSgpOworICAgICAgICBnYy5zY2FsZShGbG9hdFNp
emUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CisgICAgICAgIGdjLmNsaXAobG9naWNhbERp
cnR5UmVjdCk7CisgICAgICAgIGZyYW1lVmlldy0+cGFpbnQoJmdjLCBsb2dpY2FsRGlydHlSZWN0
KTsKKyAgICAgICAgZ2MucmVzdG9yZSgpOwogICAgICAgICBpZiAobV9zaG91bGRJbnZlcnRDb2xv
cnMpCi0gICAgICAgICAgICBnYy5maWxsUmVjdChkaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlRGlmZmVyZW5jZSk7CisgICAgICAgICAgICBnYy5m
aWxsUmVjdChsb2dpY2FsRGlydHlSZWN0LCBDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZURpZmZlcmVuY2UpOwogICAgIH0KICAgICBnYy5yZXN0b3JlKCk7CiB9CiAK
LXZvaWQgV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KEhEQyBiaXRtYXBEQywgSERDIHdpbmRvd0RD
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIFdlYlZpZXc6OnBhaW50SW50b1dpbmRv
dyhIREMgYml0bWFwREMsIEhEQyB3aW5kb3dEQywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0UGl4
ZWxzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSwgYW5kIHdlIHNob3VsZAogICAgIC8v
IGFzc2VydCBhcyBzdWNoLiBCdXQgY3VycmVudGx5IGl0ICppcyogc29tZXRpbWVzIGNhbGxlZCwg
c28gd2UgY2FuJ3QgYXNzZXJ0IHlldC4gU2VlCkBAIC0xMjY2LDcgKzEzMDIsNyBAQCB2b2lkIFdl
YlZpZXc6OnBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwCiAgICAgTE9DQUxfR0RJX0NPVU5URVIo
MCwgX19GVU5DVElPTl9fKTsKICNpZiBGTEFTSF9XSU5ET1dfUkVEUkFXCiAgICAgYXV0byBncmVl
bkJydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVTb2xpZEJydXNoKFJHQigwLCAyNTUsIDAp
KSk7Ci0gICAgUkVDVCByZWN0ID0gZGlydHlSZWN0OworICAgIFJFQ1QgcmVjdCA9IGRpcnR5UmVj
dFBpeGVsczsKICAgICBGaWxsUmVjdCh3aW5kb3dEQywgJnJlY3QsIGdyZWVuQnJ1c2guZ2V0KCkp
OwogICAgIEdkaUZsdXNoKCk7CiAgICAgU2xlZXAoNTApOwpAQCAtMTI3NCw4ICsxMzEwLDggQEAg
dm9pZCBXZWJWaWV3OjpwYWludEludG9XaW5kb3coSERDIGJpdG1hcAogCiAgICAgLy8gQmxpdCB0
aGUgZGlydHkgcmVjdCBmcm9tIHRoZSBiYWNraW5nIHN0b3JlIGludG8gdGhlIHNhbWUgcG9zaXRp
b24KICAgICAvLyBpbiB0aGUgZGVzdGluYXRpb24gREMuCi0gICAgQml0Qmx0KHdpbmRvd0RDLCBk
aXJ0eVJlY3QueCgpLCBkaXJ0eVJlY3QueSgpLCBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0
LmhlaWdodCgpLCBiaXRtYXBEQywKLSAgICAgICAgICAgZGlydHlSZWN0LngoKSwgZGlydHlSZWN0
LnkoKSwgU1JDQ09QWSk7CisgICAgQml0Qmx0KHdpbmRvd0RDLCBkaXJ0eVJlY3RQaXhlbHMueCgp
LCBkaXJ0eVJlY3RQaXhlbHMueSgpLCBkaXJ0eVJlY3RQaXhlbHMud2lkdGgoKSwgZGlydHlSZWN0
UGl4ZWxzLmhlaWdodCgpLCBiaXRtYXBEQywKKyAgICAgICAgZGlydHlSZWN0UGl4ZWxzLngoKSwg
ZGlydHlSZWN0UGl4ZWxzLnkoKSwgU1JDQ09QWSk7CiAKICAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwogfQpAQCAtMTQyMiw5ICsxNDU4LDE1IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4
dE1lbnVFdmVudChXUEEKIAogICAgIGxQYXJhbSA9IE1BS0VMUEFSQU0oY29vcmRzLngsIGNvb3Jk
cy55KTsKIAorICAgIC8vIENvbnZlcnQgY29vcmRpbmF0ZXMgdG8gbG9naWNhbCBwaXhlbHMKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgaW52
ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOworICAgIEludFBvaW50IGxvZ2lj
YWxDb29yZHMoY29vcmRzKTsKKyAgICBsb2dpY2FsQ29vcmRzLnNjYWxlKGludmVyc2VTY2FsZUZh
Y3RvciwgaW52ZXJzZVNjYWxlRmFjdG9yKTsKKwogICAgIG1fcGFnZS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCkuY2xlYXJDb250ZXh0TWVudSgpOwogCi0gICAgSW50UG9pbnQgZG9jdW1lbnRQb2lu
dChtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhjb29yZHMpKTsK
KyAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50KG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53
aW5kb3dUb0NvbnRlbnRzKGxvZ2ljYWxDb29yZHMpKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQoZG9jdW1lbnRQb2ludCk7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LmZyYW1lKCkgOiAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKIApAQCAtMTQ0OSw5ICsxNDkxLDExIEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1l
bnVFdmVudChXUEEKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFBPSU5UIHBvaW50KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVy
LmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpKTsKKyAgICBJ
bnRQb2ludCBsb2dpY2FsUG9pbnQgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRNZW51
Q29udHJvbGxlci5oaXRUZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
KTsKKyAgICBsb2dpY2FsUG9pbnQuc2NhbGUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKTsKIAog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8gc2NyZWVuIGNvb3JkaW5hdGVzCisgICAgUE9J
TlQgcG9pbnQgPSBsb2dpY2FsUG9pbnQ7CiAgICAgaWYgKCE6OkNsaWVudFRvU2NyZWVuKG1fdmll
d1dpbmRvdywgJnBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNjQ0LDYgKzE2
ODgsMTIgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3UGFyYQogCiAgICAg
Ym9vbCBoaXRTY3JvbGxiYXIgPSBmYWxzZTsKICAgICBQT0lOVCBnZXN0dXJlQmVnaW5Qb2ludCA9
IHtnbi0+cHRzTG9jYXRpb24ueCwgZ24tPnB0c0xvY2F0aW9uLnl9OworCisgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IGludmVyc2VTY2FsZUZh
Y3RvciA9IDEuMGYgLyBzY2FsZUZhY3RvcjsKKyAgICBJbnRQb2ludCBsb2dpY2FsR2VzdHVyZUJl
Z2luUG9pbnQoZ2VzdHVyZUJlZ2luUG9pbnQpOworICAgIGxvZ2ljYWxHZXN0dXJlQmVnaW5Qb2lu
dC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3IsIGludmVyc2VTY2FsZUZhY3Rvcik7CisKICAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RS
ZXF1ZXN0OjpEaXNhbGxvd1NoYWRvd0NvbnRlbnQpOwogICAgIGZvciAoRnJhbWUqIGNoaWxkRnJh
bWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IEV2ZW50
SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKG1fZ2VzdHVyZVRhcmdldE5vZGUuZ2V0KCkp
KSB7CiAgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY2hpbGRGcmFtZS0+dmlldygpOwpA
QCAtMTY1Niw3ICsxNzA2LDcgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQQVJBTSB3
UGFyYQogICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKGdlc3R1cmVC
ZWdpblBvaW50KSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGZyYW1lVmlldy0+c2Ny
ZWVuVG9Db250ZW50cyhsb2dpY2FsR2VzdHVyZUJlZ2luUG9pbnQpKTsKICAgICAgICAgbGF5ZXIt
PmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9
IHJlc3VsdC5pbm5lck5vZGUoKTsKIApAQCAtMTc2MSwxMyArMTgxMSwxNSBAQCBib29sIFdlYlZp
ZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBCiAgICAgICAgIH0KIAogICAgICAgICBTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsZWRBcmVhID0gMDsKKyAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0
YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0YVkgKiBzY2FsZUZhY3Rvcik7CiAKICAgICAg
ICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlIHx8ICFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3Vt
ZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+dmll
dygpLT5zY3JvbGxCeShJbnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKyAgICAgICAgICAgIGNv
cmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAg
ICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6
ZSgtZGVsdGFYLCAtZGVsdGFZKSwgV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlNjcm9sbE9mZnNldENs
YW1wZWQsICZzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCBXZWJDb3JlOjpSZW5kZXJM
YXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBlZCwgJnNjcm9sbGVkQXJlYSk7CiAKICAgICAgICAgaWYg
KCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIo
KSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2VzdHVy
ZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsKQEAgLTIyMDYsNyArMjI1OCwxMSBAQCB2
b2lkIFdlYlZpZXc6OnNldFNob3VsZEludmVydENvbG9ycyhib29sCiAKICAgICBSRUNUIHdpbmRv
d1JlY3QgPSB7MH07CiAgICAgZnJhbWVSZWN0KCZ3aW5kb3dSZWN0KTsKLSAgICByZXBhaW50KHdp
bmRvd1JlY3QsIHRydWUsIHRydWUpOworCisgICAgLy8gcmVwYWludCBleHBlY3RzIGxvZ2ljYWwg
cGl4ZWxzLCBzbyByZXNjYWxlIGhlcmUuCisgICAgSW50UmVjdCBsb2dpY2FsUmVjdCh3aW5kb3dS
ZWN0KTsKKyAgICBsb2dpY2FsUmVjdC5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisgICAgcmVwYWludChsb2dpY2FsUmVjdCwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmll
dzo6cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xhc3MoKQpAQCAtMjM0OSw2ICsyNDA1LDkgQEAgTFJF
U1VMVCBDQUxMQkFDSyBXZWJWaWV3OjpXZWJWaWV3V25kUHJvYwogICAgICAgICAgICAgaWYgKGxQ
YXJhbSAhPSAwKQogICAgICAgICAgICAgICAgIHdlYlZpZXctPnNpemVDaGFuZ2VkKEludFNpemUo
TE9XT1JEKGxQYXJhbSksIEhJV09SRChsUGFyYW0pKSk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBXTV9EUElDSEFOR0VEOgorICAgICAgICAgICAgd2ViVmlldy0+ZHBpQ2hhbmdl
ZChMT1dPUkQod1BhcmFtKSwgSW50U2l6ZShMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdNX1NIT1dXSU5ET1c6CiAgICAg
ICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7CiAgICAgICAgICAgICBpZiAod1BhcmFtID09IDApIHsKQEAgLTI5MTYsNyArMjk3NSw3
IEBAIHZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZVRvb2xUaXBXaW5kb3coKQogICAgIGluZm8udUlk
ID0gcmVpbnRlcnByZXRfY2FzdDxVSU5UX1BUUj4obV92aWV3V2luZG93KTsKIAogICAgIDo6U2Vu
ZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX0FERFRPT0wsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
TFBBUkFNPigmaW5mbykpOwotICAgIDo6U2VuZE1lc3NhZ2UobV90b29sVGlwSHduZCwgVFRNX1NF
VE1BWFRJUFdJRFRILCAwLCBtYXhUb29sVGlwV2lkdGgpOworICAgIDo6U2VuZE1lc3NhZ2UobV90
b29sVGlwSHduZCwgVFRNX1NFVE1BWFRJUFdJRFRILCAwLCBjbGFtcFRvPGludD4obWF4VG9vbFRp
cFdpZHRoICogZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwogCiAgICAgOjpTZXRXaW5kb3dQb3MobV90
b29sVGlwSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpF
IHwgU1dQX05PQUNUSVZBVEUpOwogfQpAQCAtMzY4NywxNyArMzc0NiwxOSBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmdlbmVyCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChSRUNUKiByYykK
K0hSRVNVTFQgV2ViVmlldzo6c2VsZWN0aW9uUmVjdChSRUNUKiByYykKIHsKICAgICBXZWJDb3Jl
OjpGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwogCiAgICAgSW50UmVjdCBpciA9IGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwogICAgIGlyID0gZnJhbWUudmlldygpLT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KGlyKTsKICAgICBpci5tb3ZlKC1mcmFtZS52aWV3KCktPnNjcm9s
bE9mZnNldCgpLndpZHRoKCksIC1mcmFtZS52aWV3KCktPnNjcm9sbE9mZnNldCgpLmhlaWdodCgp
KTsKLSAgICByYy0+bGVmdCA9IGlyLngoKTsKLSAgICByYy0+dG9wID0gaXIueSgpOwotICAgIHJj
LT5ib3R0b20gPSByYy0+dG9wICsgaXIuaGVpZ2h0KCk7Ci0gICAgcmMtPnJpZ2h0ID0gcmMtPmxl
ZnQgKyBpci53aWR0aCgpOworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIHJjLT5sZWZ0ID0gaXIueCgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPnRv
cCA9IGlyLnkoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5ib3R0b20gPSByYy0+dG9wICsgaXIu
aGVpZ2h0KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+cmlnaHQgPSByYy0+bGVmdCArIGlyLndp
ZHRoKCkgKiBzY2FsZUZhY3RvcjsKIAogICAgIHJldHVybiBTX09LOwogfQpAQCAtMzc3NCw5ICsz
ODM1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojppc0xvYQogICAgIHJl
dHVybiBTX09LOwogfQogICAgIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojpl
bGVtZW50QXRQb2ludCggCi0gICAgICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBwb2ludCwKLSAgICAg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcqKiBlbGVtZW50RGljdGlvbmFyeSkK
K0hSRVNVTFQgV2ViVmlldzo6ZWxlbWVudEF0UG9pbnQoTFBQT0lOVCBwb2ludCwgSVByb3BlcnR5
QmFnKiogZWxlbWVudERpY3Rpb25hcnkpCiB7CiAgICAgaWYgKCFlbGVtZW50RGljdGlvbmFyeSkg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM3OTAsNiArMzg0OSw4IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICAgICAgcmV0dXJuIEVf
RkFJTDsKIAogICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50LT54LCBw
b2ludC0+eSk7CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmljZVNj
YWxlRmFjdG9yKCk7CisgICAgd2ViQ29yZVBvaW50LnNjYWxlKGludmVyc2VTY2FsZUZhY3Rvciwg
aW52ZXJzZVNjYWxlRmFjdG9yKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RS
ZXN1bHQod2ViQ29yZVBvaW50KTsKICAgICBpZiAoZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQog
ICAgICAgICByZXN1bHQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQod2ViQ29yZVBvaW50KTsKQEAgLTUzMDYsMzIgKzUzNjcsMzcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJWaWV3OjpmcmFtZQogICAgIHJldHVybiBtX2ZyYW1lTG9hZERlbGVnYXRl
UHJpdmF0ZS5jb3B5UmVmVG8oZCk7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
Vmlldzo6c2Nyb2xsT2Zmc2V0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUE9JTlQgb2Zm
c2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxPZmZzZXQoTFBQT0lOVCBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFvZmZzZXQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgSW50U2l6ZSBv
ZmZzZXRJbnRTaXplID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9sbE9mZnNldCgp
OworCisgICAgb2Zmc2V0SW50U2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwogICAg
IG9mZnNldC0+eCA9IG9mZnNldEludFNpemUud2lkdGgoKTsKICAgICBvZmZzZXQtPnkgPSBvZmZz
ZXRJbnRTaXplLmhlaWdodCgpOwogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYlZpZXc6OnNjcm9sbEJ5KCAKLSAgICAvKiBbaW5dICovIExQUE9JTlQg
b2Zmc2V0KQorSFJFU1VMVCBXZWJWaWV3OjpzY3JvbGxCeShMUFBPSU5UIG9mZnNldCkKIHsKICAg
ICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShvZmZzZXQtPngsIG9mZnNldC0+eSkp
OworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YShvZmZzZXQtPngsIG9mZnNldC0+eSk7CisgICAg
c2Nyb2xsRGVsdGEuc2NhbGUoMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6dmlzaWJsZUNv
bnRlbnRSZWN0KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIExQUkVDVCByZWN0KQorSFJFU1VM
VCBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoTFBSRUNUIHJlY3QpCiB7CiAgICAgaWYgKCFy
ZWN0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCiAgICAgRmxvYXRSZWN0IHZpc2libGVD
b250ZW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgIHZpc2libGVDb250ZW50LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIHJl
Y3QtPmxlZnQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueCgpOwogICAgIHJlY3QtPnRvcCA9IChM
T05HKSB2aXNpYmxlQ29udGVudC55KCk7CiAgICAgcmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJs
ZUNvbnRlbnQubWF4WCgpOwpAQCAtNTY4Niw2ICs1NzUyLDggQEAgdm9pZCBXZWJWaWV3OjpwcmVw
YXJlQ2FuZGlkYXRlV2luZG93KEZyYQogICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJl
dCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOworICAgIGNh
cmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgQ0FORElEQVRFRk9STSBmb3Jt
OwogICAgIGZvcm0uZHdJbmRleCA9IDA7CiAgICAgZm9ybS5kd1N0eWxlID0gQ0ZTX0VYQ0xVREU7
CkBAIC01OTQ1LDYgKzYwMTMsNyBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQ
b3NpdGlvCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQuc2NhbGUoZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgY2hhclBvcy0+cHQueCA9IGNhcmV0LngoKTsKICAgICBjaGFy
UG9zLT5wdC55ID0gY2FyZXQueSgpOwogICAgIDo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93
LCAmY2hhclBvcy0+cHQpOwpAQCAtNjYyMiw3ICs2NjkxLDYgQEAgdm9pZCBXZWJWaWV3OjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKAogICAgICAgICAgICAgOjpHZXRDbGllbnRSZWN0KG1fdmll
d1dpbmRvdywgJmNsaWVudFJlY3QpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5ZXItPnNldFNp
emUoSW50UmVjdChjbGllbnRSZWN0KS5zaXplKCkpOwogICAgICAgICAgICAgbV9iYWNraW5nTGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOwotCiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dFJvb3RDaGlsZExheWVyKFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fYmFja2lu
Z0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpKTsKIAogICAgICAgICAgICAgLy8gV2UgYXJlbid0IGdv
aW5nIHRvIGJlIHVzaW5nIG91ciBiYWNraW5nIHN0b3JlIHdoaWxlIHdlJ3JlIGluIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCkBAIC02NzcxLDE1ICs2ODM5LDIyIEBAIHZvaWQgV2ViVmlldzo6bm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdAogICAgIGZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFu
Z2VzU29vbigpOwogfQogCi12b2lkIFdlYlZpZXc6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwKQordm9pZCBXZWJWaWV3OjpwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBo
aWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGluQ2xpcFBpeGVscykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fbWFpbkZyYW1lKTsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9y
OworCisgICAgRmxvYXRSZWN0IGxvZ2ljYWxDbGlwID0gaW5DbGlwUGl4ZWxzOworICAgIGxvZ2lj
YWxDbGlwLnNjYWxlKGludmVyc2VTY2FsZUZhY3Rvcik7CisKICAgICBjb250ZXh0LnNhdmUoKTsK
LSAgICBjb250ZXh0LmNsaXAoaW5DbGlwKTsKLSAgICBmcmFtZS0+dmlldygpLT5wYWludCgmY29u
dGV4dCwgZW5jbG9zaW5nSW50UmVjdChpbkNsaXApKTsKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0
U2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKKyAgICBjb250ZXh0LmNsaXAobG9naWNh
bENsaXApOworICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KGxvZ2ljYWxDbGlwKSk7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKQEAgLTcxMjIs
NiArNzE5Nyw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6Zmlyc3QKICAg
ICBJbnRSZWN0IHJlY3QgPSBmcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5n
ZXQoKSk7CiAgICAgcmVzdWx0SW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhyZWN0KTsKIAorICAgIHJlc3VsdEludFJlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisKICAgICByZXN1bHRSZWN0LT5sZWZ0ID0gcmVzdWx0SW50UmVjdC54KCk7CiAgICAgcmVzdWx0
UmVjdC0+dG9wID0gcmVzdWx0SW50UmVjdC55KCk7CiAgICAgcmVzdWx0UmVjdC0+cmlnaHQgPSBy
ZXN1bHRJbnRSZWN0LngoKSArIHJlc3VsdEludFJlY3Qud2lkdGgoKTsKQEAgLTcxNzMsMTIgKzcy
NTAsNiBAQCBIUkVTVUxUIFdlYlZpZXc6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLXN0YXRpYyBmbG9hdCBzY2FsZUZhY3RvckZyb21XaW5kb3coSFdORCB3
aW5kb3cpCi17Ci0gICAgSFduZERDIGRjKHdpbmRvdyk7Ci0gICAgcmV0dXJuIDo6R2V0RGV2aWNl
Q2FwcyhkYywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKLX0KLQogZmxvYXQgV2ViVmlldzo6ZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX2N1c3RvbURldmljZVNjYWxlRmFjdG9y
KQpAQCAtNzE4NywxMiArNzI1OCwxMiBAQCBmbG9hdCBXZWJWaWV3OjpkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0CiAgICAgLy8gRklYTUUoMTQ2MzM1KTogU2hvdWxkIGNoZWNrIGZvciBXaW5kb3dz
IDguMSBIaWdoIERQSSBGZWF0dXJlcyBoZXJlIGZpcnN0LgogCiAgICAgaWYgKG1fdmlld1dpbmRv
dykKLSAgICAgICAgcmV0dXJuIHNjYWxlRmFjdG9yRnJvbVdpbmRvdyhtX3ZpZXdXaW5kb3cpOwor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobV92aWV3
V2luZG93KTsKIAogICAgIGlmIChtX2hvc3RXaW5kb3cpCi0gICAgICAgIHJldHVybiBzY2FsZUZh
Y3RvckZyb21XaW5kb3cobV9ob3N0V2luZG93KTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmRl
dmljZVNjYWxlRmFjdG9yRm9yV2luZG93KG1faG9zdFdpbmRvdyk7CiAKLSAgICByZXR1cm4gc2Nh
bGVGYWN0b3JGcm9tV2luZG93KDApOworICAgIHJldHVybiBXZWJDb3JlOjpkZXZpY2VTY2FsZUZh
Y3RvckZvcldpbmRvdyhudWxscHRyKTsKIH0KIAogSFJFU1VMVCBXZWJWaWV3OjpzZXRDdXN0b21C
YWNraW5nU2NhbGVGYWN0b3IoZG91YmxlIGN1c3RvbVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuaAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05ODgsNiArOTg4LDkgQEAgcHVibGljOgogICAgIC8qIFtvdXQs
IHJldHZhbF0gKi8gUkVDVCogcmVzdWx0UmVjdCk7CiAKICAgICBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHNlbGVjdGVkUmFuZ2VGb3JUZXN0aW5nKC8qIFtvdXRdICovIFVJTlQqIGxvY2F0aW9u
LCAvKiBbb3V0XSAqLyBVSU5UKiBsZW5ndGgpOworCisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2b2lkIHNldFpvb21NdWx0aXBsaWVyKGZsb2F0
IG11bHRpcGxpZXIsIGJvb2wgaXNUZXh0T25seSk7CiAgICAgZmxvYXQgem9vbU11bHRpcGxpZXIo
Ym9vbCBpc1RleHRPbmx5KTsKQEAgLTEwMDAsNiArMTAwMyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBhY3RpdmUoKTsKIAogICAgIHZvaWQgc2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOworICAgIGJvb2wgZHBpQ2hhbmdlZChmbG9hdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwogCiAgICAgZW51bSBXaW5kb3dzVG9QYWludCB7IFBhaW50V2ViVmlld09ubHksIFBhaW50V2Vi
Vmlld0FuZENoaWxkcmVuIH07CiAgICAgdm9pZCBwYWludEludG9CYWNraW5nU3RvcmUoV2ViQ29y
ZTo6RnJhbWVWaWV3KiwgSERDIGJpdG1hcERDLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3QsIFdpbmRvd3NUb1BhaW50KTsKQEAgLTEwMjYsOCArMTAzMCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3Nob3VsZEludmVydENvbG9yczsKICAgICB2b2lkIHNldFNob3VsZEludmVydENv
bG9ycyhib29sKTsKIAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0KIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCByZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcygpOwog
ICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNywx
MSArMTAxNywxMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiB7
CiAgICAgV2ViVmlldyogdmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKIAotICAgIFJFQ1Qg
cmVjdDsKLSAgICB2aWV3LT5mcmFtZVJlY3QoJnJlY3QpOworICAgIFJFQ1QgcGl4ZWxSZWN0Owor
ICAgIHZpZXctPmZyYW1lUmVjdCgmcGl4ZWxSZWN0KTsKICAgICBib29sIHRyYW5zcGFyZW50ID0g
dmlldy0+dHJhbnNwYXJlbnQoKTsKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSB0cmFuc3Bh
cmVudCA/IENvbG9yOjp0cmFuc3BhcmVudCA6IENvbG9yOjp3aGl0ZTsKLSAgICBjb3JlKG1fd2Vi
RnJhbWUpLT5jcmVhdGVWaWV3KEludFJlY3QocmVjdCkuc2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3Is
IHRyYW5zcGFyZW50KTsKKyAgICBJbnRSZWN0IGxvZ2ljYWxGcmFtZShwaXhlbFJlY3QpOworICAg
IGxvZ2ljYWxGcmFtZS5zY2FsZSgxLjBmIC8gdmlldy0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhsb2dpY2FsRnJhbWUuc2l6ZSgpLCBiYWNr
Z3JvdW5kQ29sb3IsIHRyYW5zcGFyZW50KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE1LTA3LTIxICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBwcm9w
ZXIgSGlnaCBEUEkgc3VwcG9ydCBmZWF0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MzM1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMTU1
ODI2OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cGRhdGUgV2luTGF1bmNoZXIgdG8gdGFrZSBkZXZpY2Ugc2NhbGluZyBmYWN0b3IgaW50byBhY2Nv
dW50LgorCisgICAgICAgICogV2luTGF1bmNoZXIvQ29tbW9uLmNwcDoKKyAgICAgICAgKHJlc2l6
ZVN1YlZpZXdzKTogTWFrZSBzdXJlIHRvb2xiYXJzIGFuZCBVUkwgYmFyIGFyZSBwcm9wZXJseSBz
aXplZCBhbmQgdXNpbmcKKyAgICAgICAgYSB2YWxpZCBmb250LgorICAgICAgICAoY29tcHV0ZUZ1
bGxEZXNrdG9wRnJhbWUpOiBIYW5kbGUgaGlnaCBEUEkgZGVza3RvcHMuCisgICAgICAgIChXbmRQ
cm9jKTogTWFrZSBjb21tZW50cyBtb3JlIHByZWNpc2UuCisgICAgICAgICogV2luTGF1bmNoZXIv
V2luTGF1bmNoZXIuY3BwOgorICAgICAgICAoV2luTGF1bmNoZXI6OmluaXQpOiBEZXRlcm1pbmUg
ZGV2aWNlIHNjYWxlIGZhY3RvciBhdCBsYXVuY2guCisgICAgICAgIChXaW5MYXVuY2hlcjo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IpOiBBZGRlZC4KKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5M
YXVuY2hlci5oOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oOiBV
c2UgQysrMTEgaW5pdGlhbGl6YXRpb24uCisgICAgICAgICogV2luTGF1bmNoZXIvV2luTWFpbi5j
cHA6IFNpemUgaW50ZXJmYWNlIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAod1dp
bk1haW4pOiBEaXR0by4KKyAgICAgICAgKiB3aW4vRExMTGF1bmNoZXIvRExMTGF1bmNoZXJNYWlu
LmNwcDoKKyAgICAgICAgKHdXaW5NYWluKTogVGVsbCBXaW5kb3dzIHdlIHVuZGVyc3RhbmQgaGln
aCBEUEkuCisKIDIwMTUtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXhlZCBWTSBwb29sIGFsbG9jYXRpb24gc2hvdWxkIGhhdmUgYSByZXNlcnZlIGZv
ciBhbGxvY2F0aW9ucyB0aGF0IGNhbm5vdCBmYWlsCkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9D
b21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJKHJl
dmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDYgKzY1LDEwIEBACiAKIHN0YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNp
emUgPSAxMDsKIAorI2lmbmRlZiBXTV9EUElDSEFOR0VECisjZGVmaW5lIFdNX0RQSUNIQU5HRUQg
MHgwMkUwCisjZW5kaWYKKwogdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWUs
ICZfX3V1aWRvZihJV2ViRnJhbWUpPj4gSVdlYkZyYW1lUHRyOwogdHlwZWRlZiBfY29tX3B0cl90
PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3QsICZfX3V1aWRvZihJV2ViTXV0YWJsZVVS
TFJlcXVlc3QpPj4gSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRyOwogCkBAIC03Miw2ICs3Niw3IEBA
IHR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYk11dGFibGUKIEhJTlNUQU5DRSBoSW5z
dDsKIEhXTkQgaE1haW5XbmQ7CiBIV05EIGhVUkxCYXJXbmQ7CitIR0RJT0JKIGhVUkxGb250Owog
SFdORCBoQmFja0J1dHRvblduZDsKIEhXTkQgaEZvcndhcmRCdXR0b25XbmQ7CiBIV05EIGhDYWNo
ZVduZDsKQEAgLTEwMSwxNyArMTA2LDI5IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQs
IFVJTlQsIFdQQVIKIHN0YXRpYyB2b2lkIGxvYWRVUkwoQlNUUiB1cmxCU3RyKTsKIHN0YXRpYyB2
b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBoRGxnKTsKIAorbmFtZXNwYWNlIFdlYkNvcmUgewor
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Cit9CisKIHN0YXRpYyB2b2lk
IHJlc2l6ZVN1YlZpZXdzKCkKIHsKICAgICBpZiAoZ1dpbkxhdW5jaGVyLT51c2VzTGF5ZXJlZFdl
YlZpZXcoKSB8fCAhZ1ZpZXdXaW5kb3cpCiAgICAgICAgIHJldHVybjsKIAorICAgIGZsb2F0IHNj
YWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coZ1ZpZXdXaW5k
b3cpOworCiAgICAgUkVDVCByY0NsaWVudDsKICAgICBHZXRDbGllbnRSZWN0KGhNYWluV25kLCAm
cmNDbGllbnQpOwotICAgIE1vdmVXaW5kb3coaEJhY2tCdXR0b25XbmQsIDAsIDAsIENPTlRST0xC
VVRUT05fV0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaEZvcndh
cmRCdXR0b25XbmQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIENPTlRST0xCVVRUT05fV0lEVEgs
IFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgQ09OVFJP
TEJVVFRPTl9XSURUSCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBVUkxCQVJfSEVJR0hULCBUUlVF
KTsKLSAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBVUkxCQVJfSEVJR0hULCByY0NsaWVu
dC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gVVJMQkFSX0hFSUdIVCwgVFJVRSk7CisKKyAgICBp
bnQgaGVpZ2h0ID0gc2NhbGVGYWN0b3IgKiBVUkxCQVJfSEVJR0hUOworICAgIGludCB3aWR0aCA9
IHNjYWxlRmFjdG9yICogQ09OVFJPTEJVVFRPTl9XSURUSDsKKworICAgIE1vdmVXaW5kb3coaEJh
Y2tCdXR0b25XbmQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVXaW5kb3co
aEZvcndhcmRCdXR0b25XbmQsIHdpZHRoLCAwLCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBN
b3ZlV2luZG93KGhVUkxCYXJXbmQsIHdpZHRoICogMiwgMCwgcmNDbGllbnQucmlnaHQsIGhlaWdo
dCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhnVmlld1dpbmRvdywgMCwgaGVpZ2h0LCByY0NsaWVu
dC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gaGVpZ2h0LCBUUlVFKTsKKworICAgIDo6U2VuZE1l
c3NhZ2UoaFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50ZXJw
cmV0X2Nhc3Q8V1BBUkFNPihnV2luTGF1bmNoZXItPnVybEJhckZvbnQoKSksIFRSVUUpOwogfQog
CiBzdGF0aWMgdm9pZCBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3coKQpAQCAtMTMyLDEwICsxNDks
MTIgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQogICAgIGlmICghOjpT
eXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV09SS0FSRUEsIDAsIHN0YXRpY19jYXN0PHZvaWQq
PigmZGVza3RvcCksIDApKQogICAgICAgICByZXR1cm47CiAKKyAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KG51bGxwdHIpOworCiAgICAg
c193aW5kb3dQb3NpdGlvbi54ID0gMDsKICAgICBzX3dpbmRvd1Bvc2l0aW9uLnkgPSAwOwotICAg
IHNfd2luZG93U2l6ZS5jeCA9IGRlc2t0b3AucmlnaHQgLSBkZXNrdG9wLmxlZnQ7Ci0gICAgc193
aW5kb3dTaXplLmN5ID0gZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcDsKKyAgICBzX3dpbmRv
d1NpemUuY3ggPSBzY2FsZUZhY3RvciAqIChkZXNrdG9wLnJpZ2h0IC0gZGVza3RvcC5sZWZ0KTsK
KyAgICBzX3dpbmRvd1NpemUuY3kgPSBzY2FsZUZhY3RvciAqIChkZXNrdG9wLmJvdHRvbSAtIGRl
c2t0b3AudG9wKTsKIH0KIAogQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgZGxsSW5zdGFu
Y2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEKQpAQCAtNDIxLDEzICs0NDAsMTMgQEAgTFJFU1VMVCBD
QUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVAogICAgICAgICAgICAgLy8gRm9yIHRlc3Rp
bmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lvbiB0byB1c2UgYXMgYSBo
YW5kbGUgZm9yCiAgICAgICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJpZ2h0IHdheSB0byBkbyB0
aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUgd2hhdCdzCiAgICAgICAg
ICAgICAvLyB1bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdl
IGp1c3QgdXNlIGFuIGFyYml0cmFyeQotICAgICAgICAgICAgLy8gMzAgcGl4ZWwgYmFuZCBhdCB0
aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4KKyAg
ICAgICAgICAgIC8vIDMwIGxvZ2ljYWwgcGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3
IGFzIGFuIGFyYml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4KICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4gdGhpcyBiYWQsIHJldHVybiBIVF9DQVBUSU9O
IHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCiAgICAgICAgICAgICAvLyB0cmVhdCB0aGlzIHJl
Z2lvbiBhcyBpZiBpdCB3ZXJlIHRoZSB0aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93LgogICAg
ICAgICAgICAgaW50IHkgPSBISVdPUkQobFBhcmFtKTsKLQotICAgICAgICAgICAgaWYgKCh5ID4g
d2luZG93LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsgZHJhZ0JhckhlaWdodCkpCisgICAgICAg
ICAgICBmbG9hdCBzY2FsZWREcmFnQmFySGVpZ2h0RmFjdG9yID0gZHJhZ0JhckhlaWdodCAqIGdX
aW5MYXVuY2hlci0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgICAgIGlmICgoeSA+IHdp
bmRvdy50b3ApICYmICh5IDwgd2luZG93LnRvcCArIHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3Ip
KQogICAgICAgICAgICAgICAgIHJldHVybiBIVENBUFRJT047CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKTsKQEAgLTUxOSw2ICs1MzgsMTAgQEAgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhX
TkQgaFduZCwgVUlOVAogCiAgICAgICAgIHJlc2l6ZVN1YlZpZXdzKCk7CiAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fRFBJQ0hBTkdFRDoKKyAgICAgICAgaWYgKGdXaW5MYXVuY2hlcikKKyAg
ICAgICAgICAgIGdXaW5MYXVuY2hlci0+dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAg
ICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJh
bSwgbFBhcmFtKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2Mo
cGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogICAgIH0KSW5kZXg6
IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
aW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL1dp
bkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMy0y
MDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2VsZXJhdG9yLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1
ZGUgPHZlY3Rvcj4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3JGb3JXaW5kb3coSFdORCk7Cit9CisKIHN0YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNpemUg
PSAxMDsKIAogdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVl
c3QsICZfX3V1aWRvZihJV2ViTXV0YWJsZVVSTFJlcXVlc3QpPj4gSVdlYk11dGFibGVVUkxSZXF1
ZXN0UHRyOwpAQCAtNjEsNiArNjUsOCBAQCBXaW5MYXVuY2hlcjo6V2luTGF1bmNoZXIoSFdORCBt
YWluV25kLCBICiAKIEhSRVNVTFQgV2luTGF1bmNoZXI6OmluaXQoKQogeworICAgIHVwZGF0ZURl
dmljZVNjYWxlRmFjdG9yKCk7CisKICAgICBIUkVTVUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFu
Y2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQdHIoKSkpOwogICAgIGlmIChGQUlMRUQoaHIpKQog
ICAgICAgICByZXR1cm4gaHI7CkBAIC00NzgsMyArNDg0LDE5IEBAIHZvaWQgV2luTGF1bmNoZXI6
Onpvb21PdXQoKQogCiAgICAgd2ViQWN0aW9ucy0+em9vbVBhZ2VPdXQobnVsbHB0cik7CiB9CisK
K3ZvaWQgV2luTGF1bmNoZXI6OmdlbmVyYXRlRm9udEZvclNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKQoreworICAgIGlmIChtX2hVUkxCYXJGb250KQorICAgICAgICA6OkRlbGV0ZU9iamVj
dChtX2hVUkxCYXJGb250KTsKKworICAgIG1faFVSTEJhckZvbnQgPSA6OkNyZWF0ZUZvbnQoc2Nh
bGVGYWN0b3IgKiAxOCwgMCwgMCwgMCwgRldfTk9STUFMLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBE
RUZBVUxUX0NIQVJTRVQsCisgICAgICAgIE9VVF9UVF9PTkxZX1BSRUNJUywgQ0xJUF9ERUZBVUxU
X1BSRUNJUywgQU5USUFMSUFTRURfUVVBTElUWSwgRkZfRE9OVENBUkUsIEwiVGltZXMgTmV3IFJv
bWFuIik7Cit9CisKKwordm9pZCBXaW5MYXVuY2hlcjo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3Io
KQoreworICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rv
ckZvcldpbmRvdyhtX2hNYWluV25kKTsKKyAgICBnZW5lcmF0ZUZvbnRGb3JTY2FsZUZhY3Rvciht
X2RldmljZVNjYWxlRmFjdG9yKTsKK30KSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5j
aGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAkocmV2
aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTkwLDcgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHpvb21JbigpOwogICAg
IHZvaWQgem9vbU91dCgpOwogCisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSB7IHJldHVy
biBtX2RldmljZVNjYWxlRmFjdG9yOyB9CisgICAgdm9pZCB1cGRhdGVEZXZpY2VTY2FsZUZhY3Rv
cigpOworCisgICAgSEdESU9CSiB1cmxCYXJGb250KCkgeyByZXR1cm4gbV9oVVJMQmFyRm9udDsg
fQorCiBwcml2YXRlOgorICAgIHZvaWQgZ2VuZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IoZmxvYXQp
OworCiAgICAgc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJdGVtUHRyPiBtX2hpc3RvcnlJdGVtczsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlTG9hZFRlc3RDbGllbnQ+IG1fcGFnZUxvYWRUZXN0
Q2xpZW50OwpAQCAtMTEyLDggKzExOSwxMCBAQCBwcml2YXRlOgogICAgIElXZWJDb3JlU3RhdGlz
dGljc1B0ciBtX3N0YXRpc3RpY3M7CiAgICAgSVdlYkNhY2hlUHRyIG1fd2ViQ2FjaGU7CiAKLSAg
ICBIV05EIG1faE1haW5XbmQ7Ci0gICAgSFdORCBtX2hVUkxCYXJXbmQ7CisgICAgSFdORCBtX2hN
YWluV25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgbnVsbHB0ciB9Owor
ICAgIEhHRElPQkogbV9oVVJMQmFyRm9udCB7IG51bGxwdHIgfTsKIAorICAgIGZsb2F0IG1fZGV2
aWNlU2NhbGVGYWN0b3IgeyAxLjBmIH07CiAgICAgYm9vbCBtX3VzZUxheWVyZWRXZWJWaWV3Owog
fTsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCShyZXZpc2lvbiAx
ODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNyArNzYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgSFJFU1VMVCB1cGRhdGVB
ZGRyZXNzQmFyKElXZWJWaWV3Jik7CiAKIHByaXZhdGU6Ci0gICAgSFdORCBtX2hVUkxCYXJXbmQ7
Ci0gICAgVUxPTkcgbV9yZWZDb3VudDsKLSAgICBXaW5MYXVuY2hlciogbV9jbGllbnQ7CisgICAg
SFdORCBtX2hVUkxCYXJXbmQgeyAwIH07CisgICAgSEdESU9CSiBtX1VSTEJhckZvbnQgeyAwIH07
CisgICAgSEdESU9CSiBtX29sZEZvbnQgeyAwIH07CisgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAg
fTsKKyAgICBXaW5MYXVuY2hlciogbV9jbGllbnQgeyBudWxscHRyIH07CiB9OwpJbmRleDogVG9v
bHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNo
ZXIvV2luTWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dp
bk1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgIldp
bkxhdW5jaGVyV2ViSG9zdC5oIgogI2luY2x1ZGUgIkNvbW1vbi5jcHAiCiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2Zsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KEhXTkQpOworfQorCiBp
bnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFLCBQV1NUUiwgaW50IG5DbWRT
aG93KQogewogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCkBAIC02NSwxMCArNjksMTIgQEAgaW50
IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRQogICAgIC8vIEluaXQgQ09NCiAg
ICAgT2xlSW5pdGlhbGl6ZShudWxscHRyKTsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7CisKICAgICBpZiAodXNl
c0xheWVyZWRXZWJWaWV3KSB7CiAgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJF
RElUIiwgTCJUeXBlIFVSTCBIZXJlIiwKICAgICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5ET1cg
fCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAKLSAg
ICAgICAgICAgIHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5k
b3dTaXplLmN5LCBzX3dpbmRvd1NpemUuY3gsIFVSTEJBUl9IRUlHSFQsCisgICAgICAgICAgICBz
Y2FsZUZhY3RvciAqIHNfd2luZG93UG9zaXRpb24ueCwgc2NhbGVGYWN0b3IgKiAoc193aW5kb3dQ
b3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5KSwgc2NhbGVGYWN0b3IgKiBzX3dpbmRvd1NpemUu
Y3gsIHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVCwKICAgICAgICAgICAgIDAsIDAsIGhJbnN0
LCAwKTsKICAgICB9IGVsc2UgewogICAgICAgICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldp
bmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLApAQCAtNzgsOCArODQsOCBA
QCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CiAKICAgICAgICAgaEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJC
VVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwg
MCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICAgICAgaEZvcndhcmRCdXR0b25XbmQgPSBD
cmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNf
VEVYVCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAw
KTsKLSAgICAgICAgaFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElM
RCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIENP
TlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwor
ICAgICAgICBoRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIs
IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1RFWFQsIHNjYWxlRmFjdG9yICogQ09OVFJPTEJV
VFRPTl9XSURUSCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKyAgICAgICAgaFVS
TEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQiLCAwLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUg
fCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIHNjYWxlRmFjdG9yICogQ09O
VFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CiAK
ICAgICAgICAgU2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwogICAgICAgICBVcGRhdGVX
aW5kb3coaE1haW5XbmQpOwpAQCAtOTMsNyArOTksMTEgQEAgaW50IFdJTkFQSSB3V2luTWFpbihI
SU5TVEFOQ0UsIEhJTlNUQU5DRQogCiAgICAgU2V0Rm9jdXMoaFVSTEJhclduZCk7CiAKLSAgICBS
RUNUIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55
LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRpb24u
eSArIHNfd2luZG93U2l6ZS5jeSB9OworICAgIFJFQ1QgY2xpZW50UmVjdDsKKyAgICA6OkdldENs
aWVudFJlY3QoaE1haW5XbmQsICZjbGllbnRSZWN0KTsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdl
YlZpZXcpCisgICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5k
b3dQb3NpdGlvbi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2lu
ZG93UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSB9OwogCiAgICAgV2luTGF1bmNoZXJXZWJI
b3N0KiB3ZWJIb3N0ID0gbnVsbHB0cjsKIApJbmRleDogVG9vbHMvd2luL0RMTExhdW5jaGVyL0RM
TExhdW5jaGVyTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvd2luL0RMTExhdW5jaGVyL0RM
TExhdW5jaGVyTWFpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFRvb2xzL3dpbi9ETExMYXVu
Y2hlci9ETExMYXVuY2hlck1haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDkg
QEAgaW50IFdJTkFQSSB3V2luTWFpbihISU5TVEFOQ0UgaEluc3RhbmNlLAogICAgIF9zZXRfRk1B
M19lbmFibGUoMCk7CiAjZW5kaWYKIAorICAgIEJPT0wgZGlkSXQgPSBTZXRQcm9jZXNzRFBJQXdh
cmUoKTsKKyAgICBfQVNTRVJUKGRpZEl0KTsKKwogI2lmZGVmIF9DUlREQkdfTUFQX0FMTE9DCiAg
ICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKICAg
ICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257340</attachid>
            <date>2015-07-22 22:06:50 -0700</date>
            <delta_ts>2015-07-23 11:40:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146335-20150722221936.patch</filename>
            <type>text/plain</type>
            <size>50663</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA3LTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxlbWVudCBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGlsZSk6IERv
bid0IHRyYW5zbGF0ZSB0aGUgQ0dDb250ZXh0IHRvIHRoZSBwb3NpdGlvbgorICAgICAgICBvZiB0
aGUgQ0FDRkxheWVyUmVmOyB0aGUgdW5kZXJseWluZyBjb250ZXh0IGlzIGFscmVhZHkgaW4gdGhl
IHJpZ2h0IHBvc2l0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZl
bnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IG1vdXNlCisgICAgICAgIGV2ZW50IGNv
b3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbGJhclRoaWNrbmVzc0luUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVXaW46OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1doZWVsRXZlbnRXaW4uY3BwOiBVcGRhdGUgY2xhc3MgdG8gYWRqdXN0IHdoZWVsIGV2ZW50Cisg
ICAgICAgIGNvb3JkaW5hdGVzIGJhc2VkIG9uIHNjYWxpbmcgZmFjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gb3JF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KToKKwog
MjAxNS0wNy0yMSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRGVm
YXVsdCBtZWRpYSBjb250cm9scyB1c2UgYSBzZXJpZiBmb250LCB3aGljaCBzZWVtcyB3cm9uZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MTIyLDYgKzgxMjIsNyBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEV2ZW50TG9vcFdpbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cRmlsZVN5c3RlbVdpbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJT2JqZWN0Q291
bnRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJ
VXRpbGl0aWVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHdp
blxJbXBvcnRlZEZ1bmN0aW9uc0VudW1lcmF0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cd2luXEltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEtleUV2ZW50V2luLmNwcCIg
Lz4KQEAgLTIwMjM1LDYgKzIwMjM2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXHdpblxEZWZXbmRQcm9jV2luZG93Q2xhc3MuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXHdpblxEZWxheUxvYWRlZE1vZHVsZXNFbnVtZXJhdG9yLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJT2JqZWN0Q291bnRl
ci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEdESVV0aWxp
dGllcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEhXbmRE
Qy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXEltcG9ydGVk
RnVuY3Rpb25zRW51bWVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cd2luXEltcG9ydGVkTW9kdWxlc0VudW1lcmF0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNzI2OSw2ICs3MjY5LDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFBhdGhVdGls
aXRpZXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXHdpblxH
RElVdGlsaXRpZXMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncd2luPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxDb29yZGluYXRl
cy5oIj4KQEAgLTE1MjU4LDYgKzE1MjYxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXFBhdGhVdGlsaXRpZXMuaCI+CiAgICAgICA8RmlsdGVyPnBsYXRm
b3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cR0RJVXRpbGl0aWVzLmgiPgorICAgICAgPEZpbHRlcj5w
bGF0Zm9ybVxncmFwaGljc1x3aW48L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVt
R3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1t
YXIueS5pbiI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5j
cHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxMiw5ICs1MTIsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGls
CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgLy8gVHJhbnNmb3Jt
IGNvbnRleHQgdG8gYmUgYXQgdGhlIG9yaWdpbiBvZiB0aGUgcGFyZW50IGxheWVyCi0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC10aWxlUG9zaXRpb24ueCwgLXRpbGVQb3NpdGlv
bi55KTsKLQogICAgIC8vIFNldCB0aGUgY29udGV4dCBjbGlwcGluZyByZWN0YW5nbGUgdG8gdGhl
IGN1cnJlbnQgdGlsZQogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0TWFr
ZSh0aWxlUG9zaXRpb24ueCwgdGlsZVBvc2l0aW9uLnksIHRpbGVCb3VuZHMuc2l6ZS53aWR0aCwg
dGlsZUJvdW5kcy5zaXplLmhlaWdodCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vR0RJVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9HRElVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdESVV0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSFduZERDLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCB3aW5kb3cp
Cit7CisgICAgSFduZERDIGRjKHdpbmRvdyk7CisgICAgcmV0dXJuIDo6R2V0RGV2aWNlQ2Fwcyhk
YywgTE9HUElYRUxTWCkgLyA5Ni4wZjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0dESVV0aWxpdGllcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9HRElVdGlsaXRpZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9HRElVdGlsaXRpZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYg
R0RJVXRpbHRpZXNfaAorI2RlZmluZSBHRElVdGlsdGllc19oCisKKyNpbmNsdWRlIDx3aW5kb3dz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9FWFBPUlQgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEdESVV0aWx0aWVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QbGF0Zm9ybU1vdXNlRXZlbnRXaW4uY3BwCShyZXZpc2lvbiAxODcxNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1Nb3VzZUV2ZW50V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlIEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI3LDggKzI3LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAKKyNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJIV25kREMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKQEAgLTM4LDcgKzQxLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSW50UG9pbnQgcG9zaXRpb25Gb3JFdmVudChIV05EIGhX
bmQsIExQQVJBTSBsUGFyYW0pCiB7Ci0gICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFNKGxQ
YXJhbSksIEdFVF9ZX0xQQVJBTShsUGFyYW0pfTsKKyAgICBJbnRQb2ludCBwb2ludChHRVRfWF9M
UEFSQU0obFBhcmFtKSwgR0VUX1lfTFBBUkFNKGxQYXJhbSkpOworICAgIGZsb2F0IGludmVyc2VT
Y2FsZUZhY3RvciA9IDEuMGYgLyBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhoV25kKTsKKyAg
ICBwb2ludC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3IsIGludmVyc2VTY2FsZUZhY3Rvcik7CiAg
ICAgcmV0dXJuIHBvaW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZVdpbi5oIgogCisjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiTG9jYWxX
aW5kb3dzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgpAQCAtMTA3LDE0ICsxMDksMTggQEAgU2Nyb2xsYmFyVGhlbWVXaW46
On5TY3JvbGxiYXJUaGVtZVdpbigpCiB7CiB9CiAKLWludCBTY3JvbGxiYXJUaGVtZVdpbjo6c2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQorc3RhdGljIGludCBzY3JvbGxi
YXJUaGlja25lc3NJblBpeGVscygpCiB7Ci0gICAgc3RhdGljIGludCB0aGlja25lc3M7Ci0gICAg
aWYgKCF0aGlja25lc3MpCi0gICAgICAgIHRoaWNrbmVzcyA9IDo6R2V0U3lzdGVtTWV0cmljcyhT
TV9DWFZTQ1JPTEwpOworICAgIHN0YXRpYyBpbnQgdGhpY2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRy
aWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgcmV0dXJuIHRoaWNrbmVzczsKIH0KIAoraW50IFNjcm9s
bGJhclRoZW1lV2luOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpCit7
CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmljZVNjYWxlRmFjdG9y
Rm9yV2luZG93KDApOworICAgIHJldHVybiBjbGFtcFRvPGludD4oaW52ZXJzZVNjYWxlRmFjdG9y
ICogc2Nyb2xsYmFyVGhpY2tuZXNzSW5QaXhlbHMoKSk7Cit9CisKIHZvaWQgU2Nyb2xsYmFyVGhl
bWVXaW46OnRoZW1lQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHJldmlz
aW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2ZW50V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
aW5kb3dzeC5oPgogCkBAIC00MCwxMyArNDIsMTggQEAgc3RhdGljIEludFBvaW50IHBvc2l0aW9u
Rm9yRXZlbnQoSFdORCBoVwogewogICAgIFBPSU5UIHBvaW50ID0ge0dFVF9YX0xQQVJBTShsUGFy
YW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKX07CiAgICAgU2NyZWVuVG9DbGllbnQoaFduZCwgJnBv
aW50KTsKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgbG9naWNhbFBvaW50KHBvaW50
KTsKKyAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNlU2NhbGVGYWN0
b3JGb3JXaW5kb3coaFduZCk7CisgICAgbG9naWNhbFBvaW50LnNjYWxlKGludmVyc2VTY2FsZUZh
Y3RvciwgaW52ZXJzZVNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gbG9naWNhbFBvaW50OwogfQog
CiBzdGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChIV05EIGhXbmQsIExQQVJB
TSBsUGFyYW0pCiB7Ci0gICAgUE9JTlQgcG9pbnQgPSB7R0VUX1hfTFBBUkFNKGxQYXJhbSksIEdF
VF9ZX0xQQVJBTShsUGFyYW0pfTsKLSAgICByZXR1cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgbG9n
aWNhbFBvaW50KEdFVF9YX0xQQVJBTShsUGFyYW0pLCBHRVRfWV9MUEFSQU0obFBhcmFtKSk7Cisg
ICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KGhXbmQpOworICAgIGxvZ2ljYWxQb2ludC5zY2FsZShpbnZlcnNlU2NhbGVGYWN0b3Is
IGludmVyc2VTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIGxvZ2ljYWxQb2ludDsKIH0KIAogc3Rh
dGljIGludCBob3Jpem9udGFsU2Nyb2xsQ2hhcnMoKQpAQCAtNzcsMTEgKzg0LDE0IEBAIFBsYXRm
b3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKIAogICAgIC8vIEdsb2JhbCBQb3Np
dGlvbiBpcyBqdXN0IHgsIHkgbG9jYXRpb24gb2YgZXZlbnQKICAgICBQT0lOVCBwb2ludCA9IHts
b2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKX07CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9y
ID0gMS4wZiAvIGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGhXbmQpOwogICAgIG1fZ2xvYmFs
UG9zaXRpb24gPSBwb2ludDsKKyAgICBtX2dsb2JhbFBvc2l0aW9uLnNjYWxlKGludmVyc2VTY2Fs
ZUZhY3RvciwgaW52ZXJzZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIFBvc2l0aW9uIG5lZWRzIHRv
IGJlIHRyYW5zbGF0ZWQgdG8gb3VyIGNsaWVudAogICAgIFNjcmVlblRvQ2xpZW50KGhXbmQsICZw
b2ludCk7CiAgICAgbV9wb3NpdGlvbiA9IHBvaW50OworICAgIG1fcG9zaXRpb24uc2NhbGUoaW52
ZXJzZVNjYWxlRmFjdG9yLCBpbnZlcnNlU2NhbGVGYWN0b3IpOwogfQogCiBQbGF0Zm9ybVdoZWVs
RXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChIV05EIGhXbmQsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0sIGJvb2wgaXNNb3VzZUhXaGVlbCkKQEAgLTkwLDYgKzEwMCw4IEBAIFBsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb25Gb3JFdmVudChoV25kLCBsUGFyYW0pKQogICAgICwgbV9kaXJlY3Rpb25J
bnZlcnRlZEZyb21EZXZpY2UoZmFsc2UpCiB7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZp
Y2VTY2FsZUZhY3RvckZvcldpbmRvdyhoV25kKTsKKwogICAgIC8vIEhvdyBtYW55IHBpeGVscyBz
aG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgR2Vja28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQog
ICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMg
YXMgeW91IGdvIHRocm91Z2ggdGhlCiAgICAgLy8gcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFn
ZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBhbHRob3VnaCB0aGUgdmFsdWUKQEAgLTk3LDggKzEw
OSw4IEBAIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEgKICAgICAvLyBz
bW9vdGhpbmcgYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xp
Z2h0bHkgbGFyZ2VyCiAgICAgLy8gc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcgamVya3ku
ICBIZXJlIHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzCiAgICAgLy8gKHRoZSBkZWZhdWx0
IHNjcm9sbCBhbW91bnQgb24gV2luZG93cyBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljayku
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBm
IC8gMy4wZjsKLSAgICBmbG9hdCBkZWx0YSA9IEdFVF9XSEVFTF9ERUxUQV9XUEFSQU0od1BhcmFt
KSAvIHN0YXRpY19jYXN0PGZsb2F0PihXSEVFTF9ERUxUQSk7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gc2NhbGVGYWN0b3IgKiAxMDAuMGYgLyAzLjBm
OworICAgIGZsb2F0IGRlbHRhID0gR0VUX1dIRUVMX0RFTFRBX1dQQVJBTSh3UGFyYW0pIC8gKHNj
YWxlRmFjdG9yICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdIRUVMX0RFTFRBKSk7CiAgICAgaWYgKGlz
TW91c2VIV2hlZWwpIHsKICAgICAgICAgLy8gV2luZG93cyBpcyA8LS0gLS8rIC0tPiwgV2ViS2l0
IHdhbnRzIDwtLSArLy0gLS0+LCBzbyB3ZSBuZWdhdGUKICAgICAgICAgLy8gfGRlbHRhfCBhZnRl
ciBzYXZpbmcgdGhlIG9yaWdpbmFsIHZhbHVlIG9uIHRoZSB3aGVlbCB0aWNrIG1lbWJlci4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzE0NCkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE1LTA3LTIxICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEltcGxl
bWVudCBIaWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIx
NTU4MjY5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBTaXpl
CisgICAgICAgIHBhZ2UgZm9yIGN1cnJlbnQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAg
KiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0Nv
bnRleHQpOiBBY2NvdW50IGZvciBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViRnJh
bWU6OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpyZXBhaW50KTogQWRqdXN0IHBhaW50
IHJlY3QgZm9yIGRldmljZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxC
YWNraW5nU3RvcmUpOiBBZGp1c3QgY29vcmRpbmF0ZXMgZm9yIHNjYWxlIGZhY3Rvci4KKyAgICAg
ICAgKFdlYlZpZXc6OnNpemVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp1cGRh
dGVCYWNraW5nU3RvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50KTogRGl0dG8u
CisgICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQpOiBEaXR0by4KKyAgICAgICAgKFdl
YlZpZXc6Omdlc3R1cmVOb3RpZnkpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUp
OiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OmluaXRpYWxpemVUb29sVGlwV2luZG93KTogQWRq
dXN0IG1heCB0b29sIHRpcCB3aWR0aAorICAgICAgICBmb3IgZGV2aWNlIHNjYWxlIGZhY3Rvci4K
KyAgICAgICAgKFdlYlZpZXc6OnNlbGVjdGlvblJlY3QpOiBBZGp1c3QgY29vcmRpbmF0ZXMgZm9y
IHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYlZpZXc6OmVsZW1lbnRBdFBvaW50KTogRGl0dG8u
CisgICAgICAgIChXZWJWaWV3OjpzY3JvbGxPZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYlZp
ZXc6OnNjcm9sbEJ5KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJl
Y3QpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50Q29udGVudHMpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJWaWV3Lmg6CisKIDIwMTUtMDctMjEgIFN1bmdtYW5uIENobyAgPHN1bmdtYW5u
LmNob0BuYXZlcmNvcnAuY29tPgogCiAgICAgICAgIFtXaW5dIEFkZCBuZWVkVG91Y2hFdmVudHMo
KSBzdHViIHRvIFdlYkNocm9tZUNsaWVudC5oIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQgd2l0aCBF
TkFCTEVfVE9VQ0hfRVZFTlRTPU9OCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lv
biAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNiw2ICszMzYsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVj
dFRvQ29uCiAgICAgZGlydHlSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIGdjLmNsaXAoZGly
dHlSZWN0KTsKICAgICBnYy50cmFuc2xhdGUoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IHdlYlZpZXcoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBn
Yy5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAg
ICAgdmlldy0+cGFpbnRDb250ZW50cygmZ2MsIHJlY3QpOwogICAgIGdjLnJlc3RvcmUoKTsKIApA
QCAtMzYwLDYgKzM2Miw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50U2Nyb2xsVmlld1JlY3RU
b0MKICAgICBnYy5zYXZlKCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QocmVjdCk7CiAgICAgZGly
dHlSZWN0Lm1vdmUoLXB0LngsIC1wdC55KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHdlYlZp
ZXcoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBnYy5zY2FsZShXZWJDb3JlOjpGbG9hdFNp
emUoc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CiAgICAgdmlldy0+cGFpbnQoJmdjLCBkaXJ0
eVJlY3QpOwogICAgIGdjLnJlc3RvcmUoKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
UHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlByZWZl
cmVuY2VzLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViUHJl
ZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBXZWJQ
cmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1bHRTZQogCiAgICAgQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiBkZWZhdWx0cyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7
CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U3RhbmRh
cmRGb250UHJlZmVyZW5jZUtleSksIENGU1RSKCJTZWdvZSBVSSIpKTsKKyAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0U3RhbmRhcmRGb250UHJlZmVyZW5jZUtl
eSksIENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUo
ZGVmYXVsdHMsIENGU1RSKFdlYktpdEZpeGVkRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiQ291
cmllciBOZXciKSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdl
YktpdFNlcmlmRm9udFByZWZlcmVuY2VLZXkpLCBDRlNUUigiVGltZXMgTmV3IFJvbWFuIikpOwog
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRTYW5zU2VyaWZG
b250UHJlZmVyZW5jZUtleSksIENGU1RSKCJBcmlhbCIpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dESU9iamVjdENvdW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dESVV0
aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KQEAgLTM2Myw2ICszNjQsNyBAQCBjb25zdCBMUENXU1RSIGtXZWJW
aWV3V2luZG93Q2xhc3NOYW1lID0KIAogY29uc3QgaW50IFdNX1hQX1RIRU1FQ0hBTkdFRCA9IDB4
MDMxQTsKIGNvbnN0IGludCBXTV9WSVNUQV9NT1VTRUhXSEVFTCA9IDB4MDIwRTsKK2NvbnN0IGlu
dCBXTV9EUElDSEFOR0VEID0gMHgwMkUwOwogCiBzdGF0aWMgY29uc3QgaW50IG1heFRvb2xUaXBX
aWR0aCA9IDI1MDsKIApAQCAtODIxLDggKzgyMywxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYlZpZXc6OmNsb3NlCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLXZvaWQgV2ViVmlldzo6
cmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dSZWN0LCBib29sIGNvbnRlbnRD
aGFuZ2VkLCBib29sIGltbWVkaWF0ZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIFdl
YlZpZXc6OnJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgbG9naWNhbFdpbmRvd1JlY3Qs
IGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLCBib29sIHJlcGFpbnRDb250ZW50
T25seSkKIHsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1JlY3QobG9naWNhbFdpbmRvd1Jl
Y3QpOworICAgIHdpbmRvd1JlY3Quc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBp
ZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbnRlbnRD
aGFuZ2VkLCBpbW1lZGlhdGUsIGFuZCByZXBhaW50Q29udGVudE9ubHkgcGFyYW1ldGVycyBhcmUg
YWxsIGJhc2VkIG9uIGEgbm9uLQogICAgICAgICAvLyBjb21wb3NpdGluZyBwYWludGluZy9zY3Jv
bGxpbmcgbW9kZWwuCkBAIC05MjAsMTAgKzkyNSwxOSBAQCB2b2lkIFdlYlZpZXc6OmFkZFRvRGly
dHlSZWdpb24oR0RJT2JqZWN0CiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdE
aWRJbnZhbGlkYXRlKHRoaXMpOwogfQogCi12b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9y
ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNj
cm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlldzo6c2Ny
b2xsQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBpbnQgbG9naWNhbER4LCBpbnQg
bG9naWNhbER5LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsU2Nyb2xsVmlld1JlY3QsIGNvbnN0IElu
dFJlY3QmIGxvZ2ljYWxDbGlwUmVjdCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CiAK
KyAgICAvLyBEaW1lbnNpb25zIHBhc3NlZCB0byB1cyBmcm9tIFdlYkNvcmUgYXJlIGluIGxvZ2lj
YWwgdW5pdHMuIFdlIG11c3QgY29udmVydCB0byBwaXhlbHM6CisgICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGludCBkeCA9IGNsYW1wVG88aW50PihzY2Fs
ZUZhY3RvciAqIGxvZ2ljYWxEeCk7CisgICAgaW50IGR5ID0gY2xhbXBUbzxpbnQ+KHNjYWxlRmFj
dG9yICogbG9naWNhbER5KTsKKyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0KGxvZ2ljYWxTY3Jv
bGxWaWV3UmVjdCk7CisgICAgc2Nyb2xsVmlld1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOworICAg
IEludFJlY3QgY2xpcFJlY3QobG9naWNhbENsaXBSZWN0KTsKKyAgICBjbGlwUmVjdC5zY2FsZShz
Y2FsZUZhY3Rvcik7CisKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBkb2luZyBzb21ldGhpbmcgc21hcnRlciBoZXJl
LCBsaWtlIG1vdmluZyB0aWxlcyBhcm91bmQgYW5kIHBhaW50aW5nCiAgICAgICAgIC8vIGFueSBu
ZXdseS1leHBvc2VkIHRpbGVzLiA8aHR0cDovL3dlYmtpdC5vcmcvYi81MjcxND4KQEAgLTk1Miw3
ICs5NjYsNyBAQCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAg
SFduZERDIHdpbmRvd0RDKG1fdmlld1dpbmRvdyk7CiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0
R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRvd0RDKSk7CiAgICAgSEdESU9CSiBv
bGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVC
aXRtYXAtPmdldCgpKTsKLSAgICAKKwogICAgIC8vIFNjcm9sbCB0aGUgYml0bWFwLgogICAgIFJF
Q1Qgc2Nyb2xsUmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7CiAgICAgUkVDVCBjbGlwUmVjdFdpbihj
bGlwUmVjdCk7CkBAIC05ODIsOCArOTk2LDExIEBAIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQo
Y29uc3QgSW50U2l6ZSYKIAogICAgIGRlbGV0ZUJhY2tpbmdTdG9yZSgpOwogCi0gICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRvcExldmVsRnJhbWUoKSkpCi0gICAgICAgIGNvcmVGcmFt
ZS0+dmlldygpLT5yZXNpemUobmV3U2l6ZSk7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKHRvcExldmVsRnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IG5l
d1NpemU7CisgICAgICAgIGxvZ2ljYWxTaXplLnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnJlc2l6ZShsb2dpY2FsU2l6ZSk7Cisg
ICAgfQogCiAjaWYgVVNFKENBKQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCkBAIC05OTksNiAr
MTAxNiwxNiBAQCB2b2lkIFdlYlZpZXc6OnNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmCiAjZW5k
aWYKIH0KIAorYm9vbCBXZWJWaWV3OjpkcGlDaGFuZ2VkKGZsb2F0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQoreworICAgIGlmICghSXNQcm9jZXNzRFBJQXdhcmUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZUNoYW5nZWQobmV3U2l6ZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogLy8gVGhpcyBlbXVsYXRlcyB0aGUgTWFjIHNtYXJ0cyBmb3IgcGFpbnRp
bmcgcmVjdHMgaW50ZWxsaWdlbnRseS4gIFRoaXMgaXMgdmVyeQogLy8gaW1wb3J0YW50IGZvciB1
cywgc2luY2Ugd2UgZG91YmxlIGJ1ZmZlciBiYXNlZCBvZmYgZGlydHkgcmVjdHMuCiBzdGF0aWMg
dm9pZCBnZXRVcGRhdGVSZWN0cyhIUkdOIHJlZ2lvbiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
LCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQpAQCAtMTIxMSw3ICsxMjM4LDcgQEAgdm9pZCBXZWJW
aWV3OjpwYWludChIREMgZGMsIExQQVJBTSBvcHRpbwogICAgICAgICBkZWxldGVCYWNraW5nU3Rv
cmVTb29uKCk7CiB9CiAKLXZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW1l
VmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwg
V2luZG93c1RvUGFpbnQgd2luZG93c1RvUGFpbnQpCit2b2lkIFdlYlZpZXc6OnBhaW50SW50b0Jh
Y2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmlldywgSERDIGJpdG1hcERDLCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3RQaXhlbHMsIFdpbmRvd3NUb1BhaW50IHdpbmRvd3NUb1BhaW50KQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSwgYW5kIHdlIHNob3VsZAogICAgIC8vIGFzc2VydCBh
cyBzdWNoLiBCdXQgY3VycmVudGx5IGl0ICppcyogc29tZXRpbWVzIGNhbGxlZCwgc28gd2UgY2Fu
J3QgYXNzZXJ0IHlldC4gU2VlCkBAIC0xMjIzLDcgKzEyNTAsNyBAQCB2b2lkIFdlYlZpZXc6OnBh
aW50SW50b0JhY2tpbmdTdG9yZShGcmFtCiAgICAgLy8gYnV0IGl0IHdhcyBiZWluZyBoaXQgZHVy
aW5nIG91ciBsYXlvdXQgdGVzdHMsIGFuZCBpcyBiZWluZyBpbnZlc3RpZ2F0ZWQgaW4KICAgICAv
LyBodHRwOi8vd2Via2l0Lm9yZy9iLzI5MzUwLgogCi0gICAgUkVDVCByZWN0ID0gZGlydHlSZWN0
OworICAgIFJFQ1QgcmVjdCA9IGRpcnR5UmVjdFBpeGVsczsKIAogI2lmIEZMQVNIX0JBQ0tJTkdf
U1RPUkVfUkVEUkFXCiAgICAgewpAQCAtMTIzMiwxNSArMTI1OSwyMSBAQCB2b2lkIFdlYlZpZXc6
OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFtCiAgICAgICAgIEZpbGxSZWN0KGRjLCAmcmVjdCwg
eWVsbG93QnJ1c2guZ2V0KCkpOwogICAgICAgICBHZGlGbHVzaCgpOwogICAgICAgICBTbGVlcCg1
MCk7Ci0gICAgICAgIHBhaW50SW50b1dpbmRvdyhiaXRtYXBEQywgZGMsIGRpcnR5UmVjdCk7Cisg
ICAgICAgIHBhaW50SW50b1dpbmRvdyhiaXRtYXBEQywgZGMsIGRpcnR5UmVjdFBpeGVscyk7CiAg
ICAgfQogI2VuZGlmCiAKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9yID0gMS4wZiAvIHNjYWxlRmFjdG9yOwor
CisgICAgSW50UmVjdCBsb2dpY2FsRGlydHlSZWN0ID0gZGlydHlSZWN0UGl4ZWxzOworICAgIGxv
Z2ljYWxEaXJ0eVJlY3Quc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9yKTsKKwogICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93cyh3aW5kb3dzVG9QYWludCA9PSBQYWludFdlYlZpZXdBbmRDaGlsZHJl
bik7CiAgICAgZ2Muc2F2ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQotICAgICAgICBnYy5j
bGVhclJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgZ2MuY2xlYXJSZWN0KGxvZ2ljYWxEaXJ0eVJl
Y3QpOwogICAgIGVsc2UKICAgICAgICAgRmlsbFJlY3QoYml0bWFwREMsICZyZWN0LCAoSEJSVVNI
KUdldFN0b2NrT2JqZWN0KFdISVRFX0JSVVNIKSk7CiAKQEAgLTEyNDksMTUgKzEyODIsMTggQEAg
dm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogICAgICAgICB1aVByaXZh
dGUtPmRyYXdCYWNrZ3JvdW5kKHRoaXMsIGJpdG1hcERDLCAmcmVjdCk7CiAKICAgICBpZiAoZnJh
bWVWaWV3ICYmIGZyYW1lVmlldy0+ZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkgewotICAgICAg
ICBnYy5jbGlwKGRpcnR5UmVjdCk7Ci0gICAgICAgIGZyYW1lVmlldy0+cGFpbnQoJmdjLCBkaXJ0
eVJlY3QpOworICAgICAgICBnYy5zYXZlKCk7CisgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShz
Y2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKKyAgICAgICAgZ2MuY2xpcChsb2dpY2FsRGlydHlS
ZWN0KTsKKyAgICAgICAgZnJhbWVWaWV3LT5wYWludCgmZ2MsIGxvZ2ljYWxEaXJ0eVJlY3QpOwor
ICAgICAgICBnYy5yZXN0b3JlKCk7CiAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9ycykK
LSAgICAgICAgICAgIGdjLmZpbGxSZWN0KGRpcnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBDb21wb3NpdGVEaWZmZXJlbmNlKTsKKyAgICAgICAgICAgIGdjLmZpbGxS
ZWN0KGxvZ2ljYWxEaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlRGlmZmVyZW5jZSk7CiAgICAgfQogICAgIGdjLnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBXZWJWaWV3OjpwYWludEludG9XaW5kb3coSERDIGJpdG1hcERDLCBIREMgd2luZG93REMsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KEhE
QyBiaXRtYXBEQywgSERDIHdpbmRvd0RDLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3RQaXhlbHMp
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBp
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBhbmQgd2Ugc2hvdWxkCiAgICAgLy8gYXNz
ZXJ0IGFzIHN1Y2guIEJ1dCBjdXJyZW50bHkgaXQgKmlzKiBzb21ldGltZXMgY2FsbGVkLCBzbyB3
ZSBjYW4ndCBhc3NlcnQgeWV0LiBTZWUKQEAgLTEyNjYsNyArMTMwMiw3IEBAIHZvaWQgV2ViVmll
dzo6cGFpbnRJbnRvV2luZG93KEhEQyBiaXRtYXAKICAgICBMT0NBTF9HRElfQ09VTlRFUigwLCBf
X0ZVTkNUSU9OX18pOwogI2lmIEZMQVNIX1dJTkRPV19SRURSQVcKICAgICBhdXRvIGdyZWVuQnJ1
c2ggPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKDAsIDI1NSwgMCkpKTsK
LSAgICBSRUNUIHJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgUkVDVCByZWN0ID0gZGlydHlSZWN0UGl4
ZWxzOwogICAgIEZpbGxSZWN0KHdpbmRvd0RDLCAmcmVjdCwgZ3JlZW5CcnVzaC5nZXQoKSk7CiAg
ICAgR2RpRmx1c2goKTsKICAgICBTbGVlcCg1MCk7CkBAIC0xMjc0LDggKzEzMTAsOCBAQCB2b2lk
IFdlYlZpZXc6OnBhaW50SW50b1dpbmRvdyhIREMgYml0bWFwCiAKICAgICAvLyBCbGl0IHRoZSBk
aXJ0eSByZWN0IGZyb20gdGhlIGJhY2tpbmcgc3RvcmUgaW50byB0aGUgc2FtZSBwb3NpdGlvbgog
ICAgIC8vIGluIHRoZSBkZXN0aW5hdGlvbiBEQy4KLSAgICBCaXRCbHQod2luZG93REMsIGRpcnR5
UmVjdC54KCksIGRpcnR5UmVjdC55KCksIGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVp
Z2h0KCksIGJpdG1hcERDLAotICAgICAgICAgICBkaXJ0eVJlY3QueCgpLCBkaXJ0eVJlY3QueSgp
LCBTUkNDT1BZKTsKKyAgICBCaXRCbHQod2luZG93REMsIGRpcnR5UmVjdFBpeGVscy54KCksIGRp
cnR5UmVjdFBpeGVscy55KCksIGRpcnR5UmVjdFBpeGVscy53aWR0aCgpLCBkaXJ0eVJlY3RQaXhl
bHMuaGVpZ2h0KCksIGJpdG1hcERDLAorICAgICAgICBkaXJ0eVJlY3RQaXhlbHMueCgpLCBkaXJ0
eVJlY3RQaXhlbHMueSgpLCBTUkNDT1BZKTsKIAogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7
CiB9CkBAIC0xNDIyLDkgKzE0NTgsMTUgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KFdQQQogCiAgICAgbFBhcmFtID0gTUFLRUxQQVJBTShjb29yZHMueCwgY29vcmRzLnkp
OwogCisgICAgLy8gQ29udmVydCBjb29yZGluYXRlcyB0byBsb2dpY2FsIHBpeGVscworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBpbnZlcnNl
U2NhbGVGYWN0b3IgPSAxLjBmIC8gc2NhbGVGYWN0b3I7CisgICAgSW50UG9pbnQgbG9naWNhbENv
b3Jkcyhjb29yZHMpOworICAgIGxvZ2ljYWxDb29yZHMuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9y
LCBpbnZlcnNlU2NhbGVGYWN0b3IpOworCiAgICAgbV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xs
ZXIoKS5jbGVhckNvbnRleHRNZW51KCk7CiAKLSAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50KG1f
cGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGNvb3JkcykpOworICAg
IEludFBvaW50IGRvY3VtZW50UG9pbnQobV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPndpbmRv
d1RvQ29udGVudHMobG9naWNhbENvb3JkcykpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChk
b2N1bWVudFBvaW50KTsKICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQuaW5uZXJOb25T
aGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJh
bWUoKSA6ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwog
CkBAIC0xNDQ5LDkgKzE0OTEsMTEgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2
ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUE9J
TlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xsZXIuaGl0
VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSkpOworICAgIEludFBv
aW50IGxvZ2ljYWxQb2ludCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250
cm9sbGVyLmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpOwor
ICAgIGxvZ2ljYWxQb2ludC5zY2FsZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpOwogCiAgICAg
Ly8gVHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0ZXMKKyAgICBQT0lOVCBw
b2ludCA9IGxvZ2ljYWxQb2ludDsKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2lu
ZG93LCAmcG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2NDQsNiArMTY4OCwx
MiBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmVOb3RpZnkoV1BBUkFNIHdQYXJhCiAKICAgICBib29s
IGhpdFNjcm9sbGJhciA9IGZhbHNlOwogICAgIFBPSU5UIGdlc3R1cmVCZWdpblBvaW50ID0ge2du
LT5wdHNMb2NhdGlvbi54LCBnbi0+cHRzTG9jYXRpb24ueX07CisKKyAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZmxvYXQgaW52ZXJzZVNjYWxlRmFjdG9y
ID0gMS4wZiAvIHNjYWxlRmFjdG9yOworICAgIEludFBvaW50IGxvZ2ljYWxHZXN0dXJlQmVnaW5Q
b2ludChnZXN0dXJlQmVnaW5Qb2ludCk7CisgICAgbG9naWNhbEdlc3R1cmVCZWdpblBvaW50LnNj
YWxlKGludmVyc2VTY2FsZUZhY3RvciwgaW52ZXJzZVNjYWxlRmFjdG9yKTsKKwogICAgIEhpdFRl
c3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVl
c3Q6OkRpc2FsbG93U2hhZG93Q29udGVudCk7CiAgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9
ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBjaGlsZEZyYW1lOyBjaGlsZEZyYW1lID0gRXZlbnRIYW5k
bGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUobV9nZXN0dXJlVGFyZ2V0Tm9kZS5nZXQoKSkpIHsK
ICAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjaGlsZEZyYW1lLT52aWV3KCk7CkBAIC0x
NjU2LDcgKzE3MDYsNyBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmVOb3RpZnkoV1BBUkFNIHdQYXJh
CiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdChmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMoZ2VzdHVyZUJlZ2lu
UG9pbnQpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoZnJhbWVWaWV3LT5zY3JlZW5U
b0NvbnRlbnRzKGxvZ2ljYWxHZXN0dXJlQmVnaW5Qb2ludCkpOwogICAgICAgICBsYXllci0+aGl0
VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVz
dWx0LmlubmVyTm9kZSgpOwogCkBAIC0xNzYxLDEzICsxODExLDE1IEBAIGJvb2wgV2ViVmlldzo6
Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEEKICAgICAgICAgfQogCiAgICAgICAgIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxlZEFyZWEgPSAwOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRl
dmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNjcm9sbERlbHRhKC1k
ZWx0YVggKiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNjYWxlRmFjdG9yKTsKIAogICAgICAgICBp
ZiAoIW1fZ2VzdHVyZVRhcmdldE5vZGUgfHwgIW1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGRpcmVjdGx5IGhpdCB0aGUgZG9jdW1lbnQg
d2l0aG91dCBoaXR0aW5nIGFueSBub2RlcwotICAgICAgICAgICAgY29yZUZyYW1lLT52aWV3KCkt
PnNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSkpOworICAgICAgICAgICAgY29yZUZy
YW1lLT52aWV3KCktPnNjcm9sbEJ5KGxvZ2ljYWxTY3JvbGxEZWx0YSk7CiAgICAgICAgICAgICBz
Y3JvbGxlZEFyZWEgPSBjb3JlRnJhbWUtPnZpZXcoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5l
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKC1k
ZWx0YVgsIC1kZWx0YVkpLCBXZWJDb3JlOjpSZW5kZXJMYXllcjo6U2Nyb2xsT2Zmc2V0Q2xhbXBl
ZCwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoKS0+c2Ny
b2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsIFdlYkNvcmU6OlJlbmRlckxheWVy
OjpTY3JvbGxPZmZzZXRDbGFtcGVkLCAmc2Nyb2xsZWRBcmVhKTsKIAogICAgICAgICBpZiAoIShV
cGRhdGVQYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBCZWdpblBhbm5pbmdGZWVkYmFja1B0cigpICYm
IEVuZFBhbm5pbmdGZWVkYmFja1B0cigpKSkgewogICAgICAgICAgICAgQ2xvc2VHZXN0dXJlSW5m
b0hhbmRsZVB0cigpKGdlc3R1cmVIYW5kbGUpOwpAQCAtMjIwNiw3ICsyMjU4LDExIEBAIHZvaWQg
V2ViVmlldzo6c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wKIAogICAgIFJFQ1Qgd2luZG93UmVj
dCA9IHswfTsKICAgICBmcmFtZVJlY3QoJndpbmRvd1JlY3QpOwotICAgIHJlcGFpbnQod2luZG93
UmVjdCwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAvLyByZXBhaW50IGV4cGVjdHMgbG9naWNhbCBwaXhl
bHMsIHNvIHJlc2NhbGUgaGVyZS4KKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KHdpbmRvd1JlY3Qp
OworICAgIGxvZ2ljYWxSZWN0LnNjYWxlKDEuMGYgLyBkZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICByZXBhaW50KGxvZ2ljYWxSZWN0LCB0cnVlLCB0cnVlKTsKIH0KIAogYm9vbCBXZWJWaWV3Ojpy
ZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcygpCkBAIC0yMzQ5LDYgKzI0MDUsOSBAQCBMUkVTVUxU
IENBTExCQUNLIFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jCiAgICAgICAgICAgICBpZiAobFBhcmFt
ICE9IDApCiAgICAgICAgICAgICAgICAgd2ViVmlldy0+c2l6ZUNoYW5nZWQoSW50U2l6ZShMT1dP
UkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSkpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdNX0RQSUNIQU5HRUQ6CisgICAgICAgICAgICB3ZWJWaWV3LT5kcGlDaGFuZ2VkKExP
V09SRCh3UGFyYW0pLCBJbnRTaXplKExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV01fU0hPV1dJTkRPVzoKICAgICAgICAg
ICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKICAgICAgICAgICAgIGlmICh3UGFyYW0gPT0gMCkgewpAQCAtMjkxNiw3ICsyOTc1LDcgQEAg
dm9pZCBXZWJWaWV3Ojppbml0aWFsaXplVG9vbFRpcFdpbmRvdygpCiAgICAgaW5mby51SWQgPSBy
ZWludGVycHJldF9jYXN0PFVJTlRfUFRSPihtX3ZpZXdXaW5kb3cpOwogCiAgICAgOjpTZW5kTWVz
c2FnZShtX3Rvb2xUaXBId25kLCBUVE1fQUREVE9PTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxMUEFS
QU0+KCZpbmZvKSk7Ci0gICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xUaXBId25kLCBUVE1fU0VUTUFY
VElQV0lEVEgsIDAsIG1heFRvb2xUaXBXaWR0aCk7CisgICAgOjpTZW5kTWVzc2FnZShtX3Rvb2xU
aXBId25kLCBUVE1fU0VUTUFYVElQV0lEVEgsIDAsIGNsYW1wVG88aW50PihtYXhUb29sVGlwV2lk
dGggKiBkZXZpY2VTY2FsZUZhY3RvcigpKSk7CiAKICAgICA6OlNldFdpbmRvd1BvcyhtX3Rvb2xU
aXBId25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUgfCBT
V1BfTk9BQ1RJVkFURSk7CiB9CkBAIC0zNjg3LDE3ICszNzQ2LDE5IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6Z2VuZXIKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQorSFJF
U1VMVCBXZWJWaWV3OjpzZWxlY3Rpb25SZWN0KFJFQ1QqIHJjKQogewogICAgIFdlYkNvcmU6OkZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBJbnRSZWN0IGlyID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb25Cb3VuZHMoKSk7CiAgICAgaXIgPSBmcmFtZS52aWV3KCktPmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3coaXIpOwogICAgIGlyLm1vdmUoLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zm
c2V0KCkud2lkdGgoKSwgLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOwot
ICAgIHJjLT5sZWZ0ID0gaXIueCgpOwotICAgIHJjLT50b3AgPSBpci55KCk7Ci0gICAgcmMtPmJv
dHRvbSA9IHJjLT50b3AgKyBpci5oZWlnaHQoKTsKLSAgICByYy0+cmlnaHQgPSByYy0+bGVmdCAr
IGlyLndpZHRoKCk7CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgcmMtPmxlZnQgPSBpci54KCkgKiBzY2FsZUZhY3RvcjsKKyAgICByYy0+dG9wID0g
aXIueSgpICogc2NhbGVGYWN0b3I7CisgICAgcmMtPmJvdHRvbSA9IHJjLT50b3AgKyBpci5oZWln
aHQoKSAqIHNjYWxlRmFjdG9yOworICAgIHJjLT5yaWdodCA9IHJjLT5sZWZ0ICsgaXIud2lkdGgo
KSAqIHNjYWxlRmFjdG9yOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNzc0LDkgKzM4MzUs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmlzTG9hCiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAgICAgCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmVsZW1l
bnRBdFBvaW50KCAKLSAgICAgICAgLyogW2luXSAqLyBMUFBPSU5UIHBvaW50LAotICAgICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIGVsZW1lbnREaWN0aW9uYXJ5KQorSFJF
U1VMVCBXZWJWaWV3OjplbGVtZW50QXRQb2ludChMUFBPSU5UIHBvaW50LCBJUHJvcGVydHlCYWcq
KiBlbGVtZW50RGljdGlvbmFyeSkKIHsKICAgICBpZiAoIWVsZW1lbnREaWN0aW9uYXJ5KSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzc5MCw2ICszODQ5LDggQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZQogICAgICAgICByZXR1cm4gRV9GQUlM
OwogCiAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQtPngsIHBvaW50
LT55KTsKKyAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0b3IgPSAxLjBmIC8gZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKyAgICB3ZWJDb3JlUG9pbnQuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9yLCBpbnZl
cnNlU2NhbGVGYWN0b3IpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gSGl0VGVzdFJlc3Vs
dCh3ZWJDb3JlUG9pbnQpOwogICAgIGlmIChmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAg
ICAgIHJlc3VsdCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCh3
ZWJDb3JlUG9pbnQpOwpAQCAtNTMwNiwzMiArNTM2NywzNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYlZpZXc6OmZyYW1lCiAgICAgcmV0dXJuIG1fZnJhbWVMb2FkRGVsZWdhdGVQcml2
YXRlLmNvcHlSZWZUbyhkKTsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3
OjpzY3JvbGxPZmZzZXQoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBQT0lOVCBvZmZzZXQp
CitIUkVTVUxUIFdlYlZpZXc6OnNjcm9sbE9mZnNldChMUFBPSU5UIG9mZnNldCkKIHsKICAgICBp
ZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICBJbnRTaXplIG9mZnNl
dEludFNpemUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisK
KyAgICBvZmZzZXRJbnRTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOworCiAgICAgb2Zm
c2V0LT54ID0gb2Zmc2V0SW50U2l6ZS53aWR0aCgpOwogICAgIG9mZnNldC0+eSA9IG9mZnNldElu
dFNpemUuaGVpZ2h0KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6c2Nyb2xsQnkoIAotICAgIC8qIFtpbl0gKi8gTFBQT0lOVCBvZmZz
ZXQpCitIUkVTVUxUIFdlYlZpZXc6OnNjcm9sbEJ5KExQUE9JTlQgb2Zmc2V0KQogewogICAgIGlm
ICghb2Zmc2V0KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgIG1fcGFnZS0+bWFpbkZy
YW1lKCkudmlldygpLT5zY3JvbGxCeShJbnRTaXplKG9mZnNldC0+eCwgb2Zmc2V0LT55KSk7CisK
KyAgICBJbnRTaXplIHNjcm9sbERlbHRhKG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKyAgICBzY3Jv
bGxEZWx0YS5zY2FsZSgxLjBmIC8gZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS52aWV3KCktPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKICAgICByZXR1cm4gU19P
SzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYmxlQ29udGVu
dFJlY3QoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gTFBSRUNUIHJlY3QpCitIUkVTVUxUIFdl
YlZpZXc6OnZpc2libGVDb250ZW50UmVjdChMUFJFQ1QgcmVjdCkKIHsKICAgICBpZiAoIXJlY3Qp
CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Cisg
ICAgdmlzaWJsZUNvbnRlbnQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgcmVjdC0+
bGVmdCA9IChMT05HKSB2aXNpYmxlQ29udGVudC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcp
IHZpc2libGVDb250ZW50LnkoKTsKICAgICByZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29u
dGVudC5tYXhYKCk7CkBAIC01Njg2LDYgKzU3NTIsOCBAQCB2b2lkIFdlYlZpZXc6OnByZXBhcmVD
YW5kaWRhdGVXaW5kb3coRnJhCiAgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNhcmV0ID0g
dGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CisgICAgY2FyZXQu
c2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKICAgICBDQU5ESURBVEVGT1JNIGZvcm07CiAg
ICAgZm9ybS5kd0luZGV4ID0gMDsKICAgICBmb3JtLmR3U3R5bGUgPSBDRlNfRVhDTFVERTsKQEAg
LTU5NDUsNiArNjAxMyw3IEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0
aW8KICAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFu
Z2UodGVtcFJhbmdlLmdldCgpKTsKICAgICB9CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+dmll
dygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKKyAgICBjYXJldC5zY2FsZShkZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKICAgICBjaGFyUG9zLT5wdC54ID0gY2FyZXQueCgpOwogICAgIGNoYXJQb3Mt
PnB0LnkgPSBjYXJldC55KCk7CiAgICAgOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZj
aGFyUG9zLT5wdCk7CkBAIC02NjIyLDcgKzY2OTEsNiBAQCB2b2lkIFdlYlZpZXc6OnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoCiAgICAgICAgICAgICA6OkdldENsaWVudFJlY3QobV92aWV3V2lu
ZG93LCAmY2xpZW50UmVjdCk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+c2V0U2l6ZShJ
bnRSZWN0KGNsaWVudFJlY3QpLnNpemUoKSk7CiAgICAgICAgICAgICBtX2JhY2tpbmdMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7Ci0KICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dENoaWxkTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV9iYWNraW5nTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwogCiAgICAgICAgICAgICAvLyBXZSBhcmVuJ3QgZ29pbmcg
dG8gYmUgdXNpbmcgb3VyIGJhY2tpbmcgc3RvcmUgd2hpbGUgd2UncmUgaW4gYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcKQEAgLTY3NzEsMTUgKzY4MzksMjIgQEAgdm9pZCBXZWJWaWV3Ojpub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0CiAgICAgZmx1c2hQZW5kaW5nR3JhcGhpY3NMYXllckNoYW5nZXNT
b29uKCk7CiB9CiAKLXZvaWQgV2ViVmlldzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBpbkNsaXApCit2b2lkIFdlYlZpZXc6OnBhaW50Q29udGVudHMo
Y29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwUGl4ZWxzKQogewogICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUobV9tYWluRnJhbWUpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3Io
KTsKKyAgICBmbG9hdCBpbnZlcnNlU2NhbGVGYWN0b3IgPSAxLjBmIC8gc2NhbGVGYWN0b3I7CisK
KyAgICBGbG9hdFJlY3QgbG9naWNhbENsaXAgPSBpbkNsaXBQaXhlbHM7CisgICAgbG9naWNhbENs
aXAuc2NhbGUoaW52ZXJzZVNjYWxlRmFjdG9yKTsKKwogICAgIGNvbnRleHQuc2F2ZSgpOwotICAg
IGNvbnRleHQuY2xpcChpbkNsaXApOwotICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjb250ZXh0
LCBlbmNsb3NpbmdJbnRSZWN0KGluQ2xpcCkpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOworICAgIGNvbnRleHQuY2xpcChsb2dpY2FsQ2xp
cCk7CisgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qo
bG9naWNhbENsaXApKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIApAQCAtNzEyMiw2ICs3
MTk3LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpmaXJzdAogICAgIElu
dFJlY3QgcmVjdCA9IGZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdldCgp
KTsKICAgICByZXN1bHRJbnRSZWN0ID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHJl
Y3QpOwogCisgICAgcmVzdWx0SW50UmVjdC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKKwog
ICAgIHJlc3VsdFJlY3QtPmxlZnQgPSByZXN1bHRJbnRSZWN0LngoKTsKICAgICByZXN1bHRSZWN0
LT50b3AgPSByZXN1bHRJbnRSZWN0LnkoKTsKICAgICByZXN1bHRSZWN0LT5yaWdodCA9IHJlc3Vs
dEludFJlY3QueCgpICsgcmVzdWx0SW50UmVjdC53aWR0aCgpOwpAQCAtNzE3MywxMiArNzI1MCw2
IEBAIEhSRVNVTFQgV2ViVmlldzo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXUKICAgICByZXR1cm4g
U19PSzsKIH0KIAotc3RhdGljIGZsb2F0IHNjYWxlRmFjdG9yRnJvbVdpbmRvdyhIV05EIHdpbmRv
dykKLXsKLSAgICBIV25kREMgZGMod2luZG93KTsKLSAgICByZXR1cm4gOjpHZXREZXZpY2VDYXBz
KGRjLCBMT0dQSVhFTFNYKSAvIDk2LjBmOwotfQotCiBmbG9hdCBXZWJWaWV3OjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgaWYgKG1fY3VzdG9tRGV2aWNlU2NhbGVGYWN0b3IpCkBA
IC03MTg3LDEyICs3MjU4LDEyIEBAIGZsb2F0IFdlYlZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkg
Y29uc3QKICAgICAvLyBGSVhNRSgxNDYzMzUpOiBTaG91bGQgY2hlY2sgZm9yIFdpbmRvd3MgOC4x
IEhpZ2ggRFBJIEZlYXR1cmVzIGhlcmUgZmlyc3QuCiAKICAgICBpZiAobV92aWV3V2luZG93KQot
ICAgICAgICByZXR1cm4gc2NhbGVGYWN0b3JGcm9tV2luZG93KG1fdmlld1dpbmRvdyk7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhtX3ZpZXdXaW5k
b3cpOwogCiAgICAgaWYgKG1faG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuIHNjYWxlRmFjdG9y
RnJvbVdpbmRvdyhtX2hvc3RXaW5kb3cpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6ZGV2aWNl
U2NhbGVGYWN0b3JGb3JXaW5kb3cobV9ob3N0V2luZG93KTsKIAotICAgIHJldHVybiBzY2FsZUZh
Y3RvckZyb21XaW5kb3coMCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9y
Rm9yV2luZG93KG51bGxwdHIpOwogfQogCiBIUkVTVUxUIFdlYlZpZXc6OnNldEN1c3RvbUJhY2tp
bmdTY2FsZUZhY3Rvcihkb3VibGUgY3VzdG9tU2NhbGVGYWN0b3IpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5oCShyZXZpc2lvbiAxODcxNDQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4OCw2ICs5ODgsOSBAQCBwdWJsaWM6CiAgICAgLyogW291dCwgcmV0
dmFsXSAqLyBSRUNUKiByZXN1bHRSZWN0KTsKIAogICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgc2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoLyogW291dF0gKi8gVUlOVCogbG9jYXRpb24sIC8q
IFtvdXRdICovIFVJTlQqIGxlbmd0aCk7CisKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcigp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRpcGxpZXIoZmxvYXQgbXVs
dGlwbGllciwgYm9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29tTXVsdGlwbGllcihib29s
IGlzVGV4dE9ubHkpOwpAQCAtMTAwMCw2ICsxMDAzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGFj
dGl2ZSgpOwogCiAgICAgdm9pZCBzaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisgICAgYm9vbCBkcGlDaGFuZ2VkKGZsb2F0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAK
ICAgICBlbnVtIFdpbmRvd3NUb1BhaW50IHsgUGFpbnRXZWJWaWV3T25seSwgUGFpbnRXZWJWaWV3
QW5kQ2hpbGRyZW4gfTsKICAgICB2b2lkIHBhaW50SW50b0JhY2tpbmdTdG9yZShXZWJDb3JlOjpG
cmFtZVZpZXcqLCBIREMgYml0bWFwREMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCwgV2luZG93c1RvUGFpbnQpOwpAQCAtMTAyNiw4ICsxMDMwLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fc2hvdWxkSW52ZXJ0Q29sb3JzOwogICAgIHZvaWQgc2V0U2hvdWxkSW52ZXJ0Q29sb3Jz
KGJvb2wpOwogCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKLQogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2ViVmlld1dpbmRvd0NsYXNzKCk7CiAgICAg
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwpJbmRleDogU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE3LDExICsx
MDE3LDEzIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0MKIHsKICAg
ICBXZWJWaWV3KiB2aWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwogCi0gICAgUkVDVCByZWN0
OwotICAgIHZpZXctPmZyYW1lUmVjdCgmcmVjdCk7CisgICAgUkVDVCBwaXhlbFJlY3Q7CisgICAg
dmlldy0+ZnJhbWVSZWN0KCZwaXhlbFJlY3QpOwogICAgIGJvb2wgdHJhbnNwYXJlbnQgPSB2aWV3
LT50cmFuc3BhcmVudCgpOwogICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRyYW5zcGFyZW50
ID8gQ29sb3I6OnRyYW5zcGFyZW50IDogQ29sb3I6OndoaXRlOwotICAgIGNvcmUobV93ZWJGcmFt
ZSktPmNyZWF0ZVZpZXcoSW50UmVjdChyZWN0KS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgdHJh
bnNwYXJlbnQpOworICAgIEludFJlY3QgbG9naWNhbEZyYW1lKHBpeGVsUmVjdCk7CisgICAgbG9n
aWNhbEZyYW1lLnNjYWxlKDEuMGYgLyB2aWV3LT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBj
b3JlKG1fd2ViRnJhbWUpLT5jcmVhdGVWaWV3KGxvZ2ljYWxGcmFtZS5zaXplKCksIGJhY2tncm91
bmRDb2xvciwgdHJhbnNwYXJlbnQpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRTYXZlVG9QYWdlQ2FjaGUoKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTUtMDctMjEgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gSW1wbGVtZW50IHByb3BlciBI
aWdoIERQSSBzdXBwb3J0IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIxNTU4MjY5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBXaW5MYXVuY2hlciB0byB0YWtlIGRldmljZSBzY2FsaW5nIGZhY3RvciBpbnRvIGFjY291bnQu
CisKKyAgICAgICAgKiBXaW5MYXVuY2hlci9Db21tb24uY3BwOgorICAgICAgICAocmVzaXplU3Vi
Vmlld3MpOiBNYWtlIHN1cmUgdG9vbGJhcnMgYW5kIFVSTCBiYXIgYXJlIHByb3Blcmx5IHNpemVk
IGFuZCB1c2luZworICAgICAgICBhIHZhbGlkIGZvbnQuCisgICAgICAgIChjb21wdXRlRnVsbERl
c2t0b3BGcmFtZSk6IEhhbmRsZSBoaWdoIERQSSBkZXNrdG9wcy4KKyAgICAgICAgKFduZFByb2Mp
OiBNYWtlIGNvbW1lbnRzIG1vcmUgcHJlY2lzZS4KKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5M
YXVuY2hlci5jcHA6CisgICAgICAgIChXaW5MYXVuY2hlcjo6aW5pdCk6IERldGVybWluZSBkZXZp
Y2Ugc2NhbGUgZmFjdG9yIGF0IGxhdW5jaC4KKyAgICAgICAgKFdpbkxhdW5jaGVyOjp1cGRhdGVE
ZXZpY2VTY2FsZUZhY3Rvcik6IEFkZGVkLgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5j
aGVyLmg6CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0Lmg6IFVzZSBD
KysxMSBpbml0aWFsaXphdGlvbi4KKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5NYWluLmNwcDog
U2l6ZSBpbnRlcmZhY2UgYmFzZWQgb24gc2NhbGluZyBmYWN0b3IuCisgICAgICAgICh3V2luTWFp
bik6IERpdHRvLgorICAgICAgICAqIHdpbi9ETExMYXVuY2hlci9ETExMYXVuY2hlck1haW4uY3Bw
OgorICAgICAgICAod1dpbk1haW4pOiBUZWxsIFdpbmRvd3Mgd2UgdW5kZXJzdGFuZCBoaWdoIERQ
SS4KKwogMjAxNS0wNy0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeGVkIFZNIHBvb2wgYWxsb2NhdGlvbiBzaG91bGQgaGF2ZSBhIHJlc2VydmUgZm9yIGFs
bG9jYXRpb25zIHRoYXQgY2Fubm90IGZhaWwKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAkocmV2aXNp
b24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsMTAgQEAKIAogc3RhdGljIGNvbnN0IGludCBtYXhIaXN0b3J5U2l6ZSA9
IDEwOwogCisjaWZuZGVmIFdNX0RQSUNIQU5HRUQKKyNkZWZpbmUgV01fRFBJQ0hBTkdFRCAweDAy
RTAKKyNlbmRpZgorCiB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZSwgJl9f
dXVpZG9mKElXZWJGcmFtZSk+PiBJV2ViRnJhbWVQdHI7CiB0eXBlZGVmIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVx
dWVzdCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7CiAKQEAgLTcyLDYgKzc2LDcgQEAgdHlw
ZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZQogSElOU1RBTkNFIGhJbnN0Owog
SFdORCBoTWFpblduZDsKIEhXTkQgaFVSTEJhclduZDsKK0hHRElPQkogaFVSTEZvbnQ7CiBIV05E
IGhCYWNrQnV0dG9uV25kOwogSFdORCBoRm9yd2FyZEJ1dHRvblduZDsKIEhXTkQgaENhY2hlV25k
OwpAQCAtMTAxLDE3ICsxMDYsMjkgQEAgSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMoSFdORCwgVUlO
VCwgV1BBUgogc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHVybEJTdHIpOwogc3RhdGljIHZvaWQg
dXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpOwogCituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKK30KKwogc3RhdGljIHZvaWQgcmVz
aXplU3ViVmlld3MoKQogewogICAgIGlmIChnV2luTGF1bmNoZXItPnVzZXNMYXllcmVkV2ViVmll
dygpIHx8ICFnVmlld1dpbmRvdykKICAgICAgICAgcmV0dXJuOwogCisgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhnVmlld1dpbmRvdyk7
CisKICAgICBSRUNUIHJjQ2xpZW50OwogICAgIEdldENsaWVudFJlY3QoaE1haW5XbmQsICZyY0Ns
aWVudCk7Ci0gICAgTW92ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgQ09OVFJPTEJVVFRP
Tl9XSURUSCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1
dHRvblduZCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgMCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJM
QkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhoVVJMQmFyV25kLCBDT05UUk9MQlVU
VE9OX1dJRFRIICogMiwgMCwgcmNDbGllbnQucmlnaHQsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwot
ICAgIE1vdmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAsIFVSTEJBUl9IRUlHSFQsIHJjQ2xpZW50LnJp
Z2h0LCByY0NsaWVudC5ib3R0b20gLSBVUkxCQVJfSEVJR0hULCBUUlVFKTsKKworICAgIGludCBo
ZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQ7CisgICAgaW50IHdpZHRoID0gc2Nh
bGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIOworCisgICAgTW92ZVdpbmRvdyhoQmFja0J1
dHRvblduZCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7CisgICAgTW92ZVdpbmRvdyhoRm9y
d2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVX
aW5kb3coaFVSTEJhclduZCwgd2lkdGggKiAyLCAwLCByY0NsaWVudC5yaWdodCwgaGVpZ2h0LCBU
UlVFKTsKKyAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJp
Z2h0LCByY0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRSVUUpOworCisgICAgOjpTZW5kTWVzc2Fn
ZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRGT05UKSwgcmVpbnRlcnByZXRf
Y2FzdDxXUEFSQU0+KGdXaW5MYXVuY2hlci0+dXJsQmFyRm9udCgpKSwgVFJVRSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCkBAIC0xMzIsMTAgKzE0OSwxMiBA
QCBzdGF0aWMgdm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCiAgICAgaWYgKCE6OlN5c3Rl
bVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRXT1JLQVJFQSwgMCwgc3RhdGljX2Nhc3Q8dm9pZCo+KCZk
ZXNrdG9wKSwgMCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
V2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7CisKICAgICBzX3dp
bmRvd1Bvc2l0aW9uLnggPSAwOwogICAgIHNfd2luZG93UG9zaXRpb24ueSA9IDA7Ci0gICAgc193
aW5kb3dTaXplLmN4ID0gZGVza3RvcC5yaWdodCAtIGRlc2t0b3AubGVmdDsKLSAgICBzX3dpbmRv
d1NpemUuY3kgPSBkZXNrdG9wLmJvdHRvbSAtIGRlc2t0b3AudG9wOworICAgIHNfd2luZG93U2l6
ZS5jeCA9IHNjYWxlRmFjdG9yICogKGRlc2t0b3AucmlnaHQgLSBkZXNrdG9wLmxlZnQpOworICAg
IHNfd2luZG93U2l6ZS5jeSA9IHNjYWxlRmFjdG9yICogKGRlc2t0b3AuYm90dG9tIC0gZGVza3Rv
cC50b3ApOwogfQogCiBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBkbGxJbnN0YW5jZSwg
RFdPUkQgcmVhc29uLCBMUFZPSUQpCkBAIC00MjEsMTMgKzQ0MCwxMyBAQCBMUkVTVUxUIENBTExC
QUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UCiAgICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBv
dXIgdHJhbnNwYXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRs
ZSBmb3IKICAgICAgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMg
d291bGQgYmUgdG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKICAgICAgICAgICAg
IC8vIHVuZGVyIHRoZSBtb3VzZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVz
dCB1c2UgYW4gYXJiaXRyYXJ5Ci0gICAgICAgICAgICAvLyAzMCBwaXhlbCBiYW5kIGF0IHRoZSB0
b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgorICAgICAg
ICAgICAgLy8gMzAgbG9naWNhbCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMg
YW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NBUFRJT04gdG8g
dGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KICAgICAgICAgICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9u
IGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cuCiAgICAgICAg
ICAgICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOwotCi0gICAgICAgICAgICBpZiAoKHkgPiB3aW5k
b3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBkcmFnQmFySGVpZ2h0KSkKKyAgICAgICAgICAg
IGZsb2F0IHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IgPSBkcmFnQmFySGVpZ2h0ICogZ1dpbkxh
dW5jaGVyLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93
LnRvcCkgJiYgKHkgPCB3aW5kb3cudG9wICsgc2NhbGVkRHJhZ0JhckhlaWdodEZhY3RvcikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0pOwpAQCAtNTE5LDYgKzUzOCwxMCBAQCBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBo
V25kLCBVSU5UCiAKICAgICAgICAgcmVzaXplU3ViVmlld3MoKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXTV9EUElDSEFOR0VEOgorICAgICAgICBpZiAoZ1dpbkxhdW5jaGVyKQorICAgICAg
ICAgICAgZ1dpbkxhdW5jaGVyLT51cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBy
ZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJl
bnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgfQpJbmRleDogVG9v
bHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxh
dW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1
bmNoZXIvV2luTGF1bmNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgpAQCAtNDcsNiArNDcsMTAgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8
dmVjdG9yPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZv
cldpbmRvdyhIV05EKTsKK30KKwogc3RhdGljIGNvbnN0IGludCBtYXhIaXN0b3J5U2l6ZSA9IDEw
OwogCiB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwg
Jl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdWVzdCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQ
dHI7CkBAIC02MSw2ICs2NSw4IEBAIFdpbkxhdW5jaGVyOjpXaW5MYXVuY2hlcihIV05EIG1haW5X
bmQsIEgKIAogSFJFU1VMVCBXaW5MYXVuY2hlcjo6aW5pdCgpCiB7CisgICAgdXBkYXRlRGV2aWNl
U2NhbGVGYWN0b3IoKTsKKwogICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShD
TFNJRF9XZWJWaWV3LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
bV93ZWJWaWV3LkdldEludGVyZmFjZVB0cigpKSk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAg
ICAgIHJldHVybiBocjsKQEAgLTQ3OCwzICs0ODQsMTkgQEAgdm9pZCBXaW5MYXVuY2hlcjo6em9v
bU91dCgpCiAKICAgICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChudWxscHRyKTsKIH0KKwordm9p
ZCBXaW5MYXVuY2hlcjo6Z2VuZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0
b3IpCit7CisgICAgaWYgKG1faFVSTEJhckZvbnQpCisgICAgICAgIDo6RGVsZXRlT2JqZWN0KG1f
aFVSTEJhckZvbnQpOworCisgICAgbV9oVVJMQmFyRm9udCA9IDo6Q3JlYXRlRm9udChzY2FsZUZh
Y3RvciAqIDE4LCAwLCAwLCAwLCBGV19OT1JNQUwsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIERFRkFV
TFRfQ0hBUlNFVCwKKyAgICAgICAgT1VUX1RUX09OTFlfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJF
Q0lTLCBBTlRJQUxJQVNFRF9RVUFMSVRZLCBGRl9ET05UQ0FSRSwgTCJUaW1lcyBOZXcgUm9tYW4i
KTsKK30KKworCit2b2lkIFdpbkxhdW5jaGVyOjp1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpCit7
CisgICAgbV9kZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KG1faE1haW5XbmQpOworICAgIGdlbmVyYXRlRm9udEZvclNjYWxlRmFjdG9yKG1fZGV2
aWNlU2NhbGVGYWN0b3IpOworfQpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCShyZXZpc2lv
biAxODcxNDQpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTAsNyArOTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgem9vbUluKCk7CiAgICAgdm9p
ZCB6b29tT3V0KCk7CiAKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIHsgcmV0dXJuIG1f
ZGV2aWNlU2NhbGVGYWN0b3I7IH0KKyAgICB2b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7
CisKKyAgICBIR0RJT0JKIHVybEJhckZvbnQoKSB7IHJldHVybiBtX2hVUkxCYXJGb250OyB9CisK
IHByaXZhdGU6CisgICAgdm9pZCBnZW5lcmF0ZUZvbnRGb3JTY2FsZUZhY3RvcihmbG9hdCk7CisK
ICAgICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VMb2FkVGVzdENsaWVudD4gbV9wYWdlTG9hZFRlc3RDbGll
bnQ7CkBAIC0xMTIsOCArMTE5LDEwIEBAIHByaXZhdGU6CiAgICAgSVdlYkNvcmVTdGF0aXN0aWNz
UHRyIG1fc3RhdGlzdGljczsKICAgICBJV2ViQ2FjaGVQdHIgbV93ZWJDYWNoZTsKIAotICAgIEhX
TkQgbV9oTWFpblduZDsKLSAgICBIV05EIG1faFVSTEJhclduZDsKKyAgICBIV05EIG1faE1haW5X
bmQgeyBudWxscHRyIH07CisgICAgSFdORCBtX2hVUkxCYXJXbmQgeyBudWxscHRyIH07CisgICAg
SEdESU9CSiBtX2hVUkxCYXJGb250IHsgbnVsbHB0ciB9OwogCisgICAgZmxvYXQgbV9kZXZpY2VT
Y2FsZUZhY3RvciB7IDEuMGYgfTsKICAgICBib29sIG1fdXNlTGF5ZXJlZFdlYlZpZXc7CiB9OwpJ
bmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgJKHJldmlzaW9uIDE4NzE0
NCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIHVwZGF0ZUFkZHJl
c3NCYXIoSVdlYlZpZXcmKTsKIAogcHJpdmF0ZToKLSAgICBIV05EIG1faFVSTEJhclduZDsKLSAg
ICBVTE9ORyBtX3JlZkNvdW50OwotICAgIFdpbkxhdW5jaGVyKiBtX2NsaWVudDsKKyAgICBIV05E
IG1faFVSTEJhclduZCB7IDAgfTsKKyAgICBIR0RJT0JKIG1fVVJMQmFyRm9udCB7IDAgfTsKKyAg
ICBIR0RJT0JKIG1fb2xkRm9udCB7IDAgfTsKKyAgICBVTE9ORyBtX3JlZkNvdW50IHsgMCB9Owor
ICAgIFdpbkxhdW5jaGVyKiBtX2NsaWVudCB7IG51bGxwdHIgfTsKIH07CkluZGV4OiBUb29scy9X
aW5MYXVuY2hlci9XaW5NYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9X
aW5NYWluLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTWFp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2luTGF1
bmNoZXJXZWJIb3N0LmgiCiAjaW5jbHVkZSAiQ29tbW9uLmNwcCIKIAorbmFtZXNwYWNlIFdlYkNv
cmUgeworZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Cit9CisKIGludCBX
SU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UsIFBXU1RSLCBpbnQgbkNtZFNob3cp
CiB7CiAjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKQEAgLTY1LDEwICs2OSwxMiBAQCBpbnQgV0lO
QVBJIHdXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFCiAgICAgLy8gSW5pdCBDT00KICAgICBP
bGVJbml0aWFsaXplKG51bGxwdHIpOwogCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBXZWJDb3Jl
OjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhudWxscHRyKTsKKwogICAgIGlmICh1c2VzTGF5
ZXJlZFdlYlZpZXcpIHsKICAgICAgICAgaFVSTEJhclduZCA9IENyZWF0ZVdpbmRvdyhMIkVESVQi
LCBMIlR5cGUgVVJMIEhlcmUiLAogICAgICAgICAgICAgV1NfT1ZFUkxBUFBFRFdJTkRPVyB8IFdT
X1ZJU0lCTEUgfCBXU19CT1JERVIgfCBFU19MRUZUIHwgRVNfQVVUT1ZTQ1JPTEwsIAotICAgICAg
ICAgICAgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1Np
emUuY3ksIHNfd2luZG93U2l6ZS5jeCwgVVJMQkFSX0hFSUdIVCwKKyAgICAgICAgICAgIHNjYWxl
RmFjdG9yICogc193aW5kb3dQb3NpdGlvbi54LCBzY2FsZUZhY3RvciAqIChzX3dpbmRvd1Bvc2l0
aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kpLCBzY2FsZUZhY3RvciAqIHNfd2luZG93U2l6ZS5jeCwg
c2NhbGVGYWN0b3IgKiBVUkxCQVJfSEVJR0hULAogICAgICAgICAgICAgMCwgMCwgaEluc3QsIDAp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGhNYWluV25kID0gQ3JlYXRlV2luZG93KHN6V2luZG93
Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1csCkBAIC03OCw4ICs4NCw4IEBAIGlu
dCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UKICAgICAgICAgICAgIHJldHVy
biBGQUxTRTsKIAogICAgICAgICBoQmFja0J1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRP
TiIsIEwiPCIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19URVhULCAwLCAwLCAwLCAwLCBo
TWFpblduZCwgMCwgaEluc3QsIDApOwotICAgICAgICBoRm9yd2FyZEJ1dHRvblduZCA9IENyZWF0
ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19URVhU
LCBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwot
ICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwg
V1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgQ09OVFJP
TEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAg
ICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1Nf
Q0hJTEQgfCBXU19WSVNJQkxFIHwgQlNfVEVYVCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9O
X1dJRFRILCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOworICAgICAgICBoVVJMQmFy
V25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdT
X0JPUkRFUiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9M
QlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKIAogICAg
ICAgICBTaG93V2luZG93KGhNYWluV25kLCBuQ21kU2hvdyk7CiAgICAgICAgIFVwZGF0ZVdpbmRv
dyhoTWFpblduZCk7CkBAIC05Myw3ICs5OSwxMSBAQCBpbnQgV0lOQVBJIHdXaW5NYWluKEhJTlNU
QU5DRSwgSElOU1RBTkNFCiAKICAgICBTZXRGb2N1cyhoVVJMQmFyV25kKTsKIAotICAgIFJFQ1Qg
Y2xpZW50UmVjdCA9IHsgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNf
d2luZG93UG9zaXRpb24ueCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsg
c193aW5kb3dTaXplLmN5IH07CisgICAgUkVDVCBjbGllbnRSZWN0OworICAgIDo6R2V0Q2xpZW50
UmVjdChoTWFpblduZCwgJmNsaWVudFJlY3QpOworCisgICAgaWYgKHVzZXNMYXllcmVkV2ViVmll
dykKKyAgICAgICAgY2xpZW50UmVjdCA9IHsgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bv
c2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24ueCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQ
b3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5IH07CiAKICAgICBXaW5MYXVuY2hlcldlYkhvc3Qq
IHdlYkhvc3QgPSBudWxscHRyOwogCkluZGV4OiBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1
bmNoZXJNYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy93aW4vRExMTGF1bmNoZXIvRExMTGF1
bmNoZXJNYWluLmNwcAkocmV2aXNpb24gMTg3MTQ0KQorKysgVG9vbHMvd2luL0RMTExhdW5jaGVy
L0RMTExhdW5jaGVyTWFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOSBAQCBp
bnQgV0lOQVBJIHdXaW5NYWluKEhJTlNUQU5DRSBoSW5zdGFuY2UsCiAgICAgX3NldF9GTUEzX2Vu
YWJsZSgwKTsKICNlbmRpZgogCisgICAgQk9PTCBkaWRJdCA9IFNldFByb2Nlc3NEUElBd2FyZSgp
OworICAgIF9BU1NFUlQoZGlkSXQpOworCiAjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKICAgICBf
Q3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwogICAgIF9D
cnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOwo=
</data>
<flag name="review"
          id="282496"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>