<?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>120778</bug_id>
          
          <creation_ts>2013-09-05 10:05:16 -0700</creation_ts>
          <short_desc>[Windows] Create GDIObject Class Template</short_desc>
          <delta_ts>2013-09-10 10:36:32 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>120773</blocked>
    
    <blocked>121037</blocked>
    
    <blocked>121100</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>925088</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-05 10:05:16 -0700</bug_when>
    <thetext>Create a GDIObject class template that responsibility for creation and destruction of GDI resources in a safe manner.  This is currently handled by various specializations of the generic OwnPtr template class, but shoe-horning GDI objects into this design has made OwnPtr more complicated than it needs to be. It also prevents us from merging OwnPtr and OwnArrayPtr.

This work will be done in a couple of steps:
1. Create the GDIObject class template, and replace any bare GDI object (e.g., HFONT, HBRUSH, etc.) use with this helper wrapper, and replace OwnPtr&lt;#GDI Thing#&gt; with this new class.
2. Create the SharedGDIObject class template (which is just a RefCounted object with a GDIObject member), and replace the RefCountedGDIHandle object with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925089</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-09-05 10:06:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/14919459&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926828</commentid>
    <comment_count>2</comment_count>
      <attachid>211062</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 12:11:20 -0700</bug_when>
    <thetext>Created attachment 211062
Initial WIP Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926830</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 12:13:20 -0700</bug_when>
    <thetext>Attachment 211062 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp&apos;, u&apos;Source/WebCore/platform/win/GDIObject.h&apos;, u&apos;Source/WebCore/platform/win/ScrollbarThemeWin.cpp&apos;, u&apos;Source/WebCore/rendering/RenderThemeWin.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/win/GDIObject.h:79:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WebCore/platform/win/GDIObject.h:82:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Total errors found: 2 in 7 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>926836</commentid>
    <comment_count>4</comment_count>
      <attachid>211062</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-09 12:18:17 -0700</bug_when>
    <thetext>Comment on attachment 211062
Initial WIP Patch.

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

&gt; Source/WebCore/platform/win/GDIObject.h:48
&gt; +#if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)

This is always true now.

&gt; Source/WebCore/platform/win/GDIObject.h:55
&gt; +    typedef T ValueType;
&gt; +    typedef ValueType* PtrType;

No need to do this anymore. The pointer type will always be T.

&gt; Source/WebCore/platform/win/GDIObject.h:58
&gt; +    GDIObject(const T&amp; obj) : m_obj(obj) { }

I think we need an explicit adopt function for adopting a pointer.

&gt; Source/WebCore/platform/win/GDIObject.h:64
&gt; +    operator HGDIOBJ () { return static_cast&lt;HGDIOBJ&gt;(m_obj); }
&gt; +    operator ValueType () { return m_obj; }

Non-explicit conversion operators are pretty dangerous. I think you should get rid of them.

&gt; Source/WebCore/platform/win/GDIObject.h:67
&gt; +    ValueType release() WARN_UNUSED_RETURN;

Let’s call this leak() instead.

&gt; Source/WebCore/platform/win/GDIObject.h:99
&gt; +    T m_obj;

m_obj can just be m_object.

&gt; Source/WebCore/platform/win/GDIObject.h:166
&gt; +template&lt;typename T, typename U&gt; inline bool operator==(const GDIObject&lt;T&gt;&amp; a, U* b)
&gt; +{
&gt; +    return a.get() == b; 
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U&gt; inline bool operator==(T* a, const GDIObject&lt;U&gt;&amp; b) 
&gt; +{
&gt; +    return a == b.get(); 
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U&gt; inline bool operator!=(const GDIObject&lt;T&gt;&amp; a, U* b)
&gt; +{
&gt; +    return a.get() != b; 
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U&gt; inline bool operator!=(T* a, const GDIObject&lt;U&gt;&amp; b)
&gt; +{
&gt; +    return a != b.get(); 
&gt; +}

Not sure we need all these operators - checking for GDI object equality seems uncommon.

&gt; Source/WebCore/platform/win/GDIObject.h:188
&gt; +using WebCore::GDIObject;

I don’t think we want this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926869</commentid>
    <comment_count>5</comment_count>
      <attachid>211062</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 13:24:33 -0700</bug_when>
    <thetext>Comment on attachment 211062
Initial WIP Patch.

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

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:48
&gt;&gt; +#if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)
&gt; 
&gt; This is always true now.

OK!

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:58
&gt;&gt; +    GDIObject(const T&amp; obj) : m_obj(obj) { }
&gt; 
&gt; I think we need an explicit adopt function for adopting a pointer.

You mean as a class member? Or do you want the whole PassRefPtr infrastructure?

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:64
&gt;&gt; +    operator ValueType () { return m_obj; }
&gt; 
&gt; Non-explicit conversion operators are pretty dangerous. I think you should get rid of them.

Removed!

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:67
&gt;&gt; +    ValueType release() WARN_UNUSED_RETURN;
&gt; 
&gt; Let’s call this leak() instead.

Done.

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:99
&gt;&gt; +    T m_obj;
&gt; 
&gt; m_obj can just be m_object.

Done.

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:166
&gt;&gt; +}
&gt; 
&gt; Not sure we need all these operators - checking for GDI object equality seems uncommon.

Removed!

&gt;&gt; Source/WebCore/platform/win/GDIObject.h:188
&gt;&gt; +using WebCore::GDIObject;
&gt; 
&gt; I don’t think we want this.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927016</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 17:27:19 -0700</bug_when>
    <thetext>I discovered that the OwnPtr stuff was actually being used outside of WebCore (in test and other classes), so I moved the implementation to WTF.

I was not able to remove HBITMAP and HDC from OwnPtr (yet) because they are still being used as part of the RefCountedGDIObject class.  This will be addressed in Bug 121037.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927027</commentid>
    <comment_count>7</comment_count>
      <attachid>211126</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 17:48:23 -0700</bug_when>
    <thetext>Created attachment 211126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927028</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 17:50:09 -0700</bug_when>
    <thetext>Attachment 211126 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj.filters&apos;, u&apos;Source/WTF/WTF.vcxproj/copy-files.cmd&apos;, u&apos;Source/WTF/wtf/OwnPtrCommon.h&apos;, u&apos;Source/WTF/wtf/win/GDIObject.h&apos;, u&apos;Source/WTF/wtf/win/OwnPtrWin.cpp&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/page/win/FrameCGWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameCairoWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameWin.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCacheWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp&apos;, u&apos;Source/WebCore/platform/win/CursorWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageCGWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageCairoWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebCore/platform/win/ScrollbarThemeWin.cpp&apos;, u&apos;Source/WebCore/plugins/win/PluginViewWin.cpp&apos;, u&apos;Source/WebCore/rendering/RenderThemeWin.cpp&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/FullscreenVideoController.cpp&apos;, u&apos;Source/WebKit/win/FullscreenVideoController.h&apos;, u&apos;Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp&apos;, u&apos;Source/WebKit/win/WebNodeHighlight.cpp&apos;, u&apos;Source/WebKit/win/WebView.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:117:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/DragImageWin.cpp:185:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/WebNodeHighlight.cpp:145:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/FullscreenVideoController.cpp:491:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/PasteboardWin.cpp:747:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/PasteboardWin.cpp:748:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/CursorWin.cpp:57:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/CursorWin.cpp:82:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/CursorWin.cpp:83:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/WebView.cpp:898:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/WebView.cpp:997:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/WebView.cpp:1041:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebKit/win/WebView.cpp:1115:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/DragImageCGWin.cpp:97:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/DragImageCGWin.cpp:128:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WTF/wtf/win/GDIObject.h:67:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WTF/wtf/win/GDIObject.h:70:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WebCore/plugins/win/PluginViewWin.cpp:1071:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/DragImageCairoWin.cpp:119:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/platform/win/DragImageCairoWin.cpp:158:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Source/WebCore/page/win/FrameCGWin.cpp:61:  Use adoptPtr and OwnPtr&lt;HDC&gt; when calling CreateCompatibleDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 21 in 34 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>927031</commentid>
    <comment_count>9</comment_count>
      <attachid>211126</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-09 18:00:32 -0700</bug_when>
    <thetext>Comment on attachment 211126
Patch

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

&gt; Source/WTF/wtf/win/GDIObject.h:41
&gt; +typedef struct HBITMAP__* HBITMAP;
&gt; +typedef struct HBRUSH__* HBRUSH;
&gt; +typedef struct HDC__* HDC;
&gt; +typedef struct HFONT__* HFONT;
&gt; +typedef struct HPALETTE__* HPALETTE;
&gt; +typedef struct HPEN__* HPEN;
&gt; +typedef struct HRGN__* HRGN;

Do you really need to forward declare these? Since ::DeleteObject is used below maybe windows.h is already brought in somehow?

&gt; Source/WTF/wtf/win/GDIObject.h:77
&gt; +

I think you can remove this newline too.

&gt; Source/WTF/wtf/win/GDIObject.h:78
&gt; +    GDIObject(const T&amp; obj) : m_object(obj) { }

No need for this to be const T&amp; - it can just be T. Also, obj -&gt; object.

&gt; Source/WTF/wtf/win/GDIObject.h:98
&gt; +template&lt;typename T&gt; inline GDIObject&lt;T&gt;::GDIObject(GDIObject&lt;T&gt;&amp;&amp; o)
&gt; +    : m_object(o.leak())

I think you should name the variable “other” instead of o.

&gt; Source/WTF/wtf/win/GDIObject.h:106
&gt; +    T obj = m_object;
&gt; +    m_object = o.leak();
&gt; +    ASSERT(!obj || m_object != obj);

A better idiom for writing operator= is:

auto obj = std::move(other);
swap(obj);
return *this;

&gt; Source/WTF/wtf/win/GDIObject.h:120
&gt; +template&lt;typename T&gt; inline GDIObject&lt;T&gt;&amp; GDIObject&lt;T&gt;::operator=(T obj)
&gt; +{
&gt; +    T object = m_object;
&gt; +    m_object = obj;
&gt; +    ASSERT(!object || m_object != object);
&gt; +    deleteObject(object);
&gt; +
&gt; +    return *this;
&gt; +}

Is this member really needed?

&gt; Source/WTF/wtf/win/GDIObject.h:127
&gt; +
&gt; +

Extra newline!

&gt; Source/WTF/wtf/win/GDIObject.h:148
&gt; +#endif // GDIObject_h

You should add using WTF::GDIObject; outside of the WTF namespace, that way you don’t need the WTF prefix.

&gt; Source/WebCore/page/win/FrameWin.h:38
&gt; +WTF::GDIObject&lt;HBITMAP&gt; imageFromRect(const Frame*, IntRect&amp;);
&gt; +WTF::GDIObject&lt;HBITMAP&gt; imageFromSelection(Frame*, bool forceWhiteText);

No need for WTF.

&gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp:60
&gt; +using WTF::adoptGDIObject;

This should also go into the GDIObject.h!

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:104
&gt; +    GDIObject&lt;HBITMAP&gt; bitmap = adoptGDIObject(static_cast&lt;HBITMAP&gt;(::GetCurrentObject(hdc, OBJ_BITMAP)));

auto!

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:140
&gt; +    GDIObject&lt;HBITMAP&gt; bitmap = adoptGDIObject(static_cast&lt;HBITMAP&gt;(::GetCurrentObject(hdc, OBJ_BITMAP)));

auto!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927090</commentid>
    <comment_count>10</comment_count>
      <attachid>211126</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 20:48:27 -0700</bug_when>
    <thetext>Comment on attachment 211126
Patch

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

Thanks for looking this thing over. I&apos;m rebuilding now with corrections.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:77
&gt;&gt; +
&gt; 
&gt; I think you can remove this newline too.

Done.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:78
&gt;&gt; +    GDIObject(const T&amp; obj) : m_object(obj) { }
&gt; 
&gt; No need for this to be const T&amp; - it can just be T. Also, obj -&gt; object.

Done.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:98
&gt;&gt; +    : m_object(o.leak())
&gt; 
&gt; I think you should name the variable “other” instead of o.

Done.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:106
&gt;&gt; +    ASSERT(!obj || m_object != obj);
&gt; 
&gt; A better idiom for writing operator= is:
&gt; 
&gt; auto obj = std::move(other);
&gt; swap(obj);
&gt; return *this;

Done.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:120
&gt;&gt; +}
&gt; 
&gt; Is this member really needed?

Checking -- I&apos;ll comment it out and rebuild.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:127
&gt;&gt; +
&gt; 
&gt; Extra newline!

OK!

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:148
&gt;&gt; +#endif // GDIObject_h
&gt; 
&gt; You should add using WTF::GDIObject; outside of the WTF namespace, that way you don’t need the WTF prefix.

Done.

&gt;&gt; Source/WebCore/page/win/FrameWin.h:38
&gt;&gt; +WTF::GDIObject&lt;HBITMAP&gt; imageFromSelection(Frame*, bool forceWhiteText);
&gt; 
&gt; No need for WTF.

OK!

&gt;&gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp:60
&gt;&gt; +using WTF::adoptGDIObject;
&gt; 
&gt; This should also go into the GDIObject.h!

OK!

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:104
&gt;&gt; +    GDIObject&lt;HBITMAP&gt; bitmap = adoptGDIObject(static_cast&lt;HBITMAP&gt;(::GetCurrentObject(hdc, OBJ_BITMAP)));
&gt; 
&gt; auto!

OK!

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp:140
&gt;&gt; +    GDIObject&lt;HBITMAP&gt; bitmap = adoptGDIObject(static_cast&lt;HBITMAP&gt;(::GetCurrentObject(hdc, OBJ_BITMAP)));
&gt; 
&gt; auto!

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927094</commentid>
    <comment_count>11</comment_count>
      <attachid>211150</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 21:13:13 -0700</bug_when>
    <thetext>Created attachment 211150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927095</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-09 21:14:00 -0700</bug_when>
    <thetext>Hopefully this patch will be the final one!  I think I took care of everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927096</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 21:14:22 -0700</bug_when>
    <thetext>Attachment 211150 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj.filters&apos;, u&apos;Source/WTF/WTF.vcxproj/copy-files.cmd&apos;, u&apos;Source/WTF/wtf/OwnPtrCommon.h&apos;, u&apos;Source/WTF/wtf/win/GDIObject.h&apos;, u&apos;Source/WTF/wtf/win/OwnPtrWin.cpp&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/page/win/FrameCGWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameCairoWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameWin.cpp&apos;, u&apos;Source/WebCore/page/win/FrameWin.h&apos;, u&apos;Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCacheWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextCairoWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp&apos;, u&apos;Source/WebCore/platform/win/CursorWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageCGWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageCairoWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebCore/platform/win/ScrollbarThemeWin.cpp&apos;, u&apos;Source/WebCore/plugins/win/PluginViewWin.cpp&apos;, u&apos;Source/WebCore/rendering/RenderThemeWin.cpp&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/FullscreenVideoController.cpp&apos;, u&apos;Source/WebKit/win/FullscreenVideoController.h&apos;, u&apos;Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp&apos;, u&apos;Source/WebKit/win/WebNodeHighlight.cpp&apos;, u&apos;Source/WebKit/win/WebView.cpp&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/win/PixelDumpSupportWin.cpp&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py&apos;]&quot; exit_code: 1
Source/WTF/wtf/win/GDIObject.h:69:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Source/WTF/wtf/win/GDIObject.h:72:  Missing spaces around &amp;&amp;  [whitespace/operators] [3]
Total errors found: 2 in 38 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>927334</commentid>
    <comment_count>14</comment_count>
      <attachid>211150</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-10 09:37:28 -0700</bug_when>
    <thetext>Comment on attachment 211150
Patch

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

&gt; Source/WTF/wtf/win/GDIObject.h:66
&gt; +    GDIObject&lt;T&gt;&amp; operator=(T);

I don&apos;t think this should be exposed since it takes ownership of the passed in object.

&gt; Source/WTF/wtf/win/GDIObject.h:118
&gt; +/*template&lt;typename T&gt; inline GDIObject&lt;T&gt;&amp; GDIObject&lt;T&gt;::operator=(T other)
&gt; +{
&gt; +    auto object = m_object;
&gt; +    m_object = other;
&gt; +    ASSERT(!object || m_object != object);
&gt; +    deleteObject(object);
&gt; +
&gt; +    return *this;
&gt; +}*/

Commented out, I guess it&apos;s not needed after all!

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:477
&gt;     if (desiredItalic &amp;&amp; !matchData.m_chosen.lfItalic &amp;&amp; synthesizeItalic)
&gt;         matchData.m_chosen.lfItalic = 1;

Not part of this patch, but I think createGDIFont should return a GDIObject&lt;HFONT&gt; - as should any other create functions we have that return GDI objects.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:587
&gt; +    hfont.leak(); // result now owns the HFONT.

Can&apos;t you call hfont.leak() when creating the FontPlatformData? Even better, change FontPlatformData to take an OwnPtr&lt;HFONT&gt; and use std::move.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:2
&gt; + * Copyright (C) 2003-2008, 2010, 2013 Apple Inc. All rights reserved.

I think we have to explicitly list all the copyright years, so don&apos;t change this to use a range.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:2
&gt; + * Copyright (C) 2003-2008, 2013 Apple Inc. All rights reserved.

I think we have to explicitly list all the copyright years, so don&apos;t change this to use a range.

&gt; Source/WebCore/platform/win/DragImageCairoWin.cpp:123
&gt; +    hbmp = allocImage(dstDC.get(), dstSize, &amp;targetContext);

Should make allocImage return a GDIObject!

&gt; Source/WebCore/platform/win/DragImageWin.cpp:192
&gt; +    SelectObject(workingDC.get(), image);

::SelectObject?

&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:470
&gt; +            HRGN rgn = ::CreateRectRgn(0, 0, 0, 0);

I&apos;d rather see GDIObject&lt;HRGN&gt; here and then a call to .leak() in SetWindowRgn.

&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:473
&gt; +            HRGN rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());

Ditto.

&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:481
&gt; +            HRGN rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927363</commentid>
    <comment_count>15</comment_count>
      <attachid>211150</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-10 10:09:55 -0700</bug_when>
    <thetext>Comment on attachment 211150
Patch

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

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:66
&gt;&gt; +    GDIObject&lt;T&gt;&amp; operator=(T);
&gt; 
&gt; I don&apos;t think this should be exposed since it takes ownership of the passed in object.

I&apos;ll move this to private.

&gt;&gt; Source/WTF/wtf/win/GDIObject.h:118
&gt;&gt; +}*/
&gt; 
&gt; Commented out, I guess it&apos;s not needed after all!

Right -- I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:477
&gt;&gt;         matchData.m_chosen.lfItalic = 1;
&gt; 
&gt; Not part of this patch, but I think createGDIFont should return a GDIObject&lt;HFONT&gt; - as should any other create functions we have that return GDI objects.

I filed https://bugs.webkit.org/show_bug.cgi?id=121100 to do this.

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp:2
&gt;&gt; + * Copyright (C) 2003-2008, 2010, 2013 Apple Inc. All rights reserved.
&gt; 
&gt; I think we have to explicitly list all the copyright years, so don&apos;t change this to use a range.

OK!

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextWin.cpp:2
&gt;&gt; + * Copyright (C) 2003-2008, 2013 Apple Inc. All rights reserved.
&gt; 
&gt; I think we have to explicitly list all the copyright years, so don&apos;t change this to use a range.

OK! I&apos;ve searched for this in all files, and reverted where I did this change.

&gt;&gt; Source/WebCore/platform/win/DragImageWin.cpp:192
&gt;&gt; +    SelectObject(workingDC.get(), image);
&gt; 
&gt; ::SelectObject?

Yes!

&gt;&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:470
&gt;&gt; +            HRGN rgn = ::CreateRectRgn(0, 0, 0, 0);
&gt; 
&gt; I&apos;d rather see GDIObject&lt;HRGN&gt; here and then a call to .leak() in SetWindowRgn.

Done. I made the same change in EmbeddedWidget.cpp, which has the same code pattern.

&gt;&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:473
&gt;&gt; +            HRGN rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/plugins/win/PluginViewWin.cpp:481
&gt;&gt; +            HRGN rgn = ::CreateRectRgn(m_clipRect.x(), m_clipRect.y(), m_clipRect.maxX(), m_clipRect.maxY());
&gt; 
&gt; Ditto.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927364</commentid>
    <comment_count>16</comment_count>
      <attachid>211150</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-10 10:12:13 -0700</bug_when>
    <thetext>Comment on attachment 211150
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:587
&gt;&gt; +    hfont.leak(); // result now owns the HFONT.
&gt; 
&gt; Can&apos;t you call hfont.leak() when creating the FontPlatformData? Even better, change FontPlatformData to take an OwnPtr&lt;HFONT&gt; and use std::move.

I&apos;d like to make this change in Bug 121100, as this patch is already over 60KB.  I can&apos;t leak() when creating the FontPlatformData, because in the case of a failure we want GDIObject to dealloc the HFONT, so leak() would be inappropriate in that case.  I like your move idea better, but that will involve more changes to other calls, hence the second bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927377</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-10 10:36:32 -0700</bug_when>
    <thetext>Committed r155454: &lt;http://trac.webkit.org/changeset/155454&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211062</attachid>
            <date>2013-09-09 12:11:20 -0700</date>
            <delta_ts>2013-09-09 17:48:20 -0700</delta_ts>
            <desc>Initial WIP Patch.</desc>
            <filename>bug-120778-20130909121119.patch</filename>
            <type>text/plain</type>
            <size>15268</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA5LTA5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBDaGFuZ2Ug
ZnJvbSB1c2luZyBPd25QdHI8R0RJIFN0dWZmPiB0byBuZXcgR0RJT2JqZWN0IHRlbXBsYXRlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNzc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIGNv
ZGUgdG8gdXNlIGEgR0RJLXNwZWNpZmljIHNtYXJ0IHBvaW50ZXIsIHJhdGhlciB0aGFuIE93blB0
ci4gVGhpcworICAgICAgICBpcyBhIGZpcnN0IHN0ZXAgdG8gc2ltcGxpZnlpbmcgT3duUHRyLiBJ
dCBhbHNvIGdldHMgcmlkIG9mIHNvbWUgV2luZG93cy0KKyAgICAgICAgc3BlY2lmaWMgY29kZSBp
biBXVEYuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOiBBZGQg
dGhlIG5ldyBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREaXJ0eVJlY3Rz
KTogU3dpdGNoIGZyb20gT3duUHRyIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vR0RJT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R0RJT2JqZWN0OjpHRElP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0RJT2JqZWN0Ojp+R0RJT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdESU9iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdESU9iamVj
dDo6b3BlcmF0b3IgSEdESU9CSiApOgorICAgICAgICAoV2ViQ29yZTo6R0RJT2JqZWN0OjpvcGVy
YXRvciBWYWx1ZVR5cGUgKToKKyAgICAgICAgKFdlYkNvcmU6OkdESU9iamVjdDo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKFdlYkNvcmU6OkdESU9iamVjdDo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29s
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpHRElPYmplY3Q6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpHRElPYmplY3Q6OnN3YXApOgorICAgICAgICAoV2ViQ29yZTo6R0RJT2JqZWN0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkdESU9iamVjdDo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXZWJDb3JlOjo6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6cmVsZWFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjo6OkdESU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjo9
KToKKyAgICAgICAgKFdlYkNvcmU6OnN3YXApOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dFB0cik6CisgICAgICAgIChXZWJDb3JlOjpUKToKKyAgICAgICAgKFdlYkNvcmU6OkhEQyk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lV2luOjpwYWludFRyYWNrUGllY2UpOiBTd2l0Y2ggdG8gR0RJ
T2JqZWN0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkcmF3Q29udHJvbCk6IFN3aXRjaCB0byBHRElPYmplY3QuCisKIDIwMTMtMDkt
MDkgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAKICAgICAgICAgTW92ZSBs
b2dpY2FsKExlZnR8UmlnaHQpRmxvYXRPZmZzZXRGb3JMaW5lIG1ldGhvZHMgaW50byBGbG9hdGlu
Z09iamVjdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTkzNDcsNiArMTkzNDcs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXENPTVB0ci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXERlZlduZFByb2NXaW5k
b3dDbGFzcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cd2luXERl
bGF5TG9hZGVkTW9kdWxlc0VudW1lcmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXHdpblxHRElPYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXHdpblxHRElPYmplY3RDb3VudGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVx3aW5cSFduZERDLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVx3aW5cSW1wb3J0ZWRGdW5jdGlvbnNFbnVtZXJhdG9yLmgiIC8+CkBA
IC0yMTQ0OCw0ICsyMTQ0OSw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFy
Z2V0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9t
aXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0Pgor
PC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzE3Nyw5ICszMTc3LDYgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDb21tZW50LmNwcCI+CiAgICAgICA8Rmls
dGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZG9tXENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAiPgotICAgICAgPEZpbHRlcj5k
b208L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRvbVxDb21wb3NpdGlvbkV2ZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgpAQCAtMTAyNDMsOSArMTAyNDAsNiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZG9tXENvbW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENvbXBvc2Vk
U2hhZG93VHJlZVdhbGtlci5oIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ29tcG9zaXRpb25FdmVu
dC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0x
NDkwMyw2ICsxNDg5Nyw5IEBACiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSFRNTEVsZW1lbnRUeXBlSGVscGVycy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQo
UGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFNWR0Vs
ZW1lbnRUeXBlSGVscGVycy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cd2luXEdESU9iamVjdC5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+
CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxO
b25lIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmFtbWFyLnkuaW4iPgpAQCAtMTU4NzUsNCArMTU4NzIs
NCBAQAogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVx3aW48L0ZpbHRlcj4KICAgICA8L01BU00+CiAg
IDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gMTU1MzU1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRy
ZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
Q0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaCIKICNpbmNsdWRlICJEZWZXbmRQcm9jV2luZG93Q2xh
c3MuaCIKKyNpbmNsdWRlICJHRElPYmplY3QuaCIKICNpbmNsdWRlICJMYXllckNoYW5nZXNGbHVz
aGVyLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXIuaCIKQEAgLTIzOSw4ICsyNDAsOCBAQCBzdGF0aWMgdm9pZCBnZXREaXJ0
eVJlY3RzKEhXTkQgd2luZG93LCBWCiAgICAgaWYgKCFHZXRDbGllbnRSZWN0KHdpbmRvdywgJmNs
aWVudFJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8SFJHTj4gcmVnaW9uID0g
YWRvcHRQdHIoQ3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7Ci0gICAgaW50IHJlZ2lvblR5cGUg
PSBHZXRVcGRhdGVSZ24od2luZG93LCByZWdpb24uZ2V0KCksIGZhbHNlKTsKKyAgICBHRElPYmpl
Y3Q8SFJHTj4gcmVnaW9uKDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7CisgICAgaW50IHJl
Z2lvblR5cGUgPSBHZXRVcGRhdGVSZ24od2luZG93LCByZWdpb24sIGZhbHNlKTsKICAgICBpZiAo
cmVnaW9uVHlwZSAhPSBDT01QTEVYUkVHSU9OKSB7CiAgICAgICAgIFJFQ1QgZGlydHlSZWN0Owog
ICAgICAgICBpZiAoR2V0VXBkYXRlUmVjdCh3aW5kb3csICZkaXJ0eVJlY3QsIGZhbHNlKSkKQEAg
LTI0OCwxMCArMjQ5LDEwIEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3cs
IFYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERXT1JEIGRhdGFTaXplID0gR2V0UmVn
aW9uRGF0YShyZWdpb24uZ2V0KCksIDAsIDApOworICAgIERXT1JEIGRhdGFTaXplID0gOjpHZXRS
ZWdpb25EYXRhKHJlZ2lvbiwgMCwgMCk7CiAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4g
cmVnaW9uRGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbZGF0YVNp
emVdKTsKICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxSR05EQVRB
Kj4ocmVnaW9uRGF0YUJ1ZmZlci5nZXQoKSk7Ci0gICAgaWYgKCFHZXRSZWdpb25EYXRhKHJlZ2lv
bi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQorICAgIGlmICghOjpHZXRSZWdpb25EYXRh
KHJlZ2lvbiwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47CiAKICAgICBv
dXRSZWN0cy5yZXNpemUocmVnaW9uRGF0YS0+cmRoLm5Db3VudCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vR0RJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0dESU9iamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0dESU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgR0RJT2JqZWN0X2gKKyNkZWZpbmUgR0RJT2JqZWN0X2gKKworI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvTnVsbFB0ci5oPgorCit0eXBl
ZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7Cit0eXBlZGVmIHN0cnVjdCBIQlJVU0hfXyog
SEJSVVNIOwordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKK3R5cGVkZWYgc3RydWN0IEhGT05U
X18qIEhGT05UOwordHlwZWRlZiBzdHJ1Y3QgSFBBTEVUVEVfXyogSFBBTEVUVEU7Cit0eXBlZGVm
IHN0cnVjdCBIUEVOX18qIEhQRU47Cit0eXBlZGVmIHN0cnVjdCBIUkdOX18qIEhSR047CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBkZWxldGVPYmpl
Y3QoVCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEdESU9iamVjdCB7CisjaWYgQ09N
UElMRVJfU1VQUE9SVFMoQ1hYX1JWQUxVRV9SRUZFUkVOQ0VTKQorICAgIC8vIElmIHJ2YWx1ZSBy
ZWZlcmVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGUgY29weSBjb25zdHJ1Y3RvciBpcworICAg
IC8vIHB1YmxpYyBzbyBHRElPYmplY3QgY2Fubm90IGJlIG1hcmtlZCBub25jb3B5YWJsZS4gU2Vl
IG5vdGUgYmVsb3cuCisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0RJT2JqZWN0KTsKKyNlbmRp
ZgorcHVibGljOgorICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBWYWx1ZVR5
cGUqIFB0clR5cGU7CisKKyAgICBHRElPYmplY3QoKSA6IG1fb2JqKDApIHsgfQorICAgIEdESU9i
amVjdChjb25zdCBUJiBvYmopIDogbV9vYmoob2JqKSB7IH0KKworICAgIH5HRElPYmplY3QoKSB7
IGRlbGV0ZU9iamVjdDxUPihtX29iaik7IH0KKworICAgIFB0clR5cGUgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gJm1fb2JqOyB9CisgICAgb3BlcmF0b3IgSEdESU9CSiAoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxIR0RJT0JKPihtX29iaik7IH0KKyAgICBvcGVyYXRvciBWYWx1ZVR5cGUgKCkgeyByZXR1
cm4gbV9vYmo7IH0KKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICBWYWx1ZVR5cGUgcmVsZWFzZSgp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fb2JqOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGlt
cGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMu
CisgICAgdHlwZWRlZiBQdHJUeXBlIEdESU9iamVjdDo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7Cisg
ICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqID8g
JkdESU9iamVjdDo6bV9vYmogOiAwOyB9CisKKyAgICBHRElPYmplY3Q8VD4mIG9wZXJhdG9yPShU
KTsKKyAgICBHRElPYmplY3Q8VD4mIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkgeyBjbGVhcigp
OyByZXR1cm4gKnRoaXM7IH0KKworI2lmIENPTVBJTEVSX1NVUFBPUlRTKENYWF9SVkFMVUVfUkVG
RVJFTkNFUykKKyAgICBHRElPYmplY3QoR0RJT2JqZWN0JiYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IEdESU9iamVjdChHRElPYmplY3Q8VT4mJik7CisKKyAgICBHRElPYmplY3QmIG9wZXJh
dG9yPShHRElPYmplY3QmJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gR0RJT2JqZWN0JiBv
cGVyYXRvcj0oR0RJT2JqZWN0PFU+JiYpOworI2VuZGlmCisKKyAgICB2b2lkIHN3YXAoR0RJT2Jq
ZWN0JiBvKSB7IHN0ZDo6c3dhcChtX29iaiwgby5tX29iaik7IH0KKworcHJpdmF0ZToKKyNpZiAh
Q09NUElMRVJfU1VQUE9SVFMoQ1hYX1JWQUxVRV9SRUZFUkVOQ0VTKQorICAgIC8vIElmIHJ2YWx1
ZSByZWZlcmVuY2VzIGFyZSBzdXBwb3J0ZWQsIG5vbmNvcHlhYmxlIHRha2VzIGNhcmUgb2YgdGhp
cy4KKyAgICBHRElPYmplY3QmIG9wZXJhdG9yPShjb25zdCBHRElPYmplY3QmKTsKKyNlbmRpZgor
CisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdHdvIEdESU9iamVjdHMgZm9yIHRoZSBzYW1l
IHVuZGVybHlpbmcgb2JqZWN0IChvdGhlcndpc2Ugd2UnbGwgZ2V0CisgICAgLy8gZG91YmxlLWRl
c3RydWN0aW9uKSwgc28gdGhlc2UgZXF1YWxpdHkgb3BlcmF0b3JzIHNob3VsZCBuZXZlciBiZSBu
ZWVkZWQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdE
SU9iamVjdDxVPiYpIHsgQ09NUElMRV9BU1NFUlQoIXNpemVvZihVKiksIEdESU9iamVjdHNfc2hv
dWxkX25ldmVyX2JlX2VxdWFsKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdESU9iamVjdDxVPiYpIHsgQ09NUElMRV9BU1NF
UlQoIXNpemVvZihVKiksIEdESU9iamVjdHNfc2hvdWxkX25ldmVyX2JlX2VxdWFsKTsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBUIG1fb2JqOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgR0RJT2JqZWN0PFQ+OjpjbGVhcigpCit7CisgICAgVmFsdWVUeXBlIHB0ciA9IG1f
b2JqOworICAgIG1fb2JqID0gMDsKKyAgICBkZWxldGVPYmplY3QocHRyKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgR0RJT2JqZWN0PFQ+OjpyZWxlYXNlKCkKK3sKKyAgICBW
YWx1ZVR5cGUgb2JqID0gbV9vYmo7CisgICAgbV9vYmogPSAwOworICAgIHJldHVybiBvYmo7Cit9
CisKKyNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUlZBTFVFX1JFRkVSRU5DRVMpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgR0RJT2JqZWN0PFQ+OjpHRElPYmplY3QoR0RJT2JqZWN0PFQ+
JiYgbykKKyAgICA6IG1fb2JqKG8ubGVha09iamVjdCgpKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgR0RJT2JqZWN0PFQ+JiBHRElPYmplY3Q8VD46Om9wZXJhdG9yPShHRElP
YmplY3Q8VD4mJiBvKQoreworICAgIFZhbHVlVHlwZSBvYmogPSBtX29iajsKKyAgICBtX29iaiA9
IG8ubGVha09iamVjdCgpOworICAgIEFTU0VSVCghb2JqIHx8IG1fb2JqICE9IG9iaik7CisgICAg
ZGVsZXRlT2JqZWN0KG9iaik7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisjZW5kaWYKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEdESU9iamVjdDxUPiYgR0RJT2JqZWN0PFQ+OjpvcGVy
YXRvcj0oVCBvKQoreworICAgIFZhbHVlVHlwZSBvYmogPSBtX29iajsKKyAgICBtX29iaiA9IG87
CisgICAgQVNTRVJUKCFvYmogfHwgbV9vYmogIT0gb2JqKTsKKyAgICBkZWxldGVPYmplY3Qob2Jq
KTsKKworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQgc3dhcChHRElPYmplY3Q8VD4mIGEsIEdESU9iamVjdDxUPiYgYikKK3sKKyAgICBhLnN3
YXAoYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgR0RJT2JqZWN0PFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiBh
LmdldCgpID09IGI7IAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IEdESU9iamVjdDxVPiYgYikgCit7CisgICAg
cmV0dXJuIGEgPT0gYi5nZXQoKTsgCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR0RJT2JqZWN0PFQ+JiBhLCBVKiBiKQor
eworICAgIHJldHVybiBhLmdldCgpICE9IGI7IAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IEdESU9iamVjdDxV
PiYgYikKK3sKKyAgICByZXR1cm4gYSAhPSBiLmdldCgpOyAKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIEdESU9iamVjdDxUPjo6UHRyVHlwZSBnZXRQdHIoY29uc3Qg
R0RJT2JqZWN0PFQ+JiBwKQoreworICAgIHJldHVybiBwLmdldCgpOworfQorCisvLyBOZWFybHkg
YWxsIEdESSB0eXBlcyB1c2UgdGhlIHNhbWUgRGVsZXRlT2JqZWN0IGNhbGwuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZWxldGVPYmplY3Q8VD4oVCBvYmopCit7CisgICAgaWYg
KG9iaikKKyAgICAgICAgOjpEZWxldGVPYmplY3Qob2JqKTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgdm9pZCBkZWxldGVPYmplY3Q8SERDPihIREMgb2JqKQoreworICAgIGlmIChvYmopCisgICAg
ICAgIDo6RGVsZXRlREMob2JqKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCit1c2lu
ZyBXZWJDb3JlOjpHRElPYmplY3Q7CisKKyNlbmRpZiAvLyBHRElPYmplY3RfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCShy
ZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFy
VGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXaW4uaCIKIAorI2luY2x1ZGUgIkdE
SU9iamVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxvY2Fs
V2luZG93c0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTI1
NywxMyArMjU4LDEzIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZSgK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGF0aWMgV09SRCBwYXR0ZXJuQml0c1s4XSA9
IHsgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSB9OwogICAg
ICAgICAgICAgT3duUHRyPEhCSVRNQVA+IHBhdHRlcm5CaXRtYXAgPSBhZG9wdFB0cig6OkNyZWF0
ZUJpdG1hcCg4LCA4LCAxLCAxLCBwYXR0ZXJuQml0cykpOwotICAgICAgICAgICAgT3duUHRyPEhC
UlVTSD4gYnJ1c2ggPSBhZG9wdFB0cig6OkNyZWF0ZVBhdHRlcm5CcnVzaChwYXR0ZXJuQml0bWFw
LmdldCgpKSk7CisgICAgICAgICAgICBHRElPYmplY3Q8SEJSVVNIPiBicnVzaCg6OkNyZWF0ZVBh
dHRlcm5CcnVzaChwYXR0ZXJuQml0bWFwLmdldCgpKSk7CiAgICAgICAgICAgICBTYXZlREMoaGRj
KTsKICAgICAgICAgICAgIDo6U2V0VGV4dENvbG9yKGhkYywgOjpHZXRTeXNDb2xvcihDT0xPUl8z
REhJTElHSFQpKTsKICAgICAgICAgICAgIDo6U2V0QmtDb2xvcihoZGMsIDo6R2V0U3lzQ29sb3Io
Q09MT1JfM0RGQUNFKSk7CiAgICAgICAgICAgICA6OlNldEJydXNoT3JnRXgoaGRjLCByZWN0Lngo
KSwgcmVjdC55KCksIE5VTEwpOwotICAgICAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBicnVz
aC5nZXQoKSk7Ci0gICAgICAgICAgICA6OkZpbGxSZWN0KGhkYywgJnRoZW1lUmVjdCwgYnJ1c2gu
Z2V0KCkpOworICAgICAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBicnVzaCk7CisgICAgICAg
ICAgICA6OkZpbGxSZWN0KGhkYywgJnRoZW1lUmVjdCwgYnJ1c2gpOwogICAgICAgICAgICAgOjpS
ZXN0b3JlREMoaGRjLCAtMSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGb250TWV0cmljcy5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJHRElPYmplY3Qu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTWV0ZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4dC5oIgpAQCAtNjkyLDE0ICs2OTMs
MTQgQEAgc3RhdGljIHZvaWQgZHJhd0NvbnRyb2woR3JhcGhpY3NDb250ZXh0KgogICAgICAgICAg
ICAgICAgIHN0YXRpYyBXT1JEIHBhdHRlcm5CaXRzWzhdID0gezB4YWEsIDB4NTUsIDB4YWEsIDB4
NTUsIDB4YWEsIDB4NTUsIDB4YWEsIDB4NTV9OwogICAgICAgICAgICAgICAgIE93blB0cjxIQklU
TUFQPiBwYXR0ZXJuQm1wID0gYWRvcHRQdHIoOjpDcmVhdGVCaXRtYXAoOCwgOCwgMSwgMSwgcGF0
dGVybkJpdHMpKTsKICAgICAgICAgICAgICAgICBpZiAocGF0dGVybkJtcCkgewotICAgICAgICAg
ICAgICAgICAgICBPd25QdHI8SEJSVVNIPiBicnVzaCA9IGFkb3B0UHRyKDo6Q3JlYXRlUGF0dGVy
bkJydXNoKHBhdHRlcm5CbXAuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgR0RJT2JqZWN0
PEhCUlVTSD4gYnJ1c2goOjpDcmVhdGVQYXR0ZXJuQnJ1c2gocGF0dGVybkJtcC5nZXQoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBDT0xPUlJFRiBvbGRGb3JlQ29sb3IgPSA6OlNldFRleHRDb2xv
cihoZGMsIDo6R2V0U3lzQ29sb3IoQ09MT1JfM0RGQUNFKSk7CiAgICAgICAgICAgICAgICAgICAg
IENPTE9SUkVGIG9sZEJhY2tDb2xvciA9IDo6U2V0QmtDb2xvcihoZGMsIDo6R2V0U3lzQ29sb3Io
Q09MT1JfM0RISUxJR0hUKSk7CiAgICAgICAgICAgICAgICAgICAgIFBPSU5UIHA7CiAgICAgICAg
ICAgICAgICAgICAgIDo6R2V0Vmlld3BvcnRPcmdFeChoZGMsICZwKTsKICAgICAgICAgICAgICAg
ICAgICAgOjpTZXRCcnVzaE9yZ0V4KGhkYywgcC54ICsgd2lkZ2V0UmVjdC5sZWZ0LCBwLnkgKyB3
aWRnZXRSZWN0LnRvcCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIEhHRElPQkogb2xkQnJ1
c2ggPSA6OlNlbGVjdE9iamVjdChoZGMsIGJydXNoLmdldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgOjpGaWxsUmVjdChoZGMsICZ3aWRnZXRSZWN0LCBicnVzaC5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIEhHRElPQkogb2xkQnJ1c2ggPSA6OlNlbGVjdE9iamVjdChoZGMsIGJydXNoKTsK
KyAgICAgICAgICAgICAgICAgICAgOjpGaWxsUmVjdChoZGMsICZ3aWRnZXRSZWN0LCBicnVzaCk7
CiAgICAgICAgICAgICAgICAgICAgIDo6U2V0VGV4dENvbG9yKGhkYywgb2xkRm9yZUNvbG9yKTsK
ICAgICAgICAgICAgICAgICAgICAgOjpTZXRCa0NvbG9yKGhkYywgb2xkQmFja0NvbG9yKTsKICAg
ICAgICAgICAgICAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRCcnVzaCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211126</attachid>
            <date>2013-09-09 17:48:23 -0700</date>
            <delta_ts>2013-09-09 21:13:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120778-20130909174820.patch</filename>
            <type>text/plain</type>
            <size>68133</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTU0MDQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA5LTA5ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBDaGFuZ2UgZnJvbSB1c2luZyBP
d25QdHI8R0RJIFN0dWZmPiB0byBuZXcgR0RJT2JqZWN0IHRlbXBsYXRlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4
cHJvajogQWRkIG5ldyBHRElPYmplY3QgaGVhZGVyIGZpbGUuCisgICAgICAgICogV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2ouZmlsdGVyczogRGl0dG8uCisgICAgICAgICogV1RGLnZjeHByb2ovY29w
eS1maWxlcy5jbWQ6IENvcHkgbmV3IGhlYWRlciBmaWxlLgorICAgICAgICAqIHd0Zi9Pd25QdHJD
b21tb24uaDogUmVtb3ZlIHNvbWUgR0RJIHNwZWNpYWxpemF0aW9ucy4KKyAgICAgICAgKiB3dGYv
d2luL0dESU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpHRElPYmpl
Y3QpOgorICAgICAgICAoV1RGOjpHRElPYmplY3Q6On5HRElPYmplY3QpOgorICAgICAgICAoV1RG
OjpHRElPYmplY3Q6OmdldCk6CisgICAgICAgIChXVEY6OkdESU9iamVjdDo6b3BlcmF0b3IhKToK
KyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToK
KyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpHRElP
YmplY3Q6OnN3YXApOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Ojps
ZWFrKToKKyAgICAgICAgKFdURjo6OjpHRElPYmplY3QpOgorICAgICAgICAoV1RGOjo9KToKKyAg
ICAgICAgKFdURjo6YWRvcHRHRElPYmplY3QpOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAg
ICAgKFdURjo6VCk6CisgICAgICAgIChXVEY6OkhEQyk6CisgICAgICAgICogd3RmL3dpbi9Pd25Q
dHJXaW4uY3BwOgorICAgICAgICAoV1RGOjpkZWxldGVPd25lZFB0cik6IFJlbW92ZSBzb21lIEdE
SSBzcGVjaWFsaXphdGlvbnMuCisKIDIwMTMtMDktMDkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgd3RmL1R5cGVUcmFpdHMuaApJbmRleDog
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2Uv
V1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcx
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxWYWx1ZUNoZWNrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFZlY3Rvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxWTVRhZ3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcd2luXEdESU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxXVEZUaHJlYWREYXRhLmgiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+
DQpJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsOSArNDk0LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxOZXZlckRlc3Ryb3llZC5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmls
dGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
UmVmLmgiPg0KLSAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxOb25jb3B5YWJsZS5oIj4NCiAgICAgICA8
RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkBAIC02ODcsNiArNjg0LDkg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEZWZlcnJhYmxlUmVmQ291bnRlZC5o
Ij4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcd2luXEdESU9iamVjdC5oIj4NCisgICAgICA8Rmls
dGVyPndpbjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAgIDwvSXRlbUdyb3VwPg0KICAg
PEl0ZW1Hcm91cD4NCiAgICAgPE5vbmUgSW5jbHVkZT0iV1RGUG9zdEJ1aWxkLmNtZCIgLz4NCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL2NvcHktZmlsZXMuY21kCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovY29weS1maWxlcy5jbWQJKHJldmlzaW9uIDE1NTM1NSkK
KysrIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovY29weS1maWxlcy5jbWQJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDYgKzE1LDcgQEAgZm9yICUlZCBpbiAoCiAgICAgd3RmXHRocmVhZHMNCiAgICAgd3Rm
XHVuaWNvZGUNCiAgICAgd3RmXHVuaWNvZGVcaWN1DQorICAgIHd0Zlx3aW4NCiApIGRvICgNCiAg
ICAgbWtkaXIgIiVQcml2YXRlSGVhZGVyc0RpcmVjdG9yeSVcJSVkIiAyPk5VTA0KICAgICB4Y29w
eSAveSAvZCAuLlwlJWRcKi5oICIlUHJpdmF0ZUhlYWRlcnNEaXJlY3RvcnklXCUlZCIgPk5VTA0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL093blB0ckNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL093blB0ckNvbW1vbi5oCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Pd25QdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDcgQEAKIAog
I2lmIE9TKFdJTkRPV1MpCiB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7Ci10eXBl
ZGVmIHN0cnVjdCBIQlJVU0hfXyogSEJSVVNIOwogdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsK
LXR5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOwotdHlwZWRlZiBzdHJ1Y3QgSFBBTEVUVEVf
XyogSFBBTEVUVEU7Ci10eXBlZGVmIHN0cnVjdCBIUEVOX18qIEhQRU47CiB0eXBlZGVmIHN0cnVj
dCBIUkdOX18qIEhSR047CiAjZW5kaWYKIApAQCAtNjUsMTEgKzYxLDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKICNpZiBPUyhXSU5ET1dTKQogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0
ZU93bmVkUHRyKEhCSVRNQVApOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93
bmVkUHRyKEhCUlVTSCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT3duZWRQ
dHIoSERDKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPd25lZFB0cihIRk9O
VCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT3duZWRQdHIoSFBBTEVUVEUp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93bmVkUHRyKEhQRU4pOwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93bmVkUHRyKEhSR04pOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9HRElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi93aW4vR0RJT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0
Zi93aW4vR0RJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHRElPYmpl
Y3RfaAorI2RlZmluZSBHRElPYmplY3RfaAorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9OdWxsUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0
IEhCSVRNQVBfXyogSEJJVE1BUDsKK3R5cGVkZWYgc3RydWN0IEhCUlVTSF9fKiBIQlJVU0g7Cit0
eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOwordHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7
Cit0eXBlZGVmIHN0cnVjdCBIUEFMRVRURV9fKiBIUEFMRVRURTsKK3R5cGVkZWYgc3RydWN0IEhQ
RU5fXyogSFBFTjsKK3R5cGVkZWYgc3RydWN0IEhSR05fXyogSFJHTjsKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZGVsZXRlT2JqZWN0KFQpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBHRElPYmplY3QgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEdESU9iamVjdCk7CitwdWJsaWM6CisgICAgR0RJT2JqZWN0KCkgOiBtX29iamVjdCgwKSB7
IH0KKyAgICB+R0RJT2JqZWN0KCkgeyBkZWxldGVPYmplY3Q8VD4obV9vYmplY3QpOyB9CisKKyAg
ICBUIGdldCgpIHsgcmV0dXJuIG1fb2JqZWN0OyB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAg
VCBsZWFrKCkgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9vYmplY3Q7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRv
ciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50
ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIFVuc3BlY2lmaWVkQm9vbFR5cGU7
CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0ID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlPigmbV9vYmplY3QpIDog
MDsgfQorCisgICAgR0RJT2JqZWN0PFQ+JiBvcGVyYXRvcj0oVCk7CisgICAgR0RJT2JqZWN0PFQ+
JiBvcGVyYXRvcj0oc3RkOjpudWxscHRyX3QpIHsgY2xlYXIoKTsgcmV0dXJuICp0aGlzOyB9CisK
KyAgICBHRElPYmplY3QoR0RJT2JqZWN0JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IEdE
SU9iamVjdChHRElPYmplY3Q8VT4mJik7CisKKyAgICBHRElPYmplY3QmIG9wZXJhdG9yPShHRElP
YmplY3QmJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gR0RJT2JqZWN0JiBvcGVyYXRvcj0o
R0RJT2JqZWN0PFU+JiYpOworCisgICAgdm9pZCBzd2FwKEdESU9iamVjdCYgbykgeyBzdGQ6OnN3
YXAobV9vYmplY3QsIG8ubV9vYmplY3QpOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gZnJpZW5kIEdESU9iamVjdDxVPiBhZG9wdEdESU9iamVjdChVKTsKKworICAgIEdE
SU9iamVjdChjb25zdCBUJiBvYmopIDogbV9vYmplY3Qob2JqKSB7IH0KKworICAgIFQgbV9vYmpl
Y3Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBHRElPYmplY3Q8VD46
OmNsZWFyKCkKK3sKKyAgICBUIG9iamVjdCA9IG1fb2JqZWN0OworICAgIG1fb2JqZWN0ID0gMDsK
KyAgICBkZWxldGVPYmplY3Qob2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFQgR0RJT2JqZWN0PFQ+OjpsZWFrKCkKK3sKKyAgICBUIG9iamVjdCA9IG1fb2JqZWN0Owor
ICAgIG1fb2JqZWN0ID0gMDsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgR0RJT2JqZWN0PFQ+OjpHRElPYmplY3QoR0RJT2JqZWN0PFQ+JiYgbykK
KyAgICA6IG1fb2JqZWN0KG8ubGVhaygpKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgR0RJT2JqZWN0PFQ+JiBHRElPYmplY3Q8VD46Om9wZXJhdG9yPShHRElPYmplY3Q8VD4m
JiBvKQoreworICAgIFQgb2JqID0gbV9vYmplY3Q7CisgICAgbV9vYmplY3QgPSBvLmxlYWsoKTsK
KyAgICBBU1NFUlQoIW9iaiB8fCBtX29iamVjdCAhPSBvYmopOworICAgIGRlbGV0ZU9iamVjdChv
YmopOworCisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgR0RJT2JqZWN0PFQ+JiBHRElPYmplY3Q8VD46Om9wZXJhdG9yPShUIG9iaikKK3sKKyAgICBU
IG9iamVjdCA9IG1fb2JqZWN0OworICAgIG1fb2JqZWN0ID0gb2JqOworICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG1fb2JqZWN0ICE9IG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KG9iamVjdCk7CisK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBHRElP
YmplY3Q8VD4gYWRvcHRHRElPYmplY3QoVCBvYmplY3QpCit7CisgICAgcmV0dXJuIEdESU9iamVj
dDxUPihvYmplY3QpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3
YXAoR0RJT2JqZWN0PFQ+JiBhLCBHRElPYmplY3Q8VD4mIGIpCit7CisgICAgYS5zd2FwKGIpOwor
fQorCisvLyBOZWFybHkgYWxsIEdESSB0eXBlcyB1c2UgdGhlIHNhbWUgRGVsZXRlT2JqZWN0IGNh
bGwuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZWxldGVPYmplY3Q8VD4oVCBv
YmplY3QpCit7CisgICAgaWYgKG9iamVjdCkKKyAgICAgICAgOjpEZWxldGVPYmplY3Qob2JqZWN0
KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBkZWxldGVPYmplY3Q8SERDPihIREMgaGRj
KQoreworICAgIGlmIChoZGMpCisgICAgICAgIDo6RGVsZXRlREMoaGRjKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBHRElPYmplY3RfaApJbmRleDogU291cmNlL1dURi93
dGYvd2luL093blB0cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvd2luL093
blB0cldpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XVEYvd3RmL3dpbi9Pd25Q
dHJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwzNiArMzksMTIgQEAgdm9pZCBkZWxldGVP
d25lZFB0cihIQklUTUFQIHB0cikKICAgICAgICAgRGVsZXRlT2JqZWN0KHB0cik7CiB9CiAKLXZv
aWQgZGVsZXRlT3duZWRQdHIoSEJSVVNIIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBE
ZWxldGVPYmplY3QocHRyKTsKLX0KLQogdm9pZCBkZWxldGVPd25lZFB0cihIREMgcHRyKQogewog
ICAgIGlmIChwdHIpCiAgICAgICAgIERlbGV0ZURDKHB0cik7CiB9CiAKLXZvaWQgZGVsZXRlT3du
ZWRQdHIoSEZPTlQgcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIERlbGV0ZU9iamVjdChw
dHIpOwotfQotCi12b2lkIGRlbGV0ZU93bmVkUHRyKEhQQUxFVFRFIHB0cikKLXsKLSAgICBpZiAo
cHRyKQotICAgICAgICBEZWxldGVPYmplY3QocHRyKTsKLX0KLQotdm9pZCBkZWxldGVPd25lZFB0
cihIUEVOIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBEZWxldGVPYmplY3QocHRyKTsK
LX0KLQogdm9pZCBkZWxldGVPd25lZFB0cihIUkdOIHB0cikKIHsKICAgICBpZiAocHRyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTMtMDktMDkgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbmRvd3NdIENoYW5nZSBmcm9t
IHVzaW5nIE93blB0cjxHREkgU3R1ZmY+IHRvIG5ldyBHRElPYmplY3QgdGVtcGxhdGUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3NzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgY29kZSB0
byB1c2UgYSBHREktc3BlY2lmaWMgc21hcnQgcG9pbnRlciwgcmF0aGVyIHRoYW4gT3duUHRyLiBU
aGlzCisgICAgICAgIGlzIGEgZmlyc3Qgc3RlcCB0byBzaW1wbGlmeWluZyBPd25QdHIuIEl0IGFs
c28gZ2V0cyByaWQgb2Ygc29tZSBXaW5kb3dzLQorICAgICAgICBzcGVjaWZpYyBjb2RlIGluIFdU
Ri4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6IEFkZCB0aGUg
bmV3IGhlYWRlciBmaWxlLgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVyczogRGl0dG8uCisgICAgICAgICogcGFnZS93aW4vRnJhbWVDR1dpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbWFnZUZyb21SZWN0KTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAg
ICAgICAgKiBwYWdlL3dpbi9GcmFtZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlt
YWdlRnJvbVJlY3QpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBhZ2Uvd2luL0Zy
YW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlRnJvbVNlbGVjdGlvbik6IFN3aXRj
aCB0byBHRElPYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6ZHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6bm9kZUltYWdlKTogRGl0
dG8uCisgICAgICAgICogcGFnZS93aW4vRnJhbWVXaW4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0RGlydHlSZWN0cyk6IFN3aXRjaCBmcm9tIE93blB0ciB0byBHRElPYmplY3QuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVHRElGb250KTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOiBT
d2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6IFN3aXRjaCB0byBHRElPYmplY3QuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0
KTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6IFN3aXRj
aCB0byBHRElPYmplY3QuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnREYXRhKTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNoYXJl
ZEN1cnNvcik6IFN3aXRjaCB0byBHRElPYmplY3QuCisgICAgICAgICogcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjYWxlRHJhZ0ltYWdlKTogU3dp
dGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21J
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcDogCisg
ICAgICAgIChXZWJDb3JlOjpzY2FsZURyYWdJbWFnZSk6IFN3aXRjaCB0byBHRElPYmplY3QuCisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZURyYWdJbWFnZUZvckxpbmspOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2UpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZVdpbjo6cGFpbnRUcmFja1BpZWNlKTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAg
KiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6IFN3aXRjaCB0byBHRElPYmplY3QuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Q29udHJvbCk6
IFN3aXRjaCB0byBHRElPYmplY3QuCisKIDIwMTMtMDktMDkgIEFuZHJlYXMgS2xpbmcgIDxha2xp
bmdAYXBwbGUuY29tPgogCiAgICAgICAgIEhpZGUgbm9kZSgpIGJlbG93IFJlbmRlclNWR01vZGVs
T2JqZWN0LCB1c2UgZWxlbWVudCgpIGluc3RlYWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNDQ4LDQgKzIxNDQ4LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNp
b25UYXJnZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRD
dXN0b21pemF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2pl
Y3Q+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycwkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zMTc3LDkgKzMxNzcs
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXENvbW1lbnQuY3BwIj4KICAgICAg
IDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkb21cQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmRvbTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZG9tXENvbXBvc2l0aW9uRXZlbnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMDI0Myw5ICsxMDI0MCw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkb21cQ29tbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ29t
cG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmgiPgotICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRvbVxDb21wb3NpdGlv
bkV2ZW50LmgiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
QEAgLTE1ODc1LDQgKzE1ODY5LDQgQEAKICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cd2luPC9GaWx0
ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KKzwvUHJvamVjdD4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9GcmFtZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9G
cmFtZUNHV2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDYgKzM1LDkgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3Rm
L3dpbi9HRElPYmplY3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00OSwxOSArNTIsMTkgQEAgc3RhdGljIHZvaWQgZHJhd1JlY3RJbnRvQ29u
dGV4dChJbnRSZWN0CiAgICAgdmlldy0+cGFpbnQoZ2MsIHJlY3QpOwogfQogCi1QYXNzT3duUHRy
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikK
K0dESU9iamVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFtZSwgSW50
UmVjdCYgaXIpCiB7CiAgICAgUGFpbnRCZWhhdmlvciBvbGRQYWludEJlaGF2aW9yID0gZnJhbWUt
PnZpZXcoKS0+cGFpbnRCZWhhdmlvcigpOwogICAgIGZyYW1lLT52aWV3KCktPnNldFBhaW50QmVo
YXZpb3Iob2xkUGFpbnRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnMpOwogCiAgICAgdm9pZCogYml0czsKLSAgICBIREMgaGRjID0gQ3JlYXRlQ29tcGF0aWJs
ZURDKDApOworICAgIGF1dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxl
REMoMCkpOwogICAgIGludCB3ID0gaXIud2lkdGgoKTsKICAgICBpbnQgaCA9IGlyLmhlaWdodCgp
OwogICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFwSW5mbzo6Y3JlYXRlKEludFNpemUodywgaCkp
OwogCi0gICAgT3duUHRyPEhCSVRNQVA+IGhibXAgPSBhZG9wdFB0cihDcmVhdGVESUJTZWN0aW9u
KDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCBzdGF0aWNfY2FzdDx2b2lkKio+KCZiaXRzKSwgMCwg
MCkpOwotICAgIEhHRElPQkogaGJtcE9sZCA9IFNlbGVjdE9iamVjdChoZGMsIGhibXAuZ2V0KCkp
OworICAgIEdESU9iamVjdDxIQklUTUFQPiBoYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVE
SUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCBzdGF0aWNfY2FzdDx2b2lkKio+KCZi
aXRzKSwgMCwgMCkpOworICAgIEhHRElPQkogaGJtcE9sZCA9IFNlbGVjdE9iamVjdChoZGMuZ2V0
KCksIGhibXAuZ2V0KCkpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKHN0YXRpY19jYXN0PHZvaWQqPihiaXRzKSwgdywgaCwKICAgICAgICAgOCwgdyAq
IHNpemVvZihSR0JRVUFEKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpOwogICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CkBAIC03MSwxMiArNzQsMTEgQEAgUGFzc093blB0
cjxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0CiAgICAgZHJhd1JlY3RJbnRvQ29udGV4dChp
ciwgZnJhbWUtPnZpZXcoKSwgJmdjKTsKIAogICAgIENHQ29udGV4dFJlbGVhc2UoY29udGV4dCk7
Ci0gICAgU2VsZWN0T2JqZWN0KGhkYywgaGJtcE9sZCk7Ci0gICAgRGVsZXRlREMoaGRjKTsKKyAg
ICBTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wT2xkKTsKIAogICAgIGZyYW1lLT52aWV3KCkt
PnNldFBhaW50QmVoYXZpb3Iob2xkUGFpbnRCZWhhdmlvcik7CiAKLSAgICByZXR1cm4gaGJtcC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGhibXA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ2Fpcm9XaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ2Fpcm9XaW4uY3BwCShyZXZpc2lv
biAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNhaXJvV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDExIEBACiAjaW5jbHVkZSAiRnJhbWVXaW4uaCIK
IAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmpl
Y3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPEhCSVRNQVA+IGltYWdl
RnJvbVJlY3QoY29uc3QgRnJhbWUqLCBJbnRSZWN0JikKK0dESU9iamVjdDxIQklUTUFQPiBpbWFn
ZUZyb21SZWN0KGNvbnN0IEZyYW1lKiwgSW50UmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0Zy
YW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdp
bi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1l
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIlByaW50
Q29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZy
YW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJI
ZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBWZWN0b3I8
SW50UmVjdD4mIG91dFBhZ2VzLCBpbnQmIG91dFBhZ2VIZWlnaHQpCkBAIC00NSwyMiArNDcsMjIg
QEAgdm9pZCBjb21wdXRlUGFnZVJlY3RzRm9yRnJhbWUoRnJhbWUqIGZyYQogICAgIG91dFBhZ2Vz
ID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0cygpOwogfQogCi1QYXNzT3duUHRyPEhCSVRNQVA+IGlt
YWdlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFja1RleHQpCitHRElP
YmplY3Q8SEJJVE1BUD4gaW1hZ2VGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgYm9vbCBmb3Jj
ZUJsYWNrVGV4dCkKIHsKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAK
ICAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3JTZWxlY3Rp
b25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDog
MCkpOwogICAgIEZsb2F0UmVjdCBmciA9IGZyYW1lLT5zZWxlY3Rpb24oKS5ib3VuZHMoKTsKICAg
ICBJbnRSZWN0IGlyKHN0YXRpY19jYXN0PGludD4oZnIueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihm
ci55KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGZy
LmhlaWdodCgpKSk7Ci0gICAgT3duUHRyPEhCSVRNQVA+IGltYWdlID0gaW1hZ2VGcm9tUmVjdChm
cmFtZSwgaXIpOworICAgIEdESU9iamVjdDxIQklUTUFQPiBpbWFnZSA9IGltYWdlRnJvbVJlY3Qo
ZnJhbWUsIGlyKTsKICAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVo
YXZpb3JOb3JtYWwpOwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGlt
YWdlOwogfQogCiBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCiB7
CiAgICAgaWYgKHNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRnJv
bVNlbGVjdGlvbih0aGlzLCBmYWxzZSkubGVha1B0cigpOworICAgICAgICByZXR1cm4gaW1hZ2VG
cm9tU2VsZWN0aW9uKHRoaXMsIGZhbHNlKS5sZWFrKCk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAg
LTc3LDEwICs3OSwxMCBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2Rl
CiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KHJlbmRlcmVy
LT5wYWludGluZ1Jvb3RSZWN0KHRvcExldmVsUmVjdCkpOwogCiAgICAgbV92aWV3LT5zZXROb2Rl
VG9EcmF3KG5vZGUpOyAvLyBpbnZva2Ugc3BlY2lhbCBzdWItdHJlZSBkcmF3aW5nIG1vZGUKLSAg
ICBPd25QdHI8SEJJVE1BUD4gcmVzdWx0ID0gaW1hZ2VGcm9tUmVjdCh0aGlzLCBwYWludGluZ1Jl
Y3QpOworICAgIEdESU9iamVjdDxIQklUTUFQPiByZXN1bHQgPSBpbWFnZUZyb21SZWN0KHRoaXMs
IHBhaW50aW5nUmVjdCk7CiAgICAgbV92aWV3LT5zZXROb2RlVG9EcmF3KDApOwogCi0gICAgcmV0
dXJuIHJlc3VsdC5sZWFrUHRyKCk7CisgICAgcmV0dXJuIHJlc3VsdC5sZWFrKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1l
V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uaAko
cmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTkgKzI2LDE2IEBACiAjaWZuZGVmIEZyYW1lV2luX2gKICNk
ZWZpbmUgRnJhbWVXaW5faAogCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLS8vIEZvcndhcmQgZGVjbGFyZWQgc28gd2UgZG9uJ3QgbmVlZCB3
aW5nZGkuaC4KLXR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyogSEJJVE1BUDsKKyNpbmNsdWRlIDx3
dGYvd2luL0dESU9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1l
OwogY2xhc3MgSW50UmVjdDsKIAotUGFzc093blB0cjxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNv
bnN0IEZyYW1lKiwgSW50UmVjdCYpOwotUGFzc093blB0cjxIQklUTUFQPiBpbWFnZUZyb21TZWxl
Y3Rpb24oRnJhbWUqLCBib29sIGZvcmNlV2hpdGVUZXh0KTsKK1dURjo6R0RJT2JqZWN0PEhCSVRN
QVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqLCBJbnRSZWN0Jik7CitXVEY6OkdESU9iamVj
dDxIQklUTUFQPiBpbWFnZUZyb21TZWxlY3Rpb24oRnJhbWUqLCBib29sIGZvcmNlV2hpdGVUZXh0
KTsKIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiwgY29uc3QgSW50UmVjdCYg
cHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQg
dXNlclNjYWxlRmFjdG9yLCBWZWN0b3I8SW50UmVjdD4mIG91dFBhZ2VzLCBpbnQmIG91dFBhZ2VI
ZWlnaHQpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVl
SG9zdC5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYg
KzM5LDcgQEAKICNpbmNsdWRlIDxRdWFydHpDb3JlL0NBQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0
Zi93aW4vR0RJT2JqZWN0Lmg+CiAKICNpZmRlZiBERUJVR19BTEwKICNwcmFnbWEgY29tbWVudChs
aWIsICJRdWFydHpDb3JlX2RlYnVnIikKQEAgLTU2LDYgKzU3LDggQEAgaW5saW5lIHN0YXRpYyBD
R1JlY3Qgd2luUmVjdFRvQ0dSZWN0KFJFQwogICAgIHJldHVybiBDR1JlY3RNYWtlKHJjLmxlZnQs
IChyZWxhdGl2ZVRvUmVjdC5ib3R0b20tcmMuYm90dG9tKSwgKHJjLnJpZ2h0IC0gcmMubGVmdCks
IChyYy5ib3R0b20gLSByYy50b3ApKTsKIH0KIAordXNpbmcgV1RGOjphZG9wdEdESU9iamVjdDsK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIENBQ0ZMYXllclRyZWVIb3N0OjphY2NlbGVy
YXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCkKQEAgLTIzOSw3ICsyNDIsNyBAQCBzdGF0aWMgdm9p
ZCBnZXREaXJ0eVJlY3RzKEhXTkQgd2luZG93LCBWCiAgICAgaWYgKCFHZXRDbGllbnRSZWN0KHdp
bmRvdywgJmNsaWVudFJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8SFJHTj4g
cmVnaW9uID0gYWRvcHRQdHIoQ3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7CisgICAgYXV0byBy
ZWdpb24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwogICAg
IGludCByZWdpb25UeXBlID0gR2V0VXBkYXRlUmduKHdpbmRvdywgcmVnaW9uLmdldCgpLCBmYWxz
ZSk7CiAgICAgaWYgKHJlZ2lvblR5cGUgIT0gQ09NUExFWFJFR0lPTikgewogICAgICAgICBSRUNU
IGRpcnR5UmVjdDsKQEAgLTI0OCwxMCArMjUxLDEwIEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVj
dHMoSFdORCB3aW5kb3csIFYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERXT1JEIGRh
dGFTaXplID0gR2V0UmVnaW9uRGF0YShyZWdpb24uZ2V0KCksIDAsIDApOworICAgIERXT1JEIGRh
dGFTaXplID0gOjpHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQoKSwgMCwgMCk7CiAgICAgT3duQXJy
YXlQdHI8dW5zaWduZWQgY2hhcj4gcmVnaW9uRGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3
IHVuc2lnbmVkIGNoYXJbZGF0YVNpemVdKTsKICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxSR05EQVRBKj4ocmVnaW9uRGF0YUJ1ZmZlci5nZXQoKSk7Ci0gICAgaWYg
KCFHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQorICAg
IGlmICghOjpHZXRSZWdpb25EYXRhKHJlZ2lvbi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEp
KQogICAgICAgICByZXR1cm47CiAKICAgICBvdXRSZWN0cy5yZXNpemUocmVnaW9uRGF0YS0+cmRo
Lm5Db3VudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTIgKzM3LDE0IEBACiAjaW5jbHVkZSA8
d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2Vz
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogI2VuZGlmCiAKIHVzaW5nIHN0ZDo6bWluOwordXNpbmcgV1RGOjphZG9wdEdESU9iamVj
dDsKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTQ3NSwyMyArNDc3LDIxIEBAIHN0YXRpYyBI
Rk9OVCBjcmVhdGVHRElGb250KGNvbnN0IEF0b21pY1MKICAgIGlmIChkZXNpcmVkSXRhbGljICYm
ICFtYXRjaERhdGEubV9jaG9zZW4ubGZJdGFsaWMgJiYgc3ludGhlc2l6ZUl0YWxpYykKICAgICAg
ICBtYXRjaERhdGEubV9jaG9zZW4ubGZJdGFsaWMgPSAxOwogCi0gICAgSEZPTlQgcmVzdWx0ID0g
Q3JlYXRlRm9udEluZGlyZWN0KCZtYXRjaERhdGEubV9jaG9zZW4pOwotICAgIGlmICghcmVzdWx0
KQorICAgIGF1dG8gY2hvc2VuRm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGly
ZWN0KCZtYXRjaERhdGEubV9jaG9zZW4pKTsKKyAgICBpZiAoIWNob3NlbkZvbnQpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgSFduZERDIGRjKDApOwogICAgIFNhdmVEQyhkYyk7Ci0gICAgU2Vs
ZWN0T2JqZWN0KGRjLCByZXN1bHQpOworICAgIFNlbGVjdE9iamVjdChkYywgY2hvc2VuRm9udC5n
ZXQoKSk7CiAgICAgV0NIQVIgYWN0dWFsTmFtZVtMRl9GQUNFU0laRV07CiAgICAgR2V0VGV4dEZh
Y2UoZGMsIExGX0ZBQ0VTSVpFLCBhY3R1YWxOYW1lKTsKICAgICBSZXN0b3JlREMoZGMsIC0xKTsK
IAotICAgIGlmICh3Y3NpY21wKG1hdGNoRGF0YS5tX2Nob3Nlbi5sZkZhY2VOYW1lLCBhY3R1YWxO
YW1lKSkgewotICAgICAgICBEZWxldGVPYmplY3QocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ID0g
MDsKLSAgICB9CisgICAgaWYgKHdjc2ljbXAobWF0Y2hEYXRhLm1fY2hvc2VuLmxmRmFjZU5hbWUs
IGFjdHVhbE5hbWUpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIGNob3NlbkZvbnQubGVhaygpOwogfQogCiBzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQ
cm9jRGF0YSB7CkBAIC01NTQsOCArNTU0LDggQEAgUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2FjaGU6OgogICAgIC8vIEZJWE1FOiBXZSB3aWxsIGV2ZW50dWFsbHkgd2FudCBzdWJw
aXhlbCBwcmVjaXNpb24gZm9yIEdESSBtb2RlLCBidXQgdGhlIHNjYWxlZCByZW5kZXJpbmcgZG9l
c24ndAogICAgIC8vIGxvb2sgYXMgbmljZS4gVGhhdCBtYXkgYmUgc29sdmFibGUgdGhvdWdoLgog
ICAgIExPTkcgd2VpZ2h0ID0gYWRqdXN0ZWRHRElGb250V2VpZ2h0KHRvR0RJRm9udFdlaWdodChm
b250RGVzY3JpcHRpb24ud2VpZ2h0KCkpLCBmYW1pbHkpOwotICAgIEhGT05UIGhmb250ID0gY3Jl
YXRlR0RJRm9udChmYW1pbHksIHdlaWdodCwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhl
bFNpemUoKSAqICh1c2VHREkgPyAxIDogMzIpLCB1c2VHREkpOworICAgIGF1dG8gaGZvbnQgPSBh
ZG9wdEdESU9iamVjdChjcmVhdGVHRElGb250KGZhbWlseSwgd2VpZ2h0LCBmb250RGVzY3JpcHRp
b24uaXRhbGljKCksCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgp
ICogKHVzZUdESSA/IDEgOiAzMiksIHVzZUdESSkpOwogCiAgICAgaWYgKCFoZm9udCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NjQsMTIgKzU2NCwxMiBAQCBQYXNzT3duUHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6CiAgICAgICAgIHVzZUdESSA9IGZhbHNlOyAvLyBOZXZl
ciB1c2UgR0RJIGZvciBMdWNpZGEgR3JhbmRlLgogCiAgICAgTE9HRk9OVCBsb2dGb250OwotICAg
IEdldE9iamVjdChoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nRm9udCk7CisgICAgR2V0T2Jq
ZWN0KGhmb250LmdldCgpLCBzaXplb2YoTE9HRk9OVCksICZsb2dGb250KTsKIAogICAgIGJvb2wg
c3ludGhlc2l6ZUJvbGQgPSBpc0dESUZvbnRXZWlnaHRCb2xkKHdlaWdodCkgJiYgIWlzR0RJRm9u
dFdlaWdodEJvbGQobG9nRm9udC5sZldlaWdodCk7CiAgICAgYm9vbCBzeW50aGVzaXplSXRhbGlj
ID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpICYmICFsb2dGb250LmxmSXRhbGljOwogCi0gICAg
Rm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGVzaXplQm9sZCwgc3ludGhl
c2l6ZUl0YWxpYywgdXNlR0RJKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcg
Rm9udFBsYXRmb3JtRGF0YShoZm9udC5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN5bnRoZXNpemVCb2xkLCBzeW50aGVzaXplSXRhbGljLCB1c2VHREkpOwogCiAj
aWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Y2dGb250
KCk7CkBAIC01ODIsMTAgKzU4MiwxMSBAQCBQYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6CiAgICAgICAgIC8vIGFic29sdXRlbHkgc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0
aGlzIGZvbnQsIGdvIGFoZWFkIGFuZCByZXR1cm4gMCBzbyB0aGF0IHdlIGNhbiBmYWxsIGJhY2sg
dG8gdGhlIG5leHQKICAgICAgICAgLy8gZm9udC4KICAgICAgICAgZGVsZXRlIHJlc3VsdDsKLSAg
ICAgICAgRGVsZXRlT2JqZWN0KGhmb250KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fSAgICAgICAgCiAKKyAgICBoZm9udC5sZWFrKCk7IC8vIHJlc3VsdCBub3cgb3ducyB0aGUgSEZP
TlQuCisKICAgICByZXR1cm4gYWRvcHRQdHIocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwxMCArMjksMTIgQEAKICNpbmNsdWRl
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1
ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKK3VzaW5nIFdURjo6YWRvcHRHRElPYmplY3Q7CiAKIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKIHsKQEAgLTYyLDEwICs2NCwx
MCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAgbG9nRm9u
dC5sZkl0YWxpYyA9IGl0YWxpYzsKICAgICBsb2dGb250LmxmV2VpZ2h0ID0gYm9sZCA/IDcwMCA6
IDQwMDsKIAotICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZsb2dGb250KTsK
KyAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxv
Z0ZvbnQpKTsKIAogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ0dG
b250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbG9nRm9udCkpOwotICAgIHJldHVybiBGb250UGxh
dGZvcm1EYXRhKGhmb250LCBjZ0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVy
aW5nTW9kZSA9PSBBbHRlcm5hdGVSZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gRm9udFBsYXRm
b3JtRGF0YShoZm9udC5sZWFrKCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCBy
ZW5kZXJpbmdNb2RlID09IEFsdGVybmF0ZVJlbmRlcmluZ01vZGUpOwogfQogCiAvLyBDcmVhdGVz
IGEgdW5pcXVlIGFuZCB1bnByZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIgdG8gYXZvaWQg
Y29sbGlzaW9ucyBhbmQgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBDb21w
dXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVk
ZSA8Y2Fpcm8td2luMzIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KKwordXNp
bmcgV1RGOjphZG9wdEdESU9iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCwx
MSArNjEsMTEgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAg
IGxvZ0ZvbnQubGZJdGFsaWMgPSBpdGFsaWM7CiAgICAgbG9nRm9udC5sZldlaWdodCA9IGJvbGQg
PyA3MDAgOiA0MDA7CiAKLSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbG9n
Rm9udCk7CisgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGly
ZWN0KCZsb2dGb250KSk7CiAKICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWly
b193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChoZm9udCk7CiAKLSAgICBGb250UGxh
dGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIGZvbnRGYWNlLCBzaXplLCBib2xkLCBp
dGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShoZm9udC5sZWFr
KCksIGZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOwogCiAgICAgY2Fpcm9fZm9udF9mYWNl
X2Rlc3Ryb3koZm9udEZhY2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJl
dmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDA4LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI3LDE1IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgogCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgorI2luY2x1ZGUgPHd0Zi93
aW4vR0RJT2JqZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDcgKzEwMSw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxIQklUTUFQPiBiaXRtYXAgPSBhZG9w
dFB0cihzdGF0aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1B
UCkpKTsKKyAgICBHRElPYmplY3Q8SEJJVE1BUD4gYml0bWFwID0gYWRvcHRHRElPYmplY3Qoc3Rh
dGljX2Nhc3Q8SEJJVE1BUD4oOjpHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpKTsK
IAogICAgIERJQlBpeGVsRGF0YSBwaXhlbERhdGEoYml0bWFwLmdldCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlbGVhc2VXaW5kb3dzQ29udAogICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgT3duUHRyPEhCSVRNQVA+IGJpdG1hcCA9IGFkb3B0UHRyKHN0YXRpY19j
YXN0PEhCSVRNQVA+KEdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSkpOworICAgIEdE
SU9iamVjdDxIQklUTUFQPiBiaXRtYXAgPSBhZG9wdEdESU9iamVjdChzdGF0aWNfY2FzdDxIQklU
TUFQPig6OkdldEN1cnJlbnRPYmplY3QoaGRjLCBPQkpfQklUTUFQKSkpOwogCiAgICAgRElCUGl4
ZWxEYXRhIHBpeGVsRGF0YShiaXRtYXAuZ2V0KCkpOwogICAgIEFTU0VSVChwaXhlbERhdGEuYml0
c1BlclBpeGVsKCkgPT0gMzIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9u
IDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM4LDggKzM4LDEwIEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvd2luL0dESU9iamVjdC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTIsMjIgKzExNCwyMiBAQCBI
REMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjCiAgICAgICAgIGlmICghYml0
bWFwKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgSERDIGJpdG1hcERDID0gOjpD
cmVhdGVDb21wYXRpYmxlREMobV9kYXRhLT5tX2hkYyk7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0
KGJpdG1hcERDLCBiaXRtYXApOworICAgICAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmpl
Y3QoOjpDcmVhdGVDb21wYXRpYmxlREMobV9kYXRhLT5tX2hkYykpOworICAgICAgICA6OlNlbGVj
dE9iamVjdChiaXRtYXBEQy5nZXQoKSwgYml0bWFwKTsKIAogICAgICAgICAvLyBGaWxsIG91ciBi
dWZmZXIgd2l0aCBjbGVhciBpZiB3ZSdyZSBnb2luZyB0byBhbHBoYSBibGVuZC4KICAgICAgICAg
aWYgKHN1cHBvcnRBbHBoYUJsZW5kKQogICAgICAgICAgICBmaWxsV2l0aENsZWFyQ29sb3IoYml0
bWFwKTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIGRvIHdvcmxkIHRyYW5zZm9ybXMu
Ci0gICAgICAgIFNldEdyYXBoaWNzTW9kZShiaXRtYXBEQywgR01fQURWQU5DRUQpOworICAgICAg
ICA6OlNldEdyYXBoaWNzTW9kZShiaXRtYXBEQy5nZXQoKSwgR01fQURWQU5DRUQpOwogCiAgICAg
ICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRpb24gdG8gb3VyIGNvbnRleHQgc28gdGhhdCB0aGUgZHJh
d2luZyBkb25lIHdpbGwgYmUgYXQgKDAsMCkgb2YgdGhlIGJpdG1hcC4KICAgICAgICAgWEZPUk0g
eGZvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSgtZHN0UmVjdC54KCksIC1k
c3RSZWN0LnkoKSk7CiAKLSAgICAgICAgOjpTZXRXb3JsZFRyYW5zZm9ybShiaXRtYXBEQywgJnhm
b3JtKTsKKyAgICAgICAgOjpTZXRXb3JsZFRyYW5zZm9ybShiaXRtYXBEQy5nZXQoKSwgJnhmb3Jt
KTsKIAotICAgICAgICByZXR1cm4gYml0bWFwREM7CisgICAgICAgIHJldHVybiBiaXRtYXBEQy5s
ZWFrKCk7CiAgICAgfQogCiAgICAgbV9kYXRhLT5mbHVzaCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFX
aW4uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNs
dWRlIDxtbGFuZy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L3dpbi9HRElPYmplY3QuaD4KKwordXNpbmcgV1RGOjphZG9wdEdESU9iamVjdDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xMzgsOCArMTQxLDggQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdAogICAgIExPR0ZPTlQgd2luZm9udDsKICAgICBHZXRPYmplY3Qo
bV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQpLCAmd2luZm9udCk7CiAgICAg
d2luZm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUgKiAobV9wbGF0Zm9ybURhdGEu
dXNlR0RJKCkgPyAxIDogMzIpKTsKLSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVj
dCgmd2luZm9udCk7Ci0gICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRm
b3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgp
LCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdE
SSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKKyAgICBhdXRvIGhmb250ID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpKTsKKyAgICByZXR1cm4gU2ltcGxl
Rm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LmxlYWsoKSwgc2NhbGVkU2l6
ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZh
bHNlKTsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTQgQEAKIAogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi93aW4v
R0RJT2JqZWN0Lmg+CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKICNkZWZpbmUgQUxQSEFfQ1VS
U09SUwogCit1c2luZyBXVEY6OmFkb3B0R0RJT2JqZWN0OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2hhcmVkQ3Vyc29yKElt
YWdlKiBpbWcsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQpAQCAtNTEsMTkgKzU0LDE5IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2gKICAgICBCaXRtYXBJbmZvIGN1
cnNvckltYWdlID0gQml0bWFwSW5mbzo6Y3JlYXRlKEludFNpemUoaW1nLT53aWR0aCgpLCBpbWct
PmhlaWdodCgpKSk7CiAKICAgICBIV25kREMgZGMoMCk7Ci0gICAgSERDIHdvcmtpbmdEQyA9IENy
ZWF0ZUNvbXBhdGlibGVEQyhkYyk7CisgICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIGlmIChkb0FscGhhKSB7Ci0gICAgICAg
IE93blB0cjxIQklUTUFQPiBoQ3Vyc29yID0gYWRvcHRQdHIoQ3JlYXRlRElCU2VjdGlvbihkYywg
KEJJVE1BUElORk8gKikmY3Vyc29ySW1hZ2UsIERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKSk7Cisg
ICAgICAgIGF1dG8gaEN1cnNvciA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbihk
YywgKEJJVE1BUElORk8gKikmY3Vyc29ySW1hZ2UsIERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKSk7
CiAgICAgICAgIEFTU0VSVChoQ3Vyc29yKTsKIAogICAgICAgICBpbWctPmdldEhCSVRNQVAoaEN1
cnNvci5nZXQoKSk7IAotICAgICAgICBIQklUTUFQIGhPbGRCaXRtYXAgPSAoSEJJVE1BUClTZWxl
Y3RPYmplY3Qod29ya2luZ0RDLCBoQ3Vyc29yLmdldCgpKTsKLSAgICAgICAgU2V0QmtNb2RlKHdv
cmtpbmdEQywgVFJBTlNQQVJFTlQpOwotICAgICAgICBTZWxlY3RPYmplY3Qod29ya2luZ0RDLCBo
T2xkQml0bWFwKTsKKyAgICAgICAgSEJJVE1BUCBoT2xkQml0bWFwID0gKEhCSVRNQVApU2VsZWN0
T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaEN1cnNvci5nZXQoKSk7CisgICAgICAgIFNldEJrTW9k
ZSh3b3JraW5nREMuZ2V0KCksIFRSQU5TUEFSRU5UKTsKKyAgICAgICAgU2VsZWN0T2JqZWN0KHdv
cmtpbmdEQy5nZXQoKSwgaE9sZEJpdG1hcCk7CiAKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkIGNo
YXIsIDEyOD4gbWFza0JpdHM7CiAgICAgICAgIG1hc2tCaXRzLmZpbGwoMHhmZiwgKGltZy0+d2lk
dGgoKSArIDcpIC8gOCAqIGltZy0+aGVpZ2h0KCkpOwotICAgICAgICBPd25QdHI8SEJJVE1BUD4g
aE1hc2sgPSBhZG9wdFB0cihDcmVhdGVCaXRtYXAoaW1nLT53aWR0aCgpLCBpbWctPmhlaWdodCgp
LCAxLCAxLCBtYXNrQml0cy5kYXRhKCkpKTsKKyAgICAgICAgYXV0byBoTWFzayA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQml0bWFwKGltZy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSwgMSwgMSwg
bWFza0JpdHMuZGF0YSgpKSk7CiAKICAgICAgICAgSUNPTklORk8gaWk7CiAgICAgICAgIGlpLmZJ
Y29uID0gRkFMU0U7CkBAIC03MiwzNCArNzUsMzQgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVk
Q3Vyc29yPiBjcmVhdGVTaAogICAgICAgICBpaS5oYm1NYXNrID0gaE1hc2suZ2V0KCk7CiAgICAg
ICAgIGlpLmhibUNvbG9yID0gaEN1cnNvci5nZXQoKTsKIAotICAgICAgICBpbXBsID0gU2hhcmVk
Q3Vyc29yOjpjcmVhdGUoQ3JlYXRlSWNvbkluZGlyZWN0KCZpaSkpOworICAgICAgICBpbXBsID0g
U2hhcmVkQ3Vyc29yOjpjcmVhdGUoOjpDcmVhdGVJY29uSW5kaXJlY3QoJmlpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gUGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGFscGhhIGJsZW5kZWQg
Y3Vyc29ycywgc28gd2UgbmVlZAogICAgICAgICAvLyB0byBjcmVhdGUgdGhlIG1hc2sgbWFudWFs
bHkKLSAgICAgICAgSERDIGFuZE1hc2tEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhkYyk7Ci0gICAg
ICAgIEhEQyB4b3JNYXNrREMgPSBDcmVhdGVDb21wYXRpYmxlREMoZGMpOwotICAgICAgICBPd25Q
dHI8SEJJVE1BUD4gaEN1cnNvciA9IGFkb3B0UHRyKENyZWF0ZURJQlNlY3Rpb24oZGMsICZjdXJz
b3JJbWFnZSwgRElCX1JHQl9DT0xPUlMsIDAsIDAsIDApKTsKKyAgICAgICAgYXV0byBhbmRNYXNr
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOworICAgICAgICBh
dXRvIHhvck1hc2tEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGRjKSk7
CisgICAgICAgIGF1dG8gaEN1cnNvciA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlv
bihkYywgJmN1cnNvckltYWdlLCBESUJfUkdCX0NPTE9SUywgMCwgMCwgMCkpOwogICAgICAgICBB
U1NFUlQoaEN1cnNvcik7CiAgICAgICAgIGltZy0+Z2V0SEJJVE1BUChoQ3Vyc29yLmdldCgpKTsg
CiAgICAgICAgIEJJVE1BUCBjdXJzb3I7CiAgICAgICAgIEdldE9iamVjdChoQ3Vyc29yLmdldCgp
LCBzaXplb2YoQklUTUFQKSwgJmN1cnNvcik7Ci0gICAgICAgIE93blB0cjxIQklUTUFQPiBhbmRN
YXNrID0gYWRvcHRQdHIoQ3JlYXRlQml0bWFwKGN1cnNvci5ibVdpZHRoLCBjdXJzb3IuYm1IZWln
aHQsIDEsIDEsIE5VTEwpKTsKLSAgICAgICAgT3duUHRyPEhCSVRNQVA+IHhvck1hc2sgPSBhZG9w
dFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBjdXJzb3IuYm1XaWR0aCwgY3Vyc29yLmJt
SGVpZ2h0KSk7Ci0gICAgICAgIEhCSVRNQVAgb2xkQ3Vyc29yID0gKEhCSVRNQVApU2VsZWN0T2Jq
ZWN0KHdvcmtpbmdEQywgaEN1cnNvci5nZXQoKSk7Ci0gICAgICAgIEhCSVRNQVAgb2xkQW5kTWFz
ayA9IChIQklUTUFQKVNlbGVjdE9iamVjdChhbmRNYXNrREMsIGFuZE1hc2suZ2V0KCkpOwotICAg
ICAgICBIQklUTUFQIG9sZFhvck1hc2sgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QoeG9yTWFza0RD
LCB4b3JNYXNrLmdldCgpKTsKKyAgICAgICAgYXV0byBhbmRNYXNrID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVCaXRtYXAoY3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgMSwgMSwgMCkp
OworICAgICAgICBhdXRvIHhvck1hc2sgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGli
bGVCaXRtYXAoZGMsIGN1cnNvci5ibVdpZHRoLCBjdXJzb3IuYm1IZWlnaHQpKTsKKyAgICAgICAg
SEJJVE1BUCBvbGRDdXJzb3IgPSAoSEJJVE1BUClTZWxlY3RPYmplY3Qod29ya2luZ0RDLmdldCgp
LCBoQ3Vyc29yLmdldCgpKTsKKyAgICAgICAgSEJJVE1BUCBvbGRBbmRNYXNrID0gKEhCSVRNQVAp
U2VsZWN0T2JqZWN0KGFuZE1hc2tEQy5nZXQoKSwgYW5kTWFzay5nZXQoKSk7CisgICAgICAgIEhC
SVRNQVAgb2xkWG9yTWFzayA9IChIQklUTUFQKVNlbGVjdE9iamVjdCh4b3JNYXNrREMuZ2V0KCks
IHhvck1hc2suZ2V0KCkpOwogCi0gICAgICAgIFNldEJrQ29sb3Iod29ya2luZ0RDLCBSR0IoMCww
LDApKTsgIAotICAgICAgICBCaXRCbHQoYW5kTWFza0RDLCAwLCAwLCBjdXJzb3IuYm1XaWR0aCwg
Y3Vyc29yLmJtSGVpZ2h0LCB3b3JraW5nREMsIDAsIDAsIFNSQ0NPUFkpOworICAgICAgICBTZXRC
a0NvbG9yKHdvcmtpbmdEQy5nZXQoKSwgUkdCKDAsIDAsIDApKTsgIAorICAgICAgICBCaXRCbHQo
YW5kTWFza0RDLmdldCgpLCAwLCAwLCBjdXJzb3IuYm1XaWR0aCwgY3Vyc29yLmJtSGVpZ2h0LCB3
b3JraW5nREMuZ2V0KCksIDAsIDAsIFNSQ0NPUFkpOwogICAgIAotICAgICAgICBTZXRCa0NvbG9y
KHhvck1hc2tEQywgUkdCKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgU2V0VGV4dENvbG9yKHhv
ck1hc2tEQywgUkdCKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgQml0Qmx0KHhvck1hc2tEQywg
MCwgMCwgY3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgYW5kTWFza0RDLCAwLCAwLCBT
UkNDT1BZKTsKLSAgICAgICAgQml0Qmx0KHhvck1hc2tEQywgMCwgMCwgY3Vyc29yLmJtV2lkdGgs
IGN1cnNvci5ibUhlaWdodCwgd29ya2luZ0RDLCAwLDAsIFNSQ0FORCk7Ci0KLSAgICAgICAgU2Vs
ZWN0T2JqZWN0KHdvcmtpbmdEQywgb2xkQ3Vyc29yKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGFu
ZE1hc2tEQywgb2xkQW5kTWFzayk7Ci0gICAgICAgIFNlbGVjdE9iamVjdCh4b3JNYXNrREMsIG9s
ZFhvck1hc2spOworICAgICAgICBTZXRCa0NvbG9yKHhvck1hc2tEQy5nZXQoKSwgUkdCKDI1NSwg
MjU1LCAyNTUpKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKHhvck1hc2tEQy5nZXQoKSwgUkdCKDI1
NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgQml0Qmx0KHhvck1hc2tEQy5nZXQoKSwgMCwgMCwgY3Vy
c29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgYW5kTWFza0RDLmdldCgpLCAwLCAwLCBTUkND
T1BZKTsKKyAgICAgICAgQml0Qmx0KHhvck1hc2tEQy5nZXQoKSwgMCwgMCwgY3Vyc29yLmJtV2lk
dGgsIGN1cnNvci5ibUhlaWdodCwgd29ya2luZ0RDLmdldCgpLCAwLCAwLCBTUkNBTkQpOworCisg
ICAgICAgIFNlbGVjdE9iamVjdCh3b3JraW5nREMuZ2V0KCksIG9sZEN1cnNvcik7CisgICAgICAg
IFNlbGVjdE9iamVjdChhbmRNYXNrREMuZ2V0KCksIG9sZEFuZE1hc2spOworICAgICAgICBTZWxl
Y3RPYmplY3QoeG9yTWFza0RDLmdldCgpLCBvbGRYb3JNYXNrKTsKIAogICAgICAgICBJQ09OSU5G
TyBpY29uID0gezB9OwogICAgICAgICBpY29uLmZJY29uID0gRkFMU0U7CkBAIC0xMDgsMTEgKzEx
MSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2gKICAgICAgICAg
aWNvbi5oYm1NYXNrID0gYW5kTWFzay5nZXQoKTsKICAgICAgICAgaWNvbi5oYm1Db2xvciA9IHhv
ck1hc2suZ2V0KCk7CiAgICAgICAgIGltcGwgPSBTaGFyZWRDdXJzb3I6OmNyZWF0ZShDcmVhdGVJ
Y29uSW5kaXJlY3QoJmljb24pKTsKLQotICAgICAgICBEZWxldGVEQyh4b3JNYXNrREMpOwotICAg
ICAgICBEZWxldGVEQyhhbmRNYXNrREMpOwogICAgIH0KLSAgICBEZWxldGVEQyh3b3JraW5nREMp
OwogCiAgICAgcmV0dXJuIGltcGwucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDEyIEBACiAKICNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKK3VzaW5n
IFdURjo6YWRvcHRHRElPYmplY3Q7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBkZWFs
bG9jQ29udGV4dChDR0NvbnRleHRSZWYgdGFyZ2V0KQpAQCAtOTEsMTEgKzk0LDExIEBAIERyYWdJ
bWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYKICAgICBJbnRTaXplIGRzdFNpemUo
c3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndpZHRoKCkgKiBzY2FsZS53aWR0aCgpKSwgc3RhdGlj
X2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgpICogc2NhbGUuaGVpZ2h0KCkpKTsKICAgICBIQklU
TUFQIGhibXAgPSAwOwogICAgIEhXbmREQyBkYygwKTsKLSAgICBIREMgZHN0REMgPSBDcmVhdGVD
b21wYXRpYmxlREMoZGMpOworICAgIGF1dG8gZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIGlmICghZHN0REMpCiAgICAgICAgIGdvdG8gZXhpdDsK
IAotICAgIGhibXAgPSBhbGxvY0ltYWdlKGRzdERDLCBkc3RTaXplLCAmdGFyZ2V0Q29udGV4dCk7
CisgICAgaGJtcCA9IGFsbG9jSW1hZ2UoZHN0REMuZ2V0KCksIGRzdFNpemUsICZ0YXJnZXRDb250
ZXh0KTsKICAgICBpZiAoIWhibXApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMTE1LDggKzEx
OCw2IEBAIERyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYKIGV4aXQ6CiAg
ICAgaWYgKCFoYm1wKQogICAgICAgICBoYm1wID0gaW1hZ2U7Ci0gICAgaWYgKGRzdERDKQotICAg
ICAgICBEZWxldGVEQyhkc3REQyk7CiAgICAgcmV0dXJuIGhibXA7CiB9CiAgICAgCkBAIC0xMjQs
MTUgKzEyNSwxNSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltCiB7
CiAgICAgSEJJVE1BUCBoYm1wID0gMDsKICAgICBIV25kREMgZGMoMCk7Ci0gICAgSERDIHdvcmtp
bmdEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhkYyk7CisgICAgYXV0byB3b3JraW5nREMgPSBhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIENHQ29udGV4dFJlZiBk
cmF3Q29udGV4dCA9IDA7CiAgICAgaWYgKCF3b3JraW5nREMpCi0gICAgICAgIGdvdG8gZXhpdDsK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBoYm1wID0gYWxsb2NJbWFnZSh3b3JraW5nREMsIGlt
Zy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOworICAgIGhibXAgPSBhbGxvY0ltYWdlKHdvcmtpbmdE
Qy5nZXQoKSwgaW1nLT5zaXplKCksICZkcmF3Q29udGV4dCk7CiAKICAgICBpZiAoIWhibXApCi0g
ICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWRyYXdDb250
ZXh0KSB7CiAgICAgICAgIDo6RGVsZXRlT2JqZWN0KGhibXApOwpAQCAtMTU0LDkgKzE1NSw2IEBA
IERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICB9CiAgICAgQ0dD
b250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKLWV4aXQ6Ci0gICAgaWYgKHdvcmtpbmdEQykK
LSAgICAgICAgRGVsZXRlREMod29ya2luZ0RDKTsKICAgICByZXR1cm4gaGJtcDsKIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJv
V2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw5ICszMSwxMiBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNpbmNsdWRlIDx3aW5kb3dz
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CisKK3VzaW5nIFdURjo6YWRvcHRHRElPYmplY3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTEzLDEzICsxMTYsMTMgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERy
YWdJbWFnZVJlZgogCiAgICAgSEJJVE1BUCBoYm1wID0gMDsKICAgICBIREMgZGMgPSBHZXREQygw
KTsKLSAgICBIREMgZHN0REMgPSBDcmVhdGVDb21wYXRpYmxlREMoZGMpOworICAgIGF1dG8gZHN0
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogCiAgICAgaWYg
KCFkc3REQykKICAgICAgICAgZ290byBleGl0OwogCiAgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8q
IHRhcmdldENvbnRleHQ7Ci0gICAgaGJtcCA9IGFsbG9jSW1hZ2UoZHN0REMsIGRzdFNpemUsICZ0
YXJnZXRDb250ZXh0KTsKKyAgICBoYm1wID0gYWxsb2NJbWFnZShkc3REQy5nZXQoKSwgZHN0U2l6
ZSwgJnRhcmdldENvbnRleHQpOwogICAgIGlmICghaGJtcCkKICAgICAgICAgZ290byBleGl0Owog
CkBAIC0xNDQsOCArMTQ3LDYgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZgogZXhpdDoKICAgICBpZiAoIWhibXApCiAgICAgICAgIGhibXAgPSBpbWFnZTsKLSAgICBp
ZiAoZHN0REMpCi0gICAgICAgIERlbGV0ZURDKGRzdERDKTsKICAgICBSZWxlYXNlREMoMCwgZGMp
OwogICAgIHJldHVybiBoYm1wOwogfQpAQCAtMTU0LDEyICsxNTUsMTIgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQogewogICAgIEhCSVRNQVAgaGJtcCA9IDA7CiAg
ICAgSERDIGRjID0gR2V0REMoMCk7Ci0gICAgSERDIHdvcmtpbmdEQyA9IENyZWF0ZUNvbXBhdGli
bGVEQyhkYyk7CisgICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQyhkYykpOwogICAgIGlmICghd29ya2luZ0RDKQogICAgICAgICBnb3RvIGV4aXQ7
CiAKICAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogZHJhd0NvbnRleHQgPSAwOwotICAgIGhibXAg
PSBhbGxvY0ltYWdlKHdvcmtpbmdEQywgaW1nLT5zaXplKCksICZkcmF3Q29udGV4dCk7CisgICAg
aGJtcCA9IGFsbG9jSW1hZ2Uod29ya2luZ0RDLmdldCgpLCBpbWctPnNpemUoKSwgJmRyYXdDb250
ZXh0KTsKICAgICBpZiAoIWhibXApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMTg0LDggKzE4
NSw2IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICBkZWFs
bG9jQ29udGV4dChkcmF3Q29udGV4dCk7CiAKIGV4aXQ6Ci0gICAgaWYgKHdvcmtpbmdEQykKLSAg
ICAgICAgRGVsZXRlREMod29ya2luZ0RDKTsKICAgICBSZWxlYXNlREMoMCwgZGMpOwogICAgIHJl
dHVybiBoYm1wOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJ
bWFnZVdpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDkg
KzM4LDEyIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVu
ZGVyZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9H
RElPYmplY3QuaD4KIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAordXNpbmcgV1RGOjphZG9wdEdE
SU9iamVjdDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBIQklUTUFQIGFsbG9jSW1hZ2UoSERD
LCBJbnRTaXplLCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCoqIHRhcmdldFJlZik7CkBAIC0xNzks
MTggKzE4MiwxNiBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMCiAg
ICAgLy8gZmlsbCB0aGUgYmFja2dyb3VuZAogICAgIEhCSVRNQVAgaW1hZ2UgPSAwOwogICAgIEhX
bmREQyBkYygwKTsKLSAgICBIREMgd29ya2luZ0RDID0gQ3JlYXRlQ29tcGF0aWJsZURDKGRjKTsK
KyAgICBhdXRvIHdvcmtpbmdEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURD
KGRjKSk7CiAgICAgaWYgKCF3b3JraW5nREMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHRSZWY7Ci0gICAgaW1hZ2UgPSBhbGxvY0ltYWdl
KHdvcmtpbmdEQywgaW1hZ2VTaXplLCAmY29udGV4dFJlZik7Ci0gICAgaWYgKCFpbWFnZSkgewot
ICAgICAgICBEZWxldGVEQyh3b3JraW5nREMpOworICAgIGltYWdlID0gYWxsb2NJbWFnZSh3b3Jr
aW5nREMuZ2V0KCksIGltYWdlU2l6ZSwgJmNvbnRleHRSZWYpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0KICAgICAgICAgCi0gICAgU2VsZWN0T2JqZWN0KHdvcmtp
bmdEQywgaW1hZ2UpOworICAgIFNlbGVjdE9iamVjdCh3b3JraW5nREMuZ2V0KCksIGltYWdlKTsK
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChjb250ZXh0UmVmKTsKICAgICAvLyBPbiBNYWMg
YWxwaGEgaXMgezAuNywgMC43LCAwLjcsIDAuOH0sIGhvd2V2ZXIgd2UgY2FuJ3QgY29udHJvbCBh
bHBoYQogICAgIC8vIGZvciBkcmFnIGltYWdlcyBvbiB3aW4sIHNvIHdlIHVzZSAxCkBAIC0yMTYs
NyArMjE3LDYgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTAogICAg
IFdlYkNvcmVEcmF3RG91YmxlZFRleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsLCB0ZXh0UG9zLCAq
bGFiZWxGb250LCB0b3BDb2xvciwgYm90dG9tQ29sb3IpOwogCiAgICAgZGVhbGxvY0NvbnRleHQo
Y29udGV4dFJlZik7Ci0gICAgRGVsZXRlREMod29ya2luZ0RDKTsKICAgICByZXR1cm4gaW1hZ2U7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIFh1ZXFpbmcgSHVhbmcgPGh1YW5neHVl
cWluZ0BiYWlkdS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MSw2ICs1MSw5IEBACiAjaW5j
bHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KKwor
dXNpbmcgV1RGOjphZG9wdEdESU9iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03
NDEsMjggKzc0NCwyNCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwK
ICAgICBjbGVhcigpOwogCiAgICAgSFduZERDIGRjKDApOwotICAgIEhEQyBjb21wYXRpYmxlREMg
PSBDcmVhdGVDb21wYXRpYmxlREMoMCk7Ci0gICAgSERDIHNvdXJjZURDID0gQ3JlYXRlQ29tcGF0
aWJsZURDKDApOwotICAgIE93blB0cjxIQklUTUFQPiByZXN1bHRCaXRtYXAgPSBhZG9wdFB0cihD
cmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgp
KSk7Ci0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSBTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCBy
ZXN1bHRCaXRtYXAuZ2V0KCkpOworICAgIGF1dG8gY29tcGF0aWJsZURDID0gYWRvcHRHRElPYmpl
Y3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOworICAgIGF1dG8gc291cmNlREMgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisgICAgYXV0byByZXN1bHRCaXRtYXAg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoZGMsIGltYWdlLT53aWR0
aCgpLCBpbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0
T2JqZWN0KGNvbXBhdGlibGVEQy5nZXQoKSwgcmVzdWx0Qml0bWFwLmdldCgpKTsKIAogICAgIEJp
dG1hcEluZm8gYm1JbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKGltYWdlLT5zaXplKCkpOwogCi0g
ICAgSEJJVE1BUCBjb3JlQml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbihkYywgJmJtSW5mbywgRElC
X1JHQl9DT0xPUlMsIDAsIDAsIDApOwotICAgIEhHRElPQkogb2xkU291cmNlID0gU2VsZWN0T2Jq
ZWN0KHNvdXJjZURDLCBjb3JlQml0bWFwKTsKLSAgICBpbWFnZS0+Z2V0SEJJVE1BUChjb3JlQml0
bWFwKTsKLQotICAgIEJpdEJsdChjb21wYXRpYmxlREMsIDAsIDAsIGltYWdlLT53aWR0aCgpLCBp
bWFnZS0+aGVpZ2h0KCksIHNvdXJjZURDLCAwLCAwLCBTUkNDT1BZKTsKLQotICAgIFNlbGVjdE9i
amVjdChzb3VyY2VEQywgb2xkU291cmNlKTsKLSAgICBEZWxldGVPYmplY3QoY29yZUJpdG1hcCk7
Ci0KLSAgICBTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCBvbGRCaXRtYXApOwotICAgIERlbGV0
ZURDKHNvdXJjZURDKTsKLSAgICBEZWxldGVEQyhjb21wYXRpYmxlREMpOworICAgIGF1dG8gY29y
ZUJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbihkYywgJmJtSW5mbywg
RElCX1JHQl9DT0xPUlMsIDAsIDAsIDApKTsKKyAgICBIR0RJT0JKIG9sZFNvdXJjZSA9IDo6U2Vs
ZWN0T2JqZWN0KHNvdXJjZURDLmdldCgpLCBjb3JlQml0bWFwLmdldCgpKTsKKyAgICBpbWFnZS0+
Z2V0SEJJVE1BUChjb3JlQml0bWFwLmdldCgpKTsKKworICAgIDo6Qml0Qmx0KGNvbXBhdGlibGVE
Qy5nZXQoKSwgMCwgMCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgc291cmNlREMu
Z2V0KCksIDAsIDAsIFNSQ0NPUFkpOworCisgICAgOjpTZWxlY3RPYmplY3Qoc291cmNlREMuZ2V0
KCksIG9sZFNvdXJjZSk7CisgICAgOjpTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLmdldCgpLCBv
bGRCaXRtYXApOwogCiAgICAgaWYgKDo6T3BlbkNsaXBib2FyZChtX293bmVyKSkgewotICAgICAg
ICA6OlNldENsaXBib2FyZERhdGEoQ0ZfQklUTUFQLCByZXN1bHRCaXRtYXAubGVha1B0cigpKTsK
KyAgICAgICAgOjpTZXRDbGlwYm9hcmREYXRhKENGX0JJVE1BUCwgcmVzdWx0Qml0bWFwLmxlYWso
KSk7CiAgICAgICAgIDo6Q2xvc2VDbGlwYm9hcmQoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHJldmlz
aW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIK
KyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiAvLyBHZW5lcmljIHN0YXRlIGNvbnN0
YW50cwogI2RlZmluZSBUU19OT1JNQUwgICAgMQpAQCAtNTksNiArNjAsNyBAQAogI2RlZmluZSBU
U19SSUdIVF9CVVRUT05fSE9WRVIgICAyMAogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcg
V1RGOjphZG9wdEdESU9iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNTYsOCAr
MjU4LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVdpbjo6cGFpbnRUcmFja1BpZWNlKAogICAgICAg
ICAgICAgOjpGaWxsUmVjdChoZGMsICZ0aGVtZVJlY3QsIEhCUlVTSChDT0xPUl9TQ1JPTExCQVIr
MSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXRpYyBXT1JEIHBhdHRlcm5CaXRz
WzhdID0geyAweGFhLCAweDU1LCAweGFhLCAweDU1LCAweGFhLCAweDU1LCAweGFhLCAweDU1IH07
Ci0gICAgICAgICAgICBPd25QdHI8SEJJVE1BUD4gcGF0dGVybkJpdG1hcCA9IGFkb3B0UHRyKDo6
Q3JlYXRlQml0bWFwKDgsIDgsIDEsIDEsIHBhdHRlcm5CaXRzKSk7Ci0gICAgICAgICAgICBPd25Q
dHI8SEJSVVNIPiBicnVzaCA9IGFkb3B0UHRyKDo6Q3JlYXRlUGF0dGVybkJydXNoKHBhdHRlcm5C
aXRtYXAuZ2V0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gcGF0dGVybkJpdG1hcCA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQml0bWFwKDgsIDgsIDEsIDEsIHBhdHRlcm5CaXRzKSk7CisgICAgICAg
ICAgICBhdXRvIGJydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVQYXR0ZXJuQnJ1c2gocGF0
dGVybkJpdG1hcC5nZXQoKSkpOwogICAgICAgICAgICAgU2F2ZURDKGhkYyk7CiAgICAgICAgICAg
ICA6OlNldFRleHRDb2xvcihoZGMsIDo6R2V0U3lzQ29sb3IoQ09MT1JfM0RISUxJR0hUKSk7CiAg
ICAgICAgICAgICA6OlNldEJrQ29sb3IoaGRjLCA6OkdldFN5c0NvbG9yKENPTE9SXzNERkFDRSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJ
KHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZp
ZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+
CiAKICNpZiBPUyhXSU5DRSkKICN1bmRlZiBMT0dfTlBFUlJPUgpAQCAtNDU3LDcgKzQ1OCw2IEBA
IHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICBtX2NsaXBSZWN0Lm1v
dmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKIAogICAgIGlmIChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dp
bmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkg
ewotICAgICAgICBIUkdOIHJnbjsKIAogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
CkBAIC00NjcsMTAgKzQ2NywxMCBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdl
dCgpCiAgICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3QgPSAhbV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7CiAKICAg
ICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJl
Y3RSZ24oMCwgMCwgMCwgMCk7CisgICAgICAgICAgICBIUkdOIHJnbiA9IDo6Q3JlYXRlUmVjdFJn
bigwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIHJnbiwgRkFMU0UpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmdu
ID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlw
UmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKKyAgICAgICAgICAgIEhSR04gcmduID0g
OjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVj
dC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKICAgICAgICAgICAgIDo6U2V0V2luZG93Umdu
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbiwgVFJVRSk7CiAgICAgICAgIH0KIApAQCAtNDc4
LDcgKzQ3OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICAg
ICAgICAgIDo6TW92ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qu
eCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpLCBUUlVFKTsKIAogICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKLSAgICAg
ICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55
KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CisgICAgICAgICAgICBI
UkdOIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCks
IG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgICAgICA6OlNl
dFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIFRSVUUpOwogICAgICAgICB9
CiAKQEAgLTEwNjgsNyArMTA2OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95
KCkKIFBhc3NSZWZQdHI8SW1hZ2U+IFBsdWdpblZpZXc6OnNuYXBzaG90KCkKIHsKICNpZiAhUExB
VEZPUk0oR1RLKSAmJiAhVVNFKFdJTkdESSkKLSAgICBPd25QdHI8SERDPiBoZGMgPSBhZG9wdFB0
cihDcmVhdGVDb21wYXRpYmxlREMoMCkpOworICAgIGF1dG8gaGRjID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwogCiAgICAgaWYgKCFtX2lzV2luZG93ZWQpIHsKICAg
ICAgICAgLy8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMuCkBAIC0xMDg4LDcgKzEwODgsNyBAQCBQ
YXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCiAKICAgICB2b2lkKiBiaXRz
OwogICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVS
ZWN0KCkuc2l6ZSgpKTsKLSAgICBPd25QdHI8SEJJVE1BUD4gaGJtcCA9IGFkb3B0UHRyKENyZWF0
ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKSk7CisgICAg
YXV0byBoYm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXAsIERJ
Ql9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCkpOwogCiAgICAgSEJJVE1BUCBoYm1wT2xkID0gc3Rh
dGljX2Nhc3Q8SEJJVE1BUD4oU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSkpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJl
dmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTb2Z0TGlu
a2luZy5oIgogI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHls
ZVNoZWV0cy5oIgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKICNpZiBFTkFCTEUo
VklERU8pCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9scy5oIgpAQCAtMTU0LDYgKzE1NSw3
IEBAIHN0YXRpYyBib29sIGhhdmVUaGVtZTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2aXN0YU1l
bnVMaXN0QnV0dG9uT3V0c2V0ID0gMTsKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjkwLDkgKzY5Miw5IEBA
IHN0YXRpYyB2b2lkIGRyYXdDb250cm9sKEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgICAgIDo6
RHJhd0VkZ2UoaGRjLCAmd2lkZ2V0UmVjdCwgRURHRV9SQUlTRUQsIEJGX1JFQ1QgfCBCRl9TT0ZU
IHwgQkZfTUlERExFIHwgQkZfQURKVVNUKTsKICAgICAgICAgICAgIGlmICh0aGVtZURhdGEubV9z
dGF0ZSA9PSBUVVNfRElTQUJMRUQpIHsKICAgICAgICAgICAgICAgICBzdGF0aWMgV09SRCBwYXR0
ZXJuQml0c1s4XSA9IHsweGFhLCAweDU1LCAweGFhLCAweDU1LCAweGFhLCAweDU1LCAweGFhLCAw
eDU1fTsKLSAgICAgICAgICAgICAgICBPd25QdHI8SEJJVE1BUD4gcGF0dGVybkJtcCA9IGFkb3B0
UHRyKDo6Q3JlYXRlQml0bWFwKDgsIDgsIDEsIDEsIHBhdHRlcm5CaXRzKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBwYXR0ZXJuQm1wID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVCaXRtYXAoOCwg
OCwgMSwgMSwgcGF0dGVybkJpdHMpKTsKICAgICAgICAgICAgICAgICBpZiAocGF0dGVybkJtcCkg
ewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8SEJSVVNIPiBicnVzaCA9IGFkb3B0UHRyKDo6
Q3JlYXRlUGF0dGVybkJydXNoKHBhdHRlcm5CbXAuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBicnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUGF0dGVybkJydXNoKHBhdHRl
cm5CbXAuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgQ09MT1JSRUYgb2xkRm9yZUNvbG9y
ID0gOjpTZXRUZXh0Q29sb3IoaGRjLCA6OkdldFN5c0NvbG9yKENPTE9SXzNERkFDRSkpOwogICAg
ICAgICAgICAgICAgICAgICBDT0xPUlJFRiBvbGRCYWNrQ29sb3IgPSA6OlNldEJrQ29sb3IoaGRj
LCA6OkdldFN5c0NvbG9yKENPTE9SXzNESElMSUdIVCkpOwogICAgICAgICAgICAgICAgICAgICBQ
T0lOVCBwOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDA0KQorKysgU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIw
MTMtMDktMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
W1dpbmRvd3NdIENoYW5nZSBmcm9tIHVzaW5nIE93blB0cjxHREkgU3R1ZmY+IHRvIG5ldyBHRElP
YmplY3QgdGVtcGxhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjA3NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlcjo6Y3JlYXRlSFVEV2luZG93KTogU3dpdGNoIHRvIEdESU9iamVj
dC4KKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmRyYXcpOiBEaXR0by4KKyAg
ICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRW1iZWRkZWRXaWRnZXQuY3BwOgorICAgICAgICAoRW1iZWRkZWRXaWRnZXQ6OmZyYW1l
UmVjdHNDaGFuZ2VkKTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBXZWJOb2RlSGln
aGxpZ2h0LmNwcDoKKyAgICAgICAgKFdlYk5vZGVIaWdobGlnaHQ6OnVwZGF0ZSk6IFN3aXRjaCB0
byBHRElPYmplY3QuCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpz
Y3JvbGxCYWNraW5nU3RvcmUpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAoV2ViVmll
dzo6dXBkYXRlQmFja2luZ1N0b3JlKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpwZXJmb3Jt
TGF5ZXJlZFdpbmRvd1VwZGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6cGFpbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6IERpdHRvLgor
ICAgICAgICAoV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KTogRGl0dG8uCisgICAgICAgIChXZWJW
aWV3OjpnZW5lcmF0ZVNlbGVjdGlvbkltYWdlKTogRGl0dG8uCisKIDIwMTMtMDktMDUgIFJvZ2Vy
IEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gSW1wbGVt
ZW50IHRleHQgb2Zmc2V0IG1ldGhvZHMgb2YgSUFjY2Vzc2libGVUZXh0IGludGVyZmFjZS4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBXVEY6OmFkb3B0
R0RJT2JqZWN0OwogCiBzdGF0aWMgY29uc3QgZmxvYXQgdGltZXJJbnRlcnZhbCA9IDAuMDMzOwog
CkBAIC00NDMsNyArNDQ0LDcgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpjcmVh
dGVIVQogICAgIC8vIHdpbGwgZ2V0IGNsZWFuZWQgdXAgd2hlbiBtX2JpdG1hcCBpcyBkZXN0cm95
ZWQgaW4gdGhlIGR0b3IKICAgICB2b2lkKiBwaXhlbHM7CiAgICAgQml0bWFwSW5mbyBiaXRtYXBJ
bmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6ZSh3aW5kb3dXaWR0aCwgd2lu
ZG93SGVpZ2h0KSk7Ci0gICAgbV9iaXRtYXAgPSBhZG9wdFB0cig6OkNyZWF0ZURJQlNlY3Rpb24o
MCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7CisgICAgbV9i
aXRtYXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8s
IERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7CiAKICAgICAvLyBEaXJ0eSB0aGUgd2lu
ZG93IHNvIHRoZSBIVUQgZHJhd3MKICAgICBSRUNUIGNsZWFyUmVjdCA9IHsgbV9odWRQb3NpdGlv
bi54KCksIG1faHVkUG9zaXRpb24ueSgpLCBtX2h1ZFBvc2l0aW9uLngoKSArIHdpbmRvd1dpZHRo
LCBtX2h1ZFBvc2l0aW9uLnkoKSArIHdpbmRvd0hlaWdodCB9OwpAQCAtNDg3LDcgKzQ4OCw3IEBA
IHN0YXRpYyBTdHJpbmcgdGltZVRvU3RyaW5nKGZsb2F0IHRpbWUpCiAKIHZvaWQgRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlcjo6ZHJhdygpCiB7Ci0gICAgT3duUHRyPEhEQz4gYml0bWFwREMgPSBh
ZG9wdFB0cihDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1faHVkV2luZG93KSkpOworICAgIGF1
dG8gYml0bWFwREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMo
bV9odWRXaW5kb3cpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBTZWxlY3RPYmplY3QoYml0
bWFwREMuZ2V0KCksIG1fYml0bWFwLmdldCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmgJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3dp
bi9HRElPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwpAQCAtMTUzLDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwogCiAgICAgSFdORCBtX2h1ZFdpbmRvdzsK
LSAgICBPd25QdHI8SEJJVE1BUD4gbV9iaXRtYXA7CisgICAgV1RGOjpHRElPYmplY3Q8SEJJVE1B
UD4gbV9iaXRtYXA7CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2Z1bGxzY3JlZW5TaXplOwogICAg
IFdlYkNvcmU6OkludFBvaW50IG1faHVkUG9zaXRpb247CiAgICAgT3duUHRyPFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c+IG1fZnVsbHNjcmVlbldpbmRvdzsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCShyZXZpc2lvbiAxNTUzNTUp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOSw4ICszOSwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2Fk
Y2FzdGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBXVEY6OmFkb3B0R0RJT2JqZWN0OwogCiBzdGF0aWMgTFBDVFNUUiBrT3Zl
cmxheVdpbmRvd0NsYXNzTmFtZSA9IFRFWFQoIldlYk5vZGVIaWdobGlnaHRXaW5kb3dDbGFzcyIp
Owogc3RhdGljIEFUT00gcmVnaXN0ZXJPdmVybGF5Q2xhc3MoKTsKQEAgLTE0MCw3ICsxNDIsNyBA
QCB2b2lkIFdlYk5vZGVIaWdobGlnaHQ6OnVwZGF0ZSgpCiB7CiAgICAgQVNTRVJUKG1fb3Zlcmxh
eSk7CiAKLSAgICBIREMgaGRjID0gOjpDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1fb3Zlcmxh
eSkpOworICAgIGF1dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMo
SFduZERDKG1fb3ZlcmxheSkpKTsKICAgICBpZiAoIWhkYykKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xNTcsMTIgKzE1OSwxMiBAQCB2b2lkIFdlYk5vZGVIaWdobGlnaHQ6OnVwZGF0ZSgpCiAgICAg
Qml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoSW50U2l6
ZShzaXplKSk7CiAKICAgICB2b2lkKiBwaXhlbHMgPSAwOwotICAgIE93blB0cjxIQklUTUFQPiBo
Ym1wID0gYWRvcHRQdHIoOjpDcmVhdGVESUJTZWN0aW9uKGhkYywgJmJpdG1hcEluZm8sIERJQl9S
R0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7CisgICAgYXV0byBoYm1wID0gYWRvcHRHRElPYmpl
Y3QoOjpDcmVhdGVESUJTZWN0aW9uKGhkYy5nZXQoKSwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09M
T1JTLCAmcGl4ZWxzLCAwLCAwKSk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShoYm1wLCAiOjpD
cmVhdGVESUJTZWN0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVycm9yKCkp
OwogCi0gICAgOjpTZWxlY3RPYmplY3QoaGRjLCBoYm1wLmdldCgpKTsKKyAgICA6OlNlbGVjdE9i
amVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQoaGRjKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChoZGMuZ2V0KCkpOwogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+ZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKICNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQpAQCAtMTgxLDggKzE4Myw3IEBAIHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6dXBk
YXRlKCkKICAgICBkc3RQb2ludC54ID0gd2ViVmlld1JlY3QubGVmdDsKICAgICBkc3RQb2ludC55
ID0gd2ViVmlld1JlY3QudG9wOwogCi0gICAgOjpVcGRhdGVMYXllcmVkV2luZG93KG1fb3Zlcmxh
eSwgSFduZERDKDApLCAmZHN0UG9pbnQsICZzaXplLCBoZGMsICZzcmNQb2ludCwgMCwgJmJmLCBV
TFdfQUxQSEEpOwotICAgIDo6RGVsZXRlREMoaGRjKTsKKyAgICA6OlVwZGF0ZUxheWVyZWRXaW5k
b3cobV9vdmVybGF5LCBIV25kREMoMCksICZkc3RQb2ludCwgJnNpemUsIGhkYy5nZXQoKSwgJnNy
Y1BvaW50LCAwLCAmYmYsIFVMV19BTFBIQSk7CiB9CiAKIHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6
cGxhY2VCZWhpbmRXaW5kb3coSFdORCB3aW5kb3cpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
cmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAogLy8gU29mdCBs
aW5rIGZ1bmN0aW9ucyBmb3IgZ2VzdHVyZXMgYW5kIHBhbm5pbmcgZmVlZGJhY2sKIFNPRlRfTElO
S19MSUJSQVJZKFVTRVIzMik7CkBAIC0xOTMsNiArMTk0LDcgQEAgU09GVF9MSU5LX09QVElPTkFM
KFV4dGhlbWUsIFVwZGF0ZVBhbm5pbgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBXVEY6OmFkb3B0R0RJT2JqZWN0OwogdXNpbmcgSlNDOjpK
U0xvY2s7CiAKIHN0YXRpYyBITU9EVUxFIGFjY2Vzc2liaWxpdHlMaWI7CkBAIC04OTMsMTMgKzg5
NSwxMyBAQCB2b2lkIFdlYlZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAKICAgICAv
LyBDb2xsZWN0IG91ciBkZXZpY2UgY29udGV4dCBpbmZvIGFuZCBzZWxlY3QgdGhlIGJpdG1hcCB0
byBzY3JvbGwuCiAgICAgSFduZERDIHdpbmRvd0RDKG1fdmlld1dpbmRvdyk7Ci0gICAgSERDIGJp
dG1hcERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpOwotICAgIEhHRElPQkogb2xk
Qml0bWFwID0gOjpTZWxlY3RPYmplY3QoYml0bWFwREMsIG1fYmFja2luZ1N0b3JlQml0bWFwLT5o
YW5kbGUoKSk7CisgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29t
cGF0aWJsZURDKHdpbmRvd0RDKSk7CisgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9i
amVjdChiaXRtYXBEQy5nZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmhhbmRsZSgpKTsKICAg
ICAKICAgICAvLyBTY3JvbGwgdGhlIGJpdG1hcC4KICAgICBSRUNUIHNjcm9sbFJlY3RXaW4oc2Ny
b2xsVmlld1JlY3QpOwogICAgIFJFQ1QgY2xpcFJlY3RXaW4oY2xpcFJlY3QpOwotICAgIDo6U2Ny
b2xsREMoYml0bWFwREMsIGR4LCBkeSwgJnNjcm9sbFJlY3RXaW4sICZjbGlwUmVjdFdpbiwgdXBk
YXRlUmVnaW9uLCAwKTsKKyAgICA6OlNjcm9sbERDKGJpdG1hcERDLmdldCgpLCBkeCwgZHksICZz
Y3JvbGxSZWN0V2luLCAmY2xpcFJlY3RXaW4sIHVwZGF0ZVJlZ2lvbiwgMCk7CiAgICAgUkVDVCBy
ZWdpb25Cb3g7CiAgICAgOjpHZXRSZ25Cb3godXBkYXRlUmVnaW9uLCAmcmVnaW9uQm94KTsKIApA
QCAtOTEzLDExICs5MTUsMTAgQEAgdm9pZCBXZWJWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoRnJh
bWVWaQogICAgICAgICBtX3VpRGVsZWdhdGVQcml2YXRlLT53ZWJWaWV3U2Nyb2xsZWQodGhpcyk7
CiAKICAgICAvLyBVcGRhdGUgdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgdXBkYXRlQmFja2luZ1N0
b3JlKGZyYW1lVmlldywgYml0bWFwREMsIGZhbHNlKTsKKyAgICB1cGRhdGVCYWNraW5nU3RvcmUo
ZnJhbWVWaWV3LCBiaXRtYXBEQy5nZXQoKSwgZmFsc2UpOwogCiAgICAgLy8gQ2xlYW4gdXAuCi0g
ICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMsIG9sZEJpdG1hcCk7Ci0gICAgOjpEZWxldGVEQyhi
aXRtYXBEQyk7CisgICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG9sZEJpdG1hcCk7
CiB9CiAKIHZvaWQgV2ViVmlldzo6c2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkK
QEAgLTk4NywxMSArOTg4LDE0IEBAIHZvaWQgV2ViVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKEZy
YW1lVmkKIAogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVOQ1RJT05fXyk7CiAKKyAgICBH
RElPYmplY3Q8SERDPiBiaXRtYXBEQ09iamVjdDsKKwogICAgIEhEQyBiaXRtYXBEQyA9IGRjOwog
ICAgIEhHRElPQkogb2xkQml0bWFwID0gMDsKICAgICBpZiAoIWRjKSB7CiAgICAgICAgIEhXbmRE
QyB3aW5kb3dEQyhtX3ZpZXdXaW5kb3cpOwotICAgICAgICBiaXRtYXBEQyA9IDo6Q3JlYXRlQ29t
cGF0aWJsZURDKHdpbmRvd0RDKTsKKyAgICAgICAgYml0bWFwRENPYmplY3QgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyh3aW5kb3dEQykpOworICAgICAgICBiaXRtYXBEQyA9
IGJpdG1hcERDT2JqZWN0LmdldCgpOwogICAgICAgICBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVj
dChiaXRtYXBEQywgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmhhbmRsZSgpKTsKICAgICB9CiAKQEAg
LTEwMjEsMTAgKzEwMjUsOCBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZShGcmFt
ZVZpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlRGlydHlSZWdpb24uY2xlYXIoKTsKICAgICB9CiAK
LSAgICBpZiAoIWRjKSB7CisgICAgaWYgKCFkYykKICAgICAgICAgOjpTZWxlY3RPYmplY3QoYml0
bWFwREMsIG9sZEJpdG1hcCk7Ci0gICAgICAgIDo6RGVsZXRlREMoYml0bWFwREMpOwotICAgIH0K
IAogICAgIEdkaUZsdXNoKCk7CiB9CkBAIC0xMDM2LDcgKzEwMzgsNyBAQCB2b2lkIFdlYlZpZXc6
OnBlcmZvcm1MYXllcmVkV2luZG93VXBkYXRlCiAgICAgICAgIHJldHVybjsKIAogICAgIEhXbmRE
QyBoZGNTY3JlZW4obV92aWV3V2luZG93KTsKLSAgICBPd25QdHI8SERDPiBoZGNNZW0gPSBhZG9w
dFB0cig6OkNyZWF0ZUNvbXBhdGlibGVEQyhoZGNTY3JlZW4pKTsKKyAgICBhdXRvIGhkY01lbSA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkY1NjcmVlbikpOwogICAgIEhC
SVRNQVAgaGJtT2xkID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oOjpTZWxlY3RPYmplY3QoaGRjTWVt
LmdldCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+aGFuZGxlKCkpKTsKIAogICAgIEJJVE1BUCBi
bXBJbmZvOwpAQCAtMTExMCwxMSArMTExMiwxMSBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBk
YywgTFBBUkFNIG9wdGlvCiAKICAgICBtX3BhaW50Q291bnQrKzsKIAotICAgIEhEQyBiaXRtYXBE
QyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkYyk7Ci0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6
OlNlbGVjdE9iamVjdChiaXRtYXBEQywgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmhhbmRsZSgpKTsK
KyAgICBhdXRvIGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMo
aGRjKSk7CisgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5n
ZXQoKSwgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmhhbmRsZSgpKTsKIAogICAgIC8vIFVwZGF0ZSBv
dXIgYmFja2luZyBzdG9yZSBpZiBuZWVkZWQuCi0gICAgdXBkYXRlQmFja2luZ1N0b3JlKGZyYW1l
VmlldywgYml0bWFwREMsIGJhY2tpbmdTdG9yZUNvbXBsZXRlbHlEaXJ0eSwgd2luZG93c1RvUGFp
bnQpOworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZShmcmFtZVZpZXcsIGJpdG1hcERDLmdldCgpLCBi
YWNraW5nU3RvcmVDb21wbGV0ZWx5RGlydHksIHdpbmRvd3NUb1BhaW50KTsKIAogICAgIC8vIE5v
dyB3ZSBibGl0IHRoZSB1cGRhdGVkIGJhY2tpbmcgc3RvcmUKICAgICBJbnRSZWN0IHdpbmRvd0Rp
cnR5UmVjdCA9IHJjUGFpbnQ7CkBAIC0xMTI3LDEwICsxMTI5LDkgQEAgdm9pZCBXZWJWaWV3Ojpw
YWludChIREMgZGMsIExQQVJBTSBvcHRpbwogICAgICAgICBibGl0UmVjdHMuYXBwZW5kKHdpbmRv
d0RpcnR5UmVjdCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxpdFJlY3RzLnNp
emUoKTsgKytpKQotICAgICAgICBwYWludEludG9XaW5kb3coYml0bWFwREMsIGhkYywgYmxpdFJl
Y3RzW2ldKTsKKyAgICAgICAgcGFpbnRJbnRvV2luZG93KGJpdG1hcERDLmdldCgpLCBoZGMsIGJs
aXRSZWN0c1tpXSk7CiAKLSAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsK
LSAgICA6OkRlbGV0ZURDKGJpdG1hcERDKTsKKyAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQy5n
ZXQoKSwgb2xkQml0bWFwKTsKIAogICAgIGlmICghZGMpCiAgICAgICAgIEVuZFBhaW50KG1fdmll
d1dpbmRvdywgJnBzKTsKQEAgLTExNjAsNyArMTE2MSw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJ
bnRvQmFja2luZ1N0b3JlKEZyYW0KICNpZiBGTEFTSF9CQUNLSU5HX1NUT1JFX1JFRFJBVwogICAg
IHsKICAgICAgICAgSFduZERDIGRjKG1fdmlld1dpbmRvdyk7Ci0gICAgICAgIE93blB0cjxIQlJV
U0g+IHllbGxvd0JydXNoKENyZWF0ZVNvbGlkQnJ1c2goUkdCKDI1NSwgMjU1LCAwKSkpOworICAg
ICAgICBhdXRvIHllbGxvd0JydXNoID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVTb2xpZEJydXNo
KFJHQigyNTUsIDI1NSwgMCkpKTsKICAgICAgICAgRmlsbFJlY3QoZGMsICZyZWN0LCB5ZWxsb3dC
cnVzaC5nZXQoKSk7CiAgICAgICAgIEdkaUZsdXNoKCk7CiAgICAgICAgIFNsZWVwKDUwKTsKQEAg
LTExOTcsNyArMTE5OCw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvV2luZG93KEhEQyBiaXRt
YXAKIAogICAgIExPQ0FMX0dESV9DT1VOVEVSKDAsIF9fRlVOQ1RJT05fXyk7CiAjaWYgRkxBU0hf
V0lORE9XX1JFRFJBVwotICAgIE93blB0cjxIQlJVU0g+IGdyZWVuQnJ1c2ggPSBDcmVhdGVTb2xp
ZEJydXNoKFJHQigwLCAyNTUsIDApKTsKKyAgICBhdXRvIGdyZWVuQnJ1c2ggPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKDAsIDI1NSwgMCkpKTsKICAgICBSRUNUIHJlY3Qg
PSBkaXJ0eVJlY3Q7CiAgICAgRmlsbFJlY3Qod2luZG93REMsICZyZWN0LCBncmVlbkJydXNoLmdl
dCgpKTsKICAgICBHZGlGbHVzaCgpOwpAQCAtMzU3Nyw4ICszNTc4LDggQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpnZW5lcgogCiAgICAgV2ViQ29yZTo6RnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAotICAg
IE93blB0cjxIQklUTUFQPiBiaXRtYXAgPSBpbWFnZUZyb21TZWxlY3Rpb24oJmZyYW1lLCBmb3Jj
ZVdoaXRlVGV4dCA/IFRSVUUgOiBGQUxTRSk7Ci0gICAgKmhCaXRtYXAgPSBzdGF0aWNfY2FzdDxP
TEVfSEFORExFPihyZWludGVycHJldF9jYXN0PFVMT05HNjQ+KGJpdG1hcC5sZWFrUHRyKCkpKTsK
KyAgICBhdXRvIGJpdG1hcCA9IGltYWdlRnJvbVNlbGVjdGlvbigmZnJhbWUsIGZvcmNlV2hpdGVU
ZXh0ID8gVFJVRSA6IEZBTFNFKTsKKyAgICAqaEJpdG1hcCA9IHN0YXRpY19jYXN0PE9MRV9IQU5E
TEU+KHJlaW50ZXJwcmV0X2Nhc3Q8VUxPTkc2ND4oYml0bWFwLmxlYWsoKSkpOwogCiAgICAgcmV0
dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJl
ZGRlZFdpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvRW1iZWRkZWRXaWRnZXQuY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOSwxOCArMTA5LDE2IEBAIHZvaWQgRW1iZWRkZWRXaWRnZXQ6OmZyYW1lUmVjdHNDaGFu
Z2VkKCkKICAgICBpZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVj
dCA9PSBvbGRDbGlwUmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFJHTiByZ247Ci0KICAg
ICAvLyBUbyBwcmV2ZW50IGZsYXNoZXMgd2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdp
bmcgZHVyaW5nIHRoZSB3aW5kb3cKICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0
aGUgd2luZG93IHRvIHRoZSB6ZXJvIHJlY3QuCiAKICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0g
dHJ1ZTsKIAogICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICByZ24gPSA6OkNyZWF0
ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CisgICAgICAgIEhSR04gcmduID0gOjpDcmVhdGVSZWN0Umdu
KDAsIDAsIDAsIDApOwogICAgICAgICA6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCBGQUxT
RSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJl
Y3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4
WSgpKTsKKyAgICAgICAgSFJHTiByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCks
IG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOwog
ICAgICAgICA6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCBUUlVFKTsKICAgICAgfQogCkBA
IC0xMjgsNyArMTI2LDcgQEAgdm9pZCBFbWJlZGRlZFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQo
KQogICAgICAgICA6Ok1vdmVXaW5kb3cobV93aW5kb3csIG1fd2luZG93UmVjdC54KCksIG1fd2lu
ZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCks
IFRSVUUpOwogCiAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICByZ24gPSA6OkNy
ZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1h
eFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOworICAgICAgICBIUkdOIHJnbiA9IDo6Q3JlYXRlUmVj
dFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBt
X2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgIDo6U2V0V2luZG93UmduKG1fd2luZG93LCByZ24s
IFRSVUUpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211150</attachid>
            <date>2013-09-09 21:13:13 -0700</date>
            <delta_ts>2013-09-10 10:12:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120778-20130909211310.patch</filename>
            <type>text/plain</type>
            <size>71574</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTU0MDQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA5LTA5ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBDaGFuZ2UgZnJvbSB1c2luZyBP
d25QdHI8R0RJIFN0dWZmPiB0byBuZXcgR0RJT2JqZWN0IHRlbXBsYXRlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNzc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4
cHJvajogQWRkIG5ldyBHRElPYmplY3QgaGVhZGVyIGZpbGUuCisgICAgICAgICogV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2ouZmlsdGVyczogRGl0dG8uCisgICAgICAgICogV1RGLnZjeHByb2ovY29w
eS1maWxlcy5jbWQ6IENvcHkgbmV3IGhlYWRlciBmaWxlLgorICAgICAgICAqIHd0Zi9Pd25QdHJD
b21tb24uaDogUmVtb3ZlIHNvbWUgR0RJIHNwZWNpYWxpemF0aW9ucy4KKyAgICAgICAgKiB3dGYv
d2luL0dESU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpHRElPYmpl
Y3QpOgorICAgICAgICAoV1RGOjpHRElPYmplY3Q6On5HRElPYmplY3QpOgorICAgICAgICAoV1RG
OjpHRElPYmplY3Q6OmdldCk6CisgICAgICAgIChXVEY6OkdESU9iamVjdDo6b3BlcmF0b3IhKToK
KyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToK
KyAgICAgICAgKFdURjo6R0RJT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpHRElP
YmplY3Q6OnN3YXApOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Ojps
ZWFrKToKKyAgICAgICAgKFdURjo6OjpHRElPYmplY3QpOgorICAgICAgICAoV1RGOjo9KToKKyAg
ICAgICAgKFdURjo6YWRvcHRHRElPYmplY3QpOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAg
ICAgKFdURjo6VCk6CisgICAgICAgIChXVEY6OkhEQyk6CisgICAgICAgICogd3RmL3dpbi9Pd25Q
dHJXaW4uY3BwOgorICAgICAgICAoV1RGOjpkZWxldGVPd25lZFB0cik6IFJlbW92ZSBzb21lIEdE
SSBzcGVjaWFsaXphdGlvbnMuCisKIDIwMTMtMDktMDkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgd3RmL1R5cGVUcmFpdHMuaApJbmRleDog
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2Uv
V1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcx
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxWYWx1ZUNoZWNrLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFZlY3Rvci5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxWTVRhZ3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcd2luXEdESU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxXVEZUaHJlYWREYXRhLmgiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+
DQpJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsOSArNDk0LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxOZXZlckRlc3Ryb3llZC5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmls
dGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
UmVmLmgiPg0KLSAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+DQotICAgIDwvQ2xJbmNsdWRlPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxOb25jb3B5YWJsZS5oIj4NCiAgICAgICA8
RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCkBAIC02ODcsNiArNjg0LDkg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEZWZlcnJhYmxlUmVmQ291bnRlZC5o
Ij4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcd2luXEdESU9iamVjdC5oIj4NCisgICAgICA8Rmls
dGVyPndpbjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCiAgIDwvSXRlbUdyb3VwPg0KICAg
PEl0ZW1Hcm91cD4NCiAgICAgPE5vbmUgSW5jbHVkZT0iV1RGUG9zdEJ1aWxkLmNtZCIgLz4NCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL2NvcHktZmlsZXMuY21kCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovY29weS1maWxlcy5jbWQJKHJldmlzaW9uIDE1NTM1NSkK
KysrIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovY29weS1maWxlcy5jbWQJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDYgKzE1LDcgQEAgZm9yICUlZCBpbiAoCiAgICAgd3RmXHRocmVhZHMNCiAgICAgd3Rm
XHVuaWNvZGUNCiAgICAgd3RmXHVuaWNvZGVcaWN1DQorICAgIHd0Zlx3aW4NCiApIGRvICgNCiAg
ICAgbWtkaXIgIiVQcml2YXRlSGVhZGVyc0RpcmVjdG9yeSVcJSVkIiAyPk5VTA0KICAgICB4Y29w
eSAveSAvZCAuLlwlJWRcKi5oICIlUHJpdmF0ZUhlYWRlcnNEaXJlY3RvcnklXCUlZCIgPk5VTA0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL093blB0ckNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL093blB0ckNvbW1vbi5oCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Pd25QdHJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDcgQEAKIAog
I2lmIE9TKFdJTkRPV1MpCiB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7Ci10eXBl
ZGVmIHN0cnVjdCBIQlJVU0hfXyogSEJSVVNIOwogdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsK
LXR5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOwotdHlwZWRlZiBzdHJ1Y3QgSFBBTEVUVEVf
XyogSFBBTEVUVEU7Ci10eXBlZGVmIHN0cnVjdCBIUEVOX18qIEhQRU47CiB0eXBlZGVmIHN0cnVj
dCBIUkdOX18qIEhSR047CiAjZW5kaWYKIApAQCAtNjUsMTEgKzYxLDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKICNpZiBPUyhXSU5ET1dTKQogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0
ZU93bmVkUHRyKEhCSVRNQVApOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93
bmVkUHRyKEhCUlVTSCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT3duZWRQ
dHIoSERDKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZWxldGVPd25lZFB0cihIRk9O
VCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlT3duZWRQdHIoSFBBTEVUVEUp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93bmVkUHRyKEhQRU4pOwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlbGV0ZU93bmVkUHRyKEhSR04pOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9HRElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi93aW4vR0RJT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0
Zi93aW4vR0RJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHRElPYmpl
Y3RfaAorI2RlZmluZSBHRElPYmplY3RfaAorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9OdWxsUHRyLmg+CisKKy8qCit0eXBlZGVmIHN0
cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7Cit0eXBlZGVmIHN0cnVjdCBIQlJVU0hfXyogSEJSVVNI
OwordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhG
T05UOwordHlwZWRlZiBzdHJ1Y3QgSFBBTEVUVEVfXyogSFBBTEVUVEU7Cit0eXBlZGVmIHN0cnVj
dCBIUEVOX18qIEhQRU47Cit0eXBlZGVmIHN0cnVjdCBIUkdOX18qIEhSR047CisqLworCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBkZWxldGVPYmplY3QoVCk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEdESU9iamVjdCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR0RJT2JqZWN0KTsKK3B1YmxpYzoKKyAgICBHRElPYmplY3QoKSA6IG1fb2Jq
ZWN0KDApIHsgfQorICAgIH5HRElPYmplY3QoKSB7IGRlbGV0ZU9iamVjdDxUPihtX29iamVjdCk7
IH0KKworICAgIFQgZ2V0KCkgeyByZXR1cm4gbV9vYmplY3Q7IH0KKworICAgIHZvaWQgY2xlYXIo
KTsKKyAgICBUIGxlYWsoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX29iamVjdDsgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9u
IG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBv
dGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogVW5zcGVjaWZpZWRC
b29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3QgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGU+KCZtX29i
amVjdCkgOiAwOyB9CisKKyAgICBHRElPYmplY3Q8VD4mIG9wZXJhdG9yPShUKTsKKyAgICBHRElP
YmplY3Q8VD4mIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkgeyBjbGVhcigpOyByZXR1cm4gKnRo
aXM7IH0KKworICAgIEdESU9iamVjdChHRElPYmplY3QmJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gR0RJT2JqZWN0KEdESU9iamVjdDxVPiYmKTsKKworICAgIEdESU9iamVjdCYgb3BlcmF0
b3I9KEdESU9iamVjdCYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBHRElPYmplY3QmIG9w
ZXJhdG9yPShHRElPYmplY3Q8VT4mJik7CisKKyAgICB2b2lkIHN3YXAoR0RJT2JqZWN0JiBvKSB7
IHN0ZDo6c3dhcChtX29iamVjdCwgby5tX29iamVjdCk7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgR0RJT2JqZWN0PFU+IGFkb3B0R0RJT2JqZWN0KFUpOwor
ICAgIEdESU9iamVjdChUIG9iamVjdCkgOiBtX29iamVjdChvYmplY3QpIHsgfQorCisgICAgVCBt
X29iamVjdDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEdESU9iamVj
dDxUPjo6Y2xlYXIoKQoreworICAgIFQgb2JqZWN0ID0gbV9vYmplY3Q7CisgICAgbV9vYmplY3Qg
PSAwOworICAgIGRlbGV0ZU9iamVjdChvYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgVCBHRElPYmplY3Q8VD46OmxlYWsoKQoreworICAgIFQgb2JqZWN0ID0gbV9vYmpl
Y3Q7CisgICAgbV9vYmplY3QgPSAwOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBHRElPYmplY3Q8VD46OkdESU9iamVjdChHRElPYmplY3Q8VD4m
JiBvdGhlcikKKyAgICA6IG1fb2JqZWN0KG90aGVyLmxlYWsoKSkKK3sKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEdESU9iamVjdDxUPiYgR0RJT2JqZWN0PFQ+OjpvcGVyYXRvcj0o
R0RJT2JqZWN0PFQ+JiYgb3RoZXIpCit7CisgICAgYXV0byBvYmplY3QgPSBzdGQ6Om1vdmUob3Ro
ZXIpOworICAgIHN3YXAob2JqZWN0KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKy8qdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEdESU9iamVjdDxUPiYgR0RJT2JqZWN0PFQ+OjpvcGVyYXRv
cj0oVCBvdGhlcikKK3sKKyAgICBhdXRvIG9iamVjdCA9IG1fb2JqZWN0OworICAgIG1fb2JqZWN0
ID0gb3RoZXI7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgbV9vYmplY3QgIT0gb2JqZWN0KTsKKyAg
ICBkZWxldGVPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiAqdGhpczsKK30qLworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgR0RJT2JqZWN0PFQ+IGFkb3B0R0RJT2JqZWN0KFQgb2Jq
ZWN0KQoreworICAgIHJldHVybiBHRElPYmplY3Q8VD4ob2JqZWN0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgc3dhcChHRElPYmplY3Q8VD4mIGEsIEdESU9iamVjdDxU
PiYgYikKK3sKKyAgICBhLnN3YXAoYik7Cit9CisKKy8vIE5lYXJseSBhbGwgR0RJIHR5cGVzIHVz
ZSB0aGUgc2FtZSBEZWxldGVPYmplY3QgY2FsbC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB2b2lkIGRlbGV0ZU9iamVjdDxUPihUIG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0KQorICAg
ICAgICA6OkRlbGV0ZU9iamVjdChvYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB2b2lk
IGRlbGV0ZU9iamVjdDxIREM+KEhEQyBoZGMpCit7CisgICAgaWYgKGhkYykKKyAgICAgICAgOjpE
ZWxldGVEQyhoZGMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpHRElP
YmplY3Q7Cit1c2luZyBXVEY6OmFkb3B0R0RJT2JqZWN0OworCisjZW5kaWYgLy8gR0RJT2JqZWN0
X2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9Pd25QdHJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3dpbi9Pd25QdHJXaW4uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBT
b3VyY2UvV1RGL3d0Zi93aW4vT3duUHRyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMzYg
KzM5LDEyIEBAIHZvaWQgZGVsZXRlT3duZWRQdHIoSEJJVE1BUCBwdHIpCiAgICAgICAgIERlbGV0
ZU9iamVjdChwdHIpOwogfQogCi12b2lkIGRlbGV0ZU93bmVkUHRyKEhCUlVTSCBwdHIpCi17Ci0g
ICAgaWYgKHB0cikKLSAgICAgICAgRGVsZXRlT2JqZWN0KHB0cik7Ci19Ci0KIHZvaWQgZGVsZXRl
T3duZWRQdHIoSERDIHB0cikKIHsKICAgICBpZiAocHRyKQogICAgICAgICBEZWxldGVEQyhwdHIp
OwogfQogCi12b2lkIGRlbGV0ZU93bmVkUHRyKEhGT05UIHB0cikKLXsKLSAgICBpZiAocHRyKQot
ICAgICAgICBEZWxldGVPYmplY3QocHRyKTsKLX0KLQotdm9pZCBkZWxldGVPd25lZFB0cihIUEFM
RVRURSBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgRGVsZXRlT2JqZWN0KHB0cik7Ci19
Ci0KLXZvaWQgZGVsZXRlT3duZWRQdHIoSFBFTiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAg
ICAgRGVsZXRlT2JqZWN0KHB0cik7Ci19Ci0KIHZvaWQgZGVsZXRlT3duZWRQdHIoSFJHTiBwdHIp
CiB7CiAgICAgaWYgKHB0cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisy
MDEzLTA5LTA5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFtXaW5kb3dzXSBDaGFuZ2UgZnJvbSB1c2luZyBPd25QdHI8R0RJIFN0dWZmPiB0byBuZXcgR0RJ
T2JqZWN0IHRlbXBsYXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIwNzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2hhbmdlIGNvZGUgdG8gdXNlIGEgR0RJLXNwZWNpZmljIHNtYXJ0IHBvaW50ZXIs
IHJhdGhlciB0aGFuIE93blB0ci4gVGhpcworICAgICAgICBpcyBhIGZpcnN0IHN0ZXAgdG8gc2lt
cGxpZnlpbmcgT3duUHRyLiBJdCBhbHNvIGdldHMgcmlkIG9mIHNvbWUgV2luZG93cy0KKyAgICAg
ICAgc3BlY2lmaWMgY29kZSBpbiBXVEYuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qOiBBZGQgdGhlIG5ldyBoZWFkZXIgZmlsZS4KKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIHBhZ2Uv
d2luL0ZyYW1lQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVjdCk6IFN3
aXRjaCB0byBHRElPYmplY3QuCisgICAgICAgICogcGFnZS93aW4vRnJhbWVDYWlyb1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbWFnZUZyb21SZWN0KTogU3dpdGNoIHRvIEdESU9iamVjdC4K
KyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbWFn
ZUZyb21TZWxlY3Rpb24pOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6Om5vZGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERpcnR5UmVjdHMpOiBTd2l0Y2ggZnJvbSBPd25QdHIg
dG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9udCk6IFN3aXRjaCB0byBHRElP
YmplY3QuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojpmb250UGxhdGZvcm1EYXRhKTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOiBT
d2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6IFN3aXRjaCB0byBHRElPYmplY3QuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogU3dp
dGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YSk6IFN3aXRjaCB0byBH
RElPYmplY3QuCisgICAgICAgICogcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVTaGFyZWRDdXJzb3IpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzY2FsZURyYWdJbWFnZSk6IFN3aXRjaCB0byBHRElPYmplY3QuCisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDYWlyb1dpbi5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6c2NhbGVEcmFnSW1hZ2UpOiBT
d2l0Y2ggdG8gR0RJT2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJv
bUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKTogU3dpdGNoIHRvIEdE
SU9iamVjdC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogU3dpdGNoIHRvIEdESU9iamVj
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZSk6IFN3aXRjaCB0
byBHRElPYmplY3QuCisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOiBTd2l0Y2gg
dG8gR0RJT2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c25hcHNob3QpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0NvbnRyb2wpOiBTd2l0Y2ggdG8gR0RJT2JqZWN0LgorCiAyMDEzLTA5LTA5
ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBIaWRlIG5vZGUo
KSBiZWxvdyBSZW5kZXJTVkdNb2RlbE9iamVjdCwgdXNlIGVsZW1lbnQoKSBpbnN0ZWFkLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShy
ZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ0OCw0ICsyMTQ0OCw0IEBACiAgIDxJbXBv
cnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIk
KFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8
L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBj
b3B5KQpAQCAtMzE3Nyw5ICszMTc3LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRv
bVxDb21tZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXENvbXBvc2VkU2hhZG93VHJlZVdh
bGtlci5jcHAiPgotICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDb21wb3NpdGlvbkV2ZW50LmNwcCI+CiAg
ICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTAyNDMsOSAr
MTAyNDAsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENvbW1lbnQuaCI+CiAg
ICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZG9tXENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIj4KLSAgICAgIDxG
aWx0ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkb21cQ29tcG9zaXRpb25FdmVudC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTg3NSw0ICsxNTg2OSw0IEBACiAgICAgICA8Rmls
dGVyPnBsYXRmb3JtXHdpbjwvRmlsdGVyPgogICAgIDwvTUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08
L1Byb2plY3Q+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDksMTkgKzUwLDE5IEBAIHN0YXRpYyB2b2lkIGRyYXdSZWN0SW50b0NvbnRl
eHQoSW50UmVjdAogICAgIHZpZXctPnBhaW50KGdjLCByZWN0KTsKIH0KIAotUGFzc093blB0cjxI
QklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFtZSwgSW50UmVjdCYgaXIpCitH
RElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdCBGcmFtZSogZnJhbWUsIEludFJl
Y3QmIGlyKQogewogICAgIFBhaW50QmVoYXZpb3Igb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lLT52
aWV3KCktPnBhaW50QmVoYXZpb3IoKTsKICAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2
aW9yKG9sZFBhaW50QmVoYXZpb3IgfCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzKTsKIAogICAgIHZvaWQqIGJpdHM7Ci0gICAgSERDIGhkYyA9IENyZWF0ZUNvbXBhdGlibGVE
QygwKTsKKyAgICBhdXRvIGhkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURD
KDApKTsKICAgICBpbnQgdyA9IGlyLndpZHRoKCk7CiAgICAgaW50IGggPSBpci5oZWlnaHQoKTsK
ICAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRTaXplKHcsIGgpKTsK
IAotICAgIE93blB0cjxIQklUTUFQPiBoYm1wID0gYWRvcHRQdHIoQ3JlYXRlRElCU2VjdGlvbigw
LCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDAp
KTsKLSAgICBIR0RJT0JKIGhibXBPbGQgPSBTZWxlY3RPYmplY3QoaGRjLCBoYm1wLmdldCgpKTsK
KyAgICBHRElPYmplY3Q8SEJJVE1BUD4gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElC
U2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0
cyksIDAsIDApKTsKKyAgICBIR0RJT0JKIGhibXBPbGQgPSBTZWxlY3RPYmplY3QoaGRjLmdldCgp
LCBoYm1wLmdldCgpKTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4
dENyZWF0ZShzdGF0aWNfY2FzdDx2b2lkKj4oYml0cyksIHcsIGgsCiAgICAgICAgIDgsIHcgKiBz
aXplb2YoUkdCUVVBRCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KTsKICAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwpAQCAtNzEsMTIgKzcyLDExIEBAIFBhc3NPd25QdHI8
SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksICZnYyk7CiAKICAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHQpOwot
ICAgIFNlbGVjdE9iamVjdChoZGMsIGhibXBPbGQpOwotICAgIERlbGV0ZURDKGhkYyk7CisgICAg
U2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7CiAKICAgICBmcmFtZS0+dmlldygpLT5z
ZXRQYWludEJlaGF2aW9yKG9sZFBhaW50QmVoYXZpb3IpOwogCi0gICAgcmV0dXJuIGhibXAucmVs
ZWFzZSgpOworICAgIHJldHVybiBoYm1wOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNhaXJvV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNhaXJvV2luLmNwcAkocmV2aXNpb24g
MTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDYWlyb1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogI2luY2x1ZGUgIkZyYW1lV2luLmgiCiAK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxIQklUTUFQPiBpbWFnZUZy
b21SZWN0KGNvbnN0IEZyYW1lKiwgSW50UmVjdCYpCitHRElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VG
cm9tUmVjdChjb25zdCBGcmFtZSosIEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFt
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4u
Y3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsMjIgKzQ1LDIyIEBAIHZv
aWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBmcmEKICAgICBvdXRQYWdlcyA9IHBy
aW50Q29udGV4dC5wYWdlUmVjdHMoKTsKIH0KIAotUGFzc093blB0cjxIQklUTUFQPiBpbWFnZUZy
b21TZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBib29sIGZvcmNlQmxhY2tUZXh0KQorR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFj
a1RleHQpCiB7CiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCiAgICAg
ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yU2VsZWN0aW9uT25s
eSB8IChmb3JjZUJsYWNrVGV4dCA/IFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IDApKTsK
ICAgICBGbG9hdFJlY3QgZnIgPSBmcmFtZS0+c2VsZWN0aW9uKCkuYm91bmRzKCk7CiAgICAgSW50
UmVjdCBpcihzdGF0aWNfY2FzdDxpbnQ+KGZyLngoKSksIHN0YXRpY19jYXN0PGludD4oZnIueSgp
KSwgc3RhdGljX2Nhc3Q8aW50Pihmci53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihmci5oZWln
aHQoKSkpOwotICAgIE93blB0cjxIQklUTUFQPiBpbWFnZSA9IGltYWdlRnJvbVJlY3QoZnJhbWUs
IGlyKTsKKyAgICBHRElPYmplY3Q8SEJJVE1BUD4gaW1hZ2UgPSBpbWFnZUZyb21SZWN0KGZyYW1l
LCBpcik7CiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9y
Tm9ybWFsKTsKLSAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworICAgIHJldHVybiBpbWFnZTsK
IH0KIAogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQogewogICAg
IGlmIChzZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiBpbWFnZUZyb21TZWxl
Y3Rpb24odGhpcywgZmFsc2UpLmxlYWtQdHIoKTsKKyAgICAgICAgcmV0dXJuIGltYWdlRnJvbVNl
bGVjdGlvbih0aGlzLCBmYWxzZSkubGVhaygpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC03Nywx
MCArNzcsMTAgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpub2RlSW1hZ2UoTm9kZSogbm9kZQogICAg
IEludFJlY3QgcGFpbnRpbmdSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZW5kZXJlci0+cGFp
bnRpbmdSb290UmVjdCh0b3BMZXZlbFJlY3QpKTsKIAogICAgIG1fdmlldy0+c2V0Tm9kZVRvRHJh
dyhub2RlKTsgLy8gaW52b2tlIHNwZWNpYWwgc3ViLXRyZWUgZHJhd2luZyBtb2RlCi0gICAgT3du
UHRyPEhCSVRNQVA+IHJlc3VsdCA9IGltYWdlRnJvbVJlY3QodGhpcywgcGFpbnRpbmdSZWN0KTsK
KyAgICBHRElPYmplY3Q8SEJJVE1BUD4gcmVzdWx0ID0gaW1hZ2VGcm9tUmVjdCh0aGlzLCBwYWlu
dGluZ1JlY3QpOwogICAgIG1fdmlldy0+c2V0Tm9kZVRvRHJhdygwKTsKIAotICAgIHJldHVybiBy
ZXN1bHQubGVha1B0cigpOworICAgIHJldHVybiByZXN1bHQubGVhaygpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmgJKHJldmlz
aW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDE5ICsyNiwxNiBAQAogI2lmbmRlZiBGcmFtZVdpbl9oCiAjZGVmaW5l
IEZyYW1lV2luX2gKIAotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi0vLyBGb3J3YXJkIGRlY2xhcmVkIHNvIHdlIGRvbid0IG5lZWQgd2luZ2Rp
LmguCi10eXBlZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7CisjaW5jbHVkZSA8d3RmL3dp
bi9HRElPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKIGNs
YXNzIEludFJlY3Q7CiAKLVBhc3NPd25QdHI8SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdCBG
cmFtZSosIEludFJlY3QmKTsKLVBhc3NPd25QdHI8SEJJVE1BUD4gaW1hZ2VGcm9tU2VsZWN0aW9u
KEZyYW1lKiwgYm9vbCBmb3JjZVdoaXRlVGV4dCk7CitHRElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VG
cm9tUmVjdChjb25zdCBGcmFtZSosIEludFJlY3QmKTsKK0dESU9iamVjdDxIQklUTUFQPiBpbWFn
ZUZyb21TZWxlY3Rpb24oRnJhbWUqLCBib29sIGZvcmNlV2hpdGVUZXh0KTsKIHZvaWQgY29tcHV0
ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiwgY29uc3QgSW50UmVjdCYgcHJpbnRSZWN0LCBmbG9h
dCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9y
LCBWZWN0b3I8SW50UmVjdD4mIG91dFBhZ2VzLCBpbnQmIG91dFBhZ2VIZWlnaHQpOwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlz
aW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9D
QUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlIDxRdWFydHpDb3JlL0NBQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0
Lmg+CiAKICNpZmRlZiBERUJVR19BTEwKICNwcmFnbWEgY29tbWVudChsaWIsICJRdWFydHpDb3Jl
X2RlYnVnIikKQEAgLTIzOSw3ICsyNDAsNyBAQCBzdGF0aWMgdm9pZCBnZXREaXJ0eVJlY3RzKEhX
TkQgd2luZG93LCBWCiAgICAgaWYgKCFHZXRDbGllbnRSZWN0KHdpbmRvdywgJmNsaWVudFJlY3Qp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBPd25QdHI8SFJHTj4gcmVnaW9uID0gYWRvcHRQdHIo
Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7CisgICAgYXV0byByZWdpb24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwogICAgIGludCByZWdpb25UeXBlID0g
R2V0VXBkYXRlUmduKHdpbmRvdywgcmVnaW9uLmdldCgpLCBmYWxzZSk7CiAgICAgaWYgKHJlZ2lv
blR5cGUgIT0gQ09NUExFWFJFR0lPTikgewogICAgICAgICBSRUNUIGRpcnR5UmVjdDsKQEAgLTI0
OCwxMCArMjQ5LDEwIEBAIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFYK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERXT1JEIGRhdGFTaXplID0gR2V0UmVnaW9u
RGF0YShyZWdpb24uZ2V0KCksIDAsIDApOworICAgIERXT1JEIGRhdGFTaXplID0gOjpHZXRSZWdp
b25EYXRhKHJlZ2lvbi5nZXQoKSwgMCwgMCk7CiAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hh
cj4gcmVnaW9uRGF0YUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbZGF0
YVNpemVdKTsKICAgICBSR05EQVRBKiByZWdpb25EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxSR05E
QVRBKj4ocmVnaW9uRGF0YUJ1ZmZlci5nZXQoKSk7Ci0gICAgaWYgKCFHZXRSZWdpb25EYXRhKHJl
Z2lvbi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQorICAgIGlmICghOjpHZXRSZWdpb25E
YXRhKHJlZ2lvbi5nZXQoKSwgZGF0YVNpemUsIHJlZ2lvbkRhdGEpKQogICAgICAgICByZXR1cm47
CiAKICAgICBvdXRSZWN0cy5yZXNpemUocmVnaW9uRGF0YS0+cmRoLm5Db3VudCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgor
I2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPFdlYktp
dFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAgLTQ3NSwyMyArNDc2
LDIxIEBAIHN0YXRpYyBIRk9OVCBjcmVhdGVHRElGb250KGNvbnN0IEF0b21pY1MKICAgIGlmIChk
ZXNpcmVkSXRhbGljICYmICFtYXRjaERhdGEubV9jaG9zZW4ubGZJdGFsaWMgJiYgc3ludGhlc2l6
ZUl0YWxpYykKICAgICAgICBtYXRjaERhdGEubV9jaG9zZW4ubGZJdGFsaWMgPSAxOwogCi0gICAg
SEZPTlQgcmVzdWx0ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZtYXRjaERhdGEubV9jaG9zZW4pOwot
ICAgIGlmICghcmVzdWx0KQorICAgIGF1dG8gY2hvc2VuRm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlRm9udEluZGlyZWN0KCZtYXRjaERhdGEubV9jaG9zZW4pKTsKKyAgICBpZiAoIWNob3Nl
bkZvbnQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSFduZERDIGRjKDApOwogICAgIFNhdmVE
QyhkYyk7Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCByZXN1bHQpOworICAgIFNlbGVjdE9iamVjdChk
YywgY2hvc2VuRm9udC5nZXQoKSk7CiAgICAgV0NIQVIgYWN0dWFsTmFtZVtMRl9GQUNFU0laRV07
CiAgICAgR2V0VGV4dEZhY2UoZGMsIExGX0ZBQ0VTSVpFLCBhY3R1YWxOYW1lKTsKICAgICBSZXN0
b3JlREMoZGMsIC0xKTsKIAotICAgIGlmICh3Y3NpY21wKG1hdGNoRGF0YS5tX2Nob3Nlbi5sZkZh
Y2VOYW1lLCBhY3R1YWxOYW1lKSkgewotICAgICAgICBEZWxldGVPYmplY3QocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ID0gMDsKLSAgICB9CisgICAgaWYgKHdjc2ljbXAobWF0Y2hEYXRhLm1fY2hv
c2VuLmxmRmFjZU5hbWUsIGFjdHVhbE5hbWUpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNob3NlbkZvbnQubGVhaygpOwogfQogCiBzdHJ1Y3Qg
VHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7CkBAIC01NTQsOCArNTUzLDggQEAgUGFzc093blB0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OgogICAgIC8vIEZJWE1FOiBXZSB3aWxsIGV2ZW50
dWFsbHkgd2FudCBzdWJwaXhlbCBwcmVjaXNpb24gZm9yIEdESSBtb2RlLCBidXQgdGhlIHNjYWxl
ZCByZW5kZXJpbmcgZG9lc24ndAogICAgIC8vIGxvb2sgYXMgbmljZS4gVGhhdCBtYXkgYmUgc29s
dmFibGUgdGhvdWdoLgogICAgIExPTkcgd2VpZ2h0ID0gYWRqdXN0ZWRHRElGb250V2VpZ2h0KHRv
R0RJRm9udFdlaWdodChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpLCBmYW1pbHkpOwotICAgIEhG
T05UIGhmb250ID0gY3JlYXRlR0RJRm9udChmYW1pbHksIHdlaWdodCwgZm9udERlc2NyaXB0aW9u
Lml0YWxpYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSAqICh1c2VHREkgPyAxIDogMzIpLCB1c2VHREkpOworICAg
IGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdChjcmVhdGVHRElGb250KGZhbWlseSwgd2VpZ2h0
LCBmb250RGVzY3JpcHRpb24uaXRhbGljKCksCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFBpeGVsU2l6ZSgpICogKHVzZUdESSA/IDEgOiAzMiksIHVzZUdESSkpOwogCiAgICAgaWYg
KCFoZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NjQsMTIgKzU2MywxMiBAQCBQ
YXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6CiAgICAgICAgIHVzZUdESSA9
IGZhbHNlOyAvLyBOZXZlciB1c2UgR0RJIGZvciBMdWNpZGEgR3JhbmRlLgogCiAgICAgTE9HRk9O
VCBsb2dGb250OwotICAgIEdldE9iamVjdChoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nRm9u
dCk7CisgICAgR2V0T2JqZWN0KGhmb250LmdldCgpLCBzaXplb2YoTE9HRk9OVCksICZsb2dGb250
KTsKIAogICAgIGJvb2wgc3ludGhlc2l6ZUJvbGQgPSBpc0dESUZvbnRXZWlnaHRCb2xkKHdlaWdo
dCkgJiYgIWlzR0RJRm9udFdlaWdodEJvbGQobG9nRm9udC5sZldlaWdodCk7CiAgICAgYm9vbCBz
eW50aGVzaXplSXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpICYmICFsb2dGb250Lmxm
SXRhbGljOwogCi0gICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGEoaGZvbnQsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGVz
aXplQm9sZCwgc3ludGhlc2l6ZUl0YWxpYywgdXNlR0RJKTsKKyAgICBGb250UGxhdGZvcm1EYXRh
KiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShoZm9udC5nZXQoKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXNpemVCb2xkLCBzeW50aGVzaXplSXRhbGlj
LCB1c2VHREkpOwogCiAjaWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0g
IXJlc3VsdC0+Y2dGb250KCk7CkBAIC01ODIsMTAgKzU4MSwxMSBAQCBQYXNzT3duUHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6CiAgICAgICAgIC8vIGFic29sdXRlbHkgc3VyZSB0aGF0
IHdlIGRvbid0IHVzZSB0aGlzIGZvbnQsIGdvIGFoZWFkIGFuZCByZXR1cm4gMCBzbyB0aGF0IHdl
IGNhbiBmYWxsIGJhY2sgdG8gdGhlIG5leHQKICAgICAgICAgLy8gZm9udC4KICAgICAgICAgZGVs
ZXRlIHJlc3VsdDsKLSAgICAgICAgRGVsZXRlT2JqZWN0KGhmb250KTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfSAgICAgICAgCiAKKyAgICBoZm9udC5sZWFrKCk7IC8vIHJlc3VsdCBu
b3cgb3ducyB0aGUgSEZPTlQuCisKICAgICByZXR1cm4gYWRvcHRQdHIocmVzdWx0KTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYyLDEwICs2MywxMCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6CiAgICAgbG9nRm9udC5sZkl0YWxpYyA9IGl0YWxpYzsKICAgICBsb2dGb250Lmxm
V2VpZ2h0ID0gYm9sZCA/IDcwMCA6IDQwMDsKIAotICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9u
dEluZGlyZWN0KCZsb2dGb250KTsKKyAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpD
cmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpKTsKIAogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+
IGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbG9nRm9udCkp
OwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGhmb250LCBjZ0ZvbnQuZ2V0KCksIHNpemUs
IGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBBbHRlcm5hdGVSZW5kZXJpbmdNb2RlKTsK
KyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShoZm9udC5sZWFrKCksIGNnRm9udC5nZXQoKSwg
c2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEFsdGVybmF0ZVJlbmRlcmluZ01v
ZGUpOwogfQogCiAvLyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1bnByZWRpY3RhYmxlIGZvbnQgbmFt
ZSwgaW4gb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucyBhbmQgdG8KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3dp
bi9HRElPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCwxMSArNTksMTEg
QEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQu
bGZJdGFsaWMgPSBpdGFsaWM7CiAgICAgbG9nRm9udC5sZldlaWdodCA9IGJvbGQgPyA3MDAgOiA0
MDA7CiAKLSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCk7Cisg
ICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZsb2dG
b250KSk7CiAKICAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWlyb193aW4zMl9m
b250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChoZm9udCk7CiAKLSAgICBGb250UGxhdGZvcm1EYXRh
IGZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIGZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOwor
ICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShoZm9udC5sZWFrKCksIGZvbnRG
YWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOwogCiAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3ko
Zm9udEZhY2UpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDE1
NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4LCAy
MDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTEgKzI3LDEyIEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCiAj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYktp
dFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTk5LDcgKzEwMCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBpZiAoZHN0UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE93blB0cjxIQklUTUFQPiBiaXRtYXAgPSBh
ZG9wdFB0cihzdGF0aWNfY2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJ
VE1BUCkpKTsKKyAgICBhdXRvIGJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KHN0YXRpY19jYXN0PEhC
SVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMsIE9CSl9CSVRNQVApKSk7CiAKICAgICBESUJQ
aXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcC5nZXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENhaXJvV2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnQKICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IE93blB0cjxIQklUTUFQPiBiaXRtYXAgPSBhZG9wdFB0cihzdGF0aWNfY2FzdDxIQklUTUFQPihH
ZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpKTsKKyAgICBhdXRvIGJpdG1hcCA9IGFk
b3B0R0RJT2JqZWN0KHN0YXRpY19jYXN0PEhCSVRNQVA+KDo6R2V0Q3VycmVudE9iamVjdChoZGMs
IE9CSl9CSVRNQVApKSk7CiAKICAgICBESUJQaXhlbERhdGEgcGl4ZWxEYXRhKGJpdG1hcC5nZXQo
KSk7CiAgICAgQVNTRVJUKHBpeGVsRGF0YS5iaXRzUGVyUGl4ZWwoKSA9PSAzMik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIApAQCAtMTEyLDIyICsxMTMsMjIgQEAgSERDIEdyYXBoaWNzQ29udGV4
dDo6Z2V0V2luZG93c0NvbnRleHQoYwogICAgICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgICAg
IHJldHVybiAwOwogCi0gICAgICAgIEhEQyBiaXRtYXBEQyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURD
KG1fZGF0YS0+bV9oZGMpOwotICAgICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgYml0bWFw
KTsKKyAgICAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0
aWJsZURDKG1fZGF0YS0+bV9oZGMpKTsKKyAgICAgICAgOjpTZWxlY3RPYmplY3QoYml0bWFwREMu
Z2V0KCksIGJpdG1hcCk7CiAKICAgICAgICAgLy8gRmlsbCBvdXIgYnVmZmVyIHdpdGggY2xlYXIg
aWYgd2UncmUgZ29pbmcgdG8gYWxwaGEgYmxlbmQuCiAgICAgICAgIGlmIChzdXBwb3J0QWxwaGFC
bGVuZCkKICAgICAgICAgICAgZmlsbFdpdGhDbGVhckNvbG9yKGJpdG1hcCk7CiAKICAgICAgICAg
Ly8gTWFrZSBzdXJlIHdlIGNhbiBkbyB3b3JsZCB0cmFuc2Zvcm1zLgotICAgICAgICBTZXRHcmFw
aGljc01vZGUoYml0bWFwREMsIEdNX0FEVkFOQ0VEKTsKKyAgICAgICAgOjpTZXRHcmFwaGljc01v
ZGUoYml0bWFwREMuZ2V0KCksIEdNX0FEVkFOQ0VEKTsKIAogICAgICAgICAvLyBBcHBseSBhIHRy
YW5zbGF0aW9uIHRvIG91ciBjb250ZXh0IHNvIHRoYXQgdGhlIGRyYXdpbmcgZG9uZSB3aWxsIGJl
IGF0ICgwLDApIG9mIHRoZSBiaXRtYXAuCiAgICAgICAgIFhGT1JNIHhmb3JtID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKS50cmFuc2xhdGUoLWRzdFJlY3QueCgpLCAtZHN0UmVjdC55KCkpOwogCi0g
ICAgICAgIDo6U2V0V29ybGRUcmFuc2Zvcm0oYml0bWFwREMsICZ4Zm9ybSk7CisgICAgICAgIDo6
U2V0V29ybGRUcmFuc2Zvcm0oYml0bWFwREMuZ2V0KCksICZ4Zm9ybSk7CiAKLSAgICAgICAgcmV0
dXJuIGJpdG1hcERDOworICAgICAgICByZXR1cm4gYml0bWFwREMubGVhaygpOwogICAgIH0KIAog
ICAgIG1fZGF0YS0+Zmx1c2goKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2aXNpb24g
MTU1MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTM4LDggKzEzOSw4IEBAIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBMT0dGT05UIHdpbmZvbnQ7CiAgICAg
R2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRhLmhmb250KCksIHNpemVvZihMT0dGT05UKSwgJndpbmZv
bnQpOwogICAgIHdpbmZvbnQubGZIZWlnaHQgPSAtbHJvdW5kZihzY2FsZWRTaXplICogKG1fcGxh
dGZvcm1EYXRhLnVzZUdESSgpID8gMSA6IDMyKSk7Ci0gICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVG
b250SW5kaXJlY3QoJndpbmZvbnQpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CisgICAgYXV0byBoZm9udCA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZ3aW5mb250KSk7CisgICAgcmV0
dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShoZm9udC5sZWFrKCks
IHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURh
dGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9t
Rm9udCgpLCBmYWxzZSk7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFj
dGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCShyZXZpc2lvbiAxNTUzNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3dpbi9HRElPYmplY3QuaD4KIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIApAQCAtNTEsMTkg
KzUyLDE5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2gKICAgICBC
aXRtYXBJbmZvIGN1cnNvckltYWdlID0gQml0bWFwSW5mbzo6Y3JlYXRlKEludFNpemUoaW1nLT53
aWR0aCgpLCBpbWctPmhlaWdodCgpKSk7CiAKICAgICBIV25kREMgZGMoMCk7Ci0gICAgSERDIHdv
cmtpbmdEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhkYyk7CisgICAgYXV0byB3b3JraW5nREMgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIGlmIChkb0FscGhh
KSB7Ci0gICAgICAgIE93blB0cjxIQklUTUFQPiBoQ3Vyc29yID0gYWRvcHRQdHIoQ3JlYXRlRElC
U2VjdGlvbihkYywgKEJJVE1BUElORk8gKikmY3Vyc29ySW1hZ2UsIERJQl9SR0JfQ09MT1JTLCAw
LCAwLCAwKSk7CisgICAgICAgIGF1dG8gaEN1cnNvciA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
RElCU2VjdGlvbihkYywgKEJJVE1BUElORk8gKikmY3Vyc29ySW1hZ2UsIERJQl9SR0JfQ09MT1JT
LCAwLCAwLCAwKSk7CiAgICAgICAgIEFTU0VSVChoQ3Vyc29yKTsKIAogICAgICAgICBpbWctPmdl
dEhCSVRNQVAoaEN1cnNvci5nZXQoKSk7IAotICAgICAgICBIQklUTUFQIGhPbGRCaXRtYXAgPSAo
SEJJVE1BUClTZWxlY3RPYmplY3Qod29ya2luZ0RDLCBoQ3Vyc29yLmdldCgpKTsKLSAgICAgICAg
U2V0QmtNb2RlKHdvcmtpbmdEQywgVFJBTlNQQVJFTlQpOwotICAgICAgICBTZWxlY3RPYmplY3Qo
d29ya2luZ0RDLCBoT2xkQml0bWFwKTsKKyAgICAgICAgSEJJVE1BUCBoT2xkQml0bWFwID0gKEhC
SVRNQVApU2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaEN1cnNvci5nZXQoKSk7CisgICAg
ICAgIFNldEJrTW9kZSh3b3JraW5nREMuZ2V0KCksIFRSQU5TUEFSRU5UKTsKKyAgICAgICAgU2Vs
ZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaE9sZEJpdG1hcCk7CiAKICAgICAgICAgVmVjdG9y
PHVuc2lnbmVkIGNoYXIsIDEyOD4gbWFza0JpdHM7CiAgICAgICAgIG1hc2tCaXRzLmZpbGwoMHhm
ZiwgKGltZy0+d2lkdGgoKSArIDcpIC8gOCAqIGltZy0+aGVpZ2h0KCkpOwotICAgICAgICBPd25Q
dHI8SEJJVE1BUD4gaE1hc2sgPSBhZG9wdFB0cihDcmVhdGVCaXRtYXAoaW1nLT53aWR0aCgpLCBp
bWctPmhlaWdodCgpLCAxLCAxLCBtYXNrQml0cy5kYXRhKCkpKTsKKyAgICAgICAgYXV0byBoTWFz
ayA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQml0bWFwKGltZy0+d2lkdGgoKSwgaW1nLT5oZWln
aHQoKSwgMSwgMSwgbWFza0JpdHMuZGF0YSgpKSk7CiAKICAgICAgICAgSUNPTklORk8gaWk7CiAg
ICAgICAgIGlpLmZJY29uID0gRkFMU0U7CkBAIC03MiwzNCArNzMsMzQgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkQ3Vyc29yPiBjcmVhdGVTaAogICAgICAgICBpaS5oYm1NYXNrID0gaE1hc2su
Z2V0KCk7CiAgICAgICAgIGlpLmhibUNvbG9yID0gaEN1cnNvci5nZXQoKTsKIAotICAgICAgICBp
bXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3JlYXRlSWNvbkluZGlyZWN0KCZpaSkpOworICAg
ICAgICBpbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoOjpDcmVhdGVJY29uSW5kaXJlY3QoJmlp
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGFs
cGhhIGJsZW5kZWQgY3Vyc29ycywgc28gd2UgbmVlZAogICAgICAgICAvLyB0byBjcmVhdGUgdGhl
IG1hc2sgbWFudWFsbHkKLSAgICAgICAgSERDIGFuZE1hc2tEQyA9IENyZWF0ZUNvbXBhdGlibGVE
QyhkYyk7Ci0gICAgICAgIEhEQyB4b3JNYXNrREMgPSBDcmVhdGVDb21wYXRpYmxlREMoZGMpOwot
ICAgICAgICBPd25QdHI8SEJJVE1BUD4gaEN1cnNvciA9IGFkb3B0UHRyKENyZWF0ZURJQlNlY3Rp
b24oZGMsICZjdXJzb3JJbWFnZSwgRElCX1JHQl9DT0xPUlMsIDAsIDAsIDApKTsKKyAgICAgICAg
YXV0byBhbmRNYXNrREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykp
OworICAgICAgICBhdXRvIHhvck1hc2tEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0
aWJsZURDKGRjKSk7CisgICAgICAgIGF1dG8gaEN1cnNvciA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlRElCU2VjdGlvbihkYywgJmN1cnNvckltYWdlLCBESUJfUkdCX0NPTE9SUywgMCwgMCwgMCkp
OwogICAgICAgICBBU1NFUlQoaEN1cnNvcik7CiAgICAgICAgIGltZy0+Z2V0SEJJVE1BUChoQ3Vy
c29yLmdldCgpKTsgCiAgICAgICAgIEJJVE1BUCBjdXJzb3I7CiAgICAgICAgIEdldE9iamVjdCho
Q3Vyc29yLmdldCgpLCBzaXplb2YoQklUTUFQKSwgJmN1cnNvcik7Ci0gICAgICAgIE93blB0cjxI
QklUTUFQPiBhbmRNYXNrID0gYWRvcHRQdHIoQ3JlYXRlQml0bWFwKGN1cnNvci5ibVdpZHRoLCBj
dXJzb3IuYm1IZWlnaHQsIDEsIDEsIE5VTEwpKTsKLSAgICAgICAgT3duUHRyPEhCSVRNQVA+IHhv
ck1hc2sgPSBhZG9wdFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBjdXJzb3IuYm1XaWR0
aCwgY3Vyc29yLmJtSGVpZ2h0KSk7Ci0gICAgICAgIEhCSVRNQVAgb2xkQ3Vyc29yID0gKEhCSVRN
QVApU2VsZWN0T2JqZWN0KHdvcmtpbmdEQywgaEN1cnNvci5nZXQoKSk7Ci0gICAgICAgIEhCSVRN
QVAgb2xkQW5kTWFzayA9IChIQklUTUFQKVNlbGVjdE9iamVjdChhbmRNYXNrREMsIGFuZE1hc2su
Z2V0KCkpOwotICAgICAgICBIQklUTUFQIG9sZFhvck1hc2sgPSAoSEJJVE1BUClTZWxlY3RPYmpl
Y3QoeG9yTWFza0RDLCB4b3JNYXNrLmdldCgpKTsKKyAgICAgICAgYXV0byBhbmRNYXNrID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVCaXRtYXAoY3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdo
dCwgMSwgMSwgMCkpOworICAgICAgICBhdXRvIHhvck1hc2sgPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZUNvbXBhdGlibGVCaXRtYXAoZGMsIGN1cnNvci5ibVdpZHRoLCBjdXJzb3IuYm1IZWlnaHQp
KTsKKyAgICAgICAgSEJJVE1BUCBvbGRDdXJzb3IgPSAoSEJJVE1BUClTZWxlY3RPYmplY3Qod29y
a2luZ0RDLmdldCgpLCBoQ3Vyc29yLmdldCgpKTsKKyAgICAgICAgSEJJVE1BUCBvbGRBbmRNYXNr
ID0gKEhCSVRNQVApU2VsZWN0T2JqZWN0KGFuZE1hc2tEQy5nZXQoKSwgYW5kTWFzay5nZXQoKSk7
CisgICAgICAgIEhCSVRNQVAgb2xkWG9yTWFzayA9IChIQklUTUFQKVNlbGVjdE9iamVjdCh4b3JN
YXNrREMuZ2V0KCksIHhvck1hc2suZ2V0KCkpOwogCi0gICAgICAgIFNldEJrQ29sb3Iod29ya2lu
Z0RDLCBSR0IoMCwwLDApKTsgIAotICAgICAgICBCaXRCbHQoYW5kTWFza0RDLCAwLCAwLCBjdXJz
b3IuYm1XaWR0aCwgY3Vyc29yLmJtSGVpZ2h0LCB3b3JraW5nREMsIDAsIDAsIFNSQ0NPUFkpOwor
ICAgICAgICBTZXRCa0NvbG9yKHdvcmtpbmdEQy5nZXQoKSwgUkdCKDAsIDAsIDApKTsgIAorICAg
ICAgICBCaXRCbHQoYW5kTWFza0RDLmdldCgpLCAwLCAwLCBjdXJzb3IuYm1XaWR0aCwgY3Vyc29y
LmJtSGVpZ2h0LCB3b3JraW5nREMuZ2V0KCksIDAsIDAsIFNSQ0NPUFkpOwogICAgIAotICAgICAg
ICBTZXRCa0NvbG9yKHhvck1hc2tEQywgUkdCKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgU2V0
VGV4dENvbG9yKHhvck1hc2tEQywgUkdCKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgQml0Qmx0
KHhvck1hc2tEQywgMCwgMCwgY3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgYW5kTWFz
a0RDLCAwLCAwLCBTUkNDT1BZKTsKLSAgICAgICAgQml0Qmx0KHhvck1hc2tEQywgMCwgMCwgY3Vy
c29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgd29ya2luZ0RDLCAwLDAsIFNSQ0FORCk7Ci0K
LSAgICAgICAgU2VsZWN0T2JqZWN0KHdvcmtpbmdEQywgb2xkQ3Vyc29yKTsKLSAgICAgICAgU2Vs
ZWN0T2JqZWN0KGFuZE1hc2tEQywgb2xkQW5kTWFzayk7Ci0gICAgICAgIFNlbGVjdE9iamVjdCh4
b3JNYXNrREMsIG9sZFhvck1hc2spOworICAgICAgICBTZXRCa0NvbG9yKHhvck1hc2tEQy5nZXQo
KSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKHhvck1hc2tEQy5n
ZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgQml0Qmx0KHhvck1hc2tEQy5nZXQo
KSwgMCwgMCwgY3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgYW5kTWFza0RDLmdldCgp
LCAwLCAwLCBTUkNDT1BZKTsKKyAgICAgICAgQml0Qmx0KHhvck1hc2tEQy5nZXQoKSwgMCwgMCwg
Y3Vyc29yLmJtV2lkdGgsIGN1cnNvci5ibUhlaWdodCwgd29ya2luZ0RDLmdldCgpLCAwLCAwLCBT
UkNBTkQpOworCisgICAgICAgIFNlbGVjdE9iamVjdCh3b3JraW5nREMuZ2V0KCksIG9sZEN1cnNv
cik7CisgICAgICAgIFNlbGVjdE9iamVjdChhbmRNYXNrREMuZ2V0KCksIG9sZEFuZE1hc2spOwor
ICAgICAgICBTZWxlY3RPYmplY3QoeG9yTWFza0RDLmdldCgpLCBvbGRYb3JNYXNrKTsKIAogICAg
ICAgICBJQ09OSU5GTyBpY29uID0gezB9OwogICAgICAgICBpY29uLmZJY29uID0gRkFMU0U7CkBA
IC0xMDgsMTEgKzEwOSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRl
U2gKICAgICAgICAgaWNvbi5oYm1NYXNrID0gYW5kTWFzay5nZXQoKTsKICAgICAgICAgaWNvbi5o
Ym1Db2xvciA9IHhvck1hc2suZ2V0KCk7CiAgICAgICAgIGltcGwgPSBTaGFyZWRDdXJzb3I6OmNy
ZWF0ZShDcmVhdGVJY29uSW5kaXJlY3QoJmljb24pKTsKLQotICAgICAgICBEZWxldGVEQyh4b3JN
YXNrREMpOwotICAgICAgICBEZWxldGVEQyhhbmRNYXNrREMpOwogICAgIH0KLSAgICBEZWxldGVE
Qyh3b3JraW5nREMpOwogCiAgICAgcmV0dXJuIGltcGwucmVsZWFzZSgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCShyZXZpc2lv
biAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KIApAQCAtOTEsMTEgKzkyLDExIEBAIERyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFn
SW1hZ2VSZWYKICAgICBJbnRTaXplIGRzdFNpemUoc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLndp
ZHRoKCkgKiBzY2FsZS53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihzcmNTaXplLmhlaWdodCgp
ICogc2NhbGUuaGVpZ2h0KCkpKTsKICAgICBIQklUTUFQIGhibXAgPSAwOwogICAgIEhXbmREQyBk
YygwKTsKLSAgICBIREMgZHN0REMgPSBDcmVhdGVDb21wYXRpYmxlREMoZGMpOworICAgIGF1dG8g
ZHN0REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogICAgIGlm
ICghZHN0REMpCiAgICAgICAgIGdvdG8gZXhpdDsKIAotICAgIGhibXAgPSBhbGxvY0ltYWdlKGRz
dERDLCBkc3RTaXplLCAmdGFyZ2V0Q29udGV4dCk7CisgICAgaGJtcCA9IGFsbG9jSW1hZ2UoZHN0
REMuZ2V0KCksIGRzdFNpemUsICZ0YXJnZXRDb250ZXh0KTsKICAgICBpZiAoIWhibXApCiAgICAg
ICAgIGdvdG8gZXhpdDsKIApAQCAtMTE1LDggKzExNiw2IEBAIERyYWdJbWFnZVJlZiBzY2FsZURy
YWdJbWFnZShEcmFnSW1hZ2VSZWYKIGV4aXQ6CiAgICAgaWYgKCFoYm1wKQogICAgICAgICBoYm1w
ID0gaW1hZ2U7Ci0gICAgaWYgKGRzdERDKQotICAgICAgICBEZWxldGVEQyhkc3REQyk7CiAgICAg
cmV0dXJuIGhibXA7CiB9CiAgICAgCkBAIC0xMjQsMTUgKzEyMywxNSBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltCiB7CiAgICAgSEJJVE1BUCBoYm1wID0gMDsKICAg
ICBIV25kREMgZGMoMCk7Ci0gICAgSERDIHdvcmtpbmdEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhk
Yyk7CisgICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGli
bGVEQyhkYykpOwogICAgIENHQ29udGV4dFJlZiBkcmF3Q29udGV4dCA9IDA7CiAgICAgaWYgKCF3
b3JraW5nREMpCi0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBo
Ym1wID0gYWxsb2NJbWFnZSh3b3JraW5nREMsIGltZy0+c2l6ZSgpLCAmZHJhd0NvbnRleHQpOwor
ICAgIGhibXAgPSBhbGxvY0ltYWdlKHdvcmtpbmdEQy5nZXQoKSwgaW1nLT5zaXplKCksICZkcmF3
Q29udGV4dCk7CiAKICAgICBpZiAoIWhibXApCi0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBpZiAoIWRyYXdDb250ZXh0KSB7CiAgICAgICAgIDo6RGVsZXRlT2Jq
ZWN0KGhibXApOwpAQCAtMTU0LDkgKzE1Myw2IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGcm9tSW1hZ2UoSW0KICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7
CiAKLWV4aXQ6Ci0gICAgaWYgKHdvcmtpbmdEQykKLSAgICAgICAgRGVsZXRlREMod29ya2luZ0RD
KTsKICAgICByZXR1cm4gaGJtcDsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkocmV2aXNpb24gMTU1MzU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8Y2Fp
cm8td2luMzIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMTEzLDEzICsxMTQsMTMgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERy
YWdJbWFnZVJlZgogCiAgICAgSEJJVE1BUCBoYm1wID0gMDsKICAgICBIREMgZGMgPSBHZXREQygw
KTsKLSAgICBIREMgZHN0REMgPSBDcmVhdGVDb21wYXRpYmxlREMoZGMpOworICAgIGF1dG8gZHN0
REMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhkYykpOwogCiAgICAgaWYg
KCFkc3REQykKICAgICAgICAgZ290byBleGl0OwogCiAgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8q
IHRhcmdldENvbnRleHQ7Ci0gICAgaGJtcCA9IGFsbG9jSW1hZ2UoZHN0REMsIGRzdFNpemUsICZ0
YXJnZXRDb250ZXh0KTsKKyAgICBoYm1wID0gYWxsb2NJbWFnZShkc3REQy5nZXQoKSwgZHN0U2l6
ZSwgJnRhcmdldENvbnRleHQpOwogICAgIGlmICghaGJtcCkKICAgICAgICAgZ290byBleGl0Owog
CkBAIC0xNDQsOCArMTQ1LDYgQEAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZgogZXhpdDoKICAgICBpZiAoIWhibXApCiAgICAgICAgIGhibXAgPSBpbWFnZTsKLSAgICBp
ZiAoZHN0REMpCi0gICAgICAgIERlbGV0ZURDKGRzdERDKTsKICAgICBSZWxlYXNlREMoMCwgZGMp
OwogICAgIHJldHVybiBoYm1wOwogfQpAQCAtMTU0LDEyICsxNTMsMTIgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbQogewogICAgIEhCSVRNQVAgaGJtcCA9IDA7CiAg
ICAgSERDIGRjID0gR2V0REMoMCk7Ci0gICAgSERDIHdvcmtpbmdEQyA9IENyZWF0ZUNvbXBhdGli
bGVEQyhkYyk7CisgICAgYXV0byB3b3JraW5nREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQyhkYykpOwogICAgIGlmICghd29ya2luZ0RDKQogICAgICAgICBnb3RvIGV4aXQ7
CiAKICAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogZHJhd0NvbnRleHQgPSAwOwotICAgIGhibXAg
PSBhbGxvY0ltYWdlKHdvcmtpbmdEQywgaW1nLT5zaXplKCksICZkcmF3Q29udGV4dCk7CisgICAg
aGJtcCA9IGFsbG9jSW1hZ2Uod29ya2luZ0RDLmdldCgpLCBpbWctPnNpemUoKSwgJmRyYXdDb250
ZXh0KTsKICAgICBpZiAoIWhibXApCiAgICAgICAgIGdvdG8gZXhpdDsKIApAQCAtMTg0LDggKzE4
Myw2IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW0KICAgICBkZWFs
bG9jQ29udGV4dChkcmF3Q29udGV4dCk7CiAKIGV4aXQ6Ci0gICAgaWYgKHdvcmtpbmdEQykKLSAg
ICAgICAgRGVsZXRlREMod29ya2luZ0RDKTsKICAgICBSZWxlYXNlREMoMCwgZGMpOwogICAgIHJl
dHVybiBoYm1wOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJ
bWFnZVdpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5k
ZXJlci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dE
SU9iamVjdC5oPgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCkBAIC0xNzksMTggKzE4MCwxNiBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMCiAgICAgLy8gZmlsbCB0
aGUgYmFja2dyb3VuZAogICAgIEhCSVRNQVAgaW1hZ2UgPSAwOwogICAgIEhXbmREQyBkYygwKTsK
LSAgICBIREMgd29ya2luZ0RDID0gQ3JlYXRlQ29tcGF0aWJsZURDKGRjKTsKKyAgICBhdXRvIHdv
cmtpbmdEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKGRjKSk7CiAgICAg
aWYgKCF3b3JraW5nREMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqIGNvbnRleHRSZWY7Ci0gICAgaW1hZ2UgPSBhbGxvY0ltYWdlKHdvcmtpbmdEQywg
aW1hZ2VTaXplLCAmY29udGV4dFJlZik7Ci0gICAgaWYgKCFpbWFnZSkgewotICAgICAgICBEZWxl
dGVEQyh3b3JraW5nREMpOworICAgIGltYWdlID0gYWxsb2NJbWFnZSh3b3JraW5nREMuZ2V0KCks
IGltYWdlU2l6ZSwgJmNvbnRleHRSZWYpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
biAwOwotICAgIH0KICAgICAgICAgCi0gICAgU2VsZWN0T2JqZWN0KHdvcmtpbmdEQywgaW1hZ2Up
OworICAgIFNlbGVjdE9iamVjdCh3b3JraW5nREMuZ2V0KCksIGltYWdlKTsKICAgICBHcmFwaGlj
c0NvbnRleHQgY29udGV4dChjb250ZXh0UmVmKTsKICAgICAvLyBPbiBNYWMgYWxwaGEgaXMgezAu
NywgMC43LCAwLjcsIDAuOH0sIGhvd2V2ZXIgd2UgY2FuJ3QgY29udHJvbCBhbHBoYQogICAgIC8v
IGZvciBkcmFnIGltYWdlcyBvbiB3aW4sIHNvIHdlIHVzZSAxCkBAIC0yMTYsNyArMjE1LDYgQEAg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTAogICAgIFdlYkNvcmVEcmF3
RG91YmxlZFRleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsLCB0ZXh0UG9zLCAqbGFiZWxGb250LCB0
b3BDb2xvciwgYm90dG9tQ29sb3IpOwogCiAgICAgZGVhbGxvY0NvbnRleHQoY29udGV4dFJlZik7
Ci0gICAgRGVsZXRlREMod29ya2luZ0RDKTsKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlz
aW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEzIFh1ZXFpbmcgSHVhbmcgPGh1YW5neHVlcWluZ0BiYWlkdS5j
b20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAibWFya3Vw
LmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03NDEsMjggKzc0MiwyNCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1h
Z2UoTm9kZSogbm9kZSwKICAgICBjbGVhcigpOwogCiAgICAgSFduZERDIGRjKDApOwotICAgIEhE
QyBjb21wYXRpYmxlREMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7Ci0gICAgSERDIHNvdXJjZURD
ID0gQ3JlYXRlQ29tcGF0aWJsZURDKDApOwotICAgIE93blB0cjxIQklUTUFQPiByZXN1bHRCaXRt
YXAgPSBhZG9wdFB0cihDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgoKSwg
aW1hZ2UtPmhlaWdodCgpKSk7Ci0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSBTZWxlY3RPYmplY3Qo
Y29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXAuZ2V0KCkpOworICAgIGF1dG8gY29tcGF0aWJsZURD
ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOworICAgIGF1dG8gc291
cmNlREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisgICAgYXV0
byByZXN1bHRCaXRtYXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAo
ZGMsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICBIR0RJT0JKIG9sZEJp
dG1hcCA9IDo6U2VsZWN0T2JqZWN0KGNvbXBhdGlibGVEQy5nZXQoKSwgcmVzdWx0Qml0bWFwLmdl
dCgpKTsKIAogICAgIEJpdG1hcEluZm8gYm1JbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKGltYWdl
LT5zaXplKCkpOwogCi0gICAgSEJJVE1BUCBjb3JlQml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbihk
YywgJmJtSW5mbywgRElCX1JHQl9DT0xPUlMsIDAsIDAsIDApOwotICAgIEhHRElPQkogb2xkU291
cmNlID0gU2VsZWN0T2JqZWN0KHNvdXJjZURDLCBjb3JlQml0bWFwKTsKLSAgICBpbWFnZS0+Z2V0
SEJJVE1BUChjb3JlQml0bWFwKTsKLQotICAgIEJpdEJsdChjb21wYXRpYmxlREMsIDAsIDAsIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIHNvdXJjZURDLCAwLCAwLCBTUkNDT1BZKTsK
LQotICAgIFNlbGVjdE9iamVjdChzb3VyY2VEQywgb2xkU291cmNlKTsKLSAgICBEZWxldGVPYmpl
Y3QoY29yZUJpdG1hcCk7Ci0KLSAgICBTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCBvbGRCaXRt
YXApOwotICAgIERlbGV0ZURDKHNvdXJjZURDKTsKLSAgICBEZWxldGVEQyhjb21wYXRpYmxlREMp
OworICAgIGF1dG8gY29yZUJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlv
bihkYywgJmJtSW5mbywgRElCX1JHQl9DT0xPUlMsIDAsIDAsIDApKTsKKyAgICBIR0RJT0JKIG9s
ZFNvdXJjZSA9IDo6U2VsZWN0T2JqZWN0KHNvdXJjZURDLmdldCgpLCBjb3JlQml0bWFwLmdldCgp
KTsKKyAgICBpbWFnZS0+Z2V0SEJJVE1BUChjb3JlQml0bWFwLmdldCgpKTsKKworICAgIDo6Qml0
Qmx0KGNvbXBhdGlibGVEQy5nZXQoKSwgMCwgMCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSwgc291cmNlREMuZ2V0KCksIDAsIDAsIFNSQ0NPUFkpOworCisgICAgOjpTZWxlY3RPYmpl
Y3Qoc291cmNlREMuZ2V0KCksIG9sZFNvdXJjZSk7CisgICAgOjpTZWxlY3RPYmplY3QoY29tcGF0
aWJsZURDLmdldCgpLCBvbGRCaXRtYXApOwogCiAgICAgaWYgKDo6T3BlbkNsaXBib2FyZChtX293
bmVyKSkgewotICAgICAgICA6OlNldENsaXBib2FyZERhdGEoQ0ZfQklUTUFQLCByZXN1bHRCaXRt
YXAubGVha1B0cigpKTsKKyAgICAgICAgOjpTZXRDbGlwYm9hcmREYXRhKENGX0JJVE1BUCwgcmVz
dWx0Qml0bWFwLmxlYWsoKSk7CiAgICAgICAgIDo6Q2xvc2VDbGlwYm9hcmQoKTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsYmFyVGhlbWVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVt
ZVdpbi5jcHAJKHJldmlzaW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9TY3JvbGxiYXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUg
IlN5c3RlbUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiAvLyBHZW5l
cmljIHN0YXRlIGNvbnN0YW50cwogI2RlZmluZSBUU19OT1JNQUwgICAgMQpAQCAtMjU2LDggKzI1
Nyw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVXaW46OnBhaW50VHJhY2tQaWVjZSgKICAgICAgICAg
ICAgIDo6RmlsbFJlY3QoaGRjLCAmdGhlbWVSZWN0LCBIQlJVU0goQ09MT1JfU0NST0xMQkFSKzEp
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGF0aWMgV09SRCBwYXR0ZXJuQml0c1s4
XSA9IHsgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSB9Owot
ICAgICAgICAgICAgT3duUHRyPEhCSVRNQVA+IHBhdHRlcm5CaXRtYXAgPSBhZG9wdFB0cig6OkNy
ZWF0ZUJpdG1hcCg4LCA4LCAxLCAxLCBwYXR0ZXJuQml0cykpOwotICAgICAgICAgICAgT3duUHRy
PEhCUlVTSD4gYnJ1c2ggPSBhZG9wdFB0cig6OkNyZWF0ZVBhdHRlcm5CcnVzaChwYXR0ZXJuQml0
bWFwLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIHBhdHRlcm5CaXRtYXAgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUJpdG1hcCg4LCA4LCAxLCAxLCBwYXR0ZXJuQml0cykpOworICAgICAgICAg
ICAgYXV0byBicnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUGF0dGVybkJydXNoKHBhdHRl
cm5CaXRtYXAuZ2V0KCkpKTsKICAgICAgICAgICAgIFNhdmVEQyhoZGMpOwogICAgICAgICAgICAg
OjpTZXRUZXh0Q29sb3IoaGRjLCA6OkdldFN5c0NvbG9yKENPTE9SXzNESElMSUdIVCkpOwogICAg
ICAgICAgICAgOjpTZXRCa0NvbG9yKGhkYywgOjpHZXRTeXNDb2xvcihDT0xPUl8zREZBQ0UpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShy
ZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgog
CiAjaWYgT1MoV0lOQ0UpCiAjdW5kZWYgTE9HX05QRVJST1IKQEAgLTQ1Nyw3ICs0NTgsNiBAQCB2
b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiAgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CiAKICAgICBpZiAocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSAmJiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5k
b3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsK
LSAgICAgICAgSFJHTiByZ247CiAKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIApA
QCAtNDY3LDEwICs0NjcsMTAgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQo
KQogICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwogCiAgICAg
ICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0
UmduKDAsIDAsIDAsIDApOworICAgICAgICAgICAgSFJHTiByZ24gPSA6OkNyZWF0ZVJlY3RSZ24o
MCwgMCwgMCwgMCk7CiAgICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCByZ24sIEZBTFNFKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJnbiA9
IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJl
Y3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CisgICAgICAgICAgICBIUkdOIHJnbiA9IDo6
Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3Qu
bWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgICAgICA6OlNldFdpbmRvd1Jnbihw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIFRSVUUpOwogICAgICAgICB9CiAKQEAgLTQ3OCw3
ICs0NzgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiAgICAgICAg
ICAgICA6Ok1vdmVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0Lngo
KSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5o
ZWlnaHQoKSwgVFJVRSk7CiAKICAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7Ci0gICAgICAg
ICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgp
LCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOworICAgICAgICAgICAgSFJH
TiByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBt
X2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOwogICAgICAgICAgICAgOjpTZXRX
aW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLCBUUlVFKTsKICAgICAgICAgfQog
CkBAIC0xMDY4LDcgKzEwNjgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgp
CiBQYXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCiB7CiAjaWYgIVBMQVRG
T1JNKEdUSykgJiYgIVVTRShXSU5HREkpCi0gICAgT3duUHRyPEhEQz4gaGRjID0gYWRvcHRQdHIo
Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKKyAgICBhdXRvIGhkYyA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKIAogICAgIGlmICghbV9pc1dpbmRvd2VkKSB7CiAgICAg
ICAgIC8vIEVuYWJsZSB3b3JsZCB0cmFuc2Zvcm1zLgpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgUGFz
c1JlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQogCiAgICAgdm9pZCogYml0czsK
ICAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKGZyYW1lUmVj
dCgpLnNpemUoKSk7Ci0gICAgT3duUHRyPEhCSVRNQVA+IGhibXAgPSBhZG9wdFB0cihDcmVhdGVE
SUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCkpOworICAgIGF1
dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJf
UkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKIAogICAgIEhCSVRNQVAgaGJtcE9sZCA9IHN0YXRp
Y19jYXN0PEhCSVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZp
c2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU29mdExpbmtp
bmcuaCIKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVT
aGVldHMuaCIKKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiAjaWYgRU5BQkxFKFZJ
REVPKQogI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHMuaCIKQEAgLTY5MCw5ICs2OTEsOSBA
QCBzdGF0aWMgdm9pZCBkcmF3Q29udHJvbChHcmFwaGljc0NvbnRleHQqCiAgICAgICAgICAgICA6
OkRyYXdFZGdlKGhkYywgJndpZGdldFJlY3QsIEVER0VfUkFJU0VELCBCRl9SRUNUIHwgQkZfU09G
VCB8IEJGX01JRERMRSB8IEJGX0FESlVTVCk7CiAgICAgICAgICAgICBpZiAodGhlbWVEYXRhLm1f
c3RhdGUgPT0gVFVTX0RJU0FCTEVEKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljIFdPUkQgcGF0
dGVybkJpdHNbOF0gPSB7MHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHhhYSwg
MHg1NX07Ci0gICAgICAgICAgICAgICAgT3duUHRyPEhCSVRNQVA+IHBhdHRlcm5CbXAgPSBhZG9w
dFB0cig6OkNyZWF0ZUJpdG1hcCg4LCA4LCAxLCAxLCBwYXR0ZXJuQml0cykpOworICAgICAgICAg
ICAgICAgIGF1dG8gcGF0dGVybkJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQml0bWFwKDgs
IDgsIDEsIDEsIHBhdHRlcm5CaXRzKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5CbXAp
IHsKLSAgICAgICAgICAgICAgICAgICAgT3duUHRyPEhCUlVTSD4gYnJ1c2ggPSBhZG9wdFB0cig6
OkNyZWF0ZVBhdHRlcm5CcnVzaChwYXR0ZXJuQm1wLmdldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gYnJ1c2ggPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVBhdHRlcm5CcnVzaChwYXR0
ZXJuQm1wLmdldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIENPTE9SUkVGIG9sZEZvcmVDb2xv
ciA9IDo6U2V0VGV4dENvbG9yKGhkYywgOjpHZXRTeXNDb2xvcihDT0xPUl8zREZBQ0UpKTsKICAg
ICAgICAgICAgICAgICAgICAgQ09MT1JSRUYgb2xkQmFja0NvbG9yID0gOjpTZXRCa0NvbG9yKGhk
YywgOjpHZXRTeXNDb2xvcihDT0xPUl8zREhJTElHSFQpKTsKICAgICAgICAgICAgICAgICAgICAg
UE9JTlQgcDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTQwNCkKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisy
MDEzLTA5LTA5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAg
IFtXaW5kb3dzXSBDaGFuZ2UgZnJvbSB1c2luZyBPd25QdHI8R0RJIFN0dWZmPiB0byBuZXcgR0RJ
T2JqZWN0IHRlbXBsYXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIwNzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OmNyZWF0ZUhVRFdpbmRvdyk6IFN3aXRjaCB0byBHRElPYmpl
Y3QuCisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpkcmF3KTogRGl0dG8uCisg
ICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcDoKKyAgICAgICAgKEVtYmVkZGVkV2lkZ2V0OjpmcmFt
ZVJlY3RzQ2hhbmdlZCk6IFN3aXRjaCB0byBHRElPYmplY3QuCisgICAgICAgICogV2ViTm9kZUhp
Z2hsaWdodC5jcHA6CisgICAgICAgIChXZWJOb2RlSGlnaGxpZ2h0Ojp1cGRhdGUpOiBTd2l0Y2gg
dG8gR0RJT2JqZWN0LgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6
c2Nyb2xsQmFja2luZ1N0b3JlKTogU3dpdGNoIHRvIEdESU9iamVjdC4KKyAgICAgICAgKFdlYlZp
ZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6cGVyZm9y
bUxheWVyZWRXaW5kb3dVcGRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OnBhaW50KTog
RGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOiBEaXR0by4K
KyAgICAgICAgKFdlYlZpZXc6OnBhaW50SW50b1dpbmRvdyk6IERpdHRvLgorICAgICAgICAoV2Vi
Vmlldzo6Z2VuZXJhdGVTZWxlY3Rpb25JbWFnZSk6IERpdHRvLgorCiAyMDEzLTA5LTA1ICBSb2dl
ciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbmRvd3NdIEltcGxl
bWVudCB0ZXh0IG9mZnNldCBtZXRob2RzIG9mIElBY2Nlc3NpYmxlVGV4dCBpbnRlcmZhY2UuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmNyZWF0ZUhVCiAgICAgLy8gd2lsbCBnZXQgY2xlYW5l
ZCB1cCB3aGVuIG1fYml0bWFwIGlzIGRlc3Ryb3llZCBpbiB0aGUgZHRvcgogICAgIHZvaWQqIHBp
eGVsczsKICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0
b21VcChJbnRTaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQpKTsKLSAgICBtX2JpdG1hcCA9
IGFkb3B0UHRyKDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xP
UlMsICZwaXhlbHMsIDAsIDApKTsKKyAgICBtX2JpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAs
IDApKTsKIAogICAgIC8vIERpcnR5IHRoZSB3aW5kb3cgc28gdGhlIEhVRCBkcmF3cwogICAgIFJF
Q1QgY2xlYXJSZWN0ID0geyBtX2h1ZFBvc2l0aW9uLngoKSwgbV9odWRQb3NpdGlvbi55KCksIG1f
aHVkUG9zaXRpb24ueCgpICsgd2luZG93V2lkdGgsIG1faHVkUG9zaXRpb24ueSgpICsgd2luZG93
SGVpZ2h0IH07CkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIFN0cmluZyB0aW1lVG9TdHJpbmco
ZmxvYXQgdGltZSkKIAogdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpkcmF3KCkKIHsK
LSAgICBPd25QdHI8SERDPiBiaXRtYXBEQyA9IGFkb3B0UHRyKENyZWF0ZUNvbXBhdGlibGVEQyhI
V25kREMobV9odWRXaW5kb3cpKSk7CisgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX2h1ZFdpbmRvdykpKTsKICAgICBIR0RJT0JK
IG9sZEJpdG1hcCA9IFNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iaXRtYXAuZ2V0KCkp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYml0bWFwREMuZ2V0KCksIHRydWUpOwpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTU1MzU1KQorKysgU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC0xNTMsNyArMTU0LDcgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1l
bnQ7CiAKICAgICBIV05EIG1faHVkV2luZG93OwotICAgIE93blB0cjxIQklUTUFQPiBtX2JpdG1h
cDsKKyAgICBHRElPYmplY3Q8SEJJVE1BUD4gbV9iaXRtYXA7CiAgICAgV2ViQ29yZTo6SW50U2l6
ZSBtX2Z1bGxzY3JlZW5TaXplOwogICAgIFdlYkNvcmU6OkludFBvaW50IG1faHVkUG9zaXRpb247
CiAgICAgT3duUHRyPFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c+
IG1fZnVsbHNjcmVlbldpbmRvdzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYk5vZGVIaWdo
bGlnaHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYk5vZGVIaWdobGln
aHQuY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJOb2RlSGln
aGxpZ2h0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTQwLDcgKzE0MSw3IEBAIHZvaWQg
V2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKCkKIHsKICAgICBBU1NFUlQobV9vdmVybGF5KTsKIAot
ICAgIEhEQyBoZGMgPSA6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMobV9vdmVybGF5KSk7Cisg
ICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMo
bV9vdmVybGF5KSkpOwogICAgIGlmICghaGRjKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1Nywx
MiArMTU4LDEyIEBAIHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKCkKICAgICBCaXRtYXBJ
bmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChJbnRTaXplKHNpemUp
KTsKIAogICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgT3duUHRyPEhCSVRNQVA+IGhibXAgPSBh
ZG9wdFB0cig6OkNyZWF0ZURJQlNlY3Rpb24oaGRjLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xP
UlMsICZwaXhlbHMsIDAsIDApKTsKKyAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZURJQlNlY3Rpb24oaGRjLmdldCgpLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZw
aXhlbHMsIDAsIDApKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGhibXAsICI6OkNyZWF0ZURJ
QlNlY3Rpb24gZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CiAKLSAg
ICA6OlNlbGVjdE9iamVjdChoZGMsIGhibXAuZ2V0KCkpOworICAgIDo6U2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChoZGMp
OworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGhkYy5nZXQoKSk7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCkBAIC0xODEsOCArMTgyLDcgQEAgdm9pZCBXZWJOb2RlSGlnaGxpZ2h0Ojp1cGRhdGUoKQog
ICAgIGRzdFBvaW50LnggPSB3ZWJWaWV3UmVjdC5sZWZ0OwogICAgIGRzdFBvaW50LnkgPSB3ZWJW
aWV3UmVjdC50b3A7CiAKLSAgICA6OlVwZGF0ZUxheWVyZWRXaW5kb3cobV9vdmVybGF5LCBIV25k
REMoMCksICZkc3RQb2ludCwgJnNpemUsIGhkYywgJnNyY1BvaW50LCAwLCAmYmYsIFVMV19BTFBI
QSk7Ci0gICAgOjpEZWxldGVEQyhoZGMpOworICAgIDo6VXBkYXRlTGF5ZXJlZFdpbmRvdyhtX292
ZXJsYXksIEhXbmREQygwKSwgJmRzdFBvaW50LCAmc2l6ZSwgaGRjLmdldCgpLCAmc3JjUG9pbnQs
IDAsICZiZiwgVUxXX0FMUEhBKTsKIH0KIAogdm9pZCBXZWJOb2RlSGlnaGxpZ2h0OjpwbGFjZUJl
aGluZFdpbmRvdyhIV05EIHdpbmRvdykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lv
biAxNTUzNTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDYgKzE4MCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCiAvLyBTb2Z0IGxpbmsgZnVu
Y3Rpb25zIGZvciBnZXN0dXJlcyBhbmQgcGFubmluZyBmZWVkYmFjawogU09GVF9MSU5LX0xJQlJB
UlkoVVNFUjMyKTsKQEAgLTg5MywxMyArODk0LDEzIEBAIHZvaWQgV2ViVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKEZyYW1lVmkKIAogICAgIC8vIENvbGxlY3Qgb3VyIGRldmljZSBjb250ZXh0IGlu
Zm8gYW5kIHNlbGVjdCB0aGUgYml0bWFwIHRvIHNjcm9sbC4KICAgICBIV25kREMgd2luZG93REMo
bV92aWV3V2luZG93KTsKLSAgICBIREMgYml0bWFwREMgPSA6OkNyZWF0ZUNvbXBhdGlibGVEQyh3
aW5kb3dEQyk7Ci0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChiaXRtYXBE
QywgbV9iYWNraW5nU3RvcmVCaXRtYXAtPmhhbmRsZSgpKTsKKyAgICBhdXRvIGJpdG1hcERDID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpKTsKKyAgICBIR0RJ
T0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBtX2JhY2tpbmdT
dG9yZUJpdG1hcC0+aGFuZGxlKCkpOwogICAgIAogICAgIC8vIFNjcm9sbCB0aGUgYml0bWFwLgog
ICAgIFJFQ1Qgc2Nyb2xsUmVjdFdpbihzY3JvbGxWaWV3UmVjdCk7CiAgICAgUkVDVCBjbGlwUmVj
dFdpbihjbGlwUmVjdCk7Ci0gICAgOjpTY3JvbGxEQyhiaXRtYXBEQywgZHgsIGR5LCAmc2Nyb2xs
UmVjdFdpbiwgJmNsaXBSZWN0V2luLCB1cGRhdGVSZWdpb24sIDApOworICAgIDo6U2Nyb2xsREMo
Yml0bWFwREMuZ2V0KCksIGR4LCBkeSwgJnNjcm9sbFJlY3RXaW4sICZjbGlwUmVjdFdpbiwgdXBk
YXRlUmVnaW9uLCAwKTsKICAgICBSRUNUIHJlZ2lvbkJveDsKICAgICA6OkdldFJnbkJveCh1cGRh
dGVSZWdpb24sICZyZWdpb25Cb3gpOwogCkBAIC05MTMsMTEgKzkxNCwxMCBAQCB2b2lkIFdlYlZp
ZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShGcmFtZVZpCiAgICAgICAgIG1fdWlEZWxlZ2F0ZVByaXZh
dGUtPndlYlZpZXdTY3JvbGxlZCh0aGlzKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYmFja2luZyBz
dG9yZS4KLSAgICB1cGRhdGVCYWNraW5nU3RvcmUoZnJhbWVWaWV3LCBiaXRtYXBEQywgZmFsc2Up
OworICAgIHVwZGF0ZUJhY2tpbmdTdG9yZShmcmFtZVZpZXcsIGJpdG1hcERDLmdldCgpLCBmYWxz
ZSk7CiAKICAgICAvLyBDbGVhbiB1cC4KLSAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgb2xk
Qml0bWFwKTsKLSAgICA6OkRlbGV0ZURDKGJpdG1hcERDKTsKKyAgICA6OlNlbGVjdE9iamVjdChi
aXRtYXBEQy5nZXQoKSwgb2xkQml0bWFwKTsKIH0KIAogdm9pZCBXZWJWaWV3OjpzaXplQ2hhbmdl
ZChjb25zdCBJbnRTaXplJiBuZXdTaXplKQpAQCAtOTg3LDExICs5ODcsMTQgQEAgdm9pZCBXZWJW
aWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoRnJhbWVWaQogCiAgICAgTE9DQUxfR0RJX0NPVU5URVIo
MCwgX19GVU5DVElPTl9fKTsKIAorICAgIEdESU9iamVjdDxIREM+IGJpdG1hcERDT2JqZWN0Owor
CiAgICAgSERDIGJpdG1hcERDID0gZGM7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSAwOwogICAg
IGlmICghZGMpIHsKICAgICAgICAgSFduZERDIHdpbmRvd0RDKG1fdmlld1dpbmRvdyk7Ci0gICAg
ICAgIGJpdG1hcERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMod2luZG93REMpOworICAgICAgICBi
aXRtYXBEQ09iamVjdCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKHdpbmRv
d0RDKSk7CisgICAgICAgIGJpdG1hcERDID0gYml0bWFwRENPYmplY3QuZ2V0KCk7CiAgICAgICAg
IG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tpbmdTdG9yZUJpdG1h
cC0+aGFuZGxlKCkpOwogICAgIH0KIApAQCAtMTAyMSwxMCArMTAyNCw4IEBAIHZvaWQgV2ViVmll
dzo6dXBkYXRlQmFja2luZ1N0b3JlKEZyYW1lVmkKICAgICAgICAgbV9iYWNraW5nU3RvcmVEaXJ0
eVJlZ2lvbi5jbGVhcigpOwogICAgIH0KIAotICAgIGlmICghZGMpIHsKKyAgICBpZiAoIWRjKQog
ICAgICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgb2xkQml0bWFwKTsKLSAgICAgICAgOjpE
ZWxldGVEQyhiaXRtYXBEQyk7Ci0gICAgfQogCiAgICAgR2RpRmx1c2goKTsKIH0KQEAgLTEwMzYs
NyArMTAzNyw3IEBAIHZvaWQgV2ViVmlldzo6cGVyZm9ybUxheWVyZWRXaW5kb3dVcGRhdGUKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSFduZERDIGhkY1NjcmVlbihtX3ZpZXdXaW5kb3cpOwotICAg
IE93blB0cjxIREM+IGhkY01lbSA9IGFkb3B0UHRyKDo6Q3JlYXRlQ29tcGF0aWJsZURDKGhkY1Nj
cmVlbikpOworICAgIGF1dG8gaGRjTWVtID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRp
YmxlREMoaGRjU2NyZWVuKSk7CiAgICAgSEJJVE1BUCBoYm1PbGQgPSBzdGF0aWNfY2FzdDxIQklU
TUFQPig6OlNlbGVjdE9iamVjdChoZGNNZW0uZ2V0KCksIG1fYmFja2luZ1N0b3JlQml0bWFwLT5o
YW5kbGUoKSkpOwogCiAgICAgQklUTUFQIGJtcEluZm87CkBAIC0xMTEwLDExICsxMTExLDExIEBA
IHZvaWQgV2ViVmlldzo6cGFpbnQoSERDIGRjLCBMUEFSQU0gb3B0aW8KIAogICAgIG1fcGFpbnRD
b3VudCsrOwogCi0gICAgSERDIGJpdG1hcERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMoaGRjKTsK
LSAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBtX2JhY2tp
bmdTdG9yZUJpdG1hcC0+aGFuZGxlKCkpOworICAgIGF1dG8gYml0bWFwREMgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhoZGMpKTsKKyAgICBIR0RJT0JKIG9sZEJpdG1hcCA9
IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBtX2JhY2tpbmdTdG9yZUJpdG1hcC0+aGFu
ZGxlKCkpOwogCiAgICAgLy8gVXBkYXRlIG91ciBiYWNraW5nIHN0b3JlIGlmIG5lZWRlZC4KLSAg
ICB1cGRhdGVCYWNraW5nU3RvcmUoZnJhbWVWaWV3LCBiaXRtYXBEQywgYmFja2luZ1N0b3JlQ29t
cGxldGVseURpcnR5LCB3aW5kb3dzVG9QYWludCk7CisgICAgdXBkYXRlQmFja2luZ1N0b3JlKGZy
YW1lVmlldywgYml0bWFwREMuZ2V0KCksIGJhY2tpbmdTdG9yZUNvbXBsZXRlbHlEaXJ0eSwgd2lu
ZG93c1RvUGFpbnQpOwogCiAgICAgLy8gTm93IHdlIGJsaXQgdGhlIHVwZGF0ZWQgYmFja2luZyBz
dG9yZQogICAgIEludFJlY3Qgd2luZG93RGlydHlSZWN0ID0gcmNQYWludDsKQEAgLTExMjcsMTAg
KzExMjgsOSBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBkYywgTFBBUkFNIG9wdGlvCiAgICAg
ICAgIGJsaXRSZWN0cy5hcHBlbmQod2luZG93RGlydHlSZWN0KTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibGl0UmVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBhaW50SW50b1dp
bmRvdyhiaXRtYXBEQywgaGRjLCBibGl0UmVjdHNbaV0pOworICAgICAgICBwYWludEludG9XaW5k
b3coYml0bWFwREMuZ2V0KCksIGhkYywgYmxpdFJlY3RzW2ldKTsKIAotICAgIDo6U2VsZWN0T2Jq
ZWN0KGJpdG1hcERDLCBvbGRCaXRtYXApOwotICAgIDo6RGVsZXRlREMoYml0bWFwREMpOworICAg
IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgpLCBvbGRCaXRtYXApOwogCiAgICAgaWYgKCFk
YykKICAgICAgICAgRW5kUGFpbnQobV92aWV3V2luZG93LCAmcHMpOwpAQCAtMTE2MCw3ICsxMTYw
LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJhbQogI2lmIEZMQVNI
X0JBQ0tJTkdfU1RPUkVfUkVEUkFXCiAgICAgewogICAgICAgICBIV25kREMgZGMobV92aWV3V2lu
ZG93KTsKLSAgICAgICAgT3duUHRyPEhCUlVTSD4geWVsbG93QnJ1c2goQ3JlYXRlU29saWRCcnVz
aChSR0IoMjU1LCAyNTUsIDApKSk7CisgICAgICAgIGF1dG8geWVsbG93QnJ1c2ggPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZVNvbGlkQnJ1c2goUkdCKDI1NSwgMjU1LCAwKSkpOwogICAgICAgICBG
aWxsUmVjdChkYywgJnJlY3QsIHllbGxvd0JydXNoLmdldCgpKTsKICAgICAgICAgR2RpRmx1c2go
KTsKICAgICAgICAgU2xlZXAoNTApOwpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgdm9pZCBXZWJWaWV3
OjpwYWludEludG9XaW5kb3coSERDIGJpdG1hcAogCiAgICAgTE9DQUxfR0RJX0NPVU5URVIoMCwg
X19GVU5DVElPTl9fKTsKICNpZiBGTEFTSF9XSU5ET1dfUkVEUkFXCi0gICAgT3duUHRyPEhCUlVT
SD4gZ3JlZW5CcnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2goUkdCKDAsIDI1NSwgMCkpOworICAgIGF1
dG8gZ3JlZW5CcnVzaCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlU29saWRCcnVzaChSR0IoMCwg
MjU1LCAwKSkpOwogICAgIFJFQ1QgcmVjdCA9IGRpcnR5UmVjdDsKICAgICBGaWxsUmVjdCh3aW5k
b3dEQywgJnJlY3QsIGdyZWVuQnJ1c2guZ2V0KCkpOwogICAgIEdkaUZsdXNoKCk7CkBAIC0zNTc3
LDggKzM1NzcsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmdlbmVyCiAK
ICAgICBXZWJDb3JlOjpGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgT3duUHRyPEhCSVRNQVA+IGJpdG1hcCA9IGltYWdl
RnJvbVNlbGVjdGlvbigmZnJhbWUsIGZvcmNlV2hpdGVUZXh0ID8gVFJVRSA6IEZBTFNFKTsKLSAg
ICAqaEJpdG1hcCA9IHN0YXRpY19jYXN0PE9MRV9IQU5ETEU+KHJlaW50ZXJwcmV0X2Nhc3Q8VUxP
Tkc2ND4oYml0bWFwLmxlYWtQdHIoKSkpOworICAgIGF1dG8gYml0bWFwID0gaW1hZ2VGcm9tU2Vs
ZWN0aW9uKCZmcmFtZSwgZm9yY2VXaGl0ZVRleHQgPyBUUlVFIDogRkFMU0UpOworICAgICpoQml0
bWFwID0gc3RhdGljX2Nhc3Q8T0xFX0hBTkRMRT4ocmVpbnRlcnByZXRfY2FzdDxVTE9ORzY0Pihi
aXRtYXAubGVhaygpKSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAJKHJldmlz
aW9uIDE1NTM1NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVk
V2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDE4ICsxMDksMTYgQEAgdm9pZCBFbWJlZGRl
ZFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQoKQogICAgIGlmIChtX3dpbmRvd1JlY3QgPT0gb2xk
V2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBIUkdOIHJnbjsKLQogICAgIC8vIFRvIHByZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3Jv
bGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBkdXJpbmcgdGhlIHdpbmRvdwogICAgIC8vIHVwZGF0
ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KIAogICAg
IGJvb2wgY2xpcFRvWmVyb1JlY3QgPSB0cnVlOwogCiAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7
Ci0gICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKTsKKyAgICAgICAgSFJH
TiByZ24gPSA6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CiAgICAgICAgIDo6U2V0V2luZG93
UmduKG1fd2luZG93LCByZ24sIEZBTFNFKTsKICAgICB9IGVsc2UgewotICAgICAgICByZ24gPSA6
OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0
Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOworICAgICAgICBIUkdOIHJnbiA9IDo6Q3JlYXRl
UmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgp
LCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgIDo6U2V0V2luZG93UmduKG1fd2luZG93LCBy
Z24sIFRSVUUpOwogICAgICB9CiAKQEAgLTEyOCw3ICsxMjYsNyBAQCB2b2lkIEVtYmVkZGVkV2lk
Z2V0OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCiAgICAgICAgIDo6TW92ZVdpbmRvdyhtX3dpbmRvdywg
bV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSwgVFJVRSk7CiAKICAgICAgaWYgKGNsaXBUb1plcm9SZWN0
KSB7Ci0gICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlw
UmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CisgICAgICAg
IEhSR04gcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKICAgICAgICAgOjpTZXRX
aW5kb3dSZ24obV93aW5kb3csIHJnbiwgVFJVRSk7CiAgICAgfQogfQpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NDA3KQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMt
MDktMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dp
bmRvd3NdIENoYW5nZSBmcm9tIHVzaW5nIE93blB0cjxHREkgU3R1ZmY+IHRvIG5ldyBHRElPYmpl
Y3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3
NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBwb3J0V2luLmNwcDoKKyAgICAgICAgKGNyZWF0
ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyk6IFVzZSBHRElPYmplY3QuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHk6CisgICAgICAgIChjaGVja19mb3Jf
bGVha3lfcGF0dGVybnMpOiBVcGRhdGUgZm9yIEdESU9iamVjdCBpbnN0ZWFkIG9mIGFkb3B0UHRy
IGFuZCBPd25QdHIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9j
cHBfdW5pdHRlc3QucHk6CisgICAgICAgIChMZWFreVBhdHRlcm5UZXN0LnRlc3RfY3JlYXRlX2Rj
KTogVXBkYXRlIGZvciBHRElPYmplY3QgaW5zdGVhZCBvZiBhZG9wdFB0ci9Pd25QdHIuCisgICAg
ICAgIChMZWFreVBhdHRlcm5UZXN0LnRlc3RfY3JlYXRlX2NvbXBhdGlibGVfZGMpOiBEaXR0by4K
KwogMjAxMy0wOS0wOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
Um9sbGluZyBvdXQgcjE1NTM5MiAoUG9pbnQgVG9vbHMgc2NyaXB0cyB0byBMYXlvdXRUZXN0cy9y
ZXNvdXJjZXMpOiBicmVha3MgdGVzdHMuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
UGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL1BpeGVsRHVtcFN1cHBvcnRXaW4uY3BwCShyZXZpc2lvbiAxNTUzNTUpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1wU3VwcG9ydFdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTMgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAog
c3RhdGljIHZvaWQgbWFrZUFscGhhQ2hhbm5lbE9wYXF1ZSh2b2lkKiBhcmdiQml0cywgTE9ORyB3
aWR0aCwgTE9ORyBoZWlnaHQpCiB7CkBAIC03MCwxMCArNzEsOSBAQCBQYXNzUmVmUHRyPEJpdG1h
cENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvCiAgICAgdm9pZCogYml0cyA9IDA7CiAgICAgSEJJVE1B
UCBiaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JTLCAmYml0
cywgMCwgMCk7CiAKLSAgICBIREMgbWVtb3J5REMgPSBDcmVhdGVDb21wYXRpYmxlREMoMCk7Ci0g
ICAgU2VsZWN0T2JqZWN0KG1lbW9yeURDLCBiaXRtYXApOwotICAgIFNlbmRNZXNzYWdlKHdlYlZp
ZXdXaW5kb3csIFdNX1BSSU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4obWVtb3J5REMpLCBQ
UkZfQ0xJRU5UIHwgUFJGX0NISUxEUkVOIHwgUFJGX09XTkVEKTsKLSAgICBEZWxldGVEQyhtZW1v
cnlEQyk7CisgICAgYXV0byBtZW1vcnlEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0
aWJsZURDKDApKTsKKyAgICA6OlNlbGVjdE9iamVjdChtZW1vcnlEQy5nZXQoKSwgYml0bWFwKTsK
KyAgICBTZW5kTWVzc2FnZSh3ZWJWaWV3V2luZG93LCBXTV9QUklOVCwgcmVpbnRlcnByZXRfY2Fz
dDxXUEFSQU0+KG1lbW9yeURDLmdldCgpKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBS
Rl9PV05FRCk7CiAKICAgICBCSVRNQVAgaW5mbyA9IHswfTsKICAgICBHZXRPYmplY3QoYml0bWFw
LCBzaXplb2YoaW5mbyksICZpbmZvKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvY3BwLnB5CShyZXZpc2lvbiAxNTUzNTUpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQkod29ya2luZyBjb3B5KQpAQCAtMTczMCwx
MCArMTczMCwxMCBAQCBkZWYgY2hlY2tfZm9yX2xlYWt5X3BhdHRlcm5zKGNsZWFuX2xpbmVzCiAg
ICAgICAgICAgICAgICdtZW1vcnkgbGVha3MuJyAlIG1hdGNoZWRfZ2V0X2RjLmdyb3VwKCdmdW5j
dGlvbl9uYW1lJykpCiAKICAgICBtYXRjaGVkX2NyZWF0ZV9kYyA9IHNlYXJjaChyJ1xiKD9QPGZ1
bmN0aW9uX25hbWU+Q3JlYXRlKENvbXBhdGlibGUpP0RDKVxzKlwoJywgbGluZSkKLSAgICBtYXRj
aGVkX293bl9kYyA9IHNlYXJjaChyJ1xiYWRvcHRQdHJcYicsIGxpbmUpCisgICAgbWF0Y2hlZF9v
d25fZGMgPSBzZWFyY2gocidcYmFkb3B0R0RJT2JqZWN0XGInLCBsaW5lKQogICAgIGlmIG1hdGNo
ZWRfY3JlYXRlX2RjIGFuZCBub3QgbWF0Y2hlZF9vd25fZGM6CiAgICAgICAgIGVycm9yKGxpbmVf
bnVtYmVyLCAncnVudGltZS9sZWFreV9wYXR0ZXJuJywgNSwKLSAgICAgICAgICAgICAgJ1VzZSBh
ZG9wdFB0ciBhbmQgT3duUHRyPEhEQz4gd2hlbiBjYWxsaW5nICVzIHRvIGF2b2lkIHBvdGVudGlh
bCAnCisgICAgICAgICAgICAgICdVc2UgYWRvcHRHRElPYmplY3QgYW5kIEdESU9iamVjdDxIREM+
IHdoZW4gY2FsbGluZyAlcyB0byBhdm9pZCBwb3RlbnRpYWwgJwogICAgICAgICAgICAgICAnbWVt
b3J5IGxlYWtzLicgJSBtYXRjaGVkX2NyZWF0ZV9kYy5ncm91cCgnZnVuY3Rpb25fbmFtZScpKQog
CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNTUzNTUpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzUyNiwyMCArMzUyNiwyMCBAQCBjbGFzcyBMZWFreVBhdHRlcm5UZXN0KENwcFN0eWxlVGVzdEJh
c2UpCiAgICAgZGVmIHRlc3RfY3JlYXRlX2RjKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9s
ZWFreV9wYXR0ZXJuX2NoZWNrKAogICAgICAgICAgICAgJ0hEQyBkYzIgPSA6OkNyZWF0ZURDKCk7
JywKLSAgICAgICAgICAgICdVc2UgYWRvcHRQdHIgYW5kIE93blB0cjxIREM+IHdoZW4gY2FsbGlu
ZyBDcmVhdGVEQyB0byBhdm9pZCBwb3RlbnRpYWwgJworICAgICAgICAgICAgJ1VzZSBhZG9wdEdE
SU9iamVjdCBhbmQgR0RJT2JqZWN0PEhEQz4gd2hlbiBjYWxsaW5nIENyZWF0ZURDIHRvIGF2b2lk
IHBvdGVudGlhbCAnCiAgICAgICAgICAgICAnbWVtb3J5IGxlYWtzLiAgW3J1bnRpbWUvbGVha3lf
cGF0dGVybl0gWzVdJykKIAogICAgICAgICBzZWxmLmFzc2VydF9sZWFreV9wYXR0ZXJuX2NoZWNr
KAotICAgICAgICAgICAgJ2Fkb3B0UHRyKENyZWF0ZURDKCkpOycsCisgICAgICAgICAgICAnYWRv
cHRHRElPYmplY3QoQ3JlYXRlREMoKSk7JywKICAgICAgICAgICAgICcnKQogCiAgICAgZGVmIHRl
c3RfY3JlYXRlX2NvbXBhdGlibGVfZGMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xlYWt5
X3BhdHRlcm5fY2hlY2soCiAgICAgICAgICAgICAnSERDIGRjMiA9IENyZWF0ZUNvbXBhdGlibGVE
QyhkYyk7JywKLSAgICAgICAgICAgICdVc2UgYWRvcHRQdHIgYW5kIE93blB0cjxIREM+IHdoZW4g
Y2FsbGluZyBDcmVhdGVDb21wYXRpYmxlREMgdG8gYXZvaWQgcG90ZW50aWFsICcKKyAgICAgICAg
ICAgICdVc2UgYWRvcHRHRElPYmplY3QgYW5kIEdESU9iamVjdDxIREM+IHdoZW4gY2FsbGluZyBD
cmVhdGVDb21wYXRpYmxlREMgdG8gYXZvaWQgcG90ZW50aWFsICcKICAgICAgICAgICAgICdtZW1v
cnkgbGVha3MuICBbcnVudGltZS9sZWFreV9wYXR0ZXJuXSBbNV0nKQogICAgICAgICBzZWxmLmFz
c2VydF9sZWFreV9wYXR0ZXJuX2NoZWNrKAotICAgICAgICAgICAgJ2Fkb3B0UHRyKENyZWF0ZUNv
bXBhdGlibGVEQyhkYykpOycsCisgICAgICAgICAgICAnYWRvcHRHRElPYmplY3QoQ3JlYXRlQ29t
cGF0aWJsZURDKGRjKSk7JywKICAgICAgICAgICAgICcnKQogCiAK
</data>
<flag name="review"
          id="233198"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>