<?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>40139</bug_id>
          
          <creation_ts>2010-06-03 14:04:55 -0700</creation_ts>
          <short_desc>[GTK] Widgets do not support CSS transformations</short_desc>
          <delta_ts>2010-12-15 17:10:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233918</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-06-03 14:04:55 -0700</bug_when>
    <thetext>GTK+ themes require painting onto a GdkDrawable. In the common case this is the GdkPixmap of the widget window. Because this happens at a lower level than the GraphicsContext, nothing except the widget text honors the transformation matrix.

One approach to fixing this is to detect situations in which the GraphicsContext has a rotational transformation matrix and, in those cases, render onto an intermediary GdxPixbuf surface and then copy that to the graphics context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294474</commentid>
    <comment_count>1</comment_count>
      <attachid>70805</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-14 17:06:05 -0700</bug_when>
    <thetext>Created attachment 70805
Patch for this issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294514</commentid>
    <comment_count>2</comment_count>
      <attachid>70805</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-14 18:17:36 -0700</bug_when>
    <thetext>Comment on attachment 70805
Patch for this issue

Clearing flags, as I should have another patch coming which takes this idea a bit further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295603</commentid>
    <comment_count>3</comment_count>
      <attachid>71056</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-18 10:38:11 -0700</bug_when>
    <thetext>Created attachment 71056
Updated patch for this issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295716</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-18 13:21:59 -0700</bug_when>
    <thetext>Attachment 71056 did not build on gtk:
Build output: http://queues.webkit.org/results/4388070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295755</commentid>
    <comment_count>5</comment_count>
      <attachid>71083</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-18 14:33:02 -0700</bug_when>
    <thetext>Created attachment 71083
Patch against ToT (reason for build failure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296122</commentid>
    <comment_count>6</comment_count>
      <attachid>71083</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-19 05:22:36 -0700</bug_when>
    <thetext>Comment on attachment 71083
Patch against ToT (reason for build failure)

Patch looks like a very good idea :).

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

&gt; LayoutTests/ChangeLog:14
&gt; +        * platform/gtk/fast/forms/slider-transformed-expected.txt: Added.

I think this file is not in the patch.

&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:169
&gt; +    , m_themeParts(g_new0(GtkThemeParts, 1))
&gt; +#ifdef GTK_API_VERSION_2
&gt; +    , m_themePartsHaveRGBAColormap(true)
&gt; +#endif
&gt;  {
&gt; -    if (!mozGtkRefCount) {
&gt; -        moz_gtk_init();
&gt;  
&gt; -        // Use the theme parts for the default drawable.
&gt; -        moz_gtk_use_theme_parts(partsForDrawable(0));
&gt; +#ifdef GTK_API_VERSION_2
&gt; +    GdkColormap* colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
&gt; +    if (!colormap) {
&gt; +        m_themePartsHaveRGBAColormap = false;
&gt; +        colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
&gt;      }
&gt; +    m_themeParts-&gt;colormap = colormap;
&gt; +#endif

I was wondering if we could move this code and m_theme attributes to the WidgetRenderingContext object or to the gtkxdrawing. In any case we could leave it for future patches.

&gt; WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp:149
&gt; +    // The origin of the blit is the original target rectangle adjusted for any extra space.
&gt; +    IntPoint targetOrigin(m_targetRect.x() - m_extraSpace.width(),
&gt; +                          m_targetRect.y() - m_extraSpace.height());

I think we can use IntRect and inflate to simplify this code.

&gt; WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp:51
&gt;  

I needed these modifications to compile WidgetRenderingContextGtk3.cpp:


diff --git a/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
index 693c40e..bd826d9 100644
--- a/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
+++ b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
@@ -32,12 +32,12 @@ WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* graphicsContext,
     : m_graphicsContext(graphicsContext)
     , m_targetRect(targetRect)
     , m_paintRect(targetRect)
-    , m_target(context-&gt;platformContext())
     , m_hadError(false)
+    , m_target(graphicsContext-&gt;platformContext())
 {
 }

-~WidgetRenderingContext::WidgetRenderingContext()
+WidgetRenderingContext::~WidgetRenderingContext()
 {
 }

@@ -47,4 +47,6 @@ bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidg
     return !m_hadError;
 }

+}
+
 #endif // !GTK_API_VERSION_2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296258</commentid>
    <comment_count>7</comment_count>
      <attachid>71083</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-19 10:21:41 -0700</bug_when>
    <thetext>Comment on attachment 71083
Patch against ToT (reason for build failure)

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

&gt;&gt; LayoutTests/ChangeLog:14
&gt;&gt; +        * platform/gtk/fast/forms/slider-transformed-expected.txt: Added.
&gt; 
&gt; I think this file is not in the patch.

It&apos;s the third one down on the pretty-diff. :)

&gt;&gt; WebCore/platform/gtk/RenderThemeGtk.cpp:169
&gt;&gt; +#endif
&gt; 
&gt; I was wondering if we could move this code and m_theme attributes to the WidgetRenderingContext object or to the gtkxdrawing. In any case we could leave it for future patches.

It needs to stay here as long as RenderThemeGtk manages widgets itself. Perhaps if we eventually do away with WidgetRenderingContext (when the style changes land in GTK+ for instance) it might make sense to move it.

&gt;&gt; WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp:149
&gt;&gt; +                          m_targetRect.y() - m_extraSpace.height());
&gt; 
&gt; I think we can use IntRect and inflate to simplify this code.

Hrm. Maybe IntPoint targetOrigin = m_targetRect.topLeft - toPoint(m_extraSpace);

&gt;&gt; WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp:51
&gt;&gt;  
&gt; 
&gt; I needed these modifications to compile WidgetRenderingContextGtk3.cpp:
&gt; 
&gt; 
&gt; diff --git a/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
&gt; index 693c40e..bd826d9 100644
&gt; --- a/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
&gt; +++ b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
&gt; @@ -32,12 +32,12 @@ WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* graphicsContext,
&gt;      : m_graphicsContext(graphicsContext)
&gt;      , m_targetRect(targetRect)
&gt;      , m_paintRect(targetRect)
&gt; -    , m_target(context-&gt;platformContext())
&gt;      , m_hadError(false)
&gt; +    , m_target(graphicsContext-&gt;platformContext())
&gt;  {
&gt;  }
&gt; 
&gt; -~WidgetRenderingContext::WidgetRenderingContext()
&gt; +WidgetRenderingContext::~WidgetRenderingContext()
&gt;  {
&gt;  }
&gt; 
&gt; @@ -47,4 +47,6 @@ bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidg
&gt;      return !m_hadError;
&gt;  }
&gt; 
&gt; +}
&gt; +
&gt;  #endif // !GTK_API_VERSION_2

Thanks. I&apos;ll post a new patch with these fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296270</commentid>
    <comment_count>8</comment_count>
      <attachid>71183</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-19 10:44:35 -0700</bug_when>
    <thetext>Created attachment 71183
Patch updated with Alex&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301940</commentid>
    <comment_count>9</comment_count>
      <attachid>72362</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-29 12:15:03 -0700</bug_when>
    <thetext>Created attachment 72362
Patch fixing scrollbar rendering issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303894</commentid>
    <comment_count>10</comment_count>
      <attachid>72788</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-02 22:03:18 -0700</bug_when>
    <thetext>Created attachment 72788
Patch with slightly updated design</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307463</commentid>
    <comment_count>11</comment_count>
      <attachid>73519</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-10 11:48:45 -0800</bug_when>
    <thetext>Created attachment 73519
Updated Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307464</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-10 11:49:45 -0800</bug_when>
    <thetext>Based on Xan&apos;s comments I&apos;ve updated this patch:

1. It no longer includes the next patch in the series.
2. m_themeParts is now an inline array of the RenderThemeGtk objects and not a pointer.
3. Small fix for a CSS rotation issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307660</commentid>
    <comment_count>13</comment_count>
      <attachid>73519</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-10 17:47:30 -0800</bug_when>
    <thetext>Comment on attachment 73519
Updated Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307677</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-10 18:30:03 -0800</bug_when>
    <thetext>Committed r71791: &lt;http://trac.webkit.org/changeset/71791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307691</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-10 19:25:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/71791 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70805</attachid>
            <date>2010-10-14 17:06:05 -0700</date>
            <delta_ts>2010-10-18 10:38:09 -0700</delta_ts>
            <desc>Patch for this issue</desc>
            <filename>bug-40139-20101014170607.patch</filename>
            <type>text/plain</type>
            <size>26171</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMDkyMzgyNjIyNDFkMTM1NjFjODA0NzUwNWJlMTFlOWRhNmFmZTZmLi4yMGNjMTM2
MGFmODY4ZGNjMjUxZDQ0NTJmMDdkOGNmMGZmMWY2MmYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAK
IDIwMTAtMTAtMTQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKKzIwMTAtMTAtMTQgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIEFkZCBiYXNlbGluZXMg
YW5kIHBpeGVsIHJlc3VsdHMgZm9yIHNvbWUgbmV3IHRlc3RzLgogCiAgICAgICAgICogcGxhdGZv
cm0vZ3RrL2Zhc3QvZm9ybXMvdGV4dGZpZWxkLWZvY3VzLXJpbmctZXhwZWN0ZWQuY2hlY2tzdW06
IEFkZGVkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCBlOWY2NmFmNWQ1YmU3NzVlM2Fl
OWNiODZjZjU2NjU0N2FiMTQ5MzQ5Li4wNTRlZmMwOWEwYTJkZWZkMzUzNTY0ZGI5ZDA2NjZiYjVm
N2UxZjhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTQ4MCwxMSArNTQ4MCw2IEBA
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1mcmFtZS5odG1sCiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtYWxyZWFkeS5odG1sCiBmYXN0L2RvbS9HZW9s
b2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAogCi0jIEdU
SysgdGhlbWUtcmVuZGVyZWQgd2lkZ2V0cyBkbyBub3Qgc3VwcG9ydCBDU1MgdHJhbnNmb3Jtcwot
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKLWZhc3QvZm9y
bXMvc2xpZGVyLXRyYW5zZm9ybWVkLmh0bWwKLWZhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVk
Lmh0bWwKLQogIyBTb21lIGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRo
ZSBzaXplIAogIyBvZiB0aGUgc2xpZGVyIHRodW1iIGluIEdUSysgdGhlbWVzLgogZmFzdC9mb3Jt
cy9zbGlkZXItbW91c2UtZXZlbnRzLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1lZC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNkY2UyNTliMTI2YWYxMTBiMjZhNzY2OWUzMzc2NjZiYTFmMjlk
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9mb3Jt
cy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorCitGQUlM
OiBleHBlY3RlZCBzbGlkZXIgdmFsdWUgMzksIGdvdCAzOApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzN2I2NjZhYWYxZDg4ZjljZjZhYzg3
NGE5NmUwNjExMzQwODNhZWQ5Li41MWVkZTA2YWE5MDQyMTY3ZDk2NGFkMWY0NDZiZWE2ZDhjZDhm
NDdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU0IEBACisyMDEwLTEwLTE0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBXaWRnZXRzIGRvIG5vdCBzdXBwb3J0IENTUyB0cmFuc2Zvcm1hdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5CisK
KyAgICAgICAgSW5zdGVhZCBvZiByZW5kZXJpbmcgZGlyZWN0bHkgb250byB0aGUgdGFyZ2V0IGRy
YXdhYmxlIHdoZW4gcmVuZGVyaW5nCisgICAgICAgIGZvcm0gY29udHJvbHMgb24gR1RLKyAyLjAs
IHJlbmRlciBvbnRvIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIGFuZCB1c2UKKyAgICAgICAgY2Fp
cm8gdG8gYmxpdCB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIHRhcmdldCBzdXJmYWNlLiBUaGlzIGhh
cyB0d28KKyAgICAgICAgYmVuZWZpdHMuIFRoZSBmaXJzdCBpcyB0aGF0IGl0IGFsd2F5cyBob25v
cnMgdGhlIGN1cnJlbnQgQ2Fpcm8KKyAgICAgICAgdHJhbnNmb3JtYXRpb24uIFRoZSBzZWNvbmQg
aXMgdGhhdCBzaW5jZSB0aGUgaW50ZXJtZWRpYXRlIGRyYXdhYmxlIGlzCisgICAgICAgIGFsd2F5
cyBhIDMyLWJpdCBHZGtQaXhtYXAsIHdlIGRvIG5vdCBoYXZlIHRvIGhhdmUgYSBzZXQgb2Ygd2lk
Z2V0cworICAgICAgICBwZXItY29sb3JtYXAgYW55IGxvbmdlci4KKworICAgICAgICBUaGlzIGNo
YW5nZSBhbHNvIGJlZ2lucyB0aGUgYWJzdHJhY3Rpb24gb2YgdGhlIGRyYXdpbmcgc3VyZmFjZSBm
b3IKKyAgICAgICAgd2lkZ2V0IHJlbmRlcmluZywgd2hpY2ggbWVhbnMgdGhhdCBzb29uIHdlIHdp
bGwgYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUKKyAgICAgICAgY29kZSBwYXRoIGZvciBHVEsrIDIg
YW5kIEdUSysgMy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgUmVuZGVyVGhlbWVH
dGsyLmNwcCBhbmQgUmVuZGVyVGhlbWVHdGszLmNwcCB0byB0aGUKKyAgICAgICAgc291cmNlcyBs
aXN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fp
cm8uY3BwOgorICAgICAgICAoV1RGOjpyZWZQbGF0Zm9ybVB0cik6IEFkZCBhIHNwZWNpYWxpemF0
aW9uIGZvciBDYWlybyBwYXR0ZXJucy4KKyAgICAgICAgKFdURjo6ZGVyZWZQbGF0Zm9ybVB0cik6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRy
Q2Fpcm8uaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6IE5v
IGxvbmdlciBrZWVwIGEgc2V0IG9mCisgICAgICAgIHdpZGdldHMgcGVyLWNvbG9ybWFwIGZvciBH
VEsrLCBpbnN0ZWFkIGp1c3QgZGV0ZXJtaW5lIGlmIHdlIGNhbiB1c2UgUkdCQQorICAgICAgICBj
b2xvcm1hcHMgYW5kIGdvIGZyb20gdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6flJlbmRlclRoZW1lR3RrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6Z2V0SW5kaWNhdG9yTWV0cmljcyk6IFB1dCB0aGUgbG9naWMgZm9yCisgICAgICAg
IGdldHRpbmcgdG9nZ2xlIGJ1dHRvbiBpbmRpY2F0b3IgbWV0cmljcyBpbnRvIHRoaXMgaGVscGVy
LgorICAgICAgICAoV2ViQ29yZTo6c2V0VG9nZ2xlU2l6ZSk6IFVzZSB0aGUgbmV3IGdldEluZGlj
YXRvck1ldHJpY3MgaGVscGVyLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnB1cmdlU2NyYXRjaEJ1ZmZlcik6IEFkZGVkLCB0aGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHNjcmF0Y2gKKyAgICAgICAgYnVmZmVyIGltcGxlbWVudGF0aW9uIGZyb20g
Q29udGV4dFNoYWRvdy4KKyAgICAgICAgKFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVy
OjpmaXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwcmVwYXJl
Rm9yV2lkZ2V0UGFpbnQpOiBPbmx5IGFsbG9jYXRlIGEgbmV3CisgICAgICAgIEdka1BpeG1hcCBp
ZiB0aGUgb25lIHdlIGN1cnJlbnRseSBoYXZlIGlzIHRvIHNtYWxsIG9yIG5vbmV4aXN0ZW50LiAK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpmaW5pc2hXaWRnZXRQYWludCk6IEJs
aXQgYmFjayB0aGUgcmVzdWx0cywKKyAgICAgICAgd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIChX
ZWJDb3JlOjpnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KTogQWRkZWQgdGhpcyBoZWxwZXIsIHdoaWNo
IGRldGVjdHMKKyAgICAgICAgc2l0dWF0aW9ucyB3aGVyZSB3aWRnZXRzIG5lZWQgdG8gcGFpbnQg
b3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OnBhaW50TW96aWxsYUd0a1dpZGdldCk6IFVwZGF0ZWQgdGhlIGxvZ2ljIGZvcgorICAgICAg
ICB0aGlzIHRvIHJlZmxlY3QgbmV3IHdpZGdldCBwYWludGluZyBtZWNoYW5pc20uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldCk6IE1vdmVkIHRoaXMg
ZnJvbSB0aGUKKyAgICAgICAgbWFpbiBjb21waWxhdGlvbiB1bml0LgorCiAyMDEwLTEwLTE0ICBB
bmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
cml5YSBIaWRheWF0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYjEzYTg5MDM4ZmE1ZTA5Zjg2NzYyMGI4ODE3YTIwNmNl
MzJiOWViMS4uOGNlYTRjN2MxYzFiNjkyYjI5MzNhNWM3N2U1Nzg1YTE1MWE4ODAyYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0zNTQxLDYgKzM1NDEsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0
ckNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQ
dHJDYWlyby5jcHAKaW5kZXggZDI4OTU4NWQ4OWEzYmIwOTgxNzRhOWQ4OWJiMzc5NGJkYTJjMTc0
OS4uMjg1NWFlZjEzMjdhMzI2OTEwMmUxMmYxOTNiNTY4OWIwNTZhMDNiYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8u
Y3BwCkBAIC01NCw2ICs1NCwyMCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIo
Y2Fpcm9fc3VyZmFjZV90KiBwdHIpCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShwdHIp
OwogfQogCit0ZW1wbGF0ZSA8PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJv
X3BhdHRlcm5fdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGNhaXJvX3BhdHRlcm5f
cmVmZXJlbmNlKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwdHIpOworfQorCisKIHRlbXBsYXRlIDw+IGNh
aXJvX2ZvbnRfZmFjZV90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19mb250X2ZhY2VfdCogcHRyKQog
ewogICAgIGlmIChwdHIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oCmluZGV4IDNiNzIwYzYyMTg1NGIxMjUyZGY1YWEwYjAx
ZjdiMDU3MzIzMDFiZmIuLmJhOGVjZjIwOGUzNjMzMmJhNjE0YWMyMmE2MzZmMGNkM2I0MGJlNjkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQ
dHJDYWlyby5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1S
ZWZQdHJDYWlyby5oCkBAIC0yNCw2ICsyNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9jYWlybyBj
YWlyb190OwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90Owor
dHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX2ZvbnRfZmFjZSBjYWlyb19mb250X2ZhY2VfdDsKIHR5cGVkZWYgc3RydWN0
IF9jYWlyb19zY2FsZWRfZm9udCBjYWlyb19zY2FsZWRfZm9udF90OwogCkBAIC0zOSw2ICs0MCw5
IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb190KiBwdHIpOwogdGVt
cGxhdGUgPD4gY2Fpcm9fc3VyZmFjZV90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19zdXJmYWNlX3Qq
IHB0cik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90
KiBwdHIpOwogCit0ZW1wbGF0ZSA8PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNh
aXJvX3BhdHRlcm5fdCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJv
X3BhdHRlcm5fdCopOworCiB0ZW1wbGF0ZSA8PiBjYWlyb19mb250X2ZhY2VfdCogcmVmUGxhdGZv
cm1QdHIoY2Fpcm9fZm9udF9mYWNlX3QqKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9y
bVB0cihjYWlyb19mb250X2ZhY2VfdCopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHAKaW5kZXggNzg3N2YyOGUyZTY2MGJkYjRlMDU0OGE2ZWRiZGYyYTI4MTliMzg2OC4u
NzdiMmQwOTMxODFjZDllMGIyMjBkYWZhNGQ0YjhlZjJhNzcwYTk2MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1
ZGUgIkdPd25QdHIuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKQEAgLTE1MSwxNSArMTUwLDI2
IEBAIFJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCiAgICAgLCBtX3BhdXNlQnV0dG9u
KDApCiAgICAgLCBtX3NlZWtCYWNrQnV0dG9uKDApCiAgICAgLCBtX3NlZWtGb3J3YXJkQnV0dG9u
KDApCi0gICAgLCBtX3BhcnRzVGFibGUoYWRvcHRQbGF0Zm9ybVJlZihnX2hhc2hfdGFibGVfbmV3
X2Z1bGwoMCwgMCwgMCwgZ19mcmVlKSkpCisgICAgLCBtX3RoZW1lUGFydHMoZ19uZXcwKEd0a1Ro
ZW1lUGFydHMsIDEpKQorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgLCBtX3RoZW1lUGFy
dHNIYXZlUkdCQUNvbG9ybWFwKHRydWUpCisjZW5kaWYKIHsKLSAgICBpZiAoIW1vekd0a1JlZkNv
dW50KSB7Ci0gICAgICAgIG1vel9ndGtfaW5pdCgpOwogCi0gICAgICAgIC8vIFVzZSB0aGUgdGhl
bWUgcGFydHMgZm9yIHRoZSBkZWZhdWx0IGRyYXdhYmxlLgotICAgICAgICBtb3pfZ3RrX3VzZV90
aGVtZV9wYXJ0cyhwYXJ0c0ZvckRyYXdhYmxlKDApKTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgorICAgIEdka0NvbG9ybWFwKiBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3Jt
YXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIWNvbG9ybWFwKSB7CisgICAg
ICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBmYWxzZTsKKyAgICAgICAgY29sb3Jt
YXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1
bHQoKSk7CiAgICAgfQorICAgIG1fdGhlbWVQYXJ0cy0+Y29sb3JtYXAgPSBjb2xvcm1hcDsKKyNl
bmRpZgogCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUu
CisgICAgaWYgKCFtb3pHdGtSZWZDb3VudCkgeworICAgICAgICBtb3pfZ3RrX2luaXQoKTsKKyAg
ICAgICAgbW96X2d0a191c2VfdGhlbWVfcGFydHMobV90aGVtZVBhcnRzKTsKKyAgICB9CiAgICAg
Kyttb3pHdGtSZWZDb3VudDsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE4MiwzNiArMTkyLDE5
IEBAIFJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQogICAgIG1fc2Vla0JhY2tCdXR0
b24uY2xlYXIoKTsKICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLmNsZWFyKCk7CiAKLSAgICBHTGlz
dCogdmFsdWVzID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMobV9wYXJ0c1RhYmxlLmdldCgpKTsK
LSAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZ19saXN0X2xlbmd0aCh2YWx1ZXMpOyBpKyspCi0g
ICAgICAgIG1vel9ndGtfZGVzdHJveV90aGVtZV9wYXJ0c193aWRnZXRzKAotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8R3RrVGhlbWVQYXJ0cyo+KGdfbGlzdF9udGhfZGF0YSh2YWx1ZXMsIGkpKSk7
Ci0KICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9ndGtXaW5kb3cpOwogfQogCi1HdGtUaGVtZVBh
cnRzKiBSZW5kZXJUaGVtZUd0azo6cGFydHNGb3JEcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2Fi
bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRy
b2xQYXJ0IHBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKSBj
b25zdAogewotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgLy8gQSBudWxsIGRyYXdhYmxl
IHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgc2NyZWVuIGNvbG9ybWFwLgotICAgIEdka0NvbG9ybWFw
KiBjb2xvcm1hcCA9IDA7Ci0gICAgaWYgKCFkcmF3YWJsZSkKLSAgICAgICAgY29sb3JtYXAgPSBn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7
Ci0gICAgZWxzZQotICAgICAgICBjb2xvcm1hcCA9IGdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAo
ZHJhd2FibGUpOwotCi0gICAgR3RrVGhlbWVQYXJ0cyogcGFydHMgPSBzdGF0aWNfY2FzdDxHdGtU
aGVtZVBhcnRzKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX3BhcnRzVGFibGUuZ2V0KCksIGNvbG9y
bWFwKSk7Ci0gICAgaWYgKCFwYXJ0cykgewotICAgICAgICBwYXJ0cyA9IGdfbmV3MChHdGtUaGVt
ZVBhcnRzLCAxKTsKLSAgICAgICAgcGFydHMtPmNvbG9ybWFwID0gY29sb3JtYXA7Ci0gICAgICAg
IGdfaGFzaF90YWJsZV9pbnNlcnQobV9wYXJ0c1RhYmxlLmdldCgpLCBjb2xvcm1hcCwgcGFydHMp
OworICAgIEFTU0VSVChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFydCk7
CisgICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7CisgICAgICAgIG1vel9ndGtfY2hlY2ti
b3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSNlbHNlCi0gICAgLy8gRm9yIEdUSysgMy4wIHdlIG5vIGxvbmdl
ciBoYXZlIHRvIHdvcnJ5IGFib3V0IG1haW50YWluaW5nIGEgc2V0IG9mIHdpZGdldHMgcGVyLWNv
bG9ybWFwLgotICAgIHN0YXRpYyBHdGtUaGVtZVBhcnRzKiBwYXJ0cyA9IGdfc2xpY2VfbmV3MChH
dGtUaGVtZVBhcnRzKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgogCi0gICAgcmV0dXJu
IHBhcnRzOworICAgIC8vIFJhZGlvUGFydAorICAgIG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3Mo
JmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKIH0KIAogc3RhdGljIGJvb2wgc3Vw
cG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQpAQCAtMjg5LDY5ICsyODIsNiBAQCBz
dGF0aWMgdm9pZCBhZGp1c3RNb3ppbGxhU3R5bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1l
LCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KHlwYWRkaW5nICsgYm90dG9tLCBGaXhlZCkpOwogfQogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVtZVdp
ZGdldFR5cGUgdHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVj
dGlvbiB0ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1
c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbGF0Zm9ybVJlZlB0cjxHZGtE
cmF3YWJsZT4gZHJhd2FibGUoY29udGV4dC0+Z2RrRHJhd2FibGUoKSk7Ci0gICAgR2RrUmVjdGFu
Z2xlIHBhaW50UmVjdCwgY2xpcFJlY3Q7Ci0gICAgaWYgKGRyYXdhYmxlKSB7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICAgICAgSW50UG9pbnQg
cG9zID0gY3RtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIHBhaW50UmVjdCA9
IEludFJlY3QocG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
LQotICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIGNhaXJvIHJlY3RhbmdsZSB3aXRoIHRoZSB0YXJn
ZXQgd2lkZ2V0IHJlZ2lvbi4gVGhpcyAgd2lsbAotICAgICAgICAvLyBwcmV2ZW50IHRoZSB0aGVt
ZSBkcmF3aW5nIGNvZGUgZnJvbSBkcmF3aW5nIGludG8gcmVnaW9ucyB0aGF0IGNhaXJvIHdpbGwK
LSAgICAgICAgLy8gY2xpcCBhbnl3YXkuCi0gICAgICAgIGRvdWJsZSBjbGlwWDEsIGNsaXBYMiwg
Y2xpcFkxLCBjbGlwWTI7Ci0gICAgICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgJmNsaXBYMSwgJmNsaXBZMSwgJmNsaXBYMiwgJmNsaXBZMik7Ci0gICAg
ICAgIEludFBvaW50IGNsaXBQb3MgPSBjdG0ubWFwUG9pbnQoSW50UG9pbnQoY2xpcFgxLCBjbGlw
WTEpKTsKLQotICAgICAgICBjbGlwUmVjdC53aWR0aCA9IGNsaXBYMiAtIGNsaXBYMTsKLSAgICAg
ICAgY2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFkyIC0gY2xpcFkxOwotICAgICAgICBjbGlwUmVjdC54
ID0gY2xpcFBvcy54KCk7Ci0gICAgICAgIGNsaXBSZWN0LnkgPSBjbGlwUG9zLnkoKTsKLSAgICAg
ICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJnBhaW50UmVjdCwgJmNsaXBSZWN0LCAmY2xpcFJl
Y3QpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb25zLCBsaWtl
IGR1cmluZyBwcmludCBwcmV2aWV3cywgdGhpcyBHcmFwaGljc0NvbnRleHQgaXMgbm90Ci0gICAg
ICAgIC8vIGJhY2tlZCBieSBhIEdka0RyYXdhYmxlLiBJbiB0aG9zZSBzaXR1YXRpb25zLCB3ZSBy
ZW5kZXIgb250byBhIHBpeG1hcCBhbmQgdGhlbgotICAgICAgICAvLyBjb3B5IHRoZSByZW5kZXJl
ZCBkYXRhIGJhY2sgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCB2aWEgQ2Fpcm8uCi0gICAgICAgIGRy
YXdhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3Rl
bSgpKSkpOwotICAgICAgICBwYWludFJlY3QgPSBjbGlwUmVjdCA9IEludFJlY3QoMCwgMCwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBtb3pfZ3RrX3VzZV90aGVt
ZV9wYXJ0cyhwYXJ0c0ZvckRyYXdhYmxlKGRyYXdhYmxlLmdldCgpKSk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgZHJhd2FibGUuZ2V0KCksICZwYWludFJl
Y3QsICZjbGlwUmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSA9PSBNT1pf
R1RLX1NVQ0NFU1M7Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZyB3YXMgc3VjY2Vzc2Z1bCBhbmQg
d2UgcmVuZGVyZWQgb250byBhIHBpeG1hcCwgY29weSB0aGUKLSAgICAvLyByZXN1bHRzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIEdyYXBoaWNzQ29udGV4dC4KLSAgICBpZiAoc3VjY2VzcyAmJiAhY29u
dGV4dC0+Z2RrRHJhd2FibGUoKSkgewotICAgICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRl
eHQpOwotICAgICAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBk
cmF3YWJsZS5nZXQoKSwgcmVjdC54KCksIHJlY3QueSgpKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQo
Y2Fpcm9Db250ZXh0KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwotICAg
IH0KLQotICAgIHJldHVybiAhc3VjY2VzczsKLX0KLSNlbHNlCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHdp
ZGdldFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKLXsK
LSAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2Vl
ZGVkCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gZmFsc2UgPT0gc3VjY2VzcywgYmVjYXVzZSBvZiBhd2Vzb21lLgot
ICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSByZWN0OwotICAgIHJldHVybiBtb3pfZ3RrX3dp
ZGdldF9wYWludCh0eXBlLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJnBhaW50UmVjdCwg
d2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Ci19
Ci0jZW5kaWYKLQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhl
bWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncykKIHsKICAgICAv
LyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCkBA
IC0zOTQsMTkgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVy
VGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUsIENvbnRyCiAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBwcm9iYWJseSBub3QgY29ycmVjdCB1c2Ugb2YgaW5kaWNhdG9yU2l6ZSBhbmQg
aW5kaWNhdG9yU3BhY2luZy4KICAgICBnaW50IGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNp
bmc7Ci0KLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoK
LSAgICAgICAgaWYgKG1vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUs
ICZpbmRpY2F0b3JTcGFjaW5nKSAhPSBNT1pfR1RLX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBpZiAobW96
X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcp
ICE9IE1PWl9HVEtfU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB0aGVtZS0+Z2V0SW5k
aWNhdG9yTWV0cmljcyhhcHBlYXJhbmNlLCBpbmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5n
KTsKIAogICAgIC8vIE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRvIDEzLCBidXQgR1RLKyB1
c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCiAgICAgLy8gSXQgY291bGQgYmUg
bWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5
IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5oCmluZGV4IDRlMjRjOTcyYmEyNTk5ODE3MzBjYTJhMGY0ZTk1OWI1ZmQ5MjJjNTAuLjUzM2Fh
YmJmNGY3OTgzNzQ5NzkzMzlhY2JjY2Y0YzU0ZmU5NGRkZGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IGJvb2wgcGFpbnRNb3ppbGxhR3RrV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldFN0YXRlKiwgaW50IGZsYWdzLCBHdGtU
ZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05PTkUpOworICAgIHZvaWQgZ2V0SW5kaWNhdG9y
TWV0cmljcyhDb250cm9sUGFydCwgaW50JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNw
YWNpbmcpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0KiBndGtTY3JvbGxiYXIoKTsKIApAQCAtMTU4
LDcgKzE1OSw2IEBAIHByaXZhdGU6CiAgICAgR3RrQ29udGFpbmVyKiBndGtDb250YWluZXIoKSBj
b25zdDsKIAogICAgIGJvb2wgcGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlLCBS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQg
ZmxhZ3MgPSAwKTsKLSAgICBHdGtUaGVtZVBhcnRzKiBwYXJ0c0ZvckRyYXdhYmxlKEdka0RyYXdh
YmxlKikgY29uc3Q7CiAKICAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7CiAgICAg
bXV0YWJsZSBHdGtDb250YWluZXIqIG1fZ3RrQ29udGFpbmVyOwpAQCAtMTgyLDggKzE4MiwxMyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxJbWFnZT4gbV9wYXVzZUJ1dHRvbjsKICAgICBSZWZQdHI8
SW1hZ2U+IG1fc2Vla0JhY2tCdXR0b247CiAgICAgUmVmUHRyPEltYWdlPiBtX3NlZWtGb3J3YXJk
QnV0dG9uOwotICAgIFBhZ2UqIG1fcGFnZTsKLSAgICBQbGF0Zm9ybVJlZlB0cjxHSGFzaFRhYmxl
PiBtX3BhcnRzVGFibGU7CisgICAgR3RrVGhlbWVQYXJ0cyogbV90aGVtZVBhcnRzOworCisjaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtEcmF3YWJsZSogcHJlcGFyZUZvcldpZGdldFBh
aW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QmLCBjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBmaW5pc2hXaWRnZXRQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50U2l6ZSYpOworICAgIGJvb2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcDsKKyNl
bmRpZgogCiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44OGIyY2VhOWIxMThiZDhiMGM4MzMwZmNlMzkzNTNhZDI1Mzk0ZDgwCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcApAQCAt
MCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiR1JlZlB0ci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fp
cm8uaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdka1BpeG1hcCog
Z1NjcmF0Y2hCdWZmZXIgPSAwOworc3RhdGljIHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCkKK3sK
KyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGdTY3JhdGNo
QnVmZmVyKTsKKyAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7Cit9CisKKy8vIEZJWE1FOiBQZXJoYXBz
IHdlIGNhbiBzaGFyZSBzb21lIG9mIHRoaXMgY29kZSB3aXRoIHRoZSBDb250ZXh0U2hhZG93Q2Fp
cm8uCisvLyBXaWRnZXQgcmVuZGVyaW5nIG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVm
ZmVyIGZvciB0aGUgaW50ZXJtZWRpYXRlCisvLyByZW5kZXIuIEluc3RlYWQgb2YgY3JlYXRpbmcg
YW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAorLy8gd2UgY3Jl
YXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGlt
ZXIuCitjbGFzcyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ugewor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IHB1cmdlU2NyYXRjaEJ1ZmZlcigp
OyB9Cit9Oworc3RhdGljIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIHB1cmdlU2NyYXRjaEJ1ZmZl
clRpbWVyOworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKQoreworICAg
IGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBwdXJnZVNj
cmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7CisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3Rh
cnRPbmVTaG90KDIpOworfQorCitHZGtEcmF3YWJsZSogUmVuZGVyVGhlbWVHdGs6OnByZXBhcmVG
b3JXaWRnZXRQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEludFNpemUmIGV4dHJhU3BhY2UpCit7CisgICAgLy8gRmFsbGJhY2s6IFdlIGZh
aWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJv
cGVybHkgcGFpbnQgCisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUg
dHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAg
ICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90
IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghbV90
aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBjb250ZXh0LT5nZGtEcmF3YWJsZSgpKSB7Cisg
ICAgICAgIHRhcmdldFJlY3QgPSBjb250ZXh0LT5nZXRDVE0oKS5tYXBSZWN0KHRhcmdldFJlY3Qp
OworICAgICAgICByZXR1cm4gY29udGV4dC0+Z2RrRHJhd2FibGUoKTsKKyAgICB9CisKKyAgICAv
LyBPZmZzZXQgdGhlIHRhcmdldCByZWN0YW5nbGUgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMg
d2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICB0YXJnZXRS
ZWN0LnNldExvY2F0aW9uKEludFBvaW50KGV4dHJhU3BhY2Uud2lkdGgoKSwgZXh0cmFTcGFjZS5o
ZWlnaHQoKSkpOworCisgICAgaW50IHdpZHRoID0gdGFyZ2V0UmVjdC53aWR0aCgpICsgKGV4dHJh
U3BhY2Uud2lkdGgoKSAqIDIpOworICAgIGludCBoZWlnaHQgPSB0YXJnZXRSZWN0LmhlaWdodCgp
ICsgKGV4dHJhU3BhY2UuaGVpZ2h0KCkgKiAyKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0gMCwg
c2NyYXRjaEhlaWdodCA9IDA7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnZGtf
ZHJhd2FibGVfZ2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3JhdGNo
SGVpZ2h0KTsKKworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIg
aWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBpZiAoIWdTY3JhdGNo
QnVmZmVyIHx8IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWlnaHQp
IHsKKyAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisgICAgICAgIC8vIFJvdW5kIHRvIHRo
ZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1p
bGFyIHNpemVkIHJlcXVlc3RzLgorICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8
PCA1OworICAgICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisKKyAgICAg
ICAgZ1NjcmF0Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBnZGtf
Y29sb3JtYXBfZ2V0X3Zpc3VhbChtX3RoZW1lUGFydHMtPmNvbG9ybWFwKS0+ZGVwdGgpOworICAg
ICAgICBnZGtfZHJhd2FibGVfc2V0X2NvbG9ybWFwKGdTY3JhdGNoQnVmZmVyLCBtX3RoZW1lUGFy
dHMtPmNvbG9ybWFwKTsKKyAgICB9CisKKyAgICAvLyBDbGVhciB0aGUgc2NyYXRjaCBidWZmZXIu
CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9w
dFBsYXRmb3JtUmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Cisg
ICAgcmV0dXJuIGdTY3JhdGNoQnVmZmVyOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpmaW5p
c2hXaWRnZXRQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEludFNpemUmIGV4dHJhU3BhY2UpCit7CisgICAgLy8gV2UgZG8gbm90
IG5lZWQgdG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4gdGhlIGZhbGxiYWNrIGNhc2UuIFNl
ZSBhYm92ZS4KKyAgICBpZiAoIW1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgY29udGV4
dC0+Z2RrRHJhd2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEl0J3Mg
dW5jbGVhciBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgc291cmNl
IGhlcmUuCisgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJj
ZShjYWlyb19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOworCisgICAgLy8gVGhlIG9yaWdpbiBv
ZiB0aGUgYmxpdCBpcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IHJlY3RhbmdsZSBhZGp1c3RlZCBmb3Ig
YW55IGV4dHJhIHNwYWNlLgorICAgIEludFBvaW50IHRhcmdldE9yaWdpbih0YXJnZXRSZWN0Lngo
KSAtIGV4dHJhU3BhY2Uud2lkdGgoKSwgdGFyZ2V0UmVjdC55KCkgLSBleHRyYVNwYWNlLmhlaWdo
dCgpKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBnU2Ny
YXRjaEJ1ZmZlciwgdGFyZ2V0T3JpZ2luLngoKSwgdGFyZ2V0T3JpZ2luLnkoKSk7CisgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgdGFyZ2V0T3JpZ2luLngoKSwgdGFyZ2V0T3JpZ2lu
LnkoKSwKKyAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpICsgKGV4dHJhU3BhY2Uud2lkdGgoKSAq
IDIpLCB0YXJnZXRSZWN0LmhlaWdodCgpICsgKGV4dHJhU3BhY2UuaGVpZ2h0KCkgKiAyKSk7Cisg
ICAgY2Fpcm9fZmlsbChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm9D
b250ZXh0LCBwcmV2aW91c1NvdXJjZS5nZXQoKSk7CisgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKTsKK30KKworc3RhdGljIEludFNpemUgZ2V0RXh0cmFTcGFjZUZvcldpZGdldChSZW5k
ZXJUaGVtZUd0ayogdGhlbWUsIEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlKQoreworICAgIC8vIENo
ZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgbmVlZCB0byBkcmF3IG91dHNpZGUgdGhlaXIgcmVn
aW9ucyB0byBzaG93IGZvY3VzIGluZGljYXRvcnMKKyAgICBpZiAodHlwZSA9PSBNT1pfR1RLX0NI
RUNLQlVUVE9OIHx8IHR5cGUgPT0gTU9aX0dUS19SQURJT0JVVFRPTikgeworICAgICAgICBpbnQg
aW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZzsKKyAgICAgICAgdGhlbWUtPmdldEluZGlj
YXRvck1ldHJpY3MoQ2hlY2tib3hQYXJ0LCBpbmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5n
KTsKKyAgICAgICAgcmV0dXJuIEludFNpemUoaW5kaWNhdG9yU3BhY2luZywgaW5kaWNhdG9yU3Bh
Y2luZyk7CisgICAgfQorCisgICAgLy8gU2VlIG1vel9ndGtfc2Nyb2xsYmFyX3RodW1iX3BhaW50
IGluIGd0azJkcmF3aW5nLmMuCisgICAgaWYgKHR5cGUgPT0gTU9aX0dUS19TQ1JPTExCQVJfVEhV
TUJfSE9SSVpPTlRBTCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoMSwgMCk7CisgICAgaWYgKHR5
cGUgPT0gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfVkVSVElDQUwpCisgICAgICAgIHJldHVybiBJ
bnRTaXplKDAsIDEpOworCisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUgdHlw
ZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uKQoreworICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1c3QgY2xhaW0gdG8g
aGF2ZSBzdWNjZWVkZWQKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTb21lIHdpZGdldHMgcmVuZGVyIG91dHNpZGUg
dGhlaXIgcmVjdGFuZ2xlcy4gV2UgbmVlZCB0byBhY2NvdW50CisgICAgLy8gZm9yIHRoaXMsIGlm
IHdlIGFyZSByZW5kZXJpbmcgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIEludFNpemUgZXh0
cmFTcGFjZShnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KHRoaXMsIHR5cGUpKTsKKworICAgIC8vIHBy
ZXBhcmVGb3JXaWRnZXRQYWludCB3aWxsIHByb3Blcmx5IGluaXRpYWxpemUgdGFyZ2V0UmVjdCBh
cyB3ZWxsCisgICAgLy8gYXMgcmV0dXJuaW5nIHRoZSB0YXJnZXQgR2RrRHJhd2FibGUuCisgICAg
SW50UmVjdCB0YXJnZXRSZWN0ID0gcmVjdDsKKyAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBw
cmVwYXJlRm9yV2lkZ2V0UGFpbnQoY29udGV4dCwgdGFyZ2V0UmVjdCwgZXh0cmFTcGFjZSk7Cisg
ICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHRhcmdldFJlY3Q7CisgICAgaWYgKG1vel9ndGtf
d2lkZ2V0X3BhaW50KHR5cGUsIGRyYXdhYmxlLCAmcGFpbnRSZWN0LCAmcGFpbnRSZWN0LCB3aWRn
ZXRTdGF0ZSwgZmxhZ3MsIHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUykKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBmaW5pc2hXaWRnZXRQYWludChjb250ZXh0LCByZWN0LCBl
eHRyYVNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NzU1MmRjODY0OTE3NWVkZGU5MDFhM2YwMzA4MzJhYTcyOWQwMDFkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhl
bWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHdpZGdldFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHRE
aXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3sKKyAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBz
byBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gZmFsc2UgPT0gc3Vj
Y2VzcywgYmVjYXVzZSBvZiBhd2Vzb21lLgorICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSBy
ZWN0OworICAgIHJldHVybiBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgJnBhaW50UmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0
aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK30KKworI2VuZGlmIC8vICFHVEtfQVBJX1ZF
UlNJT05fMgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71056</attachid>
            <date>2010-10-18 10:38:11 -0700</date>
            <delta_ts>2010-10-18 14:32:59 -0700</delta_ts>
            <desc>Updated patch for this issue</desc>
            <filename>bug-40139-20101018103810.patch</filename>
            <type>text/plain</type>
            <size>33672</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkMDkyMzgyNjIyNDFkMTM1NjFjODA0NzUwNWJlMTFlOWRhNmFmZTZmLi4yMGNjMTM2
MGFmODY4ZGNjMjUxZDQ0NTJmMDdkOGNmMGZmMWY2MmYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAK
IDIwMTAtMTAtMTQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKKzIwMTAtMTAtMTQgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCiAgICAgICAgIEFkZCBiYXNlbGluZXMg
YW5kIHBpeGVsIHJlc3VsdHMgZm9yIHNvbWUgbmV3IHRlc3RzLgogCiAgICAgICAgICogcGxhdGZv
cm0vZ3RrL2Zhc3QvZm9ybXMvdGV4dGZpZWxkLWZvY3VzLXJpbmctZXhwZWN0ZWQuY2hlY2tzdW06
IEFkZGVkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCBlOWY2NmFmNWQ1YmU3NzVlM2Fl
OWNiODZjZjU2NjU0N2FiMTQ5MzQ5Li4wNTRlZmMwOWEwYTJkZWZkMzUzNTY0ZGI5ZDA2NjZiYjVm
N2UxZjhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTQ4MCwxMSArNTQ4MCw2IEBA
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1mcmFtZS5odG1sCiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtYWxyZWFkeS5odG1sCiBmYXN0L2RvbS9HZW9s
b2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAogCi0jIEdU
SysgdGhlbWUtcmVuZGVyZWQgd2lkZ2V0cyBkbyBub3Qgc3VwcG9ydCBDU1MgdHJhbnNmb3Jtcwot
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKLWZhc3QvZm9y
bXMvc2xpZGVyLXRyYW5zZm9ybWVkLmh0bWwKLWZhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVk
Lmh0bWwKLQogIyBTb21lIGlucHV0IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRo
ZSBzaXplIAogIyBvZiB0aGUgc2xpZGVyIHRodW1iIGluIEdUSysgdGhlbWVzLgogZmFzdC9mb3Jt
cy9zbGlkZXItbW91c2UtZXZlbnRzLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1lZC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNkY2UyNTliMTI2YWYxMTBiMjZhNzY2OWUzMzc2NjZiYTFmMjlk
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9mb3Jt
cy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorCitGQUlM
OiBleHBlY3RlZCBzbGlkZXIgdmFsdWUgMzksIGdvdCAzOApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzN2I2NjZhYWYxZDg4ZjljZjZhYzg3
NGE5NmUwNjExMzQwODNhZWQ5Li5lZjk4NGQ2MzRkYjFjYjc3NTJkOTk5Yzc5ZmI1NzNkYmMzYWZi
MWE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDYzIEBACisyMDEwLTEwLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBXaWRnZXRzIGRvIG5vdCBzdXBwb3J0IENTUyB0cmFuc2Zvcm1hdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5CisK
KyAgICAgICAgSW5zdGVhZCBvZiByZW5kZXJpbmcgZGlyZWN0bHkgb250byB0aGUgdGFyZ2V0IGRy
YXdhYmxlIHdoZW4gcmVuZGVyaW5nCisgICAgICAgIGZvcm0gY29udHJvbHMgb24gR1RLKyAyLjAs
IHJlbmRlciBvbnRvIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIGFuZCB1c2UKKyAgICAgICAgY2Fp
cm8gdG8gYmxpdCB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIHRhcmdldCBzdXJmYWNlLiBUaGlzIGhh
cyB0d28KKyAgICAgICAgYmVuZWZpdHMuIFRoZSBmaXJzdCBpcyB0aGF0IGl0IGFsd2F5cyBob25v
cnMgdGhlIGN1cnJlbnQgQ2Fpcm8KKyAgICAgICAgdHJhbnNmb3JtYXRpb24uIFRoZSBzZWNvbmQg
aXMgdGhhdCBzaW5jZSB0aGUgaW50ZXJtZWRpYXRlIGRyYXdhYmxlIGlzCisgICAgICAgIGFsd2F5
cyBhIDMyLWJpdCBHZGtQaXhtYXAsIHdlIGRvIG5vdCBoYXZlIHRvIGhhdmUgYSBzZXQgb2Ygd2lk
Z2V0cworICAgICAgICBwZXItY29sb3JtYXAgYW55IGxvbmdlci4KKworICAgICAgICBUaGlzIGNo
YW5nZSBhbHNvIGJlZ2lucyB0aGUgYWJzdHJhY3Rpb24gb2Ygd2lkZ2V0IHJlbmRlcmluZyBzbyB0
aGF0IEdUSysKKyAgICAgICAgMiBhbmQgR1RLKyAzIGNhbiB1c2UgdGhlIHNhbWUgY29kZSBwYXRo
LiBUaGUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWxsCisgICAgICAgIGV2ZW50dWFsbHkgaGlk
ZSBhbGwgdmVyc2lvbiBkaWZmZXJlbmNlcyBmcm9tIFJlbmRlclRoZW1lR3RrLCB3aGljaCBjYW4K
KyAgICAgICAganVzdCBmb2N1cyBvbiBpbnRlcnByZXRpbmcgdGhlIEd0a1N0eWxlIHByb3BlcnRp
ZXMuIAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBXaWRnZXRSZW5kZXJpbkNvbnRl
eHQgc291cmNlIGZpbGVzIHRvIHRoZSBzb3VyY2VzIGxpc3QuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHA6CisgICAgICAgIChXVEY6OnJl
ZlBsYXRmb3JtUHRyKTogQWRkIGEgc3BlY2lhbGl6YXRpb24gZm9yIENhaXJvIHBhdHRlcm5zLgor
ICAgICAgICAoV1RGOjpkZXJlZlBsYXRmb3JtUHRyKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKTogTm8gbG9uZ2VyIGtlZXAgYSBzZXQgb2YKKyAg
ICAgICAgd2lkZ2V0cyBwZXItY29sb3JtYXAgZm9yIEdUSyssIGluc3RlYWQganVzdCBkZXRlcm1p
bmUgaWYgd2UgY2FuIHVzZSBSR0JBCisgICAgICAgIGNvbG9ybWFwcyBhbmQgZ28gZnJvbSB0aGVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGspOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JNZXRy
aWNzKTogUHV0IHRoZSBsb2dpYyBmb3IKKyAgICAgICAgZ2V0dGluZyB0b2dnbGUgYnV0dG9uIGlu
ZGljYXRvciBtZXRyaWNzIGludG8gdGhpcyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QpOiBOb3cgdXNlcworICAgICAgICBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0IHRvIGRvIHdpZGdldCByZW5kZXJpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpzZXRUb2dnbGVTaXplKTogVXNlIHRoZSBuZXcgZ2V0SW5kaWNhdG9yTWV0cmljcyBoZWxwZXIu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmg6IEFkZGVkIGEgbWVtYmVy
IHRvIHRyYWNrIHdoZXRoZXIgb3Igbm90CisgICAgICAgICAgdGhlIHdpZGdldHMgYXJlIHVzaW5n
IGEgUkdCQSBjb2xvcm1hcC4gQWxzbyByZW1vdmUgYSBkZWZ1bmN0IFBhZ2UqCisgICAgICAgICAg
bWVtYmVyLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHA6IFN3
aXRjaCBhbGwgd2lkZ2V0IGRyYXdpbmcKKyAgICAgICAgb3BlcmF0aW9ucyB0byB1c2UgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpw
YWludFRyYWNrQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpwdXJnZVNjcmF0Y2hCdWZmZXIpOiBBZGRlZCwgdGhpcyBpcyBzaW1pbGFyIHRv
IHRoZSBzY3JhdGNoCisgICAgICAgIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBmcm9tIENvbnRleHRT
aGFkb3cuCisgICAgICAgIChXZWJDb3JlOjpQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lcjo6ZmlyZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRl
eHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5X
aWRnZXRSZW5kZXJpbmdDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFXaWRnZXQpOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRl
eHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpX
aWRnZXRSZW5kZXJpbmdDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFXaWRnZXQpOiBBZGRlZC4KKwogMjAxMC0xMC0x
NCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQXJpeWEgSGlkYXlhdC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGIxM2E4OTAzOGZhNWUwOWY4Njc2MjBiODgxN2Ey
MDZjZTMyYjllYjEuLmIzMGQxMmFlNTYzMmRkYTUzNmI5NTJjMGUxZDE5N2RiMTUzM2UyOGMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMzU1Miw2ICszNTUyLDkgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0
azIuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3Rr
My5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtUmVmUHRyQ2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybVJlZlB0ckNhaXJvLmNwcAppbmRleCBkMjg5NTg1ZDg5YTNiYjA5ODE3NGE5ZDg5YmIzNzk0
YmRhMmMxNzQ5Li4yODU1YWVmMTMyN2EzMjY5MTAyZTEyZjE5M2I1Njg5YjA1NmEwM2JjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fp
cm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQ
dHJDYWlyby5jcHAKQEAgLTU0LDYgKzU0LDIwIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0
Zm9ybVB0cihjYWlyb19zdXJmYWNlX3QqIHB0cikKICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IGNhaXJvX3BhdHRlcm5fdCogcmVmUGxhdGZvcm1Q
dHIoY2Fpcm9fcGF0dGVybl90KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgY2Fpcm9f
cGF0dGVybl9yZWZlcmVuY2UocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fcGF0dGVybl90KiBwdHIpCit7CisgICAgaWYg
KHB0cikKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHB0cik7Cit9CisKKwogdGVtcGxh
dGUgPD4gY2Fpcm9fZm9udF9mYWNlX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX2ZvbnRfZmFjZV90
KiBwdHIpCiB7CiAgICAgaWYgKHB0cikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmgKaW5kZXggM2I3MjBjNjIxODU0YjEyNTJk
ZjVhYTBiMDFmN2IwNTczMjMwMWJmYi4uYmE4ZWNmMjA4ZTM2MzMyYmE2MTRhYzIyYTYzNmYwY2Qz
YjQwYmU2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybVJlZlB0ckNhaXJvLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybVJlZlB0ckNhaXJvLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qg
X2NhaXJvIGNhaXJvX3Q7CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJm
YWNlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fcGF0dGVybiBjYWlyb19wYXR0ZXJuX3Q7CiB0
eXBlZGVmIHN0cnVjdCBfY2Fpcm9fZm9udF9mYWNlIGNhaXJvX2ZvbnRfZmFjZV90OwogdHlwZWRl
ZiBzdHJ1Y3QgX2NhaXJvX3NjYWxlZF9mb250IGNhaXJvX3NjYWxlZF9mb250X3Q7CiAKQEAgLTM5
LDYgKzQwLDkgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3QqIHB0
cik7CiB0ZW1wbGF0ZSA8PiBjYWlyb19zdXJmYWNlX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3N1
cmZhY2VfdCogcHRyKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19z
dXJmYWNlX3QqIHB0cik7CiAKK3RlbXBsYXRlIDw+IGNhaXJvX3BhdHRlcm5fdCogcmVmUGxhdGZv
cm1QdHIoY2Fpcm9fcGF0dGVybl90Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1Q
dHIoY2Fpcm9fcGF0dGVybl90Kik7CisKIHRlbXBsYXRlIDw+IGNhaXJvX2ZvbnRfZmFjZV90KiBy
ZWZQbGF0Zm9ybVB0cihjYWlyb19mb250X2ZhY2VfdCopOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZlBsYXRmb3JtUHRyKGNhaXJvX2ZvbnRfZmFjZV90Kik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAppbmRleCA3ODc3ZjI4ZTJlNjYwYmRiNGUwNTQ4YTZlZGJkZjJhMjgx
OWIzODY4Li41OWRhMTE1MzY1YzQxMWE5ZDkzNTk2ZTQxMzVmNjVkODAyMjBlOWQyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI2LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJHT3duUHRy
LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgpAQCAtMTUxLDE1ICsxNTIsMjYgQEAgUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1l
R3RrKCkKICAgICAsIG1fcGF1c2VCdXR0b24oMCkKICAgICAsIG1fc2Vla0JhY2tCdXR0b24oMCkK
ICAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKLSAgICAsIG1fcGFydHNUYWJsZShhZG9wdFBs
YXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgwLCAwLCAwLCBnX2ZyZWUpKSkKKyAgICAs
IG1fdGhlbWVQYXJ0cyhnX25ldzAoR3RrVGhlbWVQYXJ0cywgMSkpCisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyAgICAsIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAodHJ1ZSkKKyNlbmRp
ZgogewotICAgIGlmICghbW96R3RrUmVmQ291bnQpIHsKLSAgICAgICAgbW96X2d0a19pbml0KCk7
CiAKLSAgICAgICAgLy8gVXNlIHRoZSB0aGVtZSBwYXJ0cyBmb3IgdGhlIGRlZmF1bHQgZHJhd2Fi
bGUuCi0gICAgICAgIG1vel9ndGtfdXNlX3RoZW1lX3BhcnRzKHBhcnRzRm9yRHJhd2FibGUoMCkp
OworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwID0g
Z2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwor
ICAgIGlmICghY29sb3JtYXApIHsKKyAgICAgICAgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1h
cCA9IGZhbHNlOworICAgICAgICBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29s
b3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKICAgICB9CisgICAgbV90aGVtZVBhcnRz
LT5jb2xvcm1hcCA9IGNvbG9ybWFwOworI2VuZGlmCiAKKyAgICAvLyBJbml0aWFsaXplIHRoZSBN
b3ppbGxhIHRoZW1lIGRyYXdpbmcgY29kZS4KKyAgICBpZiAoIW1vekd0a1JlZkNvdW50KSB7Cisg
ICAgICAgIG1vel9ndGtfaW5pdCgpOworICAgICAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyht
X3RoZW1lUGFydHMpOworICAgIH0KICAgICArK21vekd0a1JlZkNvdW50OwogCiAjaWYgRU5BQkxF
KFZJREVPKQpAQCAtMTgyLDM2ICsxOTQsMTkgQEAgUmVuZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVt
ZUd0aygpCiAgICAgbV9zZWVrQmFja0J1dHRvbi5jbGVhcigpOwogICAgIG1fc2Vla0ZvcndhcmRC
dXR0b24uY2xlYXIoKTsKIAotICAgIEdMaXN0KiB2YWx1ZXMgPSBnX2hhc2hfdGFibGVfZ2V0X3Zh
bHVlcyhtX3BhcnRzVGFibGUuZ2V0KCkpOwotICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBnX2xp
c3RfbGVuZ3RoKHZhbHVlcyk7IGkrKykKLSAgICAgICAgbW96X2d0a19kZXN0cm95X3RoZW1lX3Bh
cnRzX3dpZGdldHMoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtUaGVtZVBhcnRzKj4oZ19s
aXN0X250aF9kYXRhKHZhbHVlcywgaSkpKTsKLQogICAgIGd0a193aWRnZXRfZGVzdHJveShtX2d0
a1dpbmRvdyk7CiB9CiAKLUd0a1RoZW1lUGFydHMqIFJlbmRlclRoZW1lR3RrOjpwYXJ0c0ZvckRy
YXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQgcGFydCwgaW50JiBpbmRpY2F0b3JTaXpl
LCBpbnQmIGluZGljYXRvclNwYWNpbmcpIGNvbnN0CiB7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICAvLyBBIG51bGwgZHJhd2FibGUgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBzY3JlZW4g
Y29sb3JtYXAuCi0gICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwID0gMDsKLSAgICBpZiAoIWRyYXdh
YmxlKQotICAgICAgICBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29sb3JtYXAo
Z2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbG9ybWFwID0g
Z2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChkcmF3YWJsZSk7Ci0KLSAgICBHdGtUaGVtZVBhcnRz
KiBwYXJ0cyA9IHN0YXRpY19jYXN0PEd0a1RoZW1lUGFydHMqPihnX2hhc2hfdGFibGVfbG9va3Vw
KG1fcGFydHNUYWJsZS5nZXQoKSwgY29sb3JtYXApKTsKLSAgICBpZiAoIXBhcnRzKSB7Ci0gICAg
ICAgIHBhcnRzID0gZ19uZXcwKEd0a1RoZW1lUGFydHMsIDEpOwotICAgICAgICBwYXJ0cy0+Y29s
b3JtYXAgPSBjb2xvcm1hcDsKLSAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydChtX3BhcnRzVGFi
bGUuZ2V0KCksIGNvbG9ybWFwLCBwYXJ0cyk7CisgICAgQVNTRVJUKHBhcnQgPT0gQ2hlY2tib3hQ
YXJ0IHx8IHBhcnQgPT0gUmFkaW9QYXJ0KTsKKyAgICBpZiAocGFydCA9PSBDaGVja2JveFBhcnQp
IHsKKyAgICAgICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwg
JmluZGljYXRvclNwYWNpbmcpOworICAgICAgICByZXR1cm47CiAgICAgfQotI2Vsc2UKLSAgICAv
LyBGb3IgR1RLKyAzLjAgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gd29ycnkgYWJvdXQgbWFpbnRhaW5p
bmcgYSBzZXQgb2Ygd2lkZ2V0cyBwZXItY29sb3JtYXAuCi0gICAgc3RhdGljIEd0a1RoZW1lUGFy
dHMqIHBhcnRzID0gZ19zbGljZV9uZXcwKEd0a1RoZW1lUGFydHMpOwotI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCiAKLSAgICByZXR1cm4gcGFydHM7CisgICAgLy8gUmFkaW9QYXJ0CisgICAg
bW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNp
bmcpOwogfQogCiBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UpCkBAIC0yODksNjkgKzI4NCw2IEBAIHN0YXRpYyB2b2lkIGFkanVzdE1vemlsbGFTdHlsZShj
b25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxlKiBzdHlsZSwKICAgICBzdHls
ZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoeXBhZGRpbmcgKyBib3R0b20sIEZpeGVkKSk7CiB9
CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
b3ppbGxhR3RrV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldFN0YXRlKiB3aWRnZXRTdGF0
ZSwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCi17Ci0gICAgLy8g
UGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBoYXZlIHN1Y2NlZWRlZAotICAg
IGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFBsYXRmb3JtUmVmUHRyPEdka0RyYXdhYmxlPiBkcmF3YWJsZShjb250ZXh0LT5nZGtE
cmF3YWJsZSgpKTsKLSAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0LCBjbGlwUmVjdDsKLSAgICBp
ZiAoZHJhd2FibGUpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdl
dENUTSgpOwotICAgICAgICBJbnRQb2ludCBwb3MgPSBjdG0ubWFwUG9pbnQocmVjdC5sb2NhdGlv
bigpKTsKLSAgICAgICAgcGFpbnRSZWN0ID0gSW50UmVjdChwb3MueCgpLCBwb3MueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIEludGVyc2VjdCB0aGUgY2Fp
cm8gcmVjdGFuZ2xlIHdpdGggdGhlIHRhcmdldCB3aWRnZXQgcmVnaW9uLiBUaGlzICB3aWxsCi0g
ICAgICAgIC8vIHByZXZlbnQgdGhlIHRoZW1lIGRyYXdpbmcgY29kZSBmcm9tIGRyYXdpbmcgaW50
byByZWdpb25zIHRoYXQgY2Fpcm8gd2lsbAotICAgICAgICAvLyBjbGlwIGFueXdheS4KLSAgICAg
ICAgZG91YmxlIGNsaXBYMSwgY2xpcFgyLCBjbGlwWTEsIGNsaXBZMjsKLSAgICAgICAgY2Fpcm9f
Y2xpcF9leHRlbnRzKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAmY2xpcFgxLCAmY2xpcFkx
LCAmY2xpcFgyLCAmY2xpcFkyKTsKLSAgICAgICAgSW50UG9pbnQgY2xpcFBvcyA9IGN0bS5tYXBQ
b2ludChJbnRQb2ludChjbGlwWDEsIGNsaXBZMSkpOwotCi0gICAgICAgIGNsaXBSZWN0LndpZHRo
ID0gY2xpcFgyIC0gY2xpcFgxOwotICAgICAgICBjbGlwUmVjdC5oZWlnaHQgPSBjbGlwWTIgLSBj
bGlwWTE7Ci0gICAgICAgIGNsaXBSZWN0LnggPSBjbGlwUG9zLngoKTsKLSAgICAgICAgY2xpcFJl
Y3QueSA9IGNsaXBQb3MueSgpOwotICAgICAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmcGFp
bnRSZWN0LCAmY2xpcFJlY3QsICZjbGlwUmVjdCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBJbiBzb21lIHNpdHVhdGlvbnMsIGxpa2UgZHVyaW5nIHByaW50IHByZXZpZXdzLCB0aGlzIEdy
YXBoaWNzQ29udGV4dCBpcyBub3QKLSAgICAgICAgLy8gYmFja2VkIGJ5IGEgR2RrRHJhd2FibGUu
IEluIHRob3NlIHNpdHVhdGlvbnMsIHdlIHJlbmRlciBvbnRvIGEgcGl4bWFwIGFuZCB0aGVuCi0g
ICAgICAgIC8vIGNvcHkgdGhlIHJlbmRlcmVkIGRhdGEgYmFjayB0byB0aGUgR3JhcGhpY3NDb250
ZXh0IHZpYSBDYWlyby4KLSAgICAgICAgZHJhd2FibGUgPSBhZG9wdFBsYXRmb3JtUmVmKGdka19w
aXhtYXBfbmV3KDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgZ2RrX3Zpc3VhbF9nZXRf
ZGVwdGgoZ2RrX3Zpc3VhbF9nZXRfc3lzdGVtKCkpKSk7Ci0gICAgICAgIHBhaW50UmVjdCA9IGNs
aXBSZWN0ID0gSW50UmVjdCgwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAg
IH0KLQotICAgIG1vel9ndGtfdXNlX3RoZW1lX3BhcnRzKHBhcnRzRm9yRHJhd2FibGUoZHJhd2Fi
bGUuZ2V0KCkpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBl
LCBkcmF3YWJsZS5nZXQoKSwgJnBhaW50UmVjdCwgJmNsaXBSZWN0LCB3aWRnZXRTdGF0ZSwgZmxh
Z3MsIHRleHREaXJlY3Rpb24pID09IE1PWl9HVEtfU1VDQ0VTUzsKLQotICAgIC8vIElmIHRoZSBk
cmF3aW5nIHdhcyBzdWNjZXNzZnVsIGFuZCB3ZSByZW5kZXJlZCBvbnRvIGEgcGl4bWFwLCBjb3B5
IHRoZQotICAgIC8vIHJlc3VsdHMgYmFjayB0byB0aGUgb3JpZ2luYWwgR3JhcGhpY3NDb250ZXh0
LgotICAgIGlmIChzdWNjZXNzICYmICFjb250ZXh0LT5nZGtEcmF3YWJsZSgpKSB7Ci0gICAgICAg
IGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
ICAgICBjYWlyb19zYXZlKGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIGdka19jYWlyb19zZXRfc291
cmNlX3BpeG1hcChjYWlyb0NvbnRleHQsIGRyYXdhYmxlLmdldCgpLCByZWN0LngoKSwgcmVjdC55
KCkpOwotICAgICAgICBjYWlyb19wYWludChjYWlyb0NvbnRleHQpOwotICAgICAgICBjYWlyb19y
ZXN0b3JlKGNhaXJvQ29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICFzdWNjZXNzOwotfQot
I2Vsc2UKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVt
ZVdpZGdldFR5cGUgdHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBHdGtXaWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNv
IGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBmYWxzZSA9PSBzdWNj
ZXNzLCBiZWNhdXNlIG9mIGF3ZXNvbWUuCi0gICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHJl
Y3Q7Ci0gICAgcmV0dXJuIG1vel9ndGtfd2lkZ2V0X3BhaW50KHR5cGUsIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCAmcGFpbnRSZWN0LCB3aWRnZXRTdGF0ZSwgZmxhZ3MsIHRleHREaXJlY3Rp
b24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLSNlbmRpZgotCiBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgaW50IGZsYWdzKQogewogICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1c3Qg
Y2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKQEAgLTM4Miw4ICszMTQsOCBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgUmVuZGVy
T2JqZWN0KiByZQogICAgIGVsc2UKICAgICAgICAgd2lkZ2V0U3RhdGUuZGVwcmVzc2VkID0gZmFs
c2U7CiAKLSAgICBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwotICAgIHJldHVybiBwYWlu
dE1vemlsbGFHdGtXaWRnZXQodHlwZSwgY29udGV4dCwgcmVjdCwgJndpZGdldFN0YXRlLCBmbGFn
cywgdGV4dERpcmVjdGlvbik7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250
ZXh0KGNvbnRleHQsIHJlY3QpOworICAgIHJldHVybiAhd2lkZ2V0Q29udGV4dC5wYWludE1vemls
bGFXaWRnZXQodHlwZSwgJndpZGdldFN0YXRlLCBmbGFncywgZ3RrVGV4dERpcmVjdGlvbihyZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFRv
Z2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUs
IENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCkBAIC0zOTQsMTkgKzMyNiw3IEBAIHN0YXRpYyB2b2lk
IHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJTdHlsZSog
c3R5bGUsIENvbnRyCiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBwcm9iYWJseSBub3QgY29ycmVj
dCB1c2Ugb2YgaW5kaWNhdG9yU2l6ZSBhbmQgaW5kaWNhdG9yU3BhY2luZy4KICAgICBnaW50IGlu
ZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmc7Ci0KLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2Up
IHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgaWYgKG1vel9ndGtfY2hlY2tib3hf
Z2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKSAhPSBNT1pfR1RL
X1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UmFkaW9QYXJ0OgotICAgICAgICBpZiAobW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNh
dG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpICE9IE1PWl9HVEtfU1VDQ0VTUykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICB0aGVtZS0+Z2V0SW5kaWNhdG9yTWV0cmljcyhhcHBlYXJhbmNlLCBpbmRp
Y2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nKTsKIAogICAgIC8vIE90aGVyIHBvcnRzIGhhcmQt
Y29kZSB0aGlzIHRvIDEzLCBidXQgR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZl
IGxvb2suCiAgICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZh
bHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IDRlMjRjOTcyYmEyNTk5ODE3MzBj
YTJhMGY0ZTk1OWI1ZmQ5MjJjNTAuLjg2NGU5NDQwNThlMTVlOTE3MzM1YjMwYzIyZjExZTc4NWZh
ZWViNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApAQCAtODMsNyArODMs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCgpOwogI2VuZGlmCiAKLSAgICBib29sIHBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVt
ZVdpZGdldFR5cGUsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXRT
dGF0ZSosIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiA9IEdUS19URVhUX0RJUl9OT05FKTsK
KyAgICB2b2lkIGdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQsIGludCYgaW5kaWNhdG9y
U2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKSBjb25zdDsKIAogICAgIEd0a1dpZGdldCogZ3Rr
U2Nyb2xsYmFyKCk7CiAKQEAgLTE1OCw3ICsxNTgsNiBAQCBwcml2YXRlOgogICAgIEd0a0NvbnRh
aW5lciogZ3RrQ29udGFpbmVyKCkgY29uc3Q7CiAKICAgICBib29sIHBhaW50UmVuZGVyT2JqZWN0
KEd0a1RoZW1lV2lkZ2V0VHlwZSwgUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzID0gMCk7Ci0gICAgR3RrVGhlbWVQYXJ0cyogcGFy
dHNGb3JEcmF3YWJsZShHZGtEcmF3YWJsZSopIGNvbnN0OwogCiAgICAgbXV0YWJsZSBHdGtXaWRn
ZXQqIG1fZ3RrV2luZG93OwogICAgIG11dGFibGUgR3RrQ29udGFpbmVyKiBtX2d0a0NvbnRhaW5l
cjsKQEAgLTE4Miw5ICsxODEsMTEgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW1hZ2U+IG1fcGF1
c2VCdXR0b247CiAgICAgUmVmUHRyPEltYWdlPiBtX3NlZWtCYWNrQnV0dG9uOwogICAgIFJlZlB0
cjxJbWFnZT4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBQYWdlKiBtX3BhZ2U7Ci0gICAgUGxh
dGZvcm1SZWZQdHI8R0hhc2hUYWJsZT4gbV9wYXJ0c1RhYmxlOwotCisgICAgR3RrVGhlbWVQYXJ0
cyogbV90aGVtZVBhcnRzOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgYm9vbCBtX3Ro
ZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworI2VuZGlmCisgICAgZnJpZW5kIGNsYXNzIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0ay5jcHAKaW5kZXggMTliODk3Y2YwMmEzOTQ5NGVmZTIzY2VhOTM5ZjE0OTI0MjNk
NGMyNy4uZjkyZGQyMGNhZTQwNjIyNjllMzQ2M2I1OGQwZmYzMzYwODA0YTZhMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJndGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCkBAIC0yMTYs
NyArMjE3LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIKICAgICAgICAgZnVsbFNjcm9sbGJh
clJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFy
LT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAogICAgIEd0a1RoZW1lV2lkZ2V0VHlw
ZSB0eXBlID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8g
TU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUwgOiBNT1pfR1RLX1NDUk9MTEJBUl9UUkFD
S19IT1JJWk9OVEFMOwotICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+cGFpbnRNb3ppbGxhR3RrV2lkZ2V0KHR5cGUsIGNv
bnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAmc3RhdGUsIDApOworICAgIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7CisgICAg
d2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwgJnN0YXRlLCAwKTsKIH0KIAog
dm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCkBAIC0yMjQsNyArMjI2LDgg
QEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2wKICAgICAvLyBUaGlzIGlzIHVudXNlZCBieSB0aGUg
bW96X2d0a19zY3JvbGxlY2Rfd2luZG93X3BhaW50LgogICAgIEd0a1dpZGdldFN0YXRlIHN0YXRl
OwogICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgp
LCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgp
KTsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldChNT1pfR1RLX1NDUk9MTEVEX1dJ
TkRPVywgY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QsICZzdGF0ZSwgMCk7CisgICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0
KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChNT1pfR1RLX1NDUk9MTEVE
X1dJTkRPVywgJnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRU
aHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiByZWN0KQpAQCAtMjQwLDcgKzI0Myw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9s
bGJhCiAgICAgc3RhdGUuY3VycG9zID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7CiAKICAgICBH
dGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX1ZFUlRJQ0FMIDogTU9aX0dU
S19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0
a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmc3RhdGUsIDApOworICAgIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250
ZXh0LnBhaW50TW96aWxsYVdpZGdldCh0eXBlLCAmc3RhdGUsIDApOwogfQogCiBJbnRSZWN0IFNj
cm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCkBAIC0yNTYsNiArMjYwLDkgQEAgSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiB1bmNvbnMKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KQogeworICAgIGlmIChncmFwaGljc0NvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgLy8gQ3JlYXRlIHRoZSBT
Y3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRhbWFnZVJlY3QKICAgICBTY3Jv
bGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFydDsKIApAQCAtMzQ4LDcgKzM1
NSw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiCiAgICAgICAgIHN0YXRlLmluSG92ZXIgPSBG
QUxTRTsKICAgICB9CiAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldChNT1pfR1RL
X1NDUk9MTEJBUl9CVVRUT04sIGNvbnRleHQsIHJlY3QsICZzdGF0ZSwgZmxhZ3MpOworICAgIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKKyAgICB3
aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04s
ICZzdGF0ZSwgZmxhZ3MpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9s
bENvcm5lcihTY3JvbGxWaWV3KiB2aWV3LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGNvcm5lclJlY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5k
ZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiODA2NTgyOTBlNjE0N2NlN2IwYzVkOWQxOWI5
YzA1NGIxMjg4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdl
dFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9o
CisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiZ3RrZHJhd2luZy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlbmRlclRo
ZW1lR3RrOworCitjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsK
KyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOworICAgIGJvb2wgcGFpbnRNb3ppbGxhV2lk
Z2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgR3RrV2lkZ2V0U3RhdGUqLCBpbnQgZmxhZ3MsIEd0a1Rl
eHREaXJlY3Rpb24gPSBHVEtfVEVYVF9ESVJfTk9ORSk7CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRSZWN0IG1fdGFyZ2V0UmVjdDsK
KyAgICBHZGtSZWN0YW5nbGUgbV9wYWludFJlY3Q7CisgICAgSW50U2l6ZSBtX2V4dHJhU3BhY2U7
CisgICAgYm9vbCBtX2hhZEVycm9yOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBH
ZGtEcmF3YWJsZSogbV90YXJnZXQ7CisjZWxzZQorICAgIGNhaXJvX3QqIG1fdGFyZ2V0OworI2Vu
ZGlmCisKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzgwNGMxZTI5YTJiNmJm
ODk4ODMxNDMyN2FkNmJhNDQ1Y2JkNzFlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcApAQCAtMCwwICsxLDE2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWVHdGsuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdka1BpeG1h
cCogZ1NjcmF0Y2hCdWZmZXIgPSAwOworc3RhdGljIHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCkK
K3sKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGdTY3Jh
dGNoQnVmZmVyKTsKKyAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7Cit9CisKKy8vIEZJWE1FOiBQZXJo
YXBzIHdlIGNhbiBzaGFyZSBzb21lIG9mIHRoaXMgY29kZSB3aXRoIHRoZSBDb250ZXh0U2hhZG93
Q2Fpcm8uCisvLyBXaWRnZXQgcmVuZGVyaW5nIG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUg
YnVmZmVyIGZvciB0aGUgaW50ZXJtZWRpYXRlCisvLyByZW5kZXIuIEluc3RlYWQgb2YgY3JlYXRp
bmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAorLy8gd2Ug
Y3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEg
dGltZXIuCitjbGFzcyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciA6IHB1YmxpYyBUaW1lckJhc2Ug
eworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IHB1cmdlU2NyYXRjaEJ1ZmZl
cigpOyB9Cit9Oworc3RhdGljIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIHB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyOworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKQorewor
ICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBwdXJn
ZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7CisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIu
c3RhcnRPbmVTaG90KDIpOworfQorCitzdGF0aWMgSW50U2l6ZSBnZXRFeHRyYVNwYWNlRm9yV2lk
Z2V0KFJlbmRlclRoZW1lR3RrKiB0aGVtZSkKK3sKKyAgICAvLyBDaGVja2JveGVzIGFuZCBzY3Jv
bGxiYXIgdGh1bWJzIG9mdGVuIGRyYXcgb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLiBIZXJlIHdl
IGZpZ3VyZSBvdXQKKyAgICAvLyB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3BhY2Ugd2UgbmVlZCBm
b3IgYW55IHR5cGUgb2Ygd2lkZ2V0IGFuZCB1c2UgdGhhdCB0byBpbmNyZWFzZSB0aGUKKyAgICAv
LyBzaXplIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciwgd2hpbGUgcHJlc2VydmluZyB0aGUgZmluYWwg
d2lkZ2V0IHBvc2l0aW9uLgorCisgICAgLy8gVGhlIGNoZWNrYm94IGV4dHJhIHNwYWNlIGlzIGNh
bGN1bGF0ZWQgYnkgbG9va2luZyBhdCB0aGUgd2lkZ2V0IHN0eWxlLgorICAgIGludCBpbmRpY2F0
b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nOworICAgIHRoZW1lLT5nZXRJbmRpY2F0b3JNZXRyaWNz
KENoZWNrYm94UGFydCwgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZyk7CisgICAgSW50
U2l6ZSBleHRyYVNwYWNlKGluZGljYXRvclNwYWNpbmcsIGluZGljYXRvclNwYWNpbmcpOworCisg
ICAgLy8gU2Nyb2xsYmFyIHRodW1icyBuZWVkIGF0IGxlYXN0IGFuIGV4dHJhIHBpeGVsIGFsb25n
IHRoZWlyIG1vdmVtZW50IGF4aXMuCisgICAgcmV0dXJuIGV4dHJhU3BhY2UuZXhwYW5kZWRUbyhJ
bnRTaXplKDEsIDEpKTsKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVy
aW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkK
KyAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQorICAgICwgbV9oYWRFcnJvcihmYWxzZSkK
K3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0
ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7CisKKyAgICAvLyBGYWxsYmFj
azogV2UgZmFpbGVkIHRvIGNyZWF0ZSBhbiBSR0JBIGNvbG9ybWFwIGVhcmxpZXIsIHNvIHdlIGNh
bm5vdCBwcm9wZXJseSBwYWludCAKKyAgICAvLyB0byBhIHRlbXBvcmFyeSBzdXJmYWNlIGFuZCBw
cmVzZXJ2ZSB0cmFuc3BhcmVuY3kuIFRvIGVuc3VyZSBkZWNlbnQgd2lkZ2V0IHJlbmRlcmluZywg
anVzdAorICAgIC8vIHBhaW50IGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgZHJhd2FibGUuIFRoaXMg
d2lsbCBub3QgcmVuZGVyIENTUyByb3RhdGlvbmFsIHRyYW5zZm9ybXMgcHJvcGVybHkuCisgICAg
aWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBncmFwaGljc0NvbnRl
eHQtPmdka0RyYXdhYmxlKCkpIHsKKyAgICAgICAgbV9wYWludFJlY3QgPSBncmFwaGljc0NvbnRl
eHQtPmdldENUTSgpLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAgICAgIG1fdGFyZ2V0ID0gZ3Jh
cGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gU29tZSB3aWRnZXRzIHJlbmRlciBvdXRzaWRlIHRoZWlyIHJlY3RhbmdsZXMuIFdlIG5l
ZWQgdG8gYWNjb3VudCBmb3IgdGhpcy4KKyAgICBtX2V4dHJhU3BhY2UgPSBnZXRFeHRyYVNwYWNl
Rm9yV2lkZ2V0KHRoZW1lKTsKKworICAgIC8vIE9mZnNldCB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBz
byB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHNj
cmF0Y2ggYnVmZmVyLgorICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludChtX2V4dHJh
U3BhY2Uud2lkdGgoKSwgbV9leHRyYVNwYWNlLmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV90YXJnZXRSZWN0LnNpemUoKSk7CisKKyAgICBpbnQgd2lkdGgg
PSBtX3RhcmdldFJlY3Qud2lkdGgoKSArIChtX2V4dHJhU3BhY2Uud2lkdGgoKSAqIDIpOworICAg
IGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAobV9leHRyYVNwYWNlLmhlaWdo
dCgpICogMik7CisgICAgaW50IHNjcmF0Y2hXaWR0aCA9IDA7CisgICAgaW50IHNjcmF0Y2hIZWln
aHQgPSAwOworICAgIGlmIChnU2NyYXRjaEJ1ZmZlcikKKyAgICAgICAgZ2RrX2RyYXdhYmxlX2dl
dF9zaXplKGdTY3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhlaWdodCk7CisK
KyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJy
ZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAgaWYgKCFnU2NyYXRjaEJ1ZmZlciB8fCBz
Y3JhdGNoV2lkdGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7CisgICAgICAg
IHB1cmdlU2NyYXRjaEJ1ZmZlcigpOworICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAz
MiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCBy
ZXF1ZXN0cy4KKyAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKKyAgICAg
ICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OworCisgICAgICAgIGdTY3JhdGNo
QnVmZmVyID0gZ2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2NvbG9ybWFwX2dl
dF92aXN1YWwodGhlbWUtPm1fdGhlbWVQYXJ0cy0+Y29sb3JtYXApLT5kZXB0aCk7CisgICAgICAg
IGdka19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1NjcmF0Y2hCdWZmZXIsIHRoZW1lLT5tX3RoZW1l
UGFydHMtPmNvbG9ybWFwKTsKKyAgICB9CisgICAgbV90YXJnZXQgPSBnU2NyYXRjaEJ1ZmZlcjsK
KworICAgIC8vIENsZWFyIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICBQbGF0Zm9ybVJlZlB0cjxj
YWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9IGFkb3B0UGxhdGZvcm1SZWYoZ2RrX2NhaXJv
X2NyZWF0ZShnU2NyYXRjaEJ1ZmZlcikpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihzY3JhdGNo
QnVmZmVyQ29udGV4dC5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3Bh
aW50KHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpKTsKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQoKQoreworICAgIC8vIFdlIGRvIG5vdCBuZWVk
IHRvIGJsaXQgYmFjayB0byB0aGUgdGFyZ2V0IGluIHRoZSBmYWxsYmFjayBjYXNlLiBTZWUgYWJv
dmUuCisgICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVH
dGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOworICAgIGlmICghdGhlbWUt
Pm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgbV9ncmFwaGljc0NvbnRleHQtPmdka0Ry
YXdhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IHBhaW50IHRoZSByZXN1
bHRzIGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorICAgIGlmIChtX2hhZEVycm9yKSB7Cisg
ICAgICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBw
cmVzZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4KKyAgICBjYWlyb190KiBjYWlyb0NvbnRl
eHQgPSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgUGxhdGZvcm1S
ZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShjYWlyb19nZXRfc291cmNlKGNh
aXJvQ29udGV4dCkpOworCisgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgYmxpdCBpcyB0aGUgb3Jp
Z2luYWwgdGFyZ2V0IHJlY3RhbmdsZSBhZGp1c3RlZCBmb3IgYW55IGV4dHJhIHNwYWNlLgorICAg
IEludFBvaW50IHRhcmdldE9yaWdpbihtX3RhcmdldFJlY3QueCgpIC0gbV9leHRyYVNwYWNlLndp
ZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0UmVjdC55KCkgLSBtX2V4
dHJhU3BhY2UuaGVpZ2h0KCkpOworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWly
b0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCB0YXJnZXRPcmlnaW4ueCgpLCB0YXJnZXRPcmlnaW4u
eSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCB0YXJnZXRPcmlnaW4ueCgp
LCB0YXJnZXRPcmlnaW4ueSgpLAorICAgICAgICBtX3RhcmdldFJlY3Qud2lkdGgoKSArIChtX2V4
dHJhU3BhY2Uud2lkdGgoKSAqIDIpLCBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAobV9leHRyYVNw
YWNlLmhlaWdodCgpICogMikpOworICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250ZXh0KTsKKyAgICBj
YWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2UuZ2V0KCkpOworICAg
IHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK2Jvb2wgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHdGtX
aWRnZXRTdGF0ZSogc3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uKQoreworICAgIG1faGFkRXJyb3IgPSBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBtX3Rh
cmdldCwgJm1fcGFpbnRSZWN0LCAmbV9wYWludFJlY3QsCisgICAgICAgIHN0YXRlLCBmbGFncywg
dGV4dERpcmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOworICAgIHJldHVybiAhbV9oYWRFcnJv
cjsKK30KKworfQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42OTNjNDBlMWFjYjlhYjEwYzk4YjMyNWFkNjMyNmEzNzgwZTNjOGM0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3Bw
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
aWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorICAgIDog
bV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICwgbV90YXJnZXRSZWN0KHRh
cmdldFJlY3QpCisgICAgLCBtX3BhaW50UmVjdCh0YXJnZXRSZWN0KQorICAgICwgbV90YXJnZXQo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCisgICAgLCBtX2hhZEVycm9yKGZhbHNlKQorewor
fQorCit+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCit7
Cit9CisKK2Jvb2wgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KEd0
a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGludCBmbGFncywg
R3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQoreworICAgIG1faGFkRXJyb3IgPSBtb3pf
Z3RrX3dpZGdldF9wYWludCh0eXBlLCBtX3RhcmdldCwgJm1fcGFpbnRSZWN0LCBzdGF0ZSwgZmxh
Z3MsIHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4gIW1faGFk
RXJyb3I7Cit9CisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71083</attachid>
            <date>2010-10-18 14:33:02 -0700</date>
            <delta_ts>2010-10-19 10:44:33 -0700</delta_ts>
            <desc>Patch against ToT (reason for build failure)</desc>
            <filename>bug-40139-20101018143300.patch</filename>
            <type>text/plain</type>
            <size>33405</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5YWZkZmRjMjczMzM5NjhmMGQwYTBlZjU2ZjE0YWY5NWFhMWRjNDM1Li4zYThiY2E3
NGRiMGI2NzZmY2ExMjkzNjA3MjU0OGZkNTAzZmVmN2Q2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTAtMTggIFlvbmdqdW4g
WmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNjU3MWRhMWI5YjYzYTkw
YmJhZjJiYmYzZTFkNWUwMmFhMmI0OTZkNi4uZTk4MGNmY2U0OGI0NzgzZWNiZjIxYzUzMmJkYjVl
MjgwYjk2MTZiMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTU0NzYsMTEgKzU0NzYs
NiBAQCBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAogZmFzdC9k
b20vR2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAogZmFzdC9kb20v
R2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKIAot
IyBHVEsrIHRoZW1lLXJlbmRlcmVkIHdpZGdldHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9y
bXMKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5Ci1mYXN0
L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1lZC5odG1sCi1mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zv
cm1lZC5odG1sCi0KICMgU29tZSBpbnB1dCB0eXBlPXJhbmdlIHRlc3RzIGZhaWwgYmVjYXVzZSBv
ZiB0aGUgc2l6ZSAKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBHVEsrIHRoZW1lcy4KIGZhc3Qv
Zm9ybXMvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGNlMjU5YjEyNmFmMTEwYjI2YTc2NjllMzM3NjY2YmEx
ZjI5ZDViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3Qv
Zm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKKwor
RkFJTDogZXhwZWN0ZWQgc2xpZGVyIHZhbHVlIDM5LCBnb3QgMzgKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRmZjAyMjA3YTVjNjk4MTY0
NmIyN2IwNDdmMDg1NTFhYzVhNTI1My4uZWJlNjNiMWQ0YTAzNDMyYWNhYmE2ZmRkN2VlNDAwN2Fi
ZTE5NTEzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MyBAQAorMjAxMC0xMC0xNSAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gV2lkZ2V0cyBkbyBub3Qgc3VwcG9ydCBDU1MgdHJhbnNmb3JtYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDEz
OQorCisgICAgICAgIEluc3RlYWQgb2YgcmVuZGVyaW5nIGRpcmVjdGx5IG9udG8gdGhlIHRhcmdl
dCBkcmF3YWJsZSB3aGVuIHJlbmRlcmluZworICAgICAgICBmb3JtIGNvbnRyb2xzIG9uIEdUSysg
Mi4wLCByZW5kZXIgb250byBhbiBpbnRlcm1lZGlhdGUgc3VyZmFjZSBhbmQgdXNlCisgICAgICAg
IGNhaXJvIHRvIGJsaXQgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4gVGhp
cyBoYXMgdHdvCisgICAgICAgIGJlbmVmaXRzLiBUaGUgZmlyc3QgaXMgdGhhdCBpdCBhbHdheXMg
aG9ub3JzIHRoZSBjdXJyZW50IENhaXJvCisgICAgICAgIHRyYW5zZm9ybWF0aW9uLiBUaGUgc2Vj
b25kIGlzIHRoYXQgc2luY2UgdGhlIGludGVybWVkaWF0ZSBkcmF3YWJsZSBpcworICAgICAgICBh
bHdheXMgYSAzMi1iaXQgR2RrUGl4bWFwLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIGEgc2V0IG9m
IHdpZGdldHMKKyAgICAgICAgcGVyLWNvbG9ybWFwIGFueSBsb25nZXIuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgYWxzbyBiZWdpbnMgdGhlIGFic3RyYWN0aW9uIG9mIHdpZGdldCByZW5kZXJpbmcg
c28gdGhhdCBHVEsrCisgICAgICAgIDIgYW5kIEdUSysgMyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUg
cGF0aC4gVGhlIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lsbAorICAgICAgICBldmVudHVhbGx5
IGhpZGUgYWxsIHZlcnNpb24gZGlmZmVyZW5jZXMgZnJvbSBSZW5kZXJUaGVtZUd0aywgd2hpY2gg
Y2FuCisgICAgICAgIGp1c3QgZm9jdXMgb24gaW50ZXJwcmV0aW5nIHRoZSBHdGtTdHlsZSBwcm9w
ZXJ0aWVzLiAKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgV2lkZ2V0UmVuZGVyaW5D
b250ZXh0IHNvdXJjZSBmaWxlcyB0byB0aGUgc291cmNlcyBsaXN0LgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwOgorICAgICAgICAoV1RG
OjpyZWZQbGF0Zm9ybVB0cik6IEFkZCBhIHNwZWNpYWxpemF0aW9uIGZvciBDYWlybyBwYXR0ZXJu
cy4KKyAgICAgICAgKFdURjo6ZGVyZWZQbGF0Zm9ybVB0cik6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaDogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6IE5vIGxvbmdlciBrZWVwIGEgc2V0IG9m
CisgICAgICAgIHdpZGdldHMgcGVyLWNvbG9ybWFwIGZvciBHVEsrLCBpbnN0ZWFkIGp1c3QgZGV0
ZXJtaW5lIGlmIHdlIGNhbiB1c2UgUkdCQQorICAgICAgICBjb2xvcm1hcHMgYW5kIGdvIGZyb20g
dGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3Rr
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z2V0SW5kaWNhdG9y
TWV0cmljcyk6IFB1dCB0aGUgbG9naWMgZm9yCisgICAgICAgIGdldHRpbmcgdG9nZ2xlIGJ1dHRv
biBpbmRpY2F0b3IgbWV0cmljcyBpbnRvIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KTogTm93IHVzZXMKKyAgICAgICAgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dCB0byBkbyB3aWRnZXQgcmVuZGVyaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6c2V0VG9nZ2xlU2l6ZSk6IFVzZSB0aGUgbmV3IGdldEluZGljYXRvck1ldHJpY3MgaGVs
cGVyLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oOiBBZGRlZCBhIG1l
bWJlciB0byB0cmFjayB3aGV0aGVyIG9yIG5vdAorICAgICAgICAgIHRoZSB3aWRnZXRzIGFyZSB1
c2luZyBhIFJHQkEgY29sb3JtYXAuIEFsc28gcmVtb3ZlIGEgZGVmdW5jdCBQYWdlKgorICAgICAg
ICAgIG1lbWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3Bw
OiBTd2l0Y2ggYWxsIHdpZGdldCBkcmF3aW5nCisgICAgICAgIG9wZXJhdGlvbnMgdG8gdXNlIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRUcmFja0JhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6cHVyZ2VTY3JhdGNoQnVmZmVyKTogQWRkZWQsIHRoaXMgaXMgc2ltaWxh
ciB0byB0aGUgc2NyYXRjaAorICAgICAgICBidWZmZXIgaW1wbGVtZW50YXRpb24gZnJvbSBDb250
ZXh0U2hhZG93LgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2VTY3JhdGNoQnVmZmVyVGltZXI6OmZp
cmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJn
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXh0cmFTcGFjZUZvcldpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdD
b250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0
Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdD
b250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4
dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisKIDIwMTAt
MTAtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgICogZG9tL05v
ZGUuaDogRml4IGFuY2llbnQgdHlwbyBpbiBqdXN0LW1vZGlmaWVkIGNvbW1lbnQuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCBjNDQyMTEzYWE5M2JjNDNiZjY0NGU4YjIwZjk0MmQ2Mzg4NjMzNDI1Li45MTNhMTg3M2I0ZDE3
ZWM3MjI4NmRjMjRmY2JjOTVkYzcxN2IyNTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTM1NjAsNiArMzU2MCw5IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2hlZWxFdmVudEd0ay5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAKaW5kZXgg
ZDI4OTU4NWQ4OWEzYmIwOTgxNzRhOWQ4OWJiMzc5NGJkYTJjMTc0OS4uMjg1NWFlZjEzMjdhMzI2
OTEwMmUxMmYxOTNiNTY4OWIwNTZhMDNiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwCkBAIC01NCw2ICs1NCwy
MCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90KiBw
dHIpCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShwdHIpOwogfQogCit0ZW1wbGF0ZSA8
PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fcmVmZXJlbmNlKHB0cik7Cisg
ICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNh
aXJvX3BhdHRlcm5fdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGNhaXJvX3BhdHRl
cm5fZGVzdHJveShwdHIpOworfQorCisKIHRlbXBsYXRlIDw+IGNhaXJvX2ZvbnRfZmFjZV90KiBy
ZWZQbGF0Zm9ybVB0cihjYWlyb19mb250X2ZhY2VfdCogcHRyKQogewogICAgIGlmIChwdHIpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRy
Q2Fpcm8uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJD
YWlyby5oCmluZGV4IDNiNzIwYzYyMTg1NGIxMjUyZGY1YWEwYjAxZjdiMDU3MzIzMDFiZmIuLmJh
OGVjZjIwOGUzNjMzMmJhNjE0YWMyMmE2MzZmMGNkM2I0MGJlNjkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oCkBAIC0y
NCw2ICsyNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwogdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwordHlwZWRlZiBzdHJ1Y3QgX2Nh
aXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX2ZvbnRf
ZmFjZSBjYWlyb19mb250X2ZhY2VfdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zY2FsZWRfZm9u
dCBjYWlyb19zY2FsZWRfZm9udF90OwogCkBAIC0zOSw2ICs0MCw5IEBAIHRlbXBsYXRlIDw+IHZv
aWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb190KiBwdHIpOwogdGVtcGxhdGUgPD4gY2Fpcm9fc3Vy
ZmFjZV90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19zdXJmYWNlX3QqIHB0cik7CiB0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90KiBwdHIpOwogCit0ZW1wbGF0
ZSA8PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCopOwor
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCopOworCiB0
ZW1wbGF0ZSA8PiBjYWlyb19mb250X2ZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fZm9udF9m
YWNlX3QqKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19mb250X2Zh
Y2VfdCopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggYjQw
YmU1Yjc2ZGFhZjNiNTZjMDY0YmUyODhhODEzMjE1ZDIyZjk0ZC4uOWZiNzU3NmVhMGY4MmYxM2Iz
YzIyZjk5NWY0ZDZhNjc4NDk2NDkyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0
MSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgog
I2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtMTUxLDE1ICsxNTMsMjYgQEAgUmVuZGVyVGhl
bWVHdGs6OlJlbmRlclRoZW1lR3RrKCkKICAgICAsIG1fcGF1c2VCdXR0b24oMCkKICAgICAsIG1f
c2Vla0JhY2tCdXR0b24oMCkKICAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKLSAgICAsIG1f
cGFydHNUYWJsZShhZG9wdFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgwLCAwLCAw
LCBnX2ZyZWUpKSkKKyAgICAsIG1fdGhlbWVQYXJ0cyhnX25ldzAoR3RrVGhlbWVQYXJ0cywgMSkp
CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAsIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29s
b3JtYXAodHJ1ZSkKKyNlbmRpZgogewotICAgIGlmICghbW96R3RrUmVmQ291bnQpIHsKLSAgICAg
ICAgbW96X2d0a19pbml0KCk7CiAKLSAgICAgICAgLy8gVXNlIHRoZSB0aGVtZSBwYXJ0cyBmb3Ig
dGhlIGRlZmF1bHQgZHJhd2FibGUuCi0gICAgICAgIG1vel9ndGtfdXNlX3RoZW1lX3BhcnRzKHBh
cnRzRm9yRHJhd2FibGUoMCkpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR2RrQ29s
b3JtYXAqIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnZGtfc2NyZWVu
X2dldF9kZWZhdWx0KCkpOworICAgIGlmICghY29sb3JtYXApIHsKKyAgICAgICAgbV90aGVtZVBh
cnRzSGF2ZVJHQkFDb2xvcm1hcCA9IGZhbHNlOworICAgICAgICBjb2xvcm1hcCA9IGdka19zY3Jl
ZW5fZ2V0X2RlZmF1bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKICAgICB9
CisgICAgbV90aGVtZVBhcnRzLT5jb2xvcm1hcCA9IGNvbG9ybWFwOworI2VuZGlmCiAKKyAgICAv
LyBJbml0aWFsaXplIHRoZSBNb3ppbGxhIHRoZW1lIGRyYXdpbmcgY29kZS4KKyAgICBpZiAoIW1v
ekd0a1JlZkNvdW50KSB7CisgICAgICAgIG1vel9ndGtfaW5pdCgpOworICAgICAgICBtb3pfZ3Rr
X3VzZV90aGVtZV9wYXJ0cyhtX3RoZW1lUGFydHMpOworICAgIH0KICAgICArK21vekd0a1JlZkNv
dW50OwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTgyLDM2ICsxOTUsMTkgQEAgUmVuZGVyVGhl
bWVHdGs6On5SZW5kZXJUaGVtZUd0aygpCiAgICAgbV9zZWVrQmFja0J1dHRvbi5jbGVhcigpOwog
ICAgIG1fc2Vla0ZvcndhcmRCdXR0b24uY2xlYXIoKTsKIAotICAgIEdMaXN0KiB2YWx1ZXMgPSBn
X2hhc2hfdGFibGVfZ2V0X3ZhbHVlcyhtX3BhcnRzVGFibGUuZ2V0KCkpOwotICAgIGZvciAoZ3Vp
bnQgaSA9IDA7IGkgPCBnX2xpc3RfbGVuZ3RoKHZhbHVlcyk7IGkrKykKLSAgICAgICAgbW96X2d0
a19kZXN0cm95X3RoZW1lX3BhcnRzX3dpZGdldHMoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxH
dGtUaGVtZVBhcnRzKj4oZ19saXN0X250aF9kYXRhKHZhbHVlcywgaSkpKTsKLQogICAgIGd0a193
aWRnZXRfZGVzdHJveShtX2d0a1dpbmRvdyk7CiB9CiAKLUd0a1RoZW1lUGFydHMqIFJlbmRlclRo
ZW1lR3RrOjpwYXJ0c0ZvckRyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQgcGFydCwg
aW50JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpIGNvbnN0CiB7Ci0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICAvLyBBIG51bGwgZHJhd2FibGUgcmVwcmVzZW50cyB0
aGUgZGVmYXVsdCBzY3JlZW4gY29sb3JtYXAuCi0gICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwID0g
MDsKLSAgICBpZiAoIWRyYXdhYmxlKQotICAgICAgICBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0
X2RlZmF1bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNvbG9ybWFwID0gZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChkcmF3YWJsZSk7Ci0K
LSAgICBHdGtUaGVtZVBhcnRzKiBwYXJ0cyA9IHN0YXRpY19jYXN0PEd0a1RoZW1lUGFydHMqPihn
X2hhc2hfdGFibGVfbG9va3VwKG1fcGFydHNUYWJsZS5nZXQoKSwgY29sb3JtYXApKTsKLSAgICBp
ZiAoIXBhcnRzKSB7Ci0gICAgICAgIHBhcnRzID0gZ19uZXcwKEd0a1RoZW1lUGFydHMsIDEpOwot
ICAgICAgICBwYXJ0cy0+Y29sb3JtYXAgPSBjb2xvcm1hcDsKLSAgICAgICAgZ19oYXNoX3RhYmxl
X2luc2VydChtX3BhcnRzVGFibGUuZ2V0KCksIGNvbG9ybWFwLCBwYXJ0cyk7CisgICAgQVNTRVJU
KHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFkaW9QYXJ0KTsKKyAgICBpZiAocGFy
dCA9PSBDaGVja2JveFBhcnQpIHsKKyAgICAgICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmlj
cygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpOworICAgICAgICByZXR1cm47CiAg
ICAgfQotI2Vsc2UKLSAgICAvLyBGb3IgR1RLKyAzLjAgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gd29y
cnkgYWJvdXQgbWFpbnRhaW5pbmcgYSBzZXQgb2Ygd2lkZ2V0cyBwZXItY29sb3JtYXAuCi0gICAg
c3RhdGljIEd0a1RoZW1lUGFydHMqIHBhcnRzID0gZ19zbGljZV9uZXcwKEd0a1RoZW1lUGFydHMp
OwotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCiAKLSAgICByZXR1cm4gcGFydHM7CisgICAg
Ly8gUmFkaW9QYXJ0CisgICAgbW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6
ZSwgJmluZGljYXRvclNwYWNpbmcpOwogfQogCiBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UpCkBAIC0yODksNjkgKzI4NSw2IEBAIHN0YXRpYyB2b2lkIGFk
anVzdE1vemlsbGFTdHlsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSwKICAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoeXBhZGRpbmcgKyBi
b3R0b20sIEZpeGVkKSk7CiB9CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNb3ppbGxhR3RrV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBl
LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdl
dFN0YXRlKiB3aWRnZXRTdGF0ZSwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3Rpb24pCi17Ci0gICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBo
YXZlIHN1Y2NlZWRlZAotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBsYXRmb3JtUmVmUHRyPEdka0RyYXdhYmxlPiBkcmF3
YWJsZShjb250ZXh0LT5nZGtEcmF3YWJsZSgpKTsKLSAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0
LCBjbGlwUmVjdDsKLSAgICBpZiAoZHJhd2FibGUpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgICAgICBJbnRQb2ludCBwb3MgPSBjdG0ubWFw
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgcGFpbnRSZWN0ID0gSW50UmVjdChwb3Mu
eCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8v
IEludGVyc2VjdCB0aGUgY2Fpcm8gcmVjdGFuZ2xlIHdpdGggdGhlIHRhcmdldCB3aWRnZXQgcmVn
aW9uLiBUaGlzICB3aWxsCi0gICAgICAgIC8vIHByZXZlbnQgdGhlIHRoZW1lIGRyYXdpbmcgY29k
ZSBmcm9tIGRyYXdpbmcgaW50byByZWdpb25zIHRoYXQgY2Fpcm8gd2lsbAotICAgICAgICAvLyBj
bGlwIGFueXdheS4KLSAgICAgICAgZG91YmxlIGNsaXBYMSwgY2xpcFgyLCBjbGlwWTEsIGNsaXBZ
MjsKLSAgICAgICAgY2Fpcm9fY2xpcF9leHRlbnRzKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCAmY2xpcFgxLCAmY2xpcFkxLCAmY2xpcFgyLCAmY2xpcFkyKTsKLSAgICAgICAgSW50UG9pbnQg
Y2xpcFBvcyA9IGN0bS5tYXBQb2ludChJbnRQb2ludChjbGlwWDEsIGNsaXBZMSkpOwotCi0gICAg
ICAgIGNsaXBSZWN0LndpZHRoID0gY2xpcFgyIC0gY2xpcFgxOwotICAgICAgICBjbGlwUmVjdC5o
ZWlnaHQgPSBjbGlwWTIgLSBjbGlwWTE7Ci0gICAgICAgIGNsaXBSZWN0LnggPSBjbGlwUG9zLngo
KTsKLSAgICAgICAgY2xpcFJlY3QueSA9IGNsaXBQb3MueSgpOwotICAgICAgICBnZGtfcmVjdGFu
Z2xlX2ludGVyc2VjdCgmcGFpbnRSZWN0LCAmY2xpcFJlY3QsICZjbGlwUmVjdCk7Ci0KLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBJbiBzb21lIHNpdHVhdGlvbnMsIGxpa2UgZHVyaW5nIHByaW50
IHByZXZpZXdzLCB0aGlzIEdyYXBoaWNzQ29udGV4dCBpcyBub3QKLSAgICAgICAgLy8gYmFja2Vk
IGJ5IGEgR2RrRHJhd2FibGUuIEluIHRob3NlIHNpdHVhdGlvbnMsIHdlIHJlbmRlciBvbnRvIGEg
cGl4bWFwIGFuZCB0aGVuCi0gICAgICAgIC8vIGNvcHkgdGhlIHJlbmRlcmVkIGRhdGEgYmFjayB0
byB0aGUgR3JhcGhpY3NDb250ZXh0IHZpYSBDYWlyby4KLSAgICAgICAgZHJhd2FibGUgPSBhZG9w
dFBsYXRmb3JtUmVmKGdka19waXhtYXBfbmV3KDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSwgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ2RrX3Zpc3VhbF9nZXRfc3lzdGVtKCkpKSk7Ci0gICAg
ICAgIHBhaW50UmVjdCA9IGNsaXBSZWN0ID0gSW50UmVjdCgwLCAwLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIG1vel9ndGtfdXNlX3RoZW1lX3BhcnRzKHBhcnRz
Rm9yRHJhd2FibGUoZHJhd2FibGUuZ2V0KCkpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBtb3pfZ3Rr
X3dpZGdldF9wYWludCh0eXBlLCBkcmF3YWJsZS5nZXQoKSwgJnBhaW50UmVjdCwgJmNsaXBSZWN0
LCB3aWRnZXRTdGF0ZSwgZmxhZ3MsIHRleHREaXJlY3Rpb24pID09IE1PWl9HVEtfU1VDQ0VTUzsK
LQotICAgIC8vIElmIHRoZSBkcmF3aW5nIHdhcyBzdWNjZXNzZnVsIGFuZCB3ZSByZW5kZXJlZCBv
bnRvIGEgcGl4bWFwLCBjb3B5IHRoZQotICAgIC8vIHJlc3VsdHMgYmFjayB0byB0aGUgb3JpZ2lu
YWwgR3JhcGhpY3NDb250ZXh0LgotICAgIGlmIChzdWNjZXNzICYmICFjb250ZXh0LT5nZGtEcmF3
YWJsZSgpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwotICAgICAgICBjYWlyb19zYXZlKGNhaXJvQ29udGV4dCk7Ci0gICAgICAg
IGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWlyb0NvbnRleHQsIGRyYXdhYmxlLmdldCgp
LCByZWN0LngoKSwgcmVjdC55KCkpOwotICAgICAgICBjYWlyb19wYWludChjYWlyb0NvbnRleHQp
OwotICAgICAgICBjYWlyb19yZXN0b3JlKGNhaXJvQ29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuICFzdWNjZXNzOwotfQotI2Vsc2UKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxs
YUd0a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGlu
dCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50
aW5nIGlzIGRpc2FibGVkIHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAo
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBmYWxzZSA9PSBzdWNjZXNzLCBiZWNhdXNlIG9mIGF3ZXNvbWUuCi0gICAgR2RrUmVjdGFu
Z2xlIHBhaW50UmVjdCA9IHJlY3Q7Ci0gICAgcmV0dXJuIG1vel9ndGtfd2lkZ2V0X3BhaW50KHR5
cGUsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAmcGFpbnRSZWN0LCB3aWRnZXRTdGF0ZSwg
ZmxhZ3MsIHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLSNlbmRpZgotCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUg
dHlwZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzKQogewogICAgIC8vIFBhaW50aW5nIGlz
IGRpc2FibGVkIHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKQEAgLTM4Miw4ICszMTUs
OCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdl
dFR5cGUgdHlwZSwgUmVuZGVyT2JqZWN0KiByZQogICAgIGVsc2UKICAgICAgICAgd2lkZ2V0U3Rh
dGUuZGVwcmVzc2VkID0gZmFsc2U7CiAKLSAgICBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
OwotICAgIHJldHVybiBwYWludE1vemlsbGFHdGtXaWRnZXQodHlwZSwgY29udGV4dCwgcmVjdCwg
JndpZGdldFN0YXRlLCBmbGFncywgdGV4dERpcmVjdGlvbik7CisgICAgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworICAgIHJldHVybiAhd2lkZ2V0
Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwgJndpZGdldFN0YXRlLCBmbGFncywgZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCkBAIC0zOTQsMTkgKzMy
Nyw3IEBAIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRo
ZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUsIENvbnRyCiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBw
cm9iYWJseSBub3QgY29ycmVjdCB1c2Ugb2YgaW5kaWNhdG9yU2l6ZSBhbmQgaW5kaWNhdG9yU3Bh
Y2luZy4KICAgICBnaW50IGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmc7Ci0KLSAgICBz
d2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgaWYg
KG1vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JT
cGFjaW5nKSAhPSBNT1pfR1RLX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBpZiAobW96X2d0a19yYWRpb19n
ZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpICE9IE1PWl9HVEtf
U1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB0aGVtZS0+Z2V0SW5kaWNhdG9yTWV0cmlj
cyhhcHBlYXJhbmNlLCBpbmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nKTsKIAogICAgIC8v
IE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRvIDEzLCBidXQgR1RLKyB1c2VycyB0ZW5kIHRv
IGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCiAgICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZp
Z3VyYXRpb24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUg
Y29tcGF0aWJpbGl0eS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IDRl
MjRjOTcyYmEyNTk5ODE3MzBjYTJhMGY0ZTk1OWI1ZmQ5MjJjNTAuLjg2NGU5NDQwNThlMTVlOTE3
MzM1YjMwYzIyZjExZTc4NWZhZWViNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFN
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwogI2VuZGlmCiAKLSAgICBib29sIHBhaW50TW96aWxs
YUd0a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmLCBHdGtXaWRnZXRTdGF0ZSosIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiA9IEdU
S19URVhUX0RJUl9OT05FKTsKKyAgICB2b2lkIGdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBh
cnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKSBjb25zdDsKIAog
ICAgIEd0a1dpZGdldCogZ3RrU2Nyb2xsYmFyKCk7CiAKQEAgLTE1OCw3ICsxNTgsNiBAQCBwcml2
YXRlOgogICAgIEd0a0NvbnRhaW5lciogZ3RrQ29udGFpbmVyKCkgY29uc3Q7CiAKICAgICBib29s
IHBhaW50UmVuZGVyT2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzID0gMCk7Ci0gICAg
R3RrVGhlbWVQYXJ0cyogcGFydHNGb3JEcmF3YWJsZShHZGtEcmF3YWJsZSopIGNvbnN0OwogCiAg
ICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OwogICAgIG11dGFibGUgR3RrQ29udGFp
bmVyKiBtX2d0a0NvbnRhaW5lcjsKQEAgLTE4Miw5ICsxODEsMTEgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8SW1hZ2U+IG1fcGF1c2VCdXR0b247CiAgICAgUmVmUHRyPEltYWdlPiBtX3NlZWtCYWNr
QnV0dG9uOwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBQYWdl
KiBtX3BhZ2U7Ci0gICAgUGxhdGZvcm1SZWZQdHI8R0hhc2hUYWJsZT4gbV9wYXJ0c1RhYmxlOwot
CisgICAgR3RrVGhlbWVQYXJ0cyogbV90aGVtZVBhcnRzOworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworI2VuZGlmCisgICAg
ZnJpZW5kIGNsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKaW5kZXggMTliODk3Y2YwMmEzOTQ5NGVm
ZTIzY2VhOTM5ZjE0OTI0MjNkNGMyNy4uZjkyZGQyMGNhZTQwNjIyNjllMzQ2M2I1OGQwZmYzMzYw
ODA0YTZhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIldpZGdldFJl
bmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJndGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgogCkBAIC0yMTYsNyArMjE3LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIKICAg
ICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxi
YXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAogICAg
IEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyID8gTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUwgOiBNT1pf
R1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOwotICAgIHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+cGFpbnRNb3ppbGxh
R3RrV2lkZ2V0KHR5cGUsIGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAmc3RhdGUsIDApOwor
ICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Ny
b2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwg
JnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
CkBAIC0yMjQsNyArMjI2LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxi
YXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2wKICAgICAvLyBUaGlz
IGlzIHVudXNlZCBieSB0aGUgbW96X2d0a19zY3JvbGxlY2Rfd2luZG93X3BhaW50LgogICAgIEd0
a1dpZGdldFN0YXRlIHN0YXRlOwogICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBz
Y3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldChN
T1pfR1RLX1NDUk9MTEVEX1dJTkRPVywgY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QsICZzdGF0
ZSwgMCk7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQs
IGZ1bGxTY3JvbGxiYXJSZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdl
dChNT1pfR1RLX1NDUk9MTEVEX1dJTkRPVywgJnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMjQwLDcgKzI0Myw4IEBAIHZv
aWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBTY3JvbGxiYXIqIHNjcm9sbGJhCiAgICAgc3RhdGUuY3VycG9zID0gc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCk7CiAKICAgICBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9IHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1C
X1ZFUlRJQ0FMIDogTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDsKLSAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQo
KSktPnBhaW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmc3RhdGUsIDAp
OworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0
KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldCh0eXBlLCAmc3RhdGUsIDAp
OwogfQogCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCkBAIC0yNTYs
NiArMjYwLDkgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnMKIAogYm9vbCBTY3JvbGxiYXJUaGVt
ZUd0azo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogeworICAgIGlmIChncmFwaGlj
c0NvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRh
bWFnZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFy
dDsKIApAQCAtMzQ4LDcgKzM1NSw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiCiAgICAgICAg
IHN0YXRlLmluSG92ZXIgPSBGQUxTRTsKICAgICB9CiAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxs
YUd0a1dpZGdldChNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04sIGNvbnRleHQsIHJlY3QsICZzdGF0
ZSwgZmxhZ3MpOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250
ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChNT1pfR1RL
X1NDUk9MTEJBUl9CVVRUT04sICZzdGF0ZSwgZmxhZ3MpOwogfQogCiB2b2lkIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiB2aWV3LCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiODA2NTgyOTBl
NjE0N2NlN2IwYzVkOWQxOWI5YzA1NGIxMjg4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMCwwICsxLDU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiZ3Rr
ZHJhd2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDsKK2NsYXNzIFJlbmRlclRoZW1lR3RrOworCitjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHsKK3B1YmxpYzoKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOworICAgIGJv
b2wgcGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgR3RrV2lkZ2V0U3RhdGUq
LCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gPSBHVEtfVEVYVF9ESVJfTk9ORSk7CisKK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRS
ZWN0IG1fdGFyZ2V0UmVjdDsKKyAgICBHZGtSZWN0YW5nbGUgbV9wYWludFJlY3Q7CisgICAgSW50
U2l6ZSBtX2V4dHJhU3BhY2U7CisgICAgYm9vbCBtX2hhZEVycm9yOworCisjaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKyAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7CisjZWxzZQorICAgIGNhaXJv
X3QqIG1fdGFyZ2V0OworI2VuZGlmCisKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzgwNGMxZTI5YTJiNmJmODk4ODMxNDMyN2FkNmJhNDQ1Y2JkNzFlNQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNw
cApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlZlB0ckNhaXJvLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIEdka1BpeG1hcCogZ1NjcmF0Y2hCdWZmZXIgPSAwOworc3RhdGljIHZvaWQgcHVy
Z2VTY3JhdGNoQnVmZmVyKCkKK3sKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdf
b2JqZWN0X3VucmVmKGdTY3JhdGNoQnVmZmVyKTsKKyAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7Cit9
CisKKy8vIEZJWE1FOiBQZXJoYXBzIHdlIGNhbiBzaGFyZSBzb21lIG9mIHRoaXMgY29kZSB3aXRo
IHRoZSBDb250ZXh0U2hhZG93Q2Fpcm8uCisvLyBXaWRnZXQgcmVuZGVyaW5nIG5lZWRzIGEgc2Ny
YXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgaW50ZXJtZWRpYXRlCisvLyByZW5kZXIu
IEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkg
b3BlcmF0aW9uLAorLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGlj
YWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCitjbGFzcyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciA6
IHB1YmxpYyBUaW1lckJhc2UgeworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7
IHB1cmdlU2NyYXRjaEJ1ZmZlcigpOyB9Cit9Oworc3RhdGljIFB1cmdlU2NyYXRjaEJ1ZmZlclRp
bWVyIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNo
QnVmZmVyUHVyZ2UoKQoreworICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7CisgICAgcHVyZ2VT
Y3JhdGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDIpOworfQorCitzdGF0aWMgSW50U2l6ZSBn
ZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KFJlbmRlclRoZW1lR3RrKiB0aGVtZSkKK3sKKyAgICAvLyBD
aGVja2JveGVzIGFuZCBzY3JvbGxiYXIgdGh1bWJzIG9mdGVuIGRyYXcgb3V0c2lkZSB0aGVpciBi
b3VuZGFyaWVzLiBIZXJlIHdlIGZpZ3VyZSBvdXQKKyAgICAvLyB0aGUgbWF4aW11bSBhbW91bnQg
b2Ygc3BhY2Ugd2UgbmVlZCBmb3IgYW55IHR5cGUgb2Ygd2lkZ2V0IGFuZCB1c2UgdGhhdCB0byBp
bmNyZWFzZSB0aGUKKyAgICAvLyBzaXplIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciwgd2hpbGUgcHJl
c2VydmluZyB0aGUgZmluYWwgd2lkZ2V0IHBvc2l0aW9uLgorCisgICAgLy8gVGhlIGNoZWNrYm94
IGV4dHJhIHNwYWNlIGlzIGNhbGN1bGF0ZWQgYnkgbG9va2luZyBhdCB0aGUgd2lkZ2V0IHN0eWxl
LgorICAgIGludCBpbmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nOworICAgIHRoZW1lLT5n
ZXRJbmRpY2F0b3JNZXRyaWNzKENoZWNrYm94UGFydCwgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9y
U3BhY2luZyk7CisgICAgSW50U2l6ZSBleHRyYVNwYWNlKGluZGljYXRvclNwYWNpbmcsIGluZGlj
YXRvclNwYWNpbmcpOworCisgICAgLy8gU2Nyb2xsYmFyIHRodW1icyBuZWVkIGF0IGxlYXN0IGFu
IGV4dHJhIHBpeGVsIGFsb25nIHRoZWlyIG1vdmVtZW50IGF4aXMuCisgICAgcmV0dXJuIGV4dHJh
U3BhY2UuZXhwYW5kZWRUbyhJbnRTaXplKDEsIDEpKTsKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0
KGdyYXBoaWNzQ29udGV4dCkKKyAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQorICAgICwg
bV9oYWRFcnJvcihmYWxzZSkKK3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7
CisKKyAgICAvLyBGYWxsYmFjazogV2UgZmFpbGVkIHRvIGNyZWF0ZSBhbiBSR0JBIGNvbG9ybWFw
IGVhcmxpZXIsIHNvIHdlIGNhbm5vdCBwcm9wZXJseSBwYWludCAKKyAgICAvLyB0byBhIHRlbXBv
cmFyeSBzdXJmYWNlIGFuZCBwcmVzZXJ2ZSB0cmFuc3BhcmVuY3kuIFRvIGVuc3VyZSBkZWNlbnQg
d2lkZ2V0IHJlbmRlcmluZywganVzdAorICAgIC8vIHBhaW50IGRpcmVjdGx5IHRvIHRoZSB0YXJn
ZXQgZHJhd2FibGUuIFRoaXMgd2lsbCBub3QgcmVuZGVyIENTUyByb3RhdGlvbmFsIHRyYW5zZm9y
bXMgcHJvcGVybHkuCisgICAgaWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1h
cCAmJiBncmFwaGljc0NvbnRleHQtPmdka0RyYXdhYmxlKCkpIHsKKyAgICAgICAgbV9wYWludFJl
Y3QgPSBncmFwaGljc0NvbnRleHQtPmdldENUTSgpLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAg
ICAgIG1fdGFyZ2V0ID0gZ3JhcGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gU29tZSB3aWRnZXRzIHJlbmRlciBvdXRzaWRlIHRoZWly
IHJlY3RhbmdsZXMuIFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhpcy4KKyAgICBtX2V4dHJhU3Bh
Y2UgPSBnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KHRoZW1lKTsKKworICAgIC8vIE9mZnNldCB0aGUg
dGFyZ2V0IHJlY3RhbmdsZSBzbyB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyB3aXRoaW4gdGhlIGJv
dW5kYXJpZXMgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgIG1fcGFpbnRSZWN0ID0gSW50UmVj
dChJbnRQb2ludChtX2V4dHJhU3BhY2Uud2lkdGgoKSwgbV9leHRyYVNwYWNlLmhlaWdodCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90YXJnZXRSZWN0LnNpemUoKSk7
CisKKyAgICBpbnQgd2lkdGggPSBtX3RhcmdldFJlY3Qud2lkdGgoKSArIChtX2V4dHJhU3BhY2Uu
d2lkdGgoKSAqIDIpOworICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAo
bV9leHRyYVNwYWNlLmhlaWdodCgpICogMik7CisgICAgaW50IHNjcmF0Y2hXaWR0aCA9IDA7Cisg
ICAgaW50IHNjcmF0Y2hIZWlnaHQgPSAwOworICAgIGlmIChnU2NyYXRjaEJ1ZmZlcikKKyAgICAg
ICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGdTY3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAm
c2NyYXRjaEhlaWdodCk7CisKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUg
YnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAgaWYgKCFn
U2NyYXRjaEJ1ZmZlciB8fCBzY3JhdGNoV2lkdGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwg
aGVpZ2h0KSB7CisgICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlcigpOworICAgICAgICAvLyBSb3Vu
ZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBm
b3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4KKyAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+
PiA1KSkgPDwgNTsKKyAgICAgICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1Owor
CisgICAgICAgIGdTY3JhdGNoQnVmZmVyID0gZ2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdo
dCwgZ2RrX2NvbG9ybWFwX2dldF92aXN1YWwodGhlbWUtPm1fdGhlbWVQYXJ0cy0+Y29sb3JtYXAp
LT5kZXB0aCk7CisgICAgICAgIGdka19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1NjcmF0Y2hCdWZm
ZXIsIHRoZW1lLT5tX3RoZW1lUGFydHMtPmNvbG9ybWFwKTsKKyAgICB9CisgICAgbV90YXJnZXQg
PSBnU2NyYXRjaEJ1ZmZlcjsKKworICAgIC8vIENsZWFyIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAg
ICBQbGF0Zm9ybVJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9IGFkb3B0UGxh
dGZvcm1SZWYoZ2RrX2NhaXJvX2NyZWF0ZShnU2NyYXRjaEJ1ZmZlcikpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xF
QVIpOworICAgIGNhaXJvX3BhaW50KHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpKTsKK30KKwor
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQoKQoreworICAg
IC8vIFdlIGRvIG5vdCBuZWVkIHRvIGJsaXQgYmFjayB0byB0aGUgdGFyZ2V0IGluIHRoZSBmYWxs
YmFjayBjYXNlLiBTZWUgYWJvdmUuCisgICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkp
OworICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgbV9ncmFw
aGljc0NvbnRleHQtPmdka0RyYXdhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERv
bid0IHBhaW50IHRoZSByZXN1bHRzIGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorICAgIGlm
IChtX2hhZEVycm9yKSB7CisgICAgICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGl0
IGlzIG5lY2Vzc2FyeSB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4KKyAgICBj
YWlyb190KiBjYWlyb0NvbnRleHQgPSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShj
YWlyb19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOworCisgICAgLy8gVGhlIG9yaWdpbiBvZiB0
aGUgYmxpdCBpcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IHJlY3RhbmdsZSBhZGp1c3RlZCBmb3IgYW55
IGV4dHJhIHNwYWNlLgorICAgIEludFBvaW50IHRhcmdldE9yaWdpbihtX3RhcmdldFJlY3QueCgp
IC0gbV9leHRyYVNwYWNlLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFy
Z2V0UmVjdC55KCkgLSBtX2V4dHJhU3BhY2UuaGVpZ2h0KCkpOworICAgIGdka19jYWlyb19zZXRf
c291cmNlX3BpeG1hcChjYWlyb0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCB0YXJnZXRPcmlnaW4u
eCgpLCB0YXJnZXRPcmlnaW4ueSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0
LCB0YXJnZXRPcmlnaW4ueCgpLCB0YXJnZXRPcmlnaW4ueSgpLAorICAgICAgICBtX3RhcmdldFJl
Y3Qud2lkdGgoKSArIChtX2V4dHJhU3BhY2Uud2lkdGgoKSAqIDIpLCBtX3RhcmdldFJlY3QuaGVp
Z2h0KCkgKyAobV9leHRyYVNwYWNlLmhlaWdodCgpICogMikpOworICAgIGNhaXJvX2ZpbGwoY2Fp
cm9Db250ZXh0KTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNT
b3VyY2UuZ2V0KCkpOworICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK2Jv
b2wgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lk
Z2V0VHlwZSB0eXBlLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGludCBmbGFncywgR3RrVGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQoreworICAgIG1faGFkRXJyb3IgPSBtb3pfZ3RrX3dpZGdl
dF9wYWludCh0eXBlLCBtX3RhcmdldCwgJm1fcGFpbnRSZWN0LCAmbV9wYWludFJlY3QsCisgICAg
ICAgIHN0YXRlLCBmbGFncywgdGV4dERpcmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOworICAg
IHJldHVybiAhbV9oYWRFcnJvcjsKK30KKworfQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9O
XzIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHRHdGszLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRH
dGszLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42OTNjNDBlMWFjYjlhYjEwYzk4YjMyNWFkNjMyNmEzNzgwZTNj
OGM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dEd0azMuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdD
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0KQorICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAg
ICwgbV90YXJnZXRSZWN0KHRhcmdldFJlY3QpCisgICAgLCBtX3BhaW50UmVjdCh0YXJnZXRSZWN0
KQorICAgICwgbV90YXJnZXQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCisgICAgLCBtX2hh
ZEVycm9yKGZhbHNlKQoreworfQorCit+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCgpCit7Cit9CisKK2Jvb2wgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6cGFp
bnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHdGtXaWRnZXRTdGF0ZSog
c3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQoreworICAg
IG1faGFkRXJyb3IgPSBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBtX3RhcmdldCwgJm1fcGFp
bnRSZWN0LCBzdGF0ZSwgZmxhZ3MsIHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsK
KyAgICByZXR1cm4gIW1faGFkRXJyb3I7Cit9CisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9O
XzIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71183</attachid>
            <date>2010-10-19 10:44:35 -0700</date>
            <delta_ts>2010-10-29 12:15:00 -0700</delta_ts>
            <desc>Patch updated with Alex&apos;s suggestions</desc>
            <filename>bug-40139-20101019104435.patch</filename>
            <type>text/plain</type>
            <size>33336</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmYmFlZmFlZmY2ZWFiNGI3Zjk4ZTY1ZTFjZTA5YzIzNGFjNzU1NDdiLi44Y2FhYmQ3
NWFkM2MyNWEyNjEyZGEyZGFiOWI5NzU5YmZiNGM4NDE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTAtMTkgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDkyNGUxZjgwNDIxNWM2ZTcw
YjExZDczNTJjOTc1ZTUxNzM4YmY1ZGUuLmU1NDFiODUzZGUyZTFlZWM3NjQ1OTJkYzU2OWJkMTUz
ZDM4ZTI5ODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NDU5LDExICs1NDU5LDYg
QEAgZmFzdC9kb20vR2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLmh0bWwKIGZhc3QvZG9t
L0dlb2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1mcmFtZS1hbHJlYWR5Lmh0bWwKIGZhc3QvZG9tL0dl
b2xvY2F0aW9uL2Rpc2Nvbm5lY3RlZC1mcmFtZS1wZXJtaXNzaW9uLWRlbmllZC5odG1sCiAKLSMg
R1RLKyB0aGVtZS1yZW5kZXJlZCB3aWRnZXRzIGRvIG5vdCBzdXBwb3J0IENTUyB0cmFuc2Zvcm1z
Ci0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDEzOQotZmFzdC9m
b3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQuaHRtbAotZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3Jt
ZWQuaHRtbAotCiAjIFNvbWUgaW5wdXQgdHlwZT1yYW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2Yg
dGhlIHNpemUgCiAjIG9mIHRoZSBzbGlkZXIgdGh1bWIgaW4gR1RLKyB0aGVtZXMuCiBmYXN0L2Zv
cm1zL3NsaWRlci1tb3VzZS1ldmVudHMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1lZC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RjZTI1OWIxMjZhZjExMGIyNmE3NjY5ZTMzNzY2NmJhMWYy
OWQ1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Zv
cm1zL3NsaWRlci10cmFuc2Zvcm1lZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyIEBACisKK0ZB
SUw6IGV4cGVjdGVkIHNsaWRlciB2YWx1ZSAzOSwgZ290IDM4CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQ1MmQ3ZDIwMjk1ODYxMmQxNGZl
ODM3Zjg2ZmU3NTNlZGFlYTNjYzQuLmE0Y2JlMTNiNzBiMDI5YTdiMzllYzE3YmQ0NzIyYzhjZDA5
OTdjZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTAtMTAtMTUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIFdpZGdldHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkK
KworICAgICAgICBJbnN0ZWFkIG9mIHJlbmRlcmluZyBkaXJlY3RseSBvbnRvIHRoZSB0YXJnZXQg
ZHJhd2FibGUgd2hlbiByZW5kZXJpbmcKKyAgICAgICAgZm9ybSBjb250cm9scyBvbiBHVEsrIDIu
MCwgcmVuZGVyIG9udG8gYW4gaW50ZXJtZWRpYXRlIHN1cmZhY2UgYW5kIHVzZQorICAgICAgICBj
YWlybyB0byBibGl0IHRoZSByZXN1bHQgYmFjayB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuIFRoaXMg
aGFzIHR3bworICAgICAgICBiZW5lZml0cy4gVGhlIGZpcnN0IGlzIHRoYXQgaXQgYWx3YXlzIGhv
bm9ycyB0aGUgY3VycmVudCBDYWlybworICAgICAgICB0cmFuc2Zvcm1hdGlvbi4gVGhlIHNlY29u
ZCBpcyB0aGF0IHNpbmNlIHRoZSBpbnRlcm1lZGlhdGUgZHJhd2FibGUgaXMKKyAgICAgICAgYWx3
YXlzIGEgMzItYml0IEdka1BpeG1hcCwgd2UgZG8gbm90IGhhdmUgdG8gaGF2ZSBhIHNldCBvZiB3
aWRnZXRzCisgICAgICAgIHBlci1jb2xvcm1hcCBhbnkgbG9uZ2VyLgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIGFsc28gYmVnaW5zIHRoZSBhYnN0cmFjdGlvbiBvZiB3aWRnZXQgcmVuZGVyaW5nIHNv
IHRoYXQgR1RLKworICAgICAgICAyIGFuZCBHVEsrIDMgY2FuIHVzZSB0aGUgc2FtZSBjb2RlIHBh
dGguIFRoZSBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpbGwKKyAgICAgICAgZXZlbnR1YWxseSBo
aWRlIGFsbCB2ZXJzaW9uIGRpZmZlcmVuY2VzIGZyb20gUmVuZGVyVGhlbWVHdGssIHdoaWNoIGNh
bgorICAgICAgICBqdXN0IGZvY3VzIG9uIGludGVycHJldGluZyB0aGUgR3RrU3R5bGUgcHJvcGVy
dGllcy4gCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFdpZGdldFJlbmRlcmluQ29u
dGV4dCBzb3VyY2UgZmlsZXMgdG8gdGhlIHNvdXJjZXMgbGlzdC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcDoKKyAgICAgICAgKFdURjo6
cmVmUGxhdGZvcm1QdHIpOiBBZGQgYSBzcGVjaWFsaXphdGlvbiBmb3IgQ2Fpcm8gcGF0dGVybnMu
CisgICAgICAgIChXVEY6OmRlcmVmUGxhdGZvcm1QdHIpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmg6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGspOiBObyBsb25nZXIga2VlcCBhIHNldCBvZgor
ICAgICAgICB3aWRnZXRzIHBlci1jb2xvcm1hcCBmb3IgR1RLKywgaW5zdGVhZCBqdXN0IGRldGVy
bWluZSBpZiB3ZSBjYW4gdXNlIFJHQkEKKyAgICAgICAgY29sb3JtYXBzIGFuZCBnbyBmcm9tIHRo
ZXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0ayk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmdldEluZGljYXRvck1l
dHJpY3MpOiBQdXQgdGhlIGxvZ2ljIGZvcgorICAgICAgICBnZXR0aW5nIHRvZ2dsZSBidXR0b24g
aW5kaWNhdG9yIG1ldHJpY3MgaW50byB0aGlzIGhlbHBlci4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdCk6IE5vdyB1c2VzCisgICAgICAgIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQgdG8gZG8gd2lkZ2V0IHJlbmRlcmluZy4KKyAgICAgICAgKFdlYkNv
cmU6OnNldFRvZ2dsZVNpemUpOiBVc2UgdGhlIG5ldyBnZXRJbmRpY2F0b3JNZXRyaWNzIGhlbHBl
ci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaDogQWRkZWQgYSBtZW1i
ZXIgdG8gdHJhY2sgd2hldGhlciBvciBub3QKKyAgICAgICAgICB0aGUgd2lkZ2V0cyBhcmUgdXNp
bmcgYSBSR0JBIGNvbG9ybWFwLiBBbHNvIHJlbW92ZSBhIGRlZnVuY3QgUGFnZSoKKyAgICAgICAg
ICBtZW1iZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcDog
U3dpdGNoIGFsbCB3aWRnZXQgZHJhd2luZworICAgICAgICBvcGVyYXRpb25zIHRvIHVzZSBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50VHJhY2tCYWNrZ3JvdW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnB1cmdlU2NyYXRjaEJ1ZmZlcik6IEFkZGVkLCB0aGlzIGlzIHNpbWlsYXIg
dG8gdGhlIHNjcmF0Y2gKKyAgICAgICAgYnVmZmVyIGltcGxlbWVudGF0aW9uIGZyb20gQ29udGV4
dFNoYWRvdy4KKyAgICAgICAgKFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOjpmaXJl
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldEV4dHJhU3BhY2VGb3JXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6
fldpZGdldFJlbmRlcmluZ0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldCk6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQ6
OldpZGdldFJlbmRlcmluZ0NvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldCk6IEFkZGVkLgorCiAyMDEwLTEw
LTE5ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4gQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNzJlYWE5MDE4NTdiOTRmNzM2ZTg2Njk4
NDExOTA5NGI0YmQxMWFmMC4uMDU5NWYxNDIyNGNkZWNhYTE1OWYwNjFlYWI5OWI0NjkxMzFkY2Y1
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC0zNTYxLDYgKzM1NjEsOSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1doZWVsRXZlbnRHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRHdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0R3RrMi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHRHdGszLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29k
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VS
ZWFkZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1SZWZQdHJDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwCmluZGV4IGQyODk1ODVkODlhM2JiMDk4MTc0YTlkODli
YjM3OTRiZGEyYzE3NDkuLjI4NTVhZWYxMzI3YTMyNjkxMDJlMTJmMTkzYjU2ODliMDU2YTAzYmMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQ
dHJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVJlZlB0ckNhaXJvLmNwcApAQCAtNTQsNiArNTQsMjAgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZlBsYXRmb3JtUHRyKGNhaXJvX3N1cmZhY2VfdCogcHRyKQogICAgICAgICBjYWlyb19zdXJmYWNl
X2Rlc3Ryb3kocHRyKTsKIH0KIAordGVtcGxhdGUgPD4gY2Fpcm9fcGF0dGVybl90KiByZWZQbGF0
Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBj
YWlyb19wYXR0ZXJuX3JlZmVyZW5jZShwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBs
YXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocHRyKTsKK30KKworCiB0
ZW1wbGF0ZSA8PiBjYWlyb19mb250X2ZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fZm9udF9m
YWNlX3QqIHB0cikKIHsKICAgICBpZiAocHRyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaAppbmRleCAzYjcyMGM2MjE4NTRi
MTI1MmRmNWFhMGIwMWY3YjA1NzMyMzAxYmZiLi5iYThlY2YyMDhlMzYzMzJiYTYxNGFjMjJhNjM2
ZjBjZDNiNDBiZTY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaApAQCAtMjQsNiArMjQsNyBAQAogCiB0eXBlZGVmIHN0
cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJv
X3N1cmZhY2VfdDsKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5f
dDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CiB0
eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc2NhbGVkX2ZvbnQgY2Fpcm9fc2NhbGVkX2ZvbnRfdDsKIApA
QCAtMzksNiArNDAsOSBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9f
dCogcHRyKTsKIHRlbXBsYXRlIDw+IGNhaXJvX3N1cmZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fp
cm9fc3VyZmFjZV90KiBwdHIpOwogdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNh
aXJvX3N1cmZhY2VfdCogcHRyKTsKIAordGVtcGxhdGUgPD4gY2Fpcm9fcGF0dGVybl90KiByZWZQ
bGF0Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0
Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqKTsKKwogdGVtcGxhdGUgPD4gY2Fpcm9fZm9udF9mYWNl
X3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX2ZvbnRfZmFjZV90Kik7CiB0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fZm9udF9mYWNlX3QqKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4IGI0MGJlNWI3NmRhYWYzYjU2YzA2NGJlMjg4YTgx
MzIxNWQyMmY5NGQuLjlmYjc1NzZlYTBmODJmMTNiM2MyMmY5OTVmNGQ2YTY3ODQ5NjQ5MmUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTMsNiArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNo
ZWV0cy5oIgorI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJn
dGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4K
QEAgLTE1MSwxNSArMTUzLDI2IEBAIFJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCiAg
ICAgLCBtX3BhdXNlQnV0dG9uKDApCiAgICAgLCBtX3NlZWtCYWNrQnV0dG9uKDApCiAgICAgLCBt
X3NlZWtGb3J3YXJkQnV0dG9uKDApCi0gICAgLCBtX3BhcnRzVGFibGUoYWRvcHRQbGF0Zm9ybVJl
ZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoMCwgMCwgMCwgZ19mcmVlKSkpCisgICAgLCBtX3RoZW1l
UGFydHMoZ19uZXcwKEd0a1RoZW1lUGFydHMsIDEpKQorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
CisgICAgLCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwKHRydWUpCisjZW5kaWYKIHsKLSAg
ICBpZiAoIW1vekd0a1JlZkNvdW50KSB7Ci0gICAgICAgIG1vel9ndGtfaW5pdCgpOwogCi0gICAg
ICAgIC8vIFVzZSB0aGUgdGhlbWUgcGFydHMgZm9yIHRoZSBkZWZhdWx0IGRyYXdhYmxlLgotICAg
ICAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhwYXJ0c0ZvckRyYXdhYmxlKDApKTsKKyNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0NvbG9ybWFwKiBjb2xvcm1hcCA9IGdka19zY3Jl
ZW5fZ2V0X3JnYmFfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAo
IWNvbG9ybWFwKSB7CisgICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBmYWxz
ZTsKKyAgICAgICAgY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CiAgICAgfQorICAgIG1fdGhlbWVQYXJ0cy0+Y29sb3Jt
YXAgPSBjb2xvcm1hcDsKKyNlbmRpZgogCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgTW96aWxsYSB0
aGVtZSBkcmF3aW5nIGNvZGUuCisgICAgaWYgKCFtb3pHdGtSZWZDb3VudCkgeworICAgICAgICBt
b3pfZ3RrX2luaXQoKTsKKyAgICAgICAgbW96X2d0a191c2VfdGhlbWVfcGFydHMobV90aGVtZVBh
cnRzKTsKKyAgICB9CiAgICAgKyttb3pHdGtSZWZDb3VudDsKIAogI2lmIEVOQUJMRShWSURFTykK
QEAgLTE4MiwzNiArMTk1LDE5IEBAIFJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQog
ICAgIG1fc2Vla0JhY2tCdXR0b24uY2xlYXIoKTsKICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLmNs
ZWFyKCk7CiAKLSAgICBHTGlzdCogdmFsdWVzID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMobV9w
YXJ0c1RhYmxlLmdldCgpKTsKLSAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgZ19saXN0X2xlbmd0
aCh2YWx1ZXMpOyBpKyspCi0gICAgICAgIG1vel9ndGtfZGVzdHJveV90aGVtZV9wYXJ0c193aWRn
ZXRzKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrVGhlbWVQYXJ0cyo+KGdfbGlzdF9udGhf
ZGF0YSh2YWx1ZXMsIGkpKSk7Ci0KICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9ndGtXaW5kb3cp
OwogfQogCi1HdGtUaGVtZVBhcnRzKiBSZW5kZXJUaGVtZUd0azo6cGFydHNGb3JEcmF3YWJsZShH
ZGtEcmF3YWJsZSogZHJhd2FibGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRJbmRp
Y2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0IHBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBp
bmRpY2F0b3JTcGFjaW5nKSBjb25zdAogewotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAg
Ly8gQSBudWxsIGRyYXdhYmxlIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgc2NyZWVuIGNvbG9ybWFw
LgotICAgIEdka0NvbG9ybWFwKiBjb2xvcm1hcCA9IDA7Ci0gICAgaWYgKCFkcmF3YWJsZSkKLSAg
ICAgICAgY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3Jl
ZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAgZWxzZQotICAgICAgICBjb2xvcm1hcCA9IGdka19kcmF3
YWJsZV9nZXRfY29sb3JtYXAoZHJhd2FibGUpOwotCi0gICAgR3RrVGhlbWVQYXJ0cyogcGFydHMg
PSBzdGF0aWNfY2FzdDxHdGtUaGVtZVBhcnRzKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX3BhcnRz
VGFibGUuZ2V0KCksIGNvbG9ybWFwKSk7Ci0gICAgaWYgKCFwYXJ0cykgewotICAgICAgICBwYXJ0
cyA9IGdfbmV3MChHdGtUaGVtZVBhcnRzLCAxKTsKLSAgICAgICAgcGFydHMtPmNvbG9ybWFwID0g
Y29sb3JtYXA7Ci0gICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9wYXJ0c1RhYmxlLmdldCgp
LCBjb2xvcm1hcCwgcGFydHMpOworICAgIEFTU0VSVChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBw
YXJ0ID09IFJhZGlvUGFydCk7CisgICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7CisgICAg
ICAgIG1vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0
b3JTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSNlbHNlCi0gICAgLy8gRm9yIEdU
SysgMy4wIHdlIG5vIGxvbmdlciBoYXZlIHRvIHdvcnJ5IGFib3V0IG1haW50YWluaW5nIGEgc2V0
IG9mIHdpZGdldHMgcGVyLWNvbG9ybWFwLgotICAgIHN0YXRpYyBHdGtUaGVtZVBhcnRzKiBwYXJ0
cyA9IGdfc2xpY2VfbmV3MChHdGtUaGVtZVBhcnRzKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgogCi0gICAgcmV0dXJuIHBhcnRzOworICAgIC8vIFJhZGlvUGFydAorICAgIG1vel9ndGtf
cmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKIH0K
IAogc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQpAQCAt
Mjg5LDY5ICsyODUsNiBAQCBzdGF0aWMgdm9pZCBhZGp1c3RNb3ppbGxhU3R5bGUoY29uc3QgUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHlwYWRkaW5nICsgYm90dG9tLCBGaXhlZCkpOwogfQogCi0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0
a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBm
bGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50aW5n
IGlzIGRpc2FibGVkIHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQ
bGF0Zm9ybVJlZlB0cjxHZGtEcmF3YWJsZT4gZHJhd2FibGUoY29udGV4dC0+Z2RrRHJhd2FibGUo
KSk7Ci0gICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCwgY2xpcFJlY3Q7Ci0gICAgaWYgKGRyYXdh
YmxlKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsK
LSAgICAgICAgSW50UG9pbnQgcG9zID0gY3RtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgICAgIHBhaW50UmVjdCA9IEludFJlY3QocG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIGNhaXJvIHJlY3Rh
bmdsZSB3aXRoIHRoZSB0YXJnZXQgd2lkZ2V0IHJlZ2lvbi4gVGhpcyAgd2lsbAotICAgICAgICAv
LyBwcmV2ZW50IHRoZSB0aGVtZSBkcmF3aW5nIGNvZGUgZnJvbSBkcmF3aW5nIGludG8gcmVnaW9u
cyB0aGF0IGNhaXJvIHdpbGwKLSAgICAgICAgLy8gY2xpcCBhbnl3YXkuCi0gICAgICAgIGRvdWJs
ZSBjbGlwWDEsIGNsaXBYMiwgY2xpcFkxLCBjbGlwWTI7Ci0gICAgICAgIGNhaXJvX2NsaXBfZXh0
ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJmNsaXBYMSwgJmNsaXBZMSwgJmNsaXBY
MiwgJmNsaXBZMik7Ci0gICAgICAgIEludFBvaW50IGNsaXBQb3MgPSBjdG0ubWFwUG9pbnQoSW50
UG9pbnQoY2xpcFgxLCBjbGlwWTEpKTsKLQotICAgICAgICBjbGlwUmVjdC53aWR0aCA9IGNsaXBY
MiAtIGNsaXBYMTsKLSAgICAgICAgY2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFkyIC0gY2xpcFkxOwot
ICAgICAgICBjbGlwUmVjdC54ID0gY2xpcFBvcy54KCk7Ci0gICAgICAgIGNsaXBSZWN0LnkgPSBj
bGlwUG9zLnkoKTsKLSAgICAgICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJnBhaW50UmVjdCwg
JmNsaXBSZWN0LCAmY2xpcFJlY3QpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW4gc29t
ZSBzaXR1YXRpb25zLCBsaWtlIGR1cmluZyBwcmludCBwcmV2aWV3cywgdGhpcyBHcmFwaGljc0Nv
bnRleHQgaXMgbm90Ci0gICAgICAgIC8vIGJhY2tlZCBieSBhIEdka0RyYXdhYmxlLiBJbiB0aG9z
ZSBzaXR1YXRpb25zLCB3ZSByZW5kZXIgb250byBhIHBpeG1hcCBhbmQgdGhlbgotICAgICAgICAv
LyBjb3B5IHRoZSByZW5kZXJlZCBkYXRhIGJhY2sgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCB2aWEg
Q2Fpcm8uCi0gICAgICAgIGRyYXdhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfcGl4bWFwX25l
dygwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdk
a192aXN1YWxfZ2V0X3N5c3RlbSgpKSkpOwotICAgICAgICBwYWludFJlY3QgPSBjbGlwUmVjdCA9
IEludFJlY3QoMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhwYXJ0c0ZvckRyYXdhYmxlKGRyYXdhYmxlLmdldCgp
KSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgZHJhd2Fi
bGUuZ2V0KCksICZwYWludFJlY3QsICZjbGlwUmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0
RGlyZWN0aW9uKSA9PSBNT1pfR1RLX1NVQ0NFU1M7Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZyB3
YXMgc3VjY2Vzc2Z1bCBhbmQgd2UgcmVuZGVyZWQgb250byBhIHBpeG1hcCwgY29weSB0aGUKLSAg
ICAvLyByZXN1bHRzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIEdyYXBoaWNzQ29udGV4dC4KLSAgICBp
ZiAoc3VjY2VzcyAmJiAhY29udGV4dC0+Z2RrRHJhd2FibGUoKSkgewotICAgICAgICBjYWlyb190
KiBjYWlyb0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgY2Fp
cm9fc2F2ZShjYWlyb0NvbnRleHQpOwotICAgICAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXht
YXAoY2Fpcm9Db250ZXh0LCBkcmF3YWJsZS5nZXQoKSwgcmVjdC54KCksIHJlY3QueSgpKTsKLSAg
ICAgICAgY2Fpcm9fcGFpbnQoY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShj
YWlyb0NvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiAhc3VjY2VzczsKLX0KLSNlbHNlCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRU
eXBlIHR5cGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0U3RhdGUqIHdpZGdldFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikKLXsKLSAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNs
YWltIHRvIGhhdmUgc3VjY2VlZGVkCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gZmFsc2UgPT0gc3VjY2VzcywgYmVj
YXVzZSBvZiBhd2Vzb21lLgotICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSByZWN0OwotICAg
IHJldHVybiBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgJnBhaW50UmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBN
T1pfR1RLX1NVQ0NFU1M7Ci19Ci0jZW5kaWYKLQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
ZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGlu
dCBmbGFncykKIHsKICAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRv
IGhhdmUgc3VjY2VlZGVkCkBAIC0zODIsOCArMzE1LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCog
cmUKICAgICBlbHNlCiAgICAgICAgIHdpZGdldFN0YXRlLmRlcHJlc3NlZCA9IGZhbHNlOwogCi0g
ICAgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZ3RrVGV4dERpcmVjdGlvbihyZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLSAgICByZXR1cm4gcGFpbnRNb3ppbGxh
R3RrV2lkZ2V0KHR5cGUsIGNvbnRleHQsIHJlY3QsICZ3aWRnZXRTdGF0ZSwgZmxhZ3MsIHRleHRE
aXJlY3Rpb24pOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250
ZXh0LCByZWN0KTsKKyAgICByZXR1cm4gIXdpZGdldENvbnRleHQucGFpbnRNb3ppbGxhV2lkZ2V0
KHR5cGUsICZ3aWRnZXRTdGF0ZSwgZmxhZ3MsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXpl
KGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBDb250cm9s
UGFydCBhcHBlYXJhbmNlKQpAQCAtMzk0LDE5ICszMjcsNyBAQCBzdGF0aWMgdm9pZCBzZXRUb2dn
bGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBD
b250cgogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IGNvcnJlY3QgdXNlIG9m
IGluZGljYXRvclNpemUgYW5kIGluZGljYXRvclNwYWNpbmcuCiAgICAgZ2ludCBpbmRpY2F0b3JT
aXplLCBpbmRpY2F0b3JTcGFjaW5nOwotCi0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAg
Y2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIGlmIChtb3pfZ3RrX2NoZWNrYm94X2dldF9tZXRy
aWNzKCZpbmRpY2F0b3JTaXplLCAmaW5kaWNhdG9yU3BhY2luZykgIT0gTU9aX0dUS19TVUNDRVNT
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlvUGFy
dDoKLSAgICAgICAgaWYgKG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUs
ICZpbmRpY2F0b3JTcGFjaW5nKSAhPSBNT1pfR1RLX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgdGhlbWUtPmdldEluZGljYXRvck1ldHJpY3MoYXBwZWFyYW5jZSwgaW5kaWNhdG9yU2l6
ZSwgaW5kaWNhdG9yU3BhY2luZyk7CiAKICAgICAvLyBPdGhlciBwb3J0cyBoYXJkLWNvZGUgdGhp
cyB0byAxMywgYnV0IEdUSysgdXNlcnMgdGVuZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgog
ICAgIC8vIEl0IGNvdWxkIGJlIG1hZGUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3Ro
ZXIgdGhhbiAxMyBhY3R1YWxseSBicmVhayBzaXRlIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuaAppbmRleCA0ZTI0Yzk3MmJhMjU5OTgxNzMwY2EyYTBmNGU5
NTliNWZkOTIyYzUwLi44NjRlOTQ0MDU4ZTE1ZTkxNzMzNWIzMGMyMmYxMWU3ODVmYWVlYjczIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsK
ICNlbmRpZgogCi0gICAgYm9vbCBwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRU
eXBlLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0U3RhdGUqLCBp
bnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gPSBHVEtfVEVYVF9ESVJfTk9ORSk7CisgICAgdm9p
ZCBnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGlu
dCYgaW5kaWNhdG9yU3BhY2luZykgY29uc3Q7CiAKICAgICBHdGtXaWRnZXQqIGd0a1Njcm9sbGJh
cigpOwogCkBAIC0xNTgsNyArMTU4LDYgQEAgcHJpdmF0ZToKICAgICBHdGtDb250YWluZXIqIGd0
a0NvbnRhaW5lcigpIGNvbnN0OwogCiAgICAgYm9vbCBwYWludFJlbmRlck9iamVjdChHdGtUaGVt
ZVdpZGdldFR5cGUsIFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGludCBmbGFncyA9IDApOwotICAgIEd0a1RoZW1lUGFydHMqIHBhcnRzRm9yRHJh
d2FibGUoR2RrRHJhd2FibGUqKSBjb25zdDsKIAogICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a1dpbmRvdzsKICAgICBtdXRhYmxlIEd0a0NvbnRhaW5lciogbV9ndGtDb250YWluZXI7CkBAIC0x
ODIsOSArMTgxLDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEltYWdlPiBtX3BhdXNlQnV0dG9u
OwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVrQmFja0J1dHRvbjsKICAgICBSZWZQdHI8SW1hZ2U+
IG1fc2Vla0ZvcndhcmRCdXR0b247Ci0gICAgUGFnZSogbV9wYWdlOwotICAgIFBsYXRmb3JtUmVm
UHRyPEdIYXNoVGFibGU+IG1fcGFydHNUYWJsZTsKLQorICAgIEd0a1RoZW1lUGFydHMqIG1fdGhl
bWVQYXJ0czsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGJvb2wgbV90aGVtZVBhcnRz
SGF2ZVJHQkFDb2xvcm1hcDsKKyNlbmRpZgorICAgIGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwCmluZGV4IDE5Yjg5N2NmMDJhMzk0OTRlZmUyM2NlYTkzOWYxNDkyNDIzZDRjMjcuLmY5
MmRkMjBjYWU0MDYyMjY5ZTM0NjNiNThkMGZmMzM2MDgwNGE2YTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZUd0ay5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiZ3RrZHJhd2luZy5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApAQCAtMjE2LDcgKzIxNyw4
IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyCiAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgo
KSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAKICAgICBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtf
U0NST0xMQkFSX1RSQUNLX1ZFUlRJQ0FMIDogTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfSE9SSVpP
TlRBTDsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCBm
dWxsU2Nyb2xsYmFyUmVjdCwgJnN0YXRlLCAwKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QpOworICAgIHdpZGdldENv
bnRleHQucGFpbnRNb3ppbGxhV2lkZ2V0KHR5cGUsICZzdGF0ZSwgMCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQpAQCAtMjI0LDcgKzIyNiw4IEBAIHZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sCiAgICAgLy8gVGhpcyBpcyB1bnVzZWQgYnkgdGhlIG1vel9ndGtf
c2Nyb2xsZWNkX3dpbmRvd19wYWludC4KICAgICBHdGtXaWRnZXRTdGF0ZSBzdGF0ZTsKICAgICBJ
bnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xs
YmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCku
Z2V0KCkpLT5wYWludE1vemlsbGFHdGtXaWRnZXQoTU9aX0dUS19TQ1JPTExFRF9XSU5ET1csIGNv
bnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAmc3RhdGUsIDApOworICAgIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7CisgICAg
d2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQoTU9aX0dUS19TQ1JPTExFRF9XSU5ET1cs
ICZzdGF0ZSwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTI0MCw3ICsyNDMsOCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYQogICAg
IHN0YXRlLmN1cnBvcyA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpOwogCiAgICAgR3RrVGhlbWVX
aWRnZXRUeXBlIHR5cGUgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3Jv
bGxiYXIgPyBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9WRVJUSUNBTCA6IE1PWl9HVEtfU0NST0xM
QkFSX1RIVU1CX0hPUklaT05UQUw7Ci0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihS
ZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5wYWludE1vemlsbGFHdGtXaWRnZXQo
dHlwZSwgY29udGV4dCwgcmVjdCwgJnN0YXRlLCAwKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250
ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWlu
dE1vemlsbGFXaWRnZXQodHlwZSwgJnN0YXRlLCAwKTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXJU
aGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1
bmNvbnN0cmFpbmVkVHJhY2tSZWN0KQpAQCAtMjU2LDYgKzI2MCw5IEBAIEludFJlY3QgU2Nyb2xs
YmFyVGhlbWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgdW5jb25zCiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkKIHsKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CiAgICAgU2Nyb2xsYmFyQ29u
dHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CiAKQEAgLTM0OCw3ICszNTUsOCBAQCB2
b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIFNjcm9sbGJhciogc2Nyb2xsYgogICAgICAgICBzdGF0ZS5pbkhvdmVyID0gRkFMU0U7CiAg
ICAgfQogCi0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCkuZ2V0KCkpLT5wYWludE1vemlsbGFHdGtXaWRnZXQoTU9aX0dUS19TQ1JPTExC
QVJfQlVUVE9OLCBjb250ZXh0LCByZWN0LCAmc3RhdGUsIGZsYWdzKTsKKyAgICBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29u
dGV4dC5wYWludE1vemlsbGFXaWRnZXQoTU9aX0dUS19TQ1JPTExCQVJfQlVUVE9OLCAmc3RhdGUs
IGZsYWdzKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxDb3JuZXIo
U2Nyb2xsVmlldyogdmlldywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBjb3JuZXJSZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNiYjgwNjU4MjkwZTYxNDdjZTdiMGM1ZDlkMTliOWMwNTRiMTI4
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBSZW5kZXJUaGVtZUd0azsK
KworY2xhc3MgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgfldp
ZGdldFJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICBib29sIHBhaW50TW96aWxsYVdpZGdldChHdGtU
aGVtZVdpZGdldFR5cGUsIEd0a1dpZGdldFN0YXRlKiwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0
aW9uID0gR1RLX1RFWFRfRElSX05PTkUpOworCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4
dCogbV9ncmFwaGljc0NvbnRleHQ7CisgICAgSW50UmVjdCBtX3RhcmdldFJlY3Q7CisgICAgR2Rr
UmVjdGFuZ2xlIG1fcGFpbnRSZWN0OworICAgIEludFNpemUgbV9leHRyYVNwYWNlOworICAgIGJv
b2wgbV9oYWRFcnJvcjsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR2RrRHJhd2Fi
bGUqIG1fdGFyZ2V0OworI2Vsc2UKKyAgICBjYWlyb190KiBtX3RhcmdldDsKKyNlbmRpZgorCit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dEd0azIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDg5NjU5NGUxNzYyNzg0MTU3ODUw
ZTAzZGNmOTJiMGI0NTlmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHZGtQaXhtYXAqIGdTY3Jh
dGNoQnVmZmVyID0gMDsKK3N0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1ZmZlcigpCit7CisgICAg
aWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnX29iamVjdF91bnJlZihnU2NyYXRjaEJ1ZmZl
cik7CisgICAgZ1NjcmF0Y2hCdWZmZXIgPSAwOworfQorCisvLyBGSVhNRTogUGVyaGFwcyB3ZSBj
YW4gc2hhcmUgc29tZSBvZiB0aGlzIGNvZGUgd2l0aCB0aGUgQ29udGV4dFNoYWRvd0NhaXJvLgor
Ly8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBm
b3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVuZGVyLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBk
ZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwKKy8vIHdlIGNyZWF0ZSBh
IGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgor
Y2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQor
fTsKK3N0YXRpYyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1l
cjsKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkKK3sKKyAgICBpZiAo
cHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcHVyZ2VTY3JhdGNo
QnVmZmVyVGltZXIuc3RvcCgpOworICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0YXJ0T25l
U2hvdCgyKTsKK30KKworc3RhdGljIEludFNpemUgZ2V0RXh0cmFTcGFjZUZvcldpZGdldChSZW5k
ZXJUaGVtZUd0ayogdGhlbWUpCit7CisgICAgLy8gQ2hlY2tib3hlcyBhbmQgc2Nyb2xsYmFyIHRo
dW1icyBvZnRlbiBkcmF3IG91dHNpZGUgdGhlaXIgYm91bmRhcmllcy4gSGVyZSB3ZSBmaWd1cmUg
b3V0CisgICAgLy8gdGhlIG1heGltdW0gYW1vdW50IG9mIHNwYWNlIHdlIG5lZWQgZm9yIGFueSB0
eXBlIG9mIHdpZGdldCBhbmQgdXNlIHRoYXQgdG8gaW5jcmVhc2UgdGhlCisgICAgLy8gc2l6ZSBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIsIHdoaWxlIHByZXNlcnZpbmcgdGhlIGZpbmFsIHdpZGdldCBw
b3NpdGlvbi4KKworICAgIC8vIFRoZSBjaGVja2JveCBleHRyYSBzcGFjZSBpcyBjYWxjdWxhdGVk
IGJ5IGxvb2tpbmcgYXQgdGhlIHdpZGdldCBzdHlsZS4KKyAgICBpbnQgaW5kaWNhdG9yU2l6ZSwg
aW5kaWNhdG9yU3BhY2luZzsKKyAgICB0aGVtZS0+Z2V0SW5kaWNhdG9yTWV0cmljcyhDaGVja2Jv
eFBhcnQsIGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmcpOworICAgIEludFNpemUgZXh0
cmFTcGFjZShpbmRpY2F0b3JTcGFjaW5nLCBpbmRpY2F0b3JTcGFjaW5nKTsKKworICAgIC8vIFNj
cm9sbGJhciB0aHVtYnMgbmVlZCBhdCBsZWFzdCBhbiBleHRyYSBwaXhlbCBhbG9uZyB0aGVpciBt
b3ZlbWVudCBheGlzLgorICAgIHJldHVybiBleHRyYVNwYWNlLmV4cGFuZGVkVG8oSW50U2l6ZSgx
LCAxKSk7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgLCBt
X3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3IoZmFsc2UpCit7CisgICAg
UmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOworCisgICAgLy8gRmFsbGJhY2s6IFdlIGZh
aWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJv
cGVybHkgcGFpbnQgCisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUg
dHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAg
ICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90
IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghdGhl
bWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtE
cmF3YWJsZSgpKSB7CisgICAgICAgIG1fcGFpbnRSZWN0ID0gZ3JhcGhpY3NDb250ZXh0LT5nZXRD
VE0oKS5tYXBSZWN0KHRhcmdldFJlY3QpOworICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29u
dGV4dC0+Z2RrRHJhd2FibGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNv
bWUgd2lkZ2V0cyByZW5kZXIgb3V0c2lkZSB0aGVpciByZWN0YW5nbGVzLiBXZSBuZWVkIHRvIGFj
Y291bnQgZm9yIHRoaXMuCisgICAgbV9leHRyYVNwYWNlID0gZ2V0RXh0cmFTcGFjZUZvcldpZGdl
dCh0aGVtZSk7CisKKyAgICAvLyBPZmZzZXQgdGhlIHRhcmdldCByZWN0YW5nbGUgc28gdGhhdCB0
aGUgZXh0cmEgc3BhY2UgaXMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzY3JhdGNoIGJ1
ZmZlci4KKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQobV9leHRyYVNwYWNlLndp
ZHRoKCksIG1fZXh0cmFTcGFjZS5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdGFyZ2V0UmVjdC5zaXplKCkpOworCisgICAgaW50IHdpZHRoID0gbV90YXJn
ZXRSZWN0LndpZHRoKCkgKyAobV9leHRyYVNwYWNlLndpZHRoKCkgKiAyKTsKKyAgICBpbnQgaGVp
Z2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpICsgKG1fZXh0cmFTcGFjZS5oZWlnaHQoKSAqIDIp
OworICAgIGludCBzY3JhdGNoV2lkdGggPSAwOworICAgIGludCBzY3JhdGNoSGVpZ2h0ID0gMDsK
KyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdka19kcmF3YWJsZV9nZXRfc2l6ZShn
U2NyYXRjaEJ1ZmZlciwgJnNjcmF0Y2hXaWR0aCwgJnNjcmF0Y2hIZWlnaHQpOworCisgICAgLy8g
V2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgY3VycmVudCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoLgorICAgIGlmICghZ1NjcmF0Y2hCdWZmZXIgfHwgc2NyYXRjaFdp
ZHRoIDwgd2lkdGggfHwgc2NyYXRjaEhlaWdodCA8IGhlaWdodCkgeworICAgICAgICBwdXJnZVNj
cmF0Y2hCdWZmZXIoKTsKKyAgICAgICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxz
IHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMu
CisgICAgICAgIHdpZHRoID0gKDEgKyAod2lkdGggPj4gNSkpIDw8IDU7CisgICAgICAgIGhlaWdo
dCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKworICAgICAgICBnU2NyYXRjaEJ1ZmZlciA9
IGdka19waXhtYXBfbmV3KDAsIHdpZHRoLCBoZWlnaHQsIGdka19jb2xvcm1hcF9nZXRfdmlzdWFs
KHRoZW1lLT5tX3RoZW1lUGFydHMtPmNvbG9ybWFwKS0+ZGVwdGgpOworICAgICAgICBnZGtfZHJh
d2FibGVfc2V0X2NvbG9ybWFwKGdTY3JhdGNoQnVmZmVyLCB0aGVtZS0+bV90aGVtZVBhcnRzLT5j
b2xvcm1hcCk7CisgICAgfQorICAgIG1fdGFyZ2V0ID0gZ1NjcmF0Y2hCdWZmZXI7CisKKyAgICAv
LyBDbGVhciB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fdD4g
c2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9wdFBsYXRmb3JtUmVmKGdka19jYWlyb19jcmVhdGUo
Z1NjcmF0Y2hCdWZmZXIpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNv
bnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChzY3Jh
dGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5X
aWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0
IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFsbGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAg
IFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVu
ZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1l
UGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3JhcGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBwYWludCB0aGUgcmVzdWx0cyBiYWNr
IGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAgICBpZiAobV9oYWRFcnJvcikgeworICAgICAgICBz
Y2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gRklYTUU6IEl0J3MgdW5jbGVhciBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUg
dGhlIGN1cnJlbnQgc291cmNlIGhlcmUuCisgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gbV9n
cmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIFBsYXRmb3JtUmVmUHRyPGNh
aXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3VyY2UoY2Fpcm9fZ2V0X3NvdXJjZShjYWlyb0NvbnRl
eHQpKTsKKworICAgIC8vIFRoZSBibGl0IHJlY3RhbmdsZSBpcyB0aGUgb3JpZ2luYWwgdGFyZ2V0
IHJlY3RhbmdsZSBhZGp1c3RlZCBmb3IgYW55IGV4dHJhIHNwYWNlLgorICAgIEludFJlY3QgZnVs
bFRhcmdldFJlY3QobV90YXJnZXRSZWN0KTsKKyAgICBmdWxsVGFyZ2V0UmVjdC5pbmZsYXRlWCht
X2V4dHJhU3BhY2Uud2lkdGgoKSk7CisgICAgZnVsbFRhcmdldFJlY3QuaW5mbGF0ZVkobV9leHRy
YVNwYWNlLmhlaWdodCgpKTsKKworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWly
b0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCBmdWxsVGFyZ2V0UmVjdC54KCksIGZ1bGxUYXJnZXRS
ZWN0LnkoKSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgZnVsbFRhcmdldFJl
Y3QueCgpLCBmdWxsVGFyZ2V0UmVjdC55KCksIGZ1bGxUYXJnZXRSZWN0LndpZHRoKCksIGZ1bGxU
YXJnZXRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKGNhaXJvQ29udGV4dCk7CisgICAg
Y2Fpcm9fc2V0X3NvdXJjZShjYWlyb0NvbnRleHQsIHByZXZpb3VzU291cmNlLmdldCgpKTsKKyAg
ICBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCitib29sIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3Rr
V2lkZ2V0U3RhdGUqIHN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbikKK3sKKyAgICBtX2hhZEVycm9yID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgbV90
YXJnZXQsICZtX3BhaW50UmVjdCwgJm1fcGFpbnRSZWN0LAorICAgICAgICBzdGF0ZSwgZmxhZ3Ms
IHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4gIW1faGFkRXJy
b3I7Cit9CisKK30KKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTY2NTc4NTk3MTRmY2I4YjRkYTYyYWE0YmUwYjQ2MmFmMDE2OGMwNwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNw
cApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKKyAgICA6
IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKKyAgICAsIG1fdGFyZ2V0UmVjdCh0
YXJnZXRSZWN0KQorICAgICwgbV9wYWludFJlY3QodGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJy
b3IoZmFsc2UpCisgICAgLCBtX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKK3sK
K30KKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQoKQor
eworfQorCitib29sIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldChH
dGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBpbnQgZmxhZ3Ms
IEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3sKKyAgICBtX2hhZEVycm9yID0gbW96
X2d0a193aWRnZXRfcGFpbnQodHlwZSwgbV90YXJnZXQsICZtX3BhaW50UmVjdCwgc3RhdGUsIGZs
YWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7CisgICAgcmV0dXJuICFtX2hh
ZEVycm9yOworfQorCit9CisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72362</attachid>
            <date>2010-10-29 12:15:03 -0700</date>
            <delta_ts>2010-11-02 22:03:14 -0700</delta_ts>
            <desc>Patch fixing scrollbar rendering issue</desc>
            <filename>bug-40139-20101029121503.patch</filename>
            <type>text/plain</type>
            <size>33500</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MmVlMWVkYzkyZGNlMDFkNWNlYjFhNTc0NzY5ZWIwNTA2MDA4NzM3Li5jZjMxNjE4
MjAxN2ZkNTQ1NTIxMzc5ZDkzNzFhOGFkYTA3YzA5YzRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTAtMjkgIE1paGFpIFBh
cnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZjY2OWQzMzI2NWI1NWJhOTcw
ZjMwMzdmYjFhZjNiOTM5MmQzNjgwZS4uNDI1NzlkMGEyZGQ0OGJiYzFkNjcwZmE4NjVmNzAzMTNi
Y2RjMmJhNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTUyNzQsMTEgKzUyNzQsNiBA
QCBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAogZmFzdC9kb20v
R2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAogZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKIAotIyBH
VEsrIHRoZW1lLXJlbmRlcmVkIHdpZGdldHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybXMK
LSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5Ci1mYXN0L2Zv
cm1zL3NsaWRlci10cmFuc2Zvcm1lZC5odG1sCi1mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1l
ZC5odG1sCi0KICMgU29tZSBpbnB1dCB0eXBlPXJhbmdlIHRlc3RzIGZhaWwgYmVjYXVzZSBvZiB0
aGUgc2l6ZSAKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBHVEsrIHRoZW1lcy4KIGZhc3QvZm9y
bXMvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZGNlMjU5YjEyNmFmMTEwYjI2YTc2NjllMzM3NjY2YmExZjI5
ZDViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9y
bXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKKworRkFJ
TDogZXhwZWN0ZWQgc2xpZGVyIHZhbHVlIDM5LCBnb3QgMzgKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTcxZTAxNTY3NjNlNDUxNDk3Yjhk
YmIzN2UyZThkNTVlYmE5YTUwOS4uNDAyYzA5M2RiNTFlMDA1ZDA5MzkyYWJiYWRkM2Y1NWRhOGVj
MzEyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MyBAQAorMjAxMC0xMC0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW0dUS10gV2lkZ2V0cyBkbyBub3Qgc3VwcG9ydCBDU1MgdHJhbnNmb3JtYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDEzOQor
CisgICAgICAgIEluc3RlYWQgb2YgcmVuZGVyaW5nIGRpcmVjdGx5IG9udG8gdGhlIHRhcmdldCBk
cmF3YWJsZSB3aGVuIHJlbmRlcmluZworICAgICAgICBmb3JtIGNvbnRyb2xzIG9uIEdUSysgMi4w
LCByZW5kZXIgb250byBhbiBpbnRlcm1lZGlhdGUgc3VyZmFjZSBhbmQgdXNlCisgICAgICAgIGNh
aXJvIHRvIGJsaXQgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4gVGhpcyBo
YXMgdHdvCisgICAgICAgIGJlbmVmaXRzLiBUaGUgZmlyc3QgaXMgdGhhdCBpdCBhbHdheXMgaG9u
b3JzIHRoZSBjdXJyZW50IENhaXJvCisgICAgICAgIHRyYW5zZm9ybWF0aW9uLiBUaGUgc2Vjb25k
IGlzIHRoYXQgc2luY2UgdGhlIGludGVybWVkaWF0ZSBkcmF3YWJsZSBpcworICAgICAgICBhbHdh
eXMgYSAzMi1iaXQgR2RrUGl4bWFwLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIGEgc2V0IG9mIHdp
ZGdldHMKKyAgICAgICAgcGVyLWNvbG9ybWFwIGFueSBsb25nZXIuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgYWxzbyBiZWdpbnMgdGhlIGFic3RyYWN0aW9uIG9mIHdpZGdldCByZW5kZXJpbmcgc28g
dGhhdCBHVEsrCisgICAgICAgIDIgYW5kIEdUSysgMyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUgcGF0
aC4gVGhlIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lsbAorICAgICAgICBldmVudHVhbGx5IGhp
ZGUgYWxsIHZlcnNpb24gZGlmZmVyZW5jZXMgZnJvbSBSZW5kZXJUaGVtZUd0aywgd2hpY2ggY2Fu
CisgICAgICAgIGp1c3QgZm9jdXMgb24gaW50ZXJwcmV0aW5nIHRoZSBHdGtTdHlsZSBwcm9wZXJ0
aWVzLiAKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgV2lkZ2V0UmVuZGVyaW5Db250
ZXh0IHNvdXJjZSBmaWxlcyB0byB0aGUgc291cmNlcyBsaXN0LgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwOgorICAgICAgICAoV1RGOjpy
ZWZQbGF0Zm9ybVB0cik6IEFkZCBhIHNwZWNpYWxpemF0aW9uIGZvciBDYWlybyBwYXR0ZXJucy4K
KyAgICAgICAgKFdURjo6ZGVyZWZQbGF0Zm9ybVB0cik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaDogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6IE5vIGxvbmdlciBrZWVwIGEgc2V0IG9mCisg
ICAgICAgIHdpZGdldHMgcGVyLWNvbG9ybWFwIGZvciBHVEsrLCBpbnN0ZWFkIGp1c3QgZGV0ZXJt
aW5lIGlmIHdlIGNhbiB1c2UgUkdCQQorICAgICAgICBjb2xvcm1hcHMgYW5kIGdvIGZyb20gdGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z2V0SW5kaWNhdG9yTWV0
cmljcyk6IFB1dCB0aGUgbG9naWMgZm9yCisgICAgICAgIGdldHRpbmcgdG9nZ2xlIGJ1dHRvbiBp
bmRpY2F0b3IgbWV0cmljcyBpbnRvIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KTogTm93IHVzZXMKKyAgICAgICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB0byBkbyB3aWRnZXQgcmVuZGVyaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VG9nZ2xlU2l6ZSk6IFVzZSB0aGUgbmV3IGdldEluZGljYXRvck1ldHJpY3MgaGVscGVy
LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oOiBBZGRlZCBhIG1lbWJl
ciB0byB0cmFjayB3aGV0aGVyIG9yIG5vdAorICAgICAgICAgIHRoZSB3aWRnZXRzIGFyZSB1c2lu
ZyBhIFJHQkEgY29sb3JtYXAuIEFsc28gcmVtb3ZlIGEgZGVmdW5jdCBQYWdlKgorICAgICAgICAg
IG1lbWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwOiBT
d2l0Y2ggYWxsIHdpZGdldCBkcmF3aW5nCisgICAgICAgIG9wZXJhdGlvbnMgdG8gdXNlIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6
cGFpbnRUcmFja0JhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6cHVyZ2VTY3JhdGNoQnVmZmVyKTogQWRkZWQsIHRoaXMgaXMgc2ltaWxhciB0
byB0aGUgc2NyYXRjaAorICAgICAgICBidWZmZXIgaW1wbGVtZW50YXRpb24gZnJvbSBDb250ZXh0
U2hhZG93LgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2VTY3JhdGNoQnVmZmVyVGltZXI6OmZpcmVk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXh0cmFTcGFjZUZvcldpZGdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojp+
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisKIDIwMTAtMTAt
MjkgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtIGNsYW5nXSBVbnJldmlld2VkIGZpeCByZW1vdmluZyBjb21waWxlciB3YXJuaW5nLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggNmMxYmMzNWU5NjU0NDNjNWZkOGViZmZlYzE3MDQ0YmE2YWE1ODNhOC4uY2Q1MGNjMWY2
YWZmYzNjNWYzOGJhZWRlMDc5MjdhZDMwZTVkOGM0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zNTk5LDYgKzM1OTks
OSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1doZWVsRXZlbnRHdGsu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAgXAorCVdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwCmlu
ZGV4IGQyODk1ODVkODlhM2JiMDk4MTc0YTlkODliYjM3OTRiZGEyYzE3NDkuLjI4NTVhZWYxMzI3
YTMyNjkxMDJlMTJmMTkzYjU2ODliMDU2YTAzYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcApAQCAtNTQsNiAr
NTQsMjAgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3N1cmZhY2Vf
dCogcHRyKQogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHRyKTsKIH0KIAordGVtcGxh
dGUgPD4gY2Fpcm9fcGF0dGVybl90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBjYWlyb19wYXR0ZXJuX3JlZmVyZW5jZShwdHIp
OworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0
cihjYWlyb19wYXR0ZXJuX3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBjYWlyb19w
YXR0ZXJuX2Rlc3Ryb3kocHRyKTsKK30KKworCiB0ZW1wbGF0ZSA8PiBjYWlyb19mb250X2ZhY2Vf
dCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fZm9udF9mYWNlX3QqIHB0cikKIHsKICAgICBpZiAocHRy
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJl
ZlB0ckNhaXJvLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVm
UHRyQ2Fpcm8uaAppbmRleCAzYjcyMGM2MjE4NTRiMTI1MmRmNWFhMGIwMWY3YjA1NzMyMzAxYmZi
Li5iYThlY2YyMDhlMzYzMzJiYTYxNGFjMjJhNjM2ZjBjZDNiNDBiZTY5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaApA
QCAtMjQsNiArMjQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKIHR5cGVk
ZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKK3R5cGVkZWYgc3RydWN0
IF9jYWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19m
b250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc2NhbGVk
X2ZvbnQgY2Fpcm9fc2NhbGVkX2ZvbnRfdDsKIApAQCAtMzksNiArNDAsOSBAQCB0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fdCogcHRyKTsKIHRlbXBsYXRlIDw+IGNhaXJv
X3N1cmZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90KiBwdHIpOwogdGVtcGxh
dGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3N1cmZhY2VfdCogcHRyKTsKIAordGVt
cGxhdGUgPD4gY2Fpcm9fcGF0dGVybl90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3Qq
KTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19wYXR0ZXJuX3QqKTsK
KwogdGVtcGxhdGUgPD4gY2Fpcm9fZm9udF9mYWNlX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX2Zv
bnRfZmFjZV90Kik7CiB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fZm9u
dF9mYWNlX3QqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCmluZGV4
IDhkZjVjZGEwOTI3OGNlODgyZWY5ODA1ZWYxNzEwMGI1MzE3MzgzODIuLjgzMDFkYzAzZTc2YWE3
NjM2NjhmZjM5NGE0ZjBiY2NjOWYzODY5ODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDAs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldpZGdldFJl
bmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJndGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z2Rr
L2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KQEAgLTE1MSwxNSArMTUzLDI2IEBAIFJlbmRl
clRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCiAgICAgLCBtX3BhdXNlQnV0dG9uKDApCiAgICAg
LCBtX3NlZWtCYWNrQnV0dG9uKDApCiAgICAgLCBtX3NlZWtGb3J3YXJkQnV0dG9uKDApCi0gICAg
LCBtX3BhcnRzVGFibGUoYWRvcHRQbGF0Zm9ybVJlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoMCwg
MCwgMCwgZ19mcmVlKSkpCisgICAgLCBtX3RoZW1lUGFydHMoZ19uZXcwKEd0a1RoZW1lUGFydHMs
IDEpKQorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgLCBtX3RoZW1lUGFydHNIYXZlUkdC
QUNvbG9ybWFwKHRydWUpCisjZW5kaWYKIHsKLSAgICBpZiAoIW1vekd0a1JlZkNvdW50KSB7Ci0g
ICAgICAgIG1vel9ndGtfaW5pdCgpOwogCi0gICAgICAgIC8vIFVzZSB0aGUgdGhlbWUgcGFydHMg
Zm9yIHRoZSBkZWZhdWx0IGRyYXdhYmxlLgotICAgICAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0
cyhwYXJ0c0ZvckRyYXdhYmxlKDApKTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdk
a0NvbG9ybWFwKiBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAoZ2RrX3Nj
cmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIWNvbG9ybWFwKSB7CisgICAgICAgIG1fdGhl
bWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBmYWxzZTsKKyAgICAgICAgY29sb3JtYXAgPSBnZGtf
c2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CiAg
ICAgfQorICAgIG1fdGhlbWVQYXJ0cy0+Y29sb3JtYXAgPSBjb2xvcm1hcDsKKyNlbmRpZgogCisg
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUuCisgICAgaWYg
KCFtb3pHdGtSZWZDb3VudCkgeworICAgICAgICBtb3pfZ3RrX2luaXQoKTsKKyAgICAgICAgbW96
X2d0a191c2VfdGhlbWVfcGFydHMobV90aGVtZVBhcnRzKTsKKyAgICB9CiAgICAgKyttb3pHdGtS
ZWZDb3VudDsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE4MiwzNiArMTk1LDE5IEBAIFJlbmRl
clRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQogICAgIG1fc2Vla0JhY2tCdXR0b24uY2xlYXIo
KTsKICAgICBtX3NlZWtGb3J3YXJkQnV0dG9uLmNsZWFyKCk7CiAKLSAgICBHTGlzdCogdmFsdWVz
ID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMobV9wYXJ0c1RhYmxlLmdldCgpKTsKLSAgICBmb3Ig
KGd1aW50IGkgPSAwOyBpIDwgZ19saXN0X2xlbmd0aCh2YWx1ZXMpOyBpKyspCi0gICAgICAgIG1v
el9ndGtfZGVzdHJveV90aGVtZV9wYXJ0c193aWRnZXRzKAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R3RrVGhlbWVQYXJ0cyo+KGdfbGlzdF9udGhfZGF0YSh2YWx1ZXMsIGkpKSk7Ci0KICAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kobV9ndGtXaW5kb3cpOwogfQogCi1HdGtUaGVtZVBhcnRzKiBSZW5k
ZXJUaGVtZUd0azo6cGFydHNGb3JEcmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUpIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0IHBh
cnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKSBjb25zdAogewot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgLy8gQSBudWxsIGRyYXdhYmxlIHJlcHJlc2Vu
dHMgdGhlIGRlZmF1bHQgc2NyZWVuIGNvbG9ybWFwLgotICAgIEdka0NvbG9ybWFwKiBjb2xvcm1h
cCA9IDA7Ci0gICAgaWYgKCFkcmF3YWJsZSkKLSAgICAgICAgY29sb3JtYXAgPSBnZGtfc2NyZWVu
X2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBjb2xvcm1hcCA9IGdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAoZHJhd2FibGUp
OwotCi0gICAgR3RrVGhlbWVQYXJ0cyogcGFydHMgPSBzdGF0aWNfY2FzdDxHdGtUaGVtZVBhcnRz
Kj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX3BhcnRzVGFibGUuZ2V0KCksIGNvbG9ybWFwKSk7Ci0g
ICAgaWYgKCFwYXJ0cykgewotICAgICAgICBwYXJ0cyA9IGdfbmV3MChHdGtUaGVtZVBhcnRzLCAx
KTsKLSAgICAgICAgcGFydHMtPmNvbG9ybWFwID0gY29sb3JtYXA7Ci0gICAgICAgIGdfaGFzaF90
YWJsZV9pbnNlcnQobV9wYXJ0c1RhYmxlLmdldCgpLCBjb2xvcm1hcCwgcGFydHMpOworICAgIEFT
U0VSVChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFydCk7CisgICAgaWYg
KHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7CisgICAgICAgIG1vel9ndGtfY2hlY2tib3hfZ2V0X21l
dHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSNlbHNlCi0gICAgLy8gRm9yIEdUSysgMy4wIHdlIG5vIGxvbmdlciBoYXZlIHRv
IHdvcnJ5IGFib3V0IG1haW50YWluaW5nIGEgc2V0IG9mIHdpZGdldHMgcGVyLWNvbG9ybWFwLgot
ICAgIHN0YXRpYyBHdGtUaGVtZVBhcnRzKiBwYXJ0cyA9IGdfc2xpY2VfbmV3MChHdGtUaGVtZVBh
cnRzKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgogCi0gICAgcmV0dXJuIHBhcnRzOwor
ICAgIC8vIFJhZGlvUGFydAorICAgIG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRv
clNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKIH0KIAogc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1
cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQpAQCAtMjg5LDY5ICsyODUsNiBAQCBzdGF0aWMgdm9p
ZCBhZGp1c3RNb3ppbGxhU3R5bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJT
dHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHlwYWRkaW5n
ICsgYm90dG9tLCBGaXhlZCkpOwogfQogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUg
dHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtX
aWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1c3QgY2xhaW0g
dG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbGF0Zm9ybVJlZlB0cjxHZGtEcmF3YWJsZT4g
ZHJhd2FibGUoY29udGV4dC0+Z2RrRHJhd2FibGUoKSk7Ci0gICAgR2RrUmVjdGFuZ2xlIHBhaW50
UmVjdCwgY2xpcFJlY3Q7Ci0gICAgaWYgKGRyYXdhYmxlKSB7Ci0gICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICAgICAgSW50UG9pbnQgcG9zID0gY3Rt
Lm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIHBhaW50UmVjdCA9IEludFJlY3Qo
cG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgICAg
ICAvLyBJbnRlcnNlY3QgdGhlIGNhaXJvIHJlY3RhbmdsZSB3aXRoIHRoZSB0YXJnZXQgd2lkZ2V0
IHJlZ2lvbi4gVGhpcyAgd2lsbAotICAgICAgICAvLyBwcmV2ZW50IHRoZSB0aGVtZSBkcmF3aW5n
IGNvZGUgZnJvbSBkcmF3aW5nIGludG8gcmVnaW9ucyB0aGF0IGNhaXJvIHdpbGwKLSAgICAgICAg
Ly8gY2xpcCBhbnl3YXkuCi0gICAgICAgIGRvdWJsZSBjbGlwWDEsIGNsaXBYMiwgY2xpcFkxLCBj
bGlwWTI7Ci0gICAgICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgJmNsaXBYMSwgJmNsaXBZMSwgJmNsaXBYMiwgJmNsaXBZMik7Ci0gICAgICAgIEludFBv
aW50IGNsaXBQb3MgPSBjdG0ubWFwUG9pbnQoSW50UG9pbnQoY2xpcFgxLCBjbGlwWTEpKTsKLQot
ICAgICAgICBjbGlwUmVjdC53aWR0aCA9IGNsaXBYMiAtIGNsaXBYMTsKLSAgICAgICAgY2xpcFJl
Y3QuaGVpZ2h0ID0gY2xpcFkyIC0gY2xpcFkxOwotICAgICAgICBjbGlwUmVjdC54ID0gY2xpcFBv
cy54KCk7Ci0gICAgICAgIGNsaXBSZWN0LnkgPSBjbGlwUG9zLnkoKTsKLSAgICAgICAgZ2RrX3Jl
Y3RhbmdsZV9pbnRlcnNlY3QoJnBhaW50UmVjdCwgJmNsaXBSZWN0LCAmY2xpcFJlY3QpOwotCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb25zLCBsaWtlIGR1cmluZyBw
cmludCBwcmV2aWV3cywgdGhpcyBHcmFwaGljc0NvbnRleHQgaXMgbm90Ci0gICAgICAgIC8vIGJh
Y2tlZCBieSBhIEdka0RyYXdhYmxlLiBJbiB0aG9zZSBzaXR1YXRpb25zLCB3ZSByZW5kZXIgb250
byBhIHBpeG1hcCBhbmQgdGhlbgotICAgICAgICAvLyBjb3B5IHRoZSByZW5kZXJlZCBkYXRhIGJh
Y2sgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCB2aWEgQ2Fpcm8uCi0gICAgICAgIGRyYXdhYmxlID0g
YWRvcHRQbGF0Zm9ybVJlZihnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3RlbSgpKSkpOwot
ICAgICAgICBwYWludFJlY3QgPSBjbGlwUmVjdCA9IEludFJlY3QoMCwgMCwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhw
YXJ0c0ZvckRyYXdhYmxlKGRyYXdhYmxlLmdldCgpKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gbW96
X2d0a193aWRnZXRfcGFpbnQodHlwZSwgZHJhd2FibGUuZ2V0KCksICZwYWludFJlY3QsICZjbGlw
UmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSA9PSBNT1pfR1RLX1NVQ0NF
U1M7Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZyB3YXMgc3VjY2Vzc2Z1bCBhbmQgd2UgcmVuZGVy
ZWQgb250byBhIHBpeG1hcCwgY29weSB0aGUKLSAgICAvLyByZXN1bHRzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIEdyYXBoaWNzQ29udGV4dC4KLSAgICBpZiAoc3VjY2VzcyAmJiAhY29udGV4dC0+Z2Rr
RHJhd2FibGUoKSkgewotICAgICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRleHQpOwotICAg
ICAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBkcmF3YWJsZS5n
ZXQoKSwgcmVjdC54KCksIHJlY3QueSgpKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY2Fpcm9Db250
ZXh0KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwotICAgIH0KLQotICAg
IHJldHVybiAhc3VjY2VzczsKLX0KLSNlbHNlCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1v
emlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHdpZGdldFN0YXRl
LCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKLXsKLSAgICAvLyBQ
YWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCi0gICAg
aWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gZmFsc2UgPT0gc3VjY2VzcywgYmVjYXVzZSBvZiBhd2Vzb21lLgotICAgIEdka1Jl
Y3RhbmdsZSBwYWludFJlY3QgPSByZWN0OwotICAgIHJldHVybiBtb3pfZ3RrX3dpZGdldF9wYWlu
dCh0eXBlLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJnBhaW50UmVjdCwgd2lkZ2V0U3Rh
dGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0jZW5kaWYK
LQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRU
eXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncykKIHsKICAgICAvLyBQYWludGlu
ZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCkBAIC0zODIsOCAr
MzE1LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVX
aWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmUKICAgICBlbHNlCiAgICAgICAgIHdpZGdl
dFN0YXRlLmRlcHJlc3NlZCA9IGZhbHNlOwogCi0gICAgR3RrVGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uID0gZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlv
bigpKTsKLSAgICByZXR1cm4gcGFpbnRNb3ppbGxhR3RrV2lkZ2V0KHR5cGUsIGNvbnRleHQsIHJl
Y3QsICZ3aWRnZXRTdGF0ZSwgZmxhZ3MsIHRleHREaXJlY3Rpb24pOworICAgIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKKyAgICByZXR1cm4gIXdp
ZGdldENvbnRleHQucGFpbnRNb3ppbGxhV2lkZ2V0KHR5cGUsICZ3aWRnZXRTdGF0ZSwgZmxhZ3Ms
IGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwog
fQogCiBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVt
ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBDb250cm9sUGFydCBhcHBlYXJhbmNlKQpAQCAtMzk0LDE5
ICszMjcsNyBAQCBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBDb250cgogCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgcHJvYmFibHkgbm90IGNvcnJlY3QgdXNlIG9mIGluZGljYXRvclNpemUgYW5kIGluZGljYXRv
clNwYWNpbmcuCiAgICAgZ2ludCBpbmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nOwotCi0g
ICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAg
IGlmIChtb3pfZ3RrX2NoZWNrYm94X2dldF9tZXRyaWNzKCZpbmRpY2F0b3JTaXplLCAmaW5kaWNh
dG9yU3BhY2luZykgIT0gTU9aX0dUS19TVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgaWYgKG1vel9ndGtfcmFk
aW9fZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKSAhPSBNT1pf
R1RLX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgdGhlbWUtPmdldEluZGljYXRvck1l
dHJpY3MoYXBwZWFyYW5jZSwgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZyk7CiAKICAg
ICAvLyBPdGhlciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMywgYnV0IEdUSysgdXNlcnMgdGVu
ZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgogICAgIC8vIEl0IGNvdWxkIGJlIG1hZGUgYSBj
b25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3RoZXIgdGhhbiAxMyBhY3R1YWxseSBicmVhayBz
aXRlIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAppbmRl
eCA2ZDMyNGI2NDhlZGMxZTdjYjk3MTE2NjFmNTY5MzVmZWQzMjU2MzViLi5mN2VlN2QzMWE0NTRk
ZmFiNTVlMGEwMGMzMjVmY2Q2YTEwYWFkZDBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKICNlbmRpZgogCi0gICAgYm9vbCBwYWludE1v
emlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0JiwgR3RrV2lkZ2V0U3RhdGUqLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24g
PSBHVEtfVEVYVF9ESVJfTk9ORSk7CisgICAgdm9pZCBnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRy
b2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3BhY2luZykgY29uc3Q7
CiAKICAgICBHdGtXaWRnZXQqIGd0a1Njcm9sbGJhcigpOwogCkBAIC0xNjksNyArMTY5LDYgQEAg
cHJpdmF0ZToKICAgICBHdGtDb250YWluZXIqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwogCiAgICAg
Ym9vbCBwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUsIFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncyA9IDApOwot
ICAgIEd0a1RoZW1lUGFydHMqIHBhcnRzRm9yRHJhd2FibGUoR2RrRHJhd2FibGUqKSBjb25zdDsK
IAogICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRvdzsKICAgICBtdXRhYmxlIEd0a0Nv
bnRhaW5lciogbV9ndGtDb250YWluZXI7CkBAIC0xOTMsOSArMTkyLDExIEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPEltYWdlPiBtX3BhdXNlQnV0dG9uOwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVr
QmFja0J1dHRvbjsKICAgICBSZWZQdHI8SW1hZ2U+IG1fc2Vla0ZvcndhcmRCdXR0b247Ci0gICAg
UGFnZSogbV9wYWdlOwotICAgIFBsYXRmb3JtUmVmUHRyPEdIYXNoVGFibGU+IG1fcGFydHNUYWJs
ZTsKLQorICAgIEd0a1RoZW1lUGFydHMqIG1fdGhlbWVQYXJ0czsKKyNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorICAgIGJvb2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcDsKKyNlbmRpZgor
ICAgIGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCmluZGV4IDE5Yjg5N2NmMDJhMzk0
OTRlZmUyM2NlYTkzOWYxNDkyNDIzZDRjMjcuLmY5MmRkMjBjYWU0MDYyMjY5ZTM0NjNiNThkMGZm
MzM2MDgwNGE2YTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgogI2luY2x1
ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiZ3RrZHJhd2luZy5oIgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KIApAQCAtMjE2LDcgKzIxNyw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFy
CiAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Ny
b2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAK
ICAgICBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX1ZFUlRJQ0FMIDog
TU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfSE9SSVpPTlRBTDsKLSAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96
aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCwgJnN0YXRlLCAw
KTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVs
bFNjcm9sbGJhclJlY3QpOworICAgIHdpZGdldENvbnRleHQucGFpbnRNb3ppbGxhV2lkZ2V0KHR5
cGUsICZzdGF0ZSwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xs
YmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xs
YmFyKQpAQCAtMjI0LDcgKzIyNiw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Ny
b2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sCiAgICAgLy8g
VGhpcyBpcyB1bnVzZWQgYnkgdGhlIG1vel9ndGtfc2Nyb2xsZWNkX3dpbmRvd19wYWludC4KICAg
ICBHdGtXaWRnZXRTdGF0ZSBzdGF0ZTsKICAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0ID0g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgo
KSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsq
PihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5wYWludE1vemlsbGFHdGtXaWRn
ZXQoTU9aX0dUS19TQ1JPTExFRF9XSU5ET1csIGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAm
c3RhdGUsIDApOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250
ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFX
aWRnZXQoTU9aX0dUS19TQ1JPTExFRF9XSU5ET1csICZzdGF0ZSwgMCk7CiB9CiAKIHZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTI0MCw3ICsyNDMsOCBA
QCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYQogICAgIHN0YXRlLmN1cnBvcyA9IHNjcm9sbGJhci0+
Y3VycmVudFBvcygpOwogCiAgICAgR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUgPSBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBNT1pfR1RLX1NDUk9MTEJBUl9U
SFVNQl9WRVJUSUNBTCA6IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hPUklaT05UQUw7Ci0gICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCku
Z2V0KCkpLT5wYWludE1vemlsbGFHdGtXaWRnZXQodHlwZSwgY29udGV4dCwgcmVjdCwgJnN0YXRl
LCAwKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwg
cmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwgJnN0YXRl
LCAwKTsKIH0KIAogSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KQpAQCAt
MjU2LDYgKzI2MCw5IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVjdChTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zCiAKIGJvb2wgU2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKKyAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRo
ZSBkYW1hZ2VSZWN0CiAgICAgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBO
b1BhcnQ7CiAKQEAgLTM0OCw3ICszNTUsOCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYgogICAg
ICAgICBzdGF0ZS5pbkhvdmVyID0gRkFMU0U7CiAgICAgfQogCi0gICAgc3RhdGljX2Nhc3Q8UmVu
ZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5wYWludE1v
emlsbGFHdGtXaWRnZXQoTU9aX0dUS19TQ1JPTExCQVJfQlVUVE9OLCBjb250ZXh0LCByZWN0LCAm
c3RhdGUsIGZsYWdzKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQo
Y29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQoTU9a
X0dUS19TQ1JPTExCQVJfQlVUVE9OLCAmc3RhdGUsIGZsYWdzKTsKIH0KIAogdm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyogdmlldywgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiYjgwNjU4
MjkwZTYxNDdjZTdiMGM1ZDlkMTliOWMwNTRiMTI4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
Imd0a2RyYXdpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CitjbGFzcyBSZW5kZXJUaGVtZUd0azsKKworY2xhc3MgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCB7CitwdWJsaWM6CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgfldpZGdldFJlbmRlcmluZ0NvbnRleHQoKTsKKyAg
ICBib29sIHBhaW50TW96aWxsYVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUsIEd0a1dpZGdldFN0
YXRlKiwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05PTkUpOwor
Citwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7CisgICAg
SW50UmVjdCBtX3RhcmdldFJlY3Q7CisgICAgR2RrUmVjdGFuZ2xlIG1fcGFpbnRSZWN0OworICAg
IEludFNpemUgbV9leHRyYVNwYWNlOworICAgIGJvb2wgbV9oYWRFcnJvcjsKKworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgR2RrRHJhd2FibGUqIG1fdGFyZ2V0OworI2Vsc2UKKyAgICBj
YWlyb190KiBtX3RhcmdldDsKKyNlbmRpZgorCit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg5ZTJhMmJkMDZiY2IzN2U3OGNlZTk2ZjQxNzNjNDIzOTMwOTY2YWIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3Rr
Mi5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hh
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5o
IgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBHZGtQaXhtYXAqIGdTY3JhdGNoQnVmZmVyID0gMDsKK3N0YXRpYyB2b2lk
IHB1cmdlU2NyYXRjaEJ1ZmZlcigpCit7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAg
ICBnX29iamVjdF91bnJlZihnU2NyYXRjaEJ1ZmZlcik7CisgICAgZ1NjcmF0Y2hCdWZmZXIgPSAw
OworfQorCisvLyBGSVhNRTogUGVyaGFwcyB3ZSBjYW4gc2hhcmUgc29tZSBvZiB0aGlzIGNvZGUg
d2l0aCB0aGUgQ29udGV4dFNoYWRvd0NhaXJvLgorLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBh
IHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVu
ZGVyLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2
ZXJ5IG9wZXJhdGlvbiwKKy8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVk
KCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQorfTsKK3N0YXRpYyBQdXJnZVNjcmF0Y2hCdWZm
ZXJUaW1lciBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lcjsKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2Ny
YXRjaEJ1ZmZlclB1cmdlKCkKK3sKKyAgICBpZiAocHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RvcCgpOworICAgIHB1
cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0YXJ0T25lU2hvdCgyKTsKK30KKworc3RhdGljIEludFNp
emUgZ2V0RXh0cmFTcGFjZUZvcldpZGdldChSZW5kZXJUaGVtZUd0ayogdGhlbWUpCit7CisgICAg
Ly8gQ2hlY2tib3hlcyBhbmQgc2Nyb2xsYmFyIHRodW1icyBvZnRlbiBkcmF3IG91dHNpZGUgdGhl
aXIgYm91bmRhcmllcy4gSGVyZSB3ZSBmaWd1cmUgb3V0CisgICAgLy8gdGhlIG1heGltdW0gYW1v
dW50IG9mIHNwYWNlIHdlIG5lZWQgZm9yIGFueSB0eXBlIG9mIHdpZGdldCBhbmQgdXNlIHRoYXQg
dG8gaW5jcmVhc2UgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgc2NyYXRjaCBidWZmZXIsIHdoaWxl
IHByZXNlcnZpbmcgdGhlIGZpbmFsIHdpZGdldCBwb3NpdGlvbi4KKworICAgIC8vIFRoZSBjaGVj
a2JveCBleHRyYSBzcGFjZSBpcyBjYWxjdWxhdGVkIGJ5IGxvb2tpbmcgYXQgdGhlIHdpZGdldCBz
dHlsZS4KKyAgICBpbnQgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZzsKKyAgICB0aGVt
ZS0+Z2V0SW5kaWNhdG9yTWV0cmljcyhDaGVja2JveFBhcnQsIGluZGljYXRvclNpemUsIGluZGlj
YXRvclNwYWNpbmcpOworICAgIEludFNpemUgZXh0cmFTcGFjZShpbmRpY2F0b3JTcGFjaW5nLCBp
bmRpY2F0b3JTcGFjaW5nKTsKKworICAgIC8vIFNjcm9sbGJhciB0aHVtYnMgbmVlZCBhdCBsZWFz
dCBhbiBleHRyYSBwaXhlbCBhbG9uZyB0aGVpciBtb3ZlbWVudCBheGlzLgorICAgIHJldHVybiBl
eHRyYVNwYWNlLmV4cGFuZGVkVG8oSW50U2l6ZSgxLCAxKSk7Cit9CisKK1dpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCisgICAgOiBtX2dyYXBoaWNzQ29u
dGV4dChncmFwaGljc0NvbnRleHQpCisgICAgLCBtX3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKKyAg
ICAsIG1faGFkRXJyb3IoZmFsc2UpCit7CisgICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0
KCkpOworCisgICAgLy8gRmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xv
cm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQgCisgICAgLy8gdG8gYSB0
ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVj
ZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAgICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUg
dGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFu
c2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29s
b3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpKSB7CisgICAgICAgIG1fcGFp
bnRSZWN0ID0gZ3JhcGhpY3NDb250ZXh0LT5nZXRDVE0oKS5tYXBSZWN0KHRhcmdldFJlY3QpOwor
ICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrRHJhd2FibGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNvbWUgd2lkZ2V0cyByZW5kZXIgb3V0c2lkZSB0
aGVpciByZWN0YW5nbGVzLiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgbV9leHRy
YVNwYWNlID0gZ2V0RXh0cmFTcGFjZUZvcldpZGdldCh0aGVtZSk7CisKKyAgICAvLyBPZmZzZXQg
dGhlIHRhcmdldCByZWN0YW5nbGUgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgd2l0aGluIHRo
ZSBib3VuZGFyaWVzIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICBtX3BhaW50UmVjdCA9IElu
dFJlY3QoSW50UG9pbnQobV9leHRyYVNwYWNlLndpZHRoKCksIG1fZXh0cmFTcGFjZS5oZWlnaHQo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0UmVjdC5zaXpl
KCkpOworCisgICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCkgKyAobV9leHRyYVNw
YWNlLndpZHRoKCkgKiAyKTsKKyAgICBpbnQgaGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgp
ICsgKG1fZXh0cmFTcGFjZS5oZWlnaHQoKSAqIDIpOworICAgIGludCBzY3JhdGNoV2lkdGggPSAw
OworICAgIGludCBzY3JhdGNoSGVpZ2h0ID0gMDsKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisg
ICAgICAgIGdka19kcmF3YWJsZV9nZXRfc2l6ZShnU2NyYXRjaEJ1ZmZlciwgJnNjcmF0Y2hXaWR0
aCwgJnNjcmF0Y2hIZWlnaHQpOworCisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUg
dGhlIGJ1ZmZlciBpZiB0aGUgY3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgorICAgIGlm
ICghZ1NjcmF0Y2hCdWZmZXIgfHwgc2NyYXRjaFdpZHRoIDwgd2lkdGggfHwgc2NyYXRjaEhlaWdo
dCA8IGhlaWdodCkgeworICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsKKyAgICAgICAgLy8g
Um91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZm
ZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCisgICAgICAgIHdpZHRoID0gKDEgKyAod2lk
dGggPj4gNSkpIDw8IDU7CisgICAgICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwg
NTsKKworICAgICAgICBnU2NyYXRjaEJ1ZmZlciA9IGdka19waXhtYXBfbmV3KDAsIHdpZHRoLCBo
ZWlnaHQsIGdka19jb2xvcm1hcF9nZXRfdmlzdWFsKHRoZW1lLT5tX3RoZW1lUGFydHMtPmNvbG9y
bWFwKS0+ZGVwdGgpOworICAgICAgICBnZGtfZHJhd2FibGVfc2V0X2NvbG9ybWFwKGdTY3JhdGNo
QnVmZmVyLCB0aGVtZS0+bV90aGVtZVBhcnRzLT5jb2xvcm1hcCk7CisgICAgfQorICAgIG1fdGFy
Z2V0ID0gZ1NjcmF0Y2hCdWZmZXI7CisKKyAgICAvLyBDbGVhciB0aGUgc2NyYXRjaCBidWZmZXIu
CisgICAgUGxhdGZvcm1SZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9w
dFBsYXRmb3JtUmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Cit9
CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKK3sK
KyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUg
ZmFsbGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdl
dCgpKTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1f
Z3JhcGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBEb24ndCBwYWludCB0aGUgcmVzdWx0cyBiYWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAg
ICBpZiAobV9oYWRFcnJvcikgeworICAgICAgICBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEl0J3MgdW5jbGVhciBp
ZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgc291cmNlIGhlcmUuCisg
ICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gbV9ncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3Vy
Y2UoY2Fpcm9fZ2V0X3NvdXJjZShjYWlyb0NvbnRleHQpKTsKKworICAgIC8vIFRoZSBibGl0IHJl
Y3RhbmdsZSBpcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IHJlY3RhbmdsZSBhZGp1c3RlZCBmb3IgYW55
IGV4dHJhIHNwYWNlLgorICAgIEludFJlY3QgZnVsbFRhcmdldFJlY3QobV90YXJnZXRSZWN0KTsK
KyAgICBmdWxsVGFyZ2V0UmVjdC5pbmZsYXRlWChtX2V4dHJhU3BhY2Uud2lkdGgoKSk7CisgICAg
ZnVsbFRhcmdldFJlY3QuaW5mbGF0ZVkobV9leHRyYVNwYWNlLmhlaWdodCgpKTsKKworICAgIGdk
a19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWlyb0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCBm
dWxsVGFyZ2V0UmVjdC54KCksIGZ1bGxUYXJnZXRSZWN0LnkoKSk7CisgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNhaXJvQ29udGV4dCwgZnVsbFRhcmdldFJlY3QueCgpLCBmdWxsVGFyZ2V0UmVjdC55KCks
IGZ1bGxUYXJnZXRSZWN0LndpZHRoKCksIGZ1bGxUYXJnZXRSZWN0LmhlaWdodCgpKTsKKyAgICBj
YWlyb19maWxsKGNhaXJvQ29udGV4dCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjYWlyb0NvbnRl
eHQsIHByZXZpb3VzU291cmNlLmdldCgpKTsKKyAgICBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJn
ZSgpOworfQorCitib29sIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdl
dChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBpbnQgZmxh
Z3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3sKKyAgICAvLyBTb21ldGltZXMg
bW96X2d0a193aWRnZXRfcGFpbnQgbW9kaWZpZXMgdGhlIGNsaXBwaW5nIHJlY3RhbmdsZSwgc28g
d2UgbXVzdCB1c2UgYSBjb3B5LgorICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdCA9IG1fcGFpbnRS
ZWN0OworICAgIG1faGFkRXJyb3IgPSBtb3pfZ3RrX3dpZGdldF9wYWludCh0eXBlLCBtX3Rhcmdl
dCwgJmNsaXBSZWN0LCAmbV9wYWludFJlY3QsCisgICAgICAgIHN0YXRlLCBmbGFncywgdGV4dERp
cmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOworICAgIHJldHVybiAhbV9oYWRFcnJvcjsKK30K
KworfQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjY1
Nzg1OTcxNGZjYjhiNGRhNjJhYTRiZTBiNDYyYWYwMTY4YzA3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorICAgIDogbV9ncmFw
aGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICwgbV90YXJnZXRSZWN0KHRhcmdldFJl
Y3QpCisgICAgLCBtX3BhaW50UmVjdCh0YXJnZXRSZWN0KQorICAgICwgbV9oYWRFcnJvcihmYWxz
ZSkKKyAgICAsIG1fdGFyZ2V0KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKQoreworfQorCitX
aWRnZXRSZW5kZXJpbmdDb250ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCit7Cit9CisK
K2Jvb2wgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1l
V2lkZ2V0VHlwZSB0eXBlLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGludCBmbGFncywgR3RrVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQoreworICAgIG1faGFkRXJyb3IgPSBtb3pfZ3RrX3dp
ZGdldF9wYWludCh0eXBlLCBtX3RhcmdldCwgJm1fcGFpbnRSZWN0LCBzdGF0ZSwgZmxhZ3MsIHRl
eHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4gIW1faGFkRXJyb3I7
Cit9CisKK30KKworI2VuZGlmIC8vICFHVEtfQVBJX1ZFUlNJT05fMgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72788</attachid>
            <date>2010-11-02 22:03:18 -0700</date>
            <delta_ts>2010-11-10 11:48:42 -0800</delta_ts>
            <desc>Patch with slightly updated design</desc>
            <filename>bug-40139-20101102220316.patch</filename>
            <type>text/plain</type>
            <size>63448</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MmVlMWVkYzkyZGNlMDFkNWNlYjFhNTc0NzY5ZWIwNTA2MDA4NzM3Li5jZjMxNjE4
MjAxN2ZkNTQ1NTIxMzc5ZDkzNzFhOGFkYTA3YzA5YzRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTAtMjkgIE1paGFpIFBh
cnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZjY2OWQzMzI2NWI1NWJhOTcw
ZjMwMzdmYjFhZjNiOTM5MmQzNjgwZS4uNDI1NzlkMGEyZGQ0OGJiYzFkNjcwZmE4NjVmNzAzMTNi
Y2RjMmJhNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTUyNzQsMTEgKzUyNzQsNiBA
QCBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAogZmFzdC9kb20v
R2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAogZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKIAotIyBH
VEsrIHRoZW1lLXJlbmRlcmVkIHdpZGdldHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybXMK
LSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5Ci1mYXN0L2Zv
cm1zL3NsaWRlci10cmFuc2Zvcm1lZC5odG1sCi1mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1l
ZC5odG1sCi0KICMgU29tZSBpbnB1dCB0eXBlPXJhbmdlIHRlc3RzIGZhaWwgYmVjYXVzZSBvZiB0
aGUgc2l6ZSAKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBHVEsrIHRoZW1lcy4KIGZhc3QvZm9y
bXMvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZGNlMjU5YjEyNmFmMTEwYjI2YTc2NjllMzM3NjY2YmExZjI5
ZDViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9y
bXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKKworRkFJ
TDogZXhwZWN0ZWQgc2xpZGVyIHZhbHVlIDM5LCBnb3QgMzgKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTcxZTAxNTY3NjNlNDUxNDk3Yjhk
YmIzN2UyZThkNTVlYmE5YTUwOS4uY2FmZDQ2NjdhMGQyODlmYzc0YWUyNjA0ODRkOWEwNzA0ZWY5
MzE2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMTkgQEAKKzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIE1vdmUgaW5wdXQgdHlwZT1yYW5nZSByZW5kZXJpbmcgdG8gUmVuZGVy
VGhlbWVHdGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ3ODM2CisKKyAgICAgICAgQmVnaW4gbW92aW5nIHdpZGdldCByZW5kZXJpbmcgb3V0IG9mIHRo
ZSBvbGQgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUsCisgICAgICAgIHdoaWNoIHNob3VsZCBy
ZW1vdmUgbWFueSBsaW5lcyBvZiBjb2RlIHdoZW4gY29tcGxldGVkLiBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0CisgICAgICAgIG5vdyBoaWRlcyB0aGUgR1RLKyAyIHZzLiAzIEFQSSBkaWZmZXJlbmNl
cywgc28gdGhhdCBSZW5kZXJUaGVtZUd0ayBjYW4gc3RheQorICAgICAgICB2ZXJzaW9uIGFnbm9z
dGljLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIHBhdGNoIGRvZXMgbm90IGNoYW5n
ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6
IGd0a0NvbnRhaW5lcigpIG5vdyByZXR1cm5zIGEKKyAgICAgICAgR3RrV2lkZ2V0LCBzbyB1cGRh
dGUgdGhlIGNhc3QgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpnZXRH
dGtTdGF0ZVR5cGUpOiBBZGRlZCB0aGlzIGhlbHBlciB3aGljaAorICAgICAgICBjb252ZXJ0cyBh
IFJlbmRlck9iamVjdCBzdGF0ZSBpbnRvIGEgR3RrU3RhdGVUeXBlLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KTogUmVtb3ZlZCB3b3JrLWFyb3Vu
ZHMgZm9yCisgICAgICAgIHNjYWxlIHBhaW50aW5nLCBhcyBpdCdzIG5vdCBoYW5kbGVkIGJ5IHRo
aXMgbWV0aG9kIGFueSBsb25nZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
cGFpbnRTbGlkZXJUcmFjayk6IFVwZGF0ZWQgdG8gdXNlCisgICAgICAgIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJU
aHVtYik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRodW1iU2l6ZSk6IEdldCB0aGUgc2l6ZQorICAgICAgICBwcm9wZXJ0aWVzIGRpcmVjdGx5
IGZyb20gdGhlIHdpZGdldCBub3cgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIE1vemlsbGEgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpzZXR1cFdpZGdldEFuZEFkZFRvQ29u
dGFpbmVyKTogQWRkZWQgdGhpcworICAgICAgICBoZWxwZXIgd2hpY2ggcmVkdWNlcyB0aGUgYW1v
dW50IG9mIGNvZGUgcXVpdGUgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6Z3RrQ29udGFpbmVyKTogVXBkYXRlZCB0byB1c2UgaGVscGVyLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6Omd0a0J1dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6Omd0a0VudHJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6Z3RrVHJlZVZpZXcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjpndGtWU2NhbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpndGtIU2NhbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSk6IFJlbW92ZWQKKyAgICAgICAgR1RLX0NPTlRB
SU5FUiBjYXN0LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oOiBVcGRh
dGVkIHRvIGFkZCBuZXcgR3RrSFNjYWxlIGFuZAorICAgICAgICAgR3RrVlNjYWxlIG1lbWJlcnMu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaDogQWRlZCBu
ZXcgbWV0aG9kcyB0byBwcm94eQorICAgICAgICBndGtfcGFpbnRfYm94LCBndGtfcGFpbnRfZm9j
dXMgYW5kIGd0a19wYWludF9zbGlkZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHRHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6Omd0a1BhaW50Qm94KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZvY3VzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFNsaWRlcik6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEJveCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRGb2N1cyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFp
bnRTbGlkZXIpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYzog
UmVtb3ZlZCBkZWZ1bmN0IGNvZGUhCisgICAgICAgIChtb3pfZ3RrX2dldF93aWRnZXRfYm9yZGVy
KToKKyAgICAgICAgKG1vel9ndGtfd2lkZ2V0X3BhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvZ3RrM2RyYXdpbmcuYzogRGl0dG8uCisgICAgICAgIChtb3pfZ3RrX2dldF93aWRnZXRfYm9y
ZGVyKToKKyAgICAgICAgKG1vel9ndGtfd2lkZ2V0X3BhaW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvZ3RrZHJhd2luZy5oOgorCisyMDEwLTEwLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbR1RLXSBXaWRnZXRzIGRvIG5vdCBzdXBwb3J0IENTUyB0cmFuc2Zvcm1hdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5
CisKKyAgICAgICAgSW5zdGVhZCBvZiByZW5kZXJpbmcgZGlyZWN0bHkgb250byB0aGUgdGFyZ2V0
IGRyYXdhYmxlIHdoZW4gcmVuZGVyaW5nCisgICAgICAgIGZvcm0gY29udHJvbHMgb24gR1RLKyAy
LjAsIHJlbmRlciBvbnRvIGFuIGludGVybWVkaWF0ZSBzdXJmYWNlIGFuZCB1c2UKKyAgICAgICAg
Y2Fpcm8gdG8gYmxpdCB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIHRhcmdldCBzdXJmYWNlLiBUaGlz
IGhhcyB0d28KKyAgICAgICAgYmVuZWZpdHMuIFRoZSBmaXJzdCBpcyB0aGF0IGl0IGFsd2F5cyBo
b25vcnMgdGhlIGN1cnJlbnQgQ2Fpcm8KKyAgICAgICAgdHJhbnNmb3JtYXRpb24uIFRoZSBzZWNv
bmQgaXMgdGhhdCBzaW5jZSB0aGUgaW50ZXJtZWRpYXRlIGRyYXdhYmxlIGlzCisgICAgICAgIGFs
d2F5cyBhIDMyLWJpdCBHZGtQaXhtYXAsIHdlIGRvIG5vdCBoYXZlIHRvIGhhdmUgYSBzZXQgb2Yg
d2lkZ2V0cworICAgICAgICBwZXItY29sb3JtYXAgYW55IGxvbmdlci4KKworICAgICAgICBUaGlz
IGNoYW5nZSBhbHNvIGJlZ2lucyB0aGUgYWJzdHJhY3Rpb24gb2Ygd2lkZ2V0IHJlbmRlcmluZyBz
byB0aGF0IEdUSysKKyAgICAgICAgMiBhbmQgR1RLKyAzIGNhbiB1c2UgdGhlIHNhbWUgY29kZSBw
YXRoLiBUaGUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWxsCisgICAgICAgIGV2ZW50dWFsbHkg
aGlkZSBhbGwgdmVyc2lvbiBkaWZmZXJlbmNlcyBmcm9tIFJlbmRlclRoZW1lR3RrLCB3aGljaCBj
YW4KKyAgICAgICAganVzdCBmb2N1cyBvbiBpbnRlcnByZXRpbmcgdGhlIEd0a1N0eWxlIHByb3Bl
cnRpZXMuIAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBXaWRnZXRSZW5kZXJpbkNv
bnRleHQgc291cmNlIGZpbGVzIHRvIHRoZSBzb3VyY2VzIGxpc3QuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHA6CisgICAgICAgIChXVEY6
OnJlZlBsYXRmb3JtUHRyKTogQWRkIGEgc3BlY2lhbGl6YXRpb24gZm9yIENhaXJvIHBhdHRlcm5z
LgorICAgICAgICAoV1RGOjpkZXJlZlBsYXRmb3JtUHRyKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKTogTm8gbG9uZ2VyIGtlZXAgYSBzZXQgb2YK
KyAgICAgICAgd2lkZ2V0cyBwZXItY29sb3JtYXAgZm9yIEdUSyssIGluc3RlYWQganVzdCBkZXRl
cm1pbmUgaWYgd2UgY2FuIHVzZSBSR0JBCisgICAgICAgIGNvbG9ybWFwcyBhbmQgZ28gZnJvbSB0
aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JN
ZXRyaWNzKTogUHV0IHRoZSBsb2dpYyBmb3IKKyAgICAgICAgZ2V0dGluZyB0b2dnbGUgYnV0dG9u
IGluZGljYXRvciBtZXRyaWNzIGludG8gdGhpcyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QpOiBOb3cgdXNlcworICAgICAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHRvIGRvIHdpZGdldCByZW5kZXJpbmcuCisgICAgICAgIChXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKTogVXNlIHRoZSBuZXcgZ2V0SW5kaWNhdG9yTWV0cmljcyBoZWxw
ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmg6IEFkZGVkIGEgbWVt
YmVyIHRvIHRyYWNrIHdoZXRoZXIgb3Igbm90CisgICAgICAgICAgdGhlIHdpZGdldHMgYXJlIHVz
aW5nIGEgUkdCQSBjb2xvcm1hcC4gQWxzbyByZW1vdmUgYSBkZWZ1bmN0IFBhZ2UqCisgICAgICAg
ICAgbWVtYmVyLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHA6
IFN3aXRjaCBhbGwgd2lkZ2V0IGRyYXdpbmcKKyAgICAgICAgb3BlcmF0aW9ucyB0byB1c2UgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3Rr
OjpwYWludFRyYWNrQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpwdXJnZVNjcmF0Y2hCdWZmZXIpOiBBZGRlZCwgdGhpcyBpcyBzaW1pbGFy
IHRvIHRoZSBzY3JhdGNoCisgICAgICAgIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBmcm9tIENvbnRl
eHRTaGFkb3cuCisgICAgICAgIChXZWJDb3JlOjpQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lcjo6Zmly
ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0Nv
bnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6
On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFXaWRnZXQpOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0Nv
bnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0
OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFXaWRnZXQpOiBBZGRlZC4KKwogMjAxMC0x
MC0yOSAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW0gY2xhbmddIFVucmV2aWV3ZWQgZml4IHJlbW92aW5nIGNvbXBpbGVyIHdhcm5pbmcuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCA2YzFiYzM1ZTk2NTQ0M2M1ZmQ4ZWJmZmVjMTcwNDRiYTZhYTU4M2E4Li5jZDUwY2Mx
ZjZhZmZjM2M1ZjM4YmFlZGUwNzkyN2FkMzBlNWQ4YzQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTM1OTksNiArMzU5
OSw5IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2hlZWxFdmVudEd0
ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAK
aW5kZXggZDI4OTU4NWQ4OWEzYmIwOTgxNzRhOWQ4OWJiMzc5NGJkYTJjMTc0OS4uMjg1NWFlZjEz
MjdhMzI2OTEwMmUxMmYxOTNiNTY4OWIwNTZhMDNiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVJlZlB0ckNhaXJvLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwCkBAIC01NCw2
ICs1NCwyMCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFj
ZV90KiBwdHIpCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShwdHIpOwogfQogCit0ZW1w
bGF0ZSA8PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fcmVmZXJlbmNlKHB0
cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3Jt
UHRyKGNhaXJvX3BhdHRlcm5fdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGNhaXJv
X3BhdHRlcm5fZGVzdHJveShwdHIpOworfQorCisKIHRlbXBsYXRlIDw+IGNhaXJvX2ZvbnRfZmFj
ZV90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19mb250X2ZhY2VfdCogcHRyKQogewogICAgIGlmIChw
dHIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
UmVmUHRyQ2Fpcm8uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1S
ZWZQdHJDYWlyby5oCmluZGV4IDNiNzIwYzYyMTg1NGIxMjUyZGY1YWEwYjAxZjdiMDU3MzIzMDFi
ZmIuLmJhOGVjZjIwOGUzNjMzMmJhNjE0YWMyMmE2MzZmMGNkM2I0MGJlNjkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1SZWZQdHJDYWlyby5o
CkBAIC0yNCw2ICsyNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwogdHlw
ZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwordHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
X2ZvbnRfZmFjZSBjYWlyb19mb250X2ZhY2VfdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zY2Fs
ZWRfZm9udCBjYWlyb19zY2FsZWRfZm9udF90OwogCkBAIC0zOSw2ICs0MCw5IEBAIHRlbXBsYXRl
IDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb190KiBwdHIpOwogdGVtcGxhdGUgPD4gY2Fp
cm9fc3VyZmFjZV90KiByZWZQbGF0Zm9ybVB0cihjYWlyb19zdXJmYWNlX3QqIHB0cik7CiB0ZW1w
bGF0ZSA8PiB2b2lkIGRlcmVmUGxhdGZvcm1QdHIoY2Fpcm9fc3VyZmFjZV90KiBwdHIpOwogCit0
ZW1wbGF0ZSA8PiBjYWlyb19wYXR0ZXJuX3QqIHJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5f
dCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZlBsYXRmb3JtUHRyKGNhaXJvX3BhdHRlcm5fdCop
OworCiB0ZW1wbGF0ZSA8PiBjYWlyb19mb250X2ZhY2VfdCogcmVmUGxhdGZvcm1QdHIoY2Fpcm9f
Zm9udF9mYWNlX3QqKTsKIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQbGF0Zm9ybVB0cihjYWlyb19m
b250X2ZhY2VfdCopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5k
ZXggOGRmNWNkYTA5Mjc4Y2U4ODJlZjk4MDVlZjE3MTAwYjUzMTczODM4Mi4uMzIwNTk0MWMwY2Jh
NjJkNDc3ZmQ3OGY2NmQ0ZTdlNTMyMDk3MTY2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBM
dGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00
MCw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdl
cy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtMTUxLDE5ICsxNTMsMzAgQEAgUmVu
ZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKCkKICAgICAsIG1fcGF1c2VCdXR0b24oMCkKICAg
ICAsIG1fc2Vla0JhY2tCdXR0b24oMCkKICAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKLSAg
ICAsIG1fcGFydHNUYWJsZShhZG9wdFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgw
LCAwLCAwLCBnX2ZyZWUpKSkKKyAgICAsIG1fdGhlbWVQYXJ0cyhnX25ldzAoR3RrVGhlbWVQYXJ0
cywgMSkpCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAsIG1fdGhlbWVQYXJ0c0hhdmVS
R0JBQ29sb3JtYXAodHJ1ZSkKKyNlbmRpZgogewotICAgIGlmICghbW96R3RrUmVmQ291bnQpIHsK
LSAgICAgICAgbW96X2d0a19pbml0KCk7CiAKLSAgICAgICAgLy8gVXNlIHRoZSB0aGVtZSBwYXJ0
cyBmb3IgdGhlIGRlZmF1bHQgZHJhd2FibGUuCi0gICAgICAgIG1vel9ndGtfdXNlX3RoZW1lX3Bh
cnRzKHBhcnRzRm9yRHJhd2FibGUoMCkpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAg
R2RrQ29sb3JtYXAqIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnZGtf
c2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAgIGlmICghY29sb3JtYXApIHsKKyAgICAgICAgbV90
aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCA9IGZhbHNlOworICAgICAgICBjb2xvcm1hcCA9IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsK
ICAgICB9CisgICAgbV90aGVtZVBhcnRzLT5jb2xvcm1hcCA9IGNvbG9ybWFwOworI2VuZGlmCiAK
KyAgICAvLyBJbml0aWFsaXplIHRoZSBNb3ppbGxhIHRoZW1lIGRyYXdpbmcgY29kZS4KKyAgICBp
ZiAoIW1vekd0a1JlZkNvdW50KSB7CisgICAgICAgIG1vel9ndGtfaW5pdCgpOworICAgICAgICBt
b3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhtX3RoZW1lUGFydHMpOworICAgIH0KICAgICArK21vekd0
a1JlZkNvdW50OwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGluaXRNZWRpYVN0eWxpbmcoZ3Rr
X3JjX2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSksIGZhbHNlKTsKKyAgICBp
bml0TWVkaWFTdHlsaW5nKGd0a19yY19nZXRfc3R5bGUoZ3RrQ29udGFpbmVyKCkpLCBmYWxzZSk7
CiAjZW5kaWYKIH0KIApAQCAtMTgyLDM2ICsxOTUsMTkgQEAgUmVuZGVyVGhlbWVHdGs6On5SZW5k
ZXJUaGVtZUd0aygpCiAgICAgbV9zZWVrQmFja0J1dHRvbi5jbGVhcigpOwogICAgIG1fc2Vla0Zv
cndhcmRCdXR0b24uY2xlYXIoKTsKIAotICAgIEdMaXN0KiB2YWx1ZXMgPSBnX2hhc2hfdGFibGVf
Z2V0X3ZhbHVlcyhtX3BhcnRzVGFibGUuZ2V0KCkpOwotICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkg
PCBnX2xpc3RfbGVuZ3RoKHZhbHVlcyk7IGkrKykKLSAgICAgICAgbW96X2d0a19kZXN0cm95X3Ro
ZW1lX3BhcnRzX3dpZGdldHMoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtUaGVtZVBhcnRz
Kj4oZ19saXN0X250aF9kYXRhKHZhbHVlcywgaSkpKTsKLQogICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX2d0a1dpbmRvdyk7CiB9CiAKLUd0a1RoZW1lUGFydHMqIFJlbmRlclRoZW1lR3RrOjpwYXJ0
c0ZvckRyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQgcGFydCwgaW50JiBpbmRpY2F0
b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpIGNvbnN0CiB7Ci0jaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKLSAgICAvLyBBIG51bGwgZHJhd2FibGUgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBz
Y3JlZW4gY29sb3JtYXAuCi0gICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwID0gMDsKLSAgICBpZiAo
IWRyYXdhYmxlKQotICAgICAgICBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29s
b3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbG9y
bWFwID0gZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChkcmF3YWJsZSk7Ci0KLSAgICBHdGtUaGVt
ZVBhcnRzKiBwYXJ0cyA9IHN0YXRpY19jYXN0PEd0a1RoZW1lUGFydHMqPihnX2hhc2hfdGFibGVf
bG9va3VwKG1fcGFydHNUYWJsZS5nZXQoKSwgY29sb3JtYXApKTsKLSAgICBpZiAoIXBhcnRzKSB7
Ci0gICAgICAgIHBhcnRzID0gZ19uZXcwKEd0a1RoZW1lUGFydHMsIDEpOwotICAgICAgICBwYXJ0
cy0+Y29sb3JtYXAgPSBjb2xvcm1hcDsKLSAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydChtX3Bh
cnRzVGFibGUuZ2V0KCksIGNvbG9ybWFwLCBwYXJ0cyk7CisgICAgQVNTRVJUKHBhcnQgPT0gQ2hl
Y2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFkaW9QYXJ0KTsKKyAgICBpZiAocGFydCA9PSBDaGVja2Jv
eFBhcnQpIHsKKyAgICAgICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9y
U2l6ZSwgJmluZGljYXRvclNwYWNpbmcpOworICAgICAgICByZXR1cm47CiAgICAgfQotI2Vsc2UK
LSAgICAvLyBGb3IgR1RLKyAzLjAgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gd29ycnkgYWJvdXQgbWFp
bnRhaW5pbmcgYSBzZXQgb2Ygd2lkZ2V0cyBwZXItY29sb3JtYXAuCi0gICAgc3RhdGljIEd0a1Ro
ZW1lUGFydHMqIHBhcnRzID0gZ19zbGljZV9uZXcwKEd0a1RoZW1lUGFydHMpOwotI2VuZGlmIC8v
IEdUS19BUElfVkVSU0lPTl8yCiAKLSAgICByZXR1cm4gcGFydHM7CisgICAgLy8gUmFkaW9QYXJ0
CisgICAgbW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRv
clNwYWNpbmcpOwogfQogCiBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFw
cGVhcmFuY2UpCkBAIC0yMzMsNiArMjI5LDE3IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMo
Q29udHJvbFBhcnQgYXBwZWFyYW5jZSkKICAgICB9CiB9CiAKK0d0a1N0YXRlVHlwZSBSZW5kZXJU
aGVtZUd0azo6Z2V0R3RrU3RhdGVUeXBlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIGlm
ICghaXNFbmFibGVkKG9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wob2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBpZiAoaXNQcmVzc2VkKG9iamVj
dCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOworICAgIGlmIChpc0hvdmVyZWQo
b2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsKKyAgICByZXR1cm4g
R1RLX1NUQVRFX05PUk1BTDsKK30KKwogYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1
c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzdXBw
b3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwpAQCAtMjg5LDY5ICsyOTYsNiBAQCBzdGF0
aWMgdm9pZCBhZGp1c3RNb3ppbGxhU3R5bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBS
ZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHlw
YWRkaW5nICsgYm90dG9tLCBGaXhlZCkpOwogfQogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVtZVdpZGdl
dFR5cGUgdHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBHdGtXaWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1c3Qg
Y2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQbGF0Zm9ybVJlZlB0cjxHZGtEcmF3
YWJsZT4gZHJhd2FibGUoY29udGV4dC0+Z2RrRHJhd2FibGUoKSk7Ci0gICAgR2RrUmVjdGFuZ2xl
IHBhaW50UmVjdCwgY2xpcFJlY3Q7Ci0gICAgaWYgKGRyYXdhYmxlKSB7Ci0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICAgICAgSW50UG9pbnQgcG9z
ID0gY3RtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIHBhaW50UmVjdCA9IElu
dFJlY3QocG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQot
ICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIGNhaXJvIHJlY3RhbmdsZSB3aXRoIHRoZSB0YXJnZXQg
d2lkZ2V0IHJlZ2lvbi4gVGhpcyAgd2lsbAotICAgICAgICAvLyBwcmV2ZW50IHRoZSB0aGVtZSBk
cmF3aW5nIGNvZGUgZnJvbSBkcmF3aW5nIGludG8gcmVnaW9ucyB0aGF0IGNhaXJvIHdpbGwKLSAg
ICAgICAgLy8gY2xpcCBhbnl3YXkuCi0gICAgICAgIGRvdWJsZSBjbGlwWDEsIGNsaXBYMiwgY2xp
cFkxLCBjbGlwWTI7Ci0gICAgICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSwgJmNsaXBYMSwgJmNsaXBZMSwgJmNsaXBYMiwgJmNsaXBZMik7Ci0gICAgICAg
IEludFBvaW50IGNsaXBQb3MgPSBjdG0ubWFwUG9pbnQoSW50UG9pbnQoY2xpcFgxLCBjbGlwWTEp
KTsKLQotICAgICAgICBjbGlwUmVjdC53aWR0aCA9IGNsaXBYMiAtIGNsaXBYMTsKLSAgICAgICAg
Y2xpcFJlY3QuaGVpZ2h0ID0gY2xpcFkyIC0gY2xpcFkxOwotICAgICAgICBjbGlwUmVjdC54ID0g
Y2xpcFBvcy54KCk7Ci0gICAgICAgIGNsaXBSZWN0LnkgPSBjbGlwUG9zLnkoKTsKLSAgICAgICAg
Z2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJnBhaW50UmVjdCwgJmNsaXBSZWN0LCAmY2xpcFJlY3Qp
OwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW4gc29tZSBzaXR1YXRpb25zLCBsaWtlIGR1
cmluZyBwcmludCBwcmV2aWV3cywgdGhpcyBHcmFwaGljc0NvbnRleHQgaXMgbm90Ci0gICAgICAg
IC8vIGJhY2tlZCBieSBhIEdka0RyYXdhYmxlLiBJbiB0aG9zZSBzaXR1YXRpb25zLCB3ZSByZW5k
ZXIgb250byBhIHBpeG1hcCBhbmQgdGhlbgotICAgICAgICAvLyBjb3B5IHRoZSByZW5kZXJlZCBk
YXRhIGJhY2sgdG8gdGhlIEdyYXBoaWNzQ29udGV4dCB2aWEgQ2Fpcm8uCi0gICAgICAgIGRyYXdh
YmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3RlbSgp
KSkpOwotICAgICAgICBwYWludFJlY3QgPSBjbGlwUmVjdCA9IEludFJlY3QoMCwgMCwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBtb3pfZ3RrX3VzZV90aGVtZV9w
YXJ0cyhwYXJ0c0ZvckRyYXdhYmxlKGRyYXdhYmxlLmdldCgpKSk7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgZHJhd2FibGUuZ2V0KCksICZwYWludFJlY3Qs
ICZjbGlwUmVjdCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSA9PSBNT1pfR1RL
X1NVQ0NFU1M7Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZyB3YXMgc3VjY2Vzc2Z1bCBhbmQgd2Ug
cmVuZGVyZWQgb250byBhIHBpeG1hcCwgY29weSB0aGUKLSAgICAvLyByZXN1bHRzIGJhY2sgdG8g
dGhlIG9yaWdpbmFsIEdyYXBoaWNzQ29udGV4dC4KLSAgICBpZiAoc3VjY2VzcyAmJiAhY29udGV4
dC0+Z2RrRHJhd2FibGUoKSkgewotICAgICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRleHQp
OwotICAgICAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBkcmF3
YWJsZS5nZXQoKSwgcmVjdC54KCksIHJlY3QueSgpKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY2Fp
cm9Db250ZXh0KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwotICAgIH0K
LQotICAgIHJldHVybiAhc3VjY2VzczsKLX0KLSNlbHNlCi1ib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHdpZGdl
dFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKLXsKLSAg
ICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVk
Ci0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gZmFsc2UgPT0gc3VjY2VzcywgYmVjYXVzZSBvZiBhd2Vzb21lLgotICAg
IEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSByZWN0OwotICAgIHJldHVybiBtb3pfZ3RrX3dpZGdl
dF9wYWludCh0eXBlLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJnBhaW50UmVjdCwgd2lk
Z2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0j
ZW5kaWYKLQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVX
aWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncykKIHsKICAgICAvLyBQ
YWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3VjY2VlZGVkCkBAIC0z
NzQsMTYgKzMxOCw4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KEd0
a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBSZW5kZXJPYmplY3QqIHJlCiAgICAgd2lkZ2V0U3RhdGUu
aXNEZWZhdWx0ID0gZmFsc2U7CiAgICAgd2lkZ2V0U3RhdGUuY2FuRGVmYXVsdCA9IGZhbHNlOwog
Ci0gICAgLy8gRklYTUU6IFRoZSBkZXByZXNzZWQgdmFsdWUgc2hvdWxkIHByb2JhYmx5IGFwcGx5
IGZvciBvdGhlciB0aGVtZSBwYXJ0cyB0b28uCi0gICAgLy8gSXQgbXVzdCBiZSB1c2VkIGZvciBy
YW5nZSB0aHVtYnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdoZW4gdGhlIHRodW1iIGlzIHByZXNzZWQs
Ci0gICAgLy8gdGhlIHJlbmRlcmluZyBpcyBpbmNvcnJlY3QuCi0gICAgaWYgKHR5cGUgPT0gTU9a
X0dUS19TQ0FMRV9USFVNQl9IT1JJWk9OVEFMIHx8IHR5cGUgPT0gTU9aX0dUS19TQ0FMRV9USFVN
Ql9WRVJUSUNBTCkKLSAgICAgICAgd2lkZ2V0U3RhdGUuZGVwcmVzc2VkID0gaXNQcmVzc2VkKHJl
bmRlck9iamVjdCk7Ci0gICAgZWxzZQotICAgICAgICB3aWRnZXRTdGF0ZS5kZXByZXNzZWQgPSBm
YWxzZTsKLQotICAgIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGd0a1RleHREaXJl
Y3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgcmV0dXJuIHBh
aW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmd2lkZ2V0U3RhdGUsIGZs
YWdzLCB0ZXh0RGlyZWN0aW9uKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENv
bnRleHQoY29udGV4dCwgcmVjdCk7CisgICAgcmV0dXJuICF3aWRnZXRDb250ZXh0LnBhaW50TW96
aWxsYVdpZGdldCh0eXBlLCAmd2lkZ2V0U3RhdGUsIGZsYWdzLCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0
VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxlKiBzdHls
ZSwgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkKQEAgLTM5NCwxOSArMzMwLDcgQEAgc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSwgQ29udHIKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCBjb3Jy
ZWN0IHVzZSBvZiBpbmRpY2F0b3JTaXplIGFuZCBpbmRpY2F0b3JTcGFjaW5nLgogICAgIGdpbnQg
aW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZzsKLQotICAgIHN3aXRjaCAoYXBwZWFyYW5j
ZSkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBpZiAobW96X2d0a19jaGVja2Jv
eF9nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpICE9IE1PWl9H
VEtfU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGlmIChtb3pfZ3RrX3JhZGlvX2dldF9tZXRyaWNzKCZpbmRp
Y2F0b3JTaXplLCAmaW5kaWNhdG9yU3BhY2luZykgIT0gTU9aX0dUS19TVUNDRVNTKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIHRoZW1lLT5nZXRJbmRpY2F0b3JNZXRyaWNzKGFwcGVhcmFuY2UsIGlu
ZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmcpOwogCiAgICAgLy8gT3RoZXIgcG9ydHMgaGFy
ZC1jb2RlIHRoaXMgdG8gMTMsIGJ1dCBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBuYXRp
dmUgbG9vay4KICAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24g
dmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRpYmlsaXR5LgpA
QCAtNjA3LDE0ICs1MzEsMzAgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QKIAogYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeworICAgIGlmIChpbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Q29udHJvbFBhcnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIEFT
U0VSVChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0KTsKIAotICAgIEd0a1RoZW1lV2lkZ2V0VHlwZSBndGtQYXJ0ID0gTU9aX0dUS19TQ0FM
RV9IT1JJWk9OVEFMOwotICAgIGlmIChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAg
ICAgZ3RrUGFydCA9IE1PWl9HVEtfU0NBTEVfVkVSVElDQUw7CisgICAgLy8gV2Ugc2hyaW5rIHRo
ZSB0cm91Z2ggcmVjdCBzbGlnaHRseSB0byBtYWtlIHJvb20gZm9yIHRoZSBmb2N1cyBpbmRpY2F0
b3IuCisgICAgSW50UmVjdCB0cm91Z2hSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsgLy8g
VGhpcyBpcyByZWxhdGl2ZSB0byByZWN0LgorICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKKyAg
ICBpZiAocGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3Rr
VlNjYWxlKCk7CisgICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVkoLWd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCktPnl0aGlja25lc3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZGdldCA9
IGd0a0hTY2FsZSgpOworICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVYKC1ndGtfd2lkZ2V0X2dl
dF9zdHlsZSh3aWRnZXQpLT54dGhpY2tuZXNzKTsKKyAgICB9CisgICAgZ3RrX3dpZGdldF9zZXRf
ZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5m
by5jb250ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJl
Y3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsK
KyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgd2lkZ2V0LCBnZXRHdGtT
dGF0ZVR5cGUob2JqZWN0KSwgInRyb3VnaCIpOwogCi0gICAgcmV0dXJuIHBhaW50UmVuZGVyT2Jq
ZWN0KGd0a1BhcnQsIG9iamVjdCwgaW5mby5jb250ZXh0LCB0b1JlbmRlckJveChvYmplY3QpLT5h
YnNvbHV0ZUNvbnRlbnRCb3goKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdApAQCAtNjI0LDE0ICs1NjQsMzQgQEAgdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWwKIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogeworICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG9iamVj
dC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CiAKLSAg
ICBHdGtUaGVtZVdpZGdldFR5cGUgZ3RrUGFydCA9IE1PWl9HVEtfU0NBTEVfVEhVTUJfSE9SSVpP
TlRBTDsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAg
Z3RrUGFydCA9IE1PWl9HVEtfU0NBTEVfVEhVTUJfVkVSVElDQUw7Ci0KLSAgICByZXR1cm4gcGFp
bnRSZW5kZXJPYmplY3QoZ3RrUGFydCwgb2JqZWN0LCBpbmZvLmNvbnRleHQsIHJlY3QpOworICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKKyAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAwOworICAg
IEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KSB7CisgICAgICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOworICAgICAgICBk
ZXRhaWwgPSAidnNjYWxlIjsKKyAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05f
VkVSVElDQUw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3RrSFNjYWxlKCk7Cisg
ICAgICAgIGRldGFpbCA9ICJoc2NhbGUiOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklF
TlRBVElPTl9IT1JJWk9OVEFMOworICAgIH0KKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24o
d2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsK
KworICAgIC8vIE9ubHkgc29tZSB0aGVtZXMgaGF2ZSBzbGlkZXIgdGh1bWJzIHJlc3BvbmQgdG8g
Y2xpY2tzIGFuZCBzb21lIGRvbid0LiBUaGlzIGluZm9ybWF0aW9uIGlzCisgICAgLy8gZ2F0aGVy
ZWQgdmlhIHRoZSAnYWN0aXZhdGUtc2xpZGVyJyBwcm9wZXJ0eSwgYnV0IGl0J3MgZGVwcmVjYXRl
ZCBpbiBHVEsrIDIuMjIgYW5kIHJlbW92ZWQgaW4KKyAgICAvLyBHVEsrIDMueC4gVGhlIGRyYXdi
YWNrIG9mIG5vdCBob25vcmluZyBpdCBpcyB0aGF0IHNsaWRlciB0aHVtYnMgY2hhbmdlIGNvbG9y
IHdoZW4geW91IGNsaWNrCisgICAgLy8gb24gdGhlbS4gCisgICAgSW50UmVjdCB0aHVtYlJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRTbGlkZXIodGh1bWJSZWN0LCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZShvYmplY3QpLCBHVEtf
U0hBRE9XX09VVCwgZGV0YWlsLCBvcmllbnRhdGlvbik7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdApAQCAtNjQ5LDEwICs2
MDksMTQgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
ck9iamVjdCogbykgY29uc3QKICAgICB9IGVsc2UKICNlbmRpZgogICAgIGlmIChwYXJ0ID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkgewotICAgICAgICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgICAgIG1vel9ndGtfZ2V0X3Nj
YWxldGh1bWJfbWV0cmljcyhwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgJndpZHRo
LCAmaGVpZ2h0KTsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBG
aXhlZCkpOwotICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4
ZWQpKTsKKyAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgPyBndGtIU2NhbGUoKSA6IGd0a1ZTY2FsZSgpOworICAgICAgICBpbnQgbGVu
Z3RoID0gMCwgd2lkdGggPSAwOworICAgICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfbGVuZ3RoIiwgJmxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl93aWR0aCIsICZ3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNldEhl
aWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiAgICAgfQogfQogCkBAIC03NzksMTcgKzc0Mywz
MCBAQCBzdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZQogICAgIHJlbmRlclRoZW1lLT5wbGF0Zm9ybUNv
bG9yc0RpZENoYW5nZSgpOwogfQogCi1HdGtDb250YWluZXIqIFJlbmRlclRoZW1lR3RrOjpndGtD
b250YWluZXIoKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lkZ2V0KiB3aW5kb3cpIGNvbnN0Cit7
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3aWRnZXQpOwor
ICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVSKFRS
VUUpKTsKKworICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZvciB0aGUgY29udGFpbmluZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdpZGdldCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRD
YWxsYmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Cit9CisKK0d0a1dp
ZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0CiB7CiAgICAgaWYgKG1f
Z3RrQ29udGFpbmVyKQogICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CiAKICAgICBtX2d0
a1dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIG1fZ3RrQ29u
dGFpbmVyID0gR1RLX0NPTlRBSU5FUihndGtfZml4ZWRfbmV3KCkpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9ndGtXaW5kb3csICJzdHlsZS1zZXQiLCBHX0NBTExCQUNLKGd0a1N0eWxlU2V0Q2Fs
bGJhY2spLCBjb25zdF9jYXN0PFJlbmRlclRoZW1lR3RrKj4odGhpcykpOwotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9ndGtXaW5kb3cpLCBHVEtfV0lER0VUKG1fZ3RrQ29u
dGFpbmVyKSk7CisjaWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfd2lkZ2V0X3NldF9jb2xv
cm1hcChtX2d0a1dpbmRvdywgbV90aGVtZVBhcnRzLT5jb2xvcm1hcCk7CisjZW5kaWYKICAgICBn
dGtfd2lkZ2V0X3JlYWxpemUobV9ndGtXaW5kb3cpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUo
bV9ndGtXaW5kb3csICJNb3ppbGxhR3RrV2lkZ2V0Iik7CiAKKyAgICBtX2d0a0NvbnRhaW5lciA9
IGd0a19maXhlZF9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3Rr
Q29udGFpbmVyLCBtX2d0a1dpbmRvdyk7CiAgICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVyOwogfQog
CkBAIC03OTcsMTIgKzc3NCw4IEBAIEd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0J1dHRv
bigpIGNvbnN0CiB7CiAgICAgaWYgKG1fZ3RrQnV0dG9uKQogICAgICAgICByZXR1cm4gbV9ndGtC
dXR0b247Ci0KICAgICBtX2d0a0J1dHRvbiA9IGd0a19idXR0b25fbmV3KCk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX2d0a0J1dHRvbiwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVT
ZXRDYWxsYmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Ci0gICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrQnV0dG9uKTsKLSAgICBndGtfd2lk
Z2V0X3JlYWxpemUobV9ndGtCdXR0b24pOwotCisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRh
aW5lcihtX2d0a0J1dHRvbiwgZ3RrQ29udGFpbmVyKCkpOwogICAgIHJldHVybiBtX2d0a0J1dHRv
bjsKIH0KIApAQCAtODEwLDEyICs3ODMsOCBAQCBHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpn
dGtFbnRyeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZ3RrRW50cnkpCiAgICAgICAgIHJldHVybiBt
X2d0a0VudHJ5OwotCiAgICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fZ3RrRW50cnksICJzdHlsZS1zZXQiLCBHX0NBTExCQUNLKGd0a1N0eWxl
U2V0Q2FsbGJhY2spLCBjb25zdF9jYXN0PFJlbmRlclRoZW1lR3RrKj4odGhpcykpOwotICAgIGd0
a19jb250YWluZXJfYWRkKGd0a0NvbnRhaW5lcigpLCBtX2d0a0VudHJ5KTsKLSAgICBndGtfd2lk
Z2V0X3JlYWxpemUobV9ndGtFbnRyeSk7Ci0KKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFp
bmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigpKTsKICAgICByZXR1cm4gbV9ndGtFbnRyeTsK
IH0KIApAQCAtODIzLDE1ICs3OTIsMjkgQEAgR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3Rr
VHJlZVZpZXcoKSBjb25zdAogewogICAgIGlmIChtX2d0a1RyZWVWaWV3KQogICAgICAgICByZXR1
cm4gbV9ndGtUcmVlVmlldzsKLQogICAgIG1fZ3RrVHJlZVZpZXcgPSBndGtfdHJlZV92aWV3X25l
dygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndGtUcmVlVmlldywgInN0eWxlLXNldCIsIEdf
Q0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsq
Pih0aGlzKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoZ3RrQ29udGFpbmVyKCksIG1fZ3RrVHJl
ZVZpZXcpOwotICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1RyZWVWaWV3KTsKLQorICAgIHNl
dHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtUcmVlVmlldywgZ3RrQ29udGFpbmVyKCkp
OwogICAgIHJldHVybiBtX2d0a1RyZWVWaWV3OwogfQogCitHdGtXaWRnZXQqIFJlbmRlclRoZW1l
R3RrOjpndGtWU2NhbGUoKSBjb25zdAoreworICAgIGlmIChtX2d0a1ZTY2FsZSkKKyAgICAgICAg
cmV0dXJuIG1fZ3RrVlNjYWxlOworICAgIG1fZ3RrVlNjYWxlID0gZ3RrX3ZzY2FsZV9uZXcoMCk7
CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1ZTY2FsZSwgZ3RrQ29udGFp
bmVyKCkpOworICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJU
aGVtZUd0azo6Z3RrSFNjYWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtIU2NhbGUpCisgICAg
ICAgIHJldHVybiBtX2d0a0hTY2FsZTsKKyAgICBtX2d0a0hTY2FsZSA9IGd0a19oc2NhbGVfbmV3
KDApOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtIU2NhbGUsIGd0a0Nv
bnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtIU2NhbGU7Cit9CisKIEd0a1dpZGdldCogUmVu
ZGVyVGhlbWVHdGs6Omd0a1Njcm9sbGJhcigpCiB7CiAgICAgcmV0dXJuIG1vel9ndGtfZ2V0X3Nj
cm9sbGJhcl93aWRnZXQoKTsKQEAgLTg0MCw3ICs4MjMsNyBAQCBHdGtXaWRnZXQqIFJlbmRlclRo
ZW1lR3RrOjpndGtTY3JvbGxiYXIoKQogdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Db2xv
cnNEaWRDaGFuZ2UoKQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBpbml0TWVkaWFTdHlsaW5n
KGd0a19yY19nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpLCB0cnVlKTsKKyAg
ICBpbml0TWVkaWFTdHlsaW5nKGd0a19yY19nZXRfc3R5bGUoZ3RrQ29udGFpbmVyKCkpLCB0cnVl
KTsKICNlbmRpZgogICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKaW5kZXggNmQzMjRiNjQ4ZWRjMWU3
Y2I5NzExNjYxZjU2OTM1ZmVkMzI1NjM1Yi4uZDFjNWY2NjExOWQ4NDA0MGRhMjRjZjQyYTU3M2Rh
ZDYyNzdlY2Q1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC04Myw3
ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCk7CiAjZW5kaWYKIAotICAgIGJvb2wgcGFpbnRNb3ppbGxhR3RrV2lkZ2V0KEd0
a1RoZW1lV2lkZ2V0VHlwZSwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIEd0a1dp
ZGdldFN0YXRlKiwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uID0gR1RLX1RFWFRfRElSX05P
TkUpOworICAgIHZvaWQgZ2V0SW5kaWNhdG9yTWV0cmljcyhDb250cm9sUGFydCwgaW50JiBpbmRp
Y2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0
KiBndGtTY3JvbGxiYXIoKTsKIApAQCAtMTU1LDI3ICsxNTUsMjQgQEAgcHJvdGVjdGVkOgogI2Vu
ZGlmCiAKIHByaXZhdGU6Ci0gICAgLyoKLSAgICAgKiBob2xkIHRoZSBzdGF0ZQotICAgICAqLwog
ICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkgY29uc3Q7CiAgICAgR3RrV2lkZ2V0KiBndGtFbnRy
eSgpIGNvbnN0OwogICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKKyAgICBHdGtX
aWRnZXQqIGd0a1ZTY2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29u
c3Q7CisgICAgR3RrV2lkZ2V0KiBndGtDb250YWluZXIoKSBjb25zdDsKIAotICAgIC8qCi0gICAg
ICogdW5tYXBwZWQgR2RrV2luZG93IGhhdmluZyBhIGNvbnRhaW5lci4gVGhpcyBpcyBob2xkaW5n
IGFsbAotICAgICAqIG91ciBmYWtlIHdpZGdldHMKLSAgICAgKi8KLSAgICBHdGtDb250YWluZXIq
IGd0a0NvbnRhaW5lcigpIGNvbnN0OwotCisgICAgdm9pZCBzZXR1cFdpZGdldEFuZEFkZFRvQ29u
dGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0OworICAgIEd0a1N0YXRlVHlwZSBn
ZXRHdGtTdGF0ZVR5cGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpOwogICAgIGJvb2wgcGFpbnRSZW5k
ZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlLCBSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgZmxhZ3MgPSAwKTsKLSAgICBHdGtUaGVtZVBh
cnRzKiBwYXJ0c0ZvckRyYXdhYmxlKEdka0RyYXdhYmxlKikgY29uc3Q7CiAKICAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtXaW5kb3c7Ci0gICAgbXV0YWJsZSBHdGtDb250YWluZXIqIG1fZ3Rr
Q29udGFpbmVyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbnRhaW5lcjsKICAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtCdXR0b247CiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1f
Z3RrRW50cnk7CiAgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVHJlZVZpZXc7CisgICAgbXV0
YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjYWxlOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0hTY2FsZTsKIAogICAgIG11dGFibGUgQ29sb3IgbV9wYW5lbENvbG9yOwogICAgIG11dGFibGUg
Q29sb3IgbV9zbGlkZXJDb2xvcjsKQEAgLTE5Myw5ICsxOTAsMTEgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8SW1hZ2U+IG1fcGF1c2VCdXR0b247CiAgICAgUmVmUHRyPEltYWdlPiBtX3NlZWtCYWNr
QnV0dG9uOwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVrRm9yd2FyZEJ1dHRvbjsKLSAgICBQYWdl
KiBtX3BhZ2U7Ci0gICAgUGxhdGZvcm1SZWZQdHI8R0hhc2hUYWJsZT4gbV9wYXJ0c1RhYmxlOwot
CisgICAgR3RrVGhlbWVQYXJ0cyogbV90aGVtZVBhcnRzOworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworI2VuZGlmCisgICAg
ZnJpZW5kIGNsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKaW5kZXggMTliODk3Y2YwMmEzOTQ5NGVm
ZTIzY2VhOTM5ZjE0OTI0MjNkNGMyNy4uZjkyZGQyMGNhZTQwNjIyNjllMzQ2M2I1OGQwZmYzMzYw
ODA0YTZhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIldpZGdldFJl
bmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJndGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgogCkBAIC0yMTYsNyArMjE3LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIKICAg
ICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxi
YXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAogICAg
IEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyID8gTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUwgOiBNT1pf
R1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOwotICAgIHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+cGFpbnRNb3ppbGxh
R3RrV2lkZ2V0KHR5cGUsIGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAmc3RhdGUsIDApOwor
ICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Ny
b2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwg
JnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
CkBAIC0yMjQsNyArMjI2LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxi
YXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2wKICAgICAvLyBUaGlz
IGlzIHVudXNlZCBieSB0aGUgbW96X2d0a19zY3JvbGxlY2Rfd2luZG93X3BhaW50LgogICAgIEd0
a1dpZGdldFN0YXRlIHN0YXRlOwogICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBz
Y3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldChN
T1pfR1RLX1NDUk9MTEVEX1dJTkRPVywgY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QsICZzdGF0
ZSwgMCk7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQs
IGZ1bGxTY3JvbGxiYXJSZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdl
dChNT1pfR1RLX1NDUk9MTEVEX1dJTkRPVywgJnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMjQwLDcgKzI0Myw4IEBAIHZv
aWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBTY3JvbGxiYXIqIHNjcm9sbGJhCiAgICAgc3RhdGUuY3VycG9zID0gc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCk7CiAKICAgICBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9IHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1C
X1ZFUlRJQ0FMIDogTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDsKLSAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQo
KSktPnBhaW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmc3RhdGUsIDAp
OworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0
KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldCh0eXBlLCAmc3RhdGUsIDAp
OwogfQogCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCkBAIC0yNTYs
NiArMjYwLDkgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnMKIAogYm9vbCBTY3JvbGxiYXJUaGVt
ZUd0azo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogeworICAgIGlmIChncmFwaGlj
c0NvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRh
bWFnZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFy
dDsKIApAQCAtMzQ4LDcgKzM1NSw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiCiAgICAgICAg
IHN0YXRlLmluSG92ZXIgPSBGQUxTRTsKICAgICB9CiAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxs
YUd0a1dpZGdldChNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04sIGNvbnRleHQsIHJlY3QsICZzdGF0
ZSwgZmxhZ3MpOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250
ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChNT1pfR1RL
X1NDUk9MTEJBUl9CVVRUT04sICZzdGF0ZSwgZmxhZ3MpOwogfQogCiB2b2lkIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiB2aWV3LCBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMzNDY1NmIyYzNl
ZGQ5NWViMjNmNDY3YTg1NWVkNzQ1OWQ2MzZkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMCwwICsxLDYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiZ3Rr
ZHJhd2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDsKK2NsYXNzIFJlbmRlclRoZW1lR3RrOworCitjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHsKK3B1YmxpYzoKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOworCisgICAg
Ym9vbCBwYWludE1vemlsbGFXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlLCBHdGtXaWRnZXRTdGF0
ZSosIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiA9IEdUS19URVhUX0RJUl9OT05FKTsKKyAg
ICB2b2lkIGd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5
cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEZvY3Vz
KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7
CisgICAgdm9pZCBndGtQYWludFNsaWRlcihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3Rr
U3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciosIEd0a09yaWVudGF0aW9uKTsK
KworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OworICAg
IEludFJlY3QgbV90YXJnZXRSZWN0OworICAgIEdka1JlY3RhbmdsZSBtX3BhaW50UmVjdDsKKyAg
ICBJbnRTaXplIG1fZXh0cmFTcGFjZTsKKyAgICBib29sIG1faGFkRXJyb3I7CisKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0RyYXdhYmxlKiBtX3RhcmdldDsKKyNlbHNlCisgICAg
Y2Fpcm9fdCogbV90YXJnZXQ7CisjZW5kaWYKKworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mYTc1YmQ1OGU5Zjc1ZjU4NzE5NzlhOTk0ZjJjMmQ4OTVjNjExZjhkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0
azIuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNo
YSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8u
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1ZmZlciA9IDA7CitzdGF0aWMgdm9p
ZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQoreworICAgIGlmIChnU2NyYXRjaEJ1ZmZlcikKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOworICAgIGdTY3JhdGNoQnVmZmVyID0g
MDsKK30KKworLy8gRklYTUU6IFBlcmhhcHMgd2UgY2FuIHNoYXJlIHNvbWUgb2YgdGhpcyBjb2Rl
IHdpdGggdGhlIENvbnRleHRTaGFkb3dDYWlyby4KKy8vIFdpZGdldCByZW5kZXJpbmcgbmVlZHMg
YSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGUKKy8vIHJl
bmRlci4gSW5zdGVhZCBvZiBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBl
dmVyeSBvcGVyYXRpb24sCisvLyB3ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRv
bWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0aW1lci4KK2NsYXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRp
bWVyIDogcHVibGljIFRpbWVyQmFzZSB7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJl
ZCgpIHsgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7IH0KK307CitzdGF0aWMgUHVyZ2VTY3JhdGNoQnVm
ZmVyVGltZXIgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXI7CitzdGF0aWMgdm9pZCBzY2hlZHVsZVNj
cmF0Y2hCdWZmZXJQdXJnZSgpCit7CisgICAgaWYgKHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0b3AoKTsKKyAgICBw
dXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNob3QoMik7Cit9CisKK3N0YXRpYyBJbnRT
aXplIGdldEV4dHJhU3BhY2VGb3JXaWRnZXQoUmVuZGVyVGhlbWVHdGsqIHRoZW1lKQoreworICAg
IC8vIENoZWNrYm94ZXMgYW5kIHNjcm9sbGJhciB0aHVtYnMgb2Z0ZW4gZHJhdyBvdXRzaWRlIHRo
ZWlyIGJvdW5kYXJpZXMuIEhlcmUgd2UgZmlndXJlIG91dAorICAgIC8vIHRoZSBtYXhpbXVtIGFt
b3VudCBvZiBzcGFjZSB3ZSBuZWVkIGZvciBhbnkgdHlwZSBvZiB3aWRnZXQgYW5kIHVzZSB0aGF0
IHRvIGluY3JlYXNlIHRoZQorICAgIC8vIHNpemUgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyLCB3aGls
ZSBwcmVzZXJ2aW5nIHRoZSBmaW5hbCB3aWRnZXQgcG9zaXRpb24uCisKKyAgICAvLyBUaGUgY2hl
Y2tib3ggZXh0cmEgc3BhY2UgaXMgY2FsY3VsYXRlZCBieSBsb29raW5nIGF0IHRoZSB3aWRnZXQg
c3R5bGUuCisgICAgaW50IGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmc7CisgICAgdGhl
bWUtPmdldEluZGljYXRvck1ldHJpY3MoQ2hlY2tib3hQYXJ0LCBpbmRpY2F0b3JTaXplLCBpbmRp
Y2F0b3JTcGFjaW5nKTsKKyAgICBJbnRTaXplIGV4dHJhU3BhY2UoaW5kaWNhdG9yU3BhY2luZywg
aW5kaWNhdG9yU3BhY2luZyk7CisKKyAgICAvLyBTY3JvbGxiYXIgdGh1bWJzIG5lZWQgYXQgbGVh
c3QgYW4gZXh0cmEgcGl4ZWwgYWxvbmcgdGhlaXIgbW92ZW1lbnQgYXhpcy4KKyAgICByZXR1cm4g
ZXh0cmFTcGFjZS5leHBhbmRlZFRvKEludFNpemUoMSwgMSkpOworfQorCitXaWRnZXRSZW5kZXJp
bmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorICAgIDogbV9ncmFwaGljc0Nv
bnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICwgbV90YXJnZXRSZWN0KHRhcmdldFJlY3QpCisg
ICAgLCBtX2hhZEVycm9yKGZhbHNlKQoreworICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdl
dCgpKTsKKworICAgIC8vIEZhbGxiYWNrOiBXZSBmYWlsZWQgdG8gY3JlYXRlIGFuIFJHQkEgY29s
b3JtYXAgZWFybGllciwgc28gd2UgY2Fubm90IHByb3Blcmx5IHBhaW50IAorICAgIC8vIHRvIGEg
dGVtcG9yYXJ5IHN1cmZhY2UgYW5kIHByZXNlcnZlIHRyYW5zcGFyZW5jeS4gVG8gZW5zdXJlIGRl
Y2VudCB3aWRnZXQgcmVuZGVyaW5nLCBqdXN0CisgICAgLy8gcGFpbnQgZGlyZWN0bHkgdG8gdGhl
IHRhcmdldCBkcmF3YWJsZS4gVGhpcyB3aWxsIG5vdCByZW5kZXIgQ1NTIHJvdGF0aW9uYWwgdHJh
bnNmb3JtcyBwcm9wZXJseS4KKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNv
bG9ybWFwICYmIGdyYXBoaWNzQ29udGV4dC0+Z2RrRHJhd2FibGUoKSkgeworICAgICAgICBtX3Bh
aW50UmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+Z2V0Q1RNKCkubWFwUmVjdCh0YXJnZXRSZWN0KTsK
KyAgICAgICAgbV90YXJnZXQgPSBncmFwaGljc0NvbnRleHQtPmdka0RyYXdhYmxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTb21lIHdpZGdldHMgcmVuZGVyIG91dHNpZGUg
dGhlaXIgcmVjdGFuZ2xlcy4gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzLgorICAgIG1fZXh0
cmFTcGFjZSA9IGdldEV4dHJhU3BhY2VGb3JXaWRnZXQodGhlbWUpOworCisgICAgLy8gT2Zmc2V0
IHRoZSB0YXJnZXQgcmVjdGFuZ2xlIHNvIHRoYXQgdGhlIGV4dHJhIHNwYWNlIGlzIHdpdGhpbiB0
aGUgYm91bmRhcmllcyBvZiB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgbV9wYWludFJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KG1fZXh0cmFTcGFjZS53aWR0aCgpLCBtX2V4dHJhU3BhY2UuaGVpZ2h0
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RhcmdldFJlY3Quc2l6
ZSgpKTsKKworICAgIGludCB3aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsgKG1fZXh0cmFT
cGFjZS53aWR0aCgpICogMik7CisgICAgaW50IGhlaWdodCA9IG1fdGFyZ2V0UmVjdC5oZWlnaHQo
KSArIChtX2V4dHJhU3BhY2UuaGVpZ2h0KCkgKiAyKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0g
MDsKKyAgICBpbnQgc2NyYXRjaEhlaWdodCA9IDA7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQor
ICAgICAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lk
dGgsICZzY3JhdGNoSGVpZ2h0KTsKKworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRl
IHRoZSBidWZmZXIgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBp
ZiAoIWdTY3JhdGNoQnVmZmVyIHx8IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWln
aHQgPCBoZWlnaHQpIHsKKyAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisgICAgICAgIC8v
IFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVm
ZmVyIGZvciBzaW1pbGFyIHNpemVkIHJlcXVlc3RzLgorICAgICAgICB3aWR0aCA9ICgxICsgKHdp
ZHRoID4+IDUpKSA8PCA1OworICAgICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8
IDU7CisKKyAgICAgICAgZ1NjcmF0Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwg
aGVpZ2h0LCBnZGtfY29sb3JtYXBfZ2V0X3Zpc3VhbCh0aGVtZS0+bV90aGVtZVBhcnRzLT5jb2xv
cm1hcCktPmRlcHRoKTsKKyAgICAgICAgZ2RrX2RyYXdhYmxlX3NldF9jb2xvcm1hcChnU2NyYXRj
aEJ1ZmZlciwgdGhlbWUtPm1fdGhlbWVQYXJ0cy0+Y29sb3JtYXApOworICAgIH0KKyAgICBtX3Rh
cmdldCA9IGdTY3JhdGNoQnVmZmVyOworCisgICAgLy8gQ2xlYXIgdGhlIHNjcmF0Y2ggYnVmZmVy
LgorICAgIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3Q+IHNjcmF0Y2hCdWZmZXJDb250ZXh0ID0gYWRv
cHRQbGF0Zm9ybVJlZihnZGtfY2Fpcm9fY3JlYXRlKGdTY3JhdGNoQnVmZmVyKSk7CisgICAgY2Fp
cm9fc2V0X29wZXJhdG9yKHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRP
Ul9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCkpOwor
fQorCitXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCit7
CisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4gdGhl
IGZhbGxiYWNrIGNhc2UuIFNlZSBhYm92ZS4KKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5n
ZXQoKSk7CisgICAgaWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBt
X2dyYXBoaWNzQ29udGV4dC0+Z2RrRHJhd2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRG9uJ3QgcGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisg
ICAgaWYgKG1faGFkRXJyb3IpIHsKKyAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2Uo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIg
aWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBoZXJlLgor
ICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHByZXZpb3VzU291
cmNlKGNhaXJvX2dldF9zb3VyY2UoY2Fpcm9Db250ZXh0KSk7CisKKyAgICAvLyBUaGUgYmxpdCBy
ZWN0YW5nbGUgaXMgdGhlIG9yaWdpbmFsIHRhcmdldCByZWN0YW5nbGUgYWRqdXN0ZWQgZm9yIGFu
eSBleHRyYSBzcGFjZS4KKyAgICBJbnRSZWN0IGZ1bGxUYXJnZXRSZWN0KG1fdGFyZ2V0UmVjdCk7
CisgICAgZnVsbFRhcmdldFJlY3QuaW5mbGF0ZVgobV9leHRyYVNwYWNlLndpZHRoKCkpOworICAg
IGZ1bGxUYXJnZXRSZWN0LmluZmxhdGVZKG1fZXh0cmFTcGFjZS5oZWlnaHQoKSk7CisKKyAgICBn
ZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBnU2NyYXRjaEJ1ZmZlciwg
ZnVsbFRhcmdldFJlY3QueCgpLCBmdWxsVGFyZ2V0UmVjdC55KCkpOworICAgIGNhaXJvX3JlY3Rh
bmdsZShjYWlyb0NvbnRleHQsIGZ1bGxUYXJnZXRSZWN0LngoKSwgZnVsbFRhcmdldFJlY3QueSgp
LCBmdWxsVGFyZ2V0UmVjdC53aWR0aCgpLCBmdWxsVGFyZ2V0UmVjdC5oZWlnaHQoKSk7CisgICAg
Y2Fpcm9fZmlsbChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm9Db250
ZXh0LCBwcmV2aW91c1NvdXJjZS5nZXQoKSk7CisgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVy
Z2UoKTsKK30KKworYm9vbCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFXaWRn
ZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgaW50IGZs
YWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCit7CisgICAgLy8gU29tZXRpbWVz
IG1vel9ndGtfd2lkZ2V0X3BhaW50IG1vZGlmaWVzIHRoZSBjbGlwcGluZyByZWN0YW5nbGUsIHNv
IHdlIG11c3QgdXNlIGEgY29weS4KKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3QgPSBtX3BhaW50
UmVjdDsKKyAgICBtX2hhZEVycm9yID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgbV90YXJn
ZXQsICZjbGlwUmVjdCwgJm1fcGFpbnRSZWN0LAorICAgICAgICBzdGF0ZSwgZmxhZ3MsIHRleHRE
aXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4gIW1faGFkRXJyb3I7Cit9
CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50UmVj
dCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1No
YWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0
YW5nbGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0
LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3Bh
aW50X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBl
LCBzaGFkb3dUeXBlLCAmbV9wYWludFJlY3QsCisgICAgICAgICAgICAgICAgICB3aWRnZXQsIGRl
dGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBwYWludFJlY3Qud2lkdGgsIHBhaW50UmVj
dC5oZWlnaHQpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9j
dXMoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBz
dGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIHBhaW50
UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVjdC55ICsgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a19wYWludF9mb2N1cyhn
dGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmbV9wYWlu
dFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBwYWludFJlY3QueCwg
cGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7Cit9CisKK3Zv
aWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYg
cmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRv
d1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCit7CisgICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3Qu
eCArIHJlY3QueCgpLCBtX3BhaW50UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSB9OworICAgIGd0a19wYWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUo
d2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJm1fcGFpbnRSZWN0LCB3
aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIHBhaW50UmVjdC54LCBwYWludFJl
Y3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0LCBvcmllbnRhdGlvbik7Cit9
CisKK30KKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJk
M2EzNTc1NTBhM2NiODFlYzcxZGY4MTlmOWUyYWI0OTJlZmVmYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisj
aWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKKyAgICA6IG1fZ3Jh
cGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKKyAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRS
ZWN0KQorICAgICwgbV9wYWludFJlY3QodGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3IoZmFs
c2UpCisgICAgLCBtX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKK3sKK30KKwor
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQoKQoreworfQor
Citib29sIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldChHdGtUaGVt
ZVdpZGdldFR5cGUgdHlwZSwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBpbnQgZmxhZ3MsIEd0a1Rl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3sKKyAgICBtX2hhZEVycm9yID0gbW96X2d0a193
aWRnZXRfcGFpbnQodHlwZSwgbV90YXJnZXQsICZtX3BhaW50UmVjdCwgc3RhdGUsIGZsYWdzLCB0
ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7CisgICAgcmV0dXJuICFtX2hhZEVycm9y
OworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IElu
dFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBH
dGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2Rr
UmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50
UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0
a19wYWludF9ib3goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRl
VHlwZSwgc2hhZG93VHlwZSwgd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZGV0YWlsLCBwYWlu
dFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7
Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRGb2N1cyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwg
Y29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0ID0geyBt
X3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0LnkgKyByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHdpZGdldCwKKyAgICAgICAg
ICAgICAgICAgICAgZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53
aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3Qg
Z2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgR2RrUmVj
dGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVj
dC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a19w
YWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRl
VHlwZSwgc2hhZG93VHlwZSwgd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBw
YWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdo
dCwgb3JpZW50YXRpb24pOworfQorCisjZW5kaWYgLy8gIUdUS19BUElfVkVSU0lPTl8yCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGsyZHJhd2luZy5jIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwppbmRleCAyZjJlZGI2MGQ5MWE1Y2FjNTZmOWIzNTA5OWM0
ZDZiZGIxZjIwYzI5Li4zZWJkMzMyOWUxNWJkYTU1YjVkYTdkYTE3YjZiNjQxYTk2YmVmYzc3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGsyZHJhd2luZy5jCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMKQEAgLTE4NSwyMCArMTg1LDYgQEAgZW5zdXJl
X3Njcm9sbGJhcl93aWRnZXQoKQogfQogCiBzdGF0aWMgZ2ludAotZW5zdXJlX3NjYWxlX3dpZGdl
dCgpCi17Ci0gIGlmICghZ1BhcnRzLT5oU2NhbGVXaWRnZXQpIHsKLSAgICBnUGFydHMtPmhTY2Fs
ZVdpZGdldCA9IGd0a19oc2NhbGVfbmV3KE5VTEwpOwotICAgIHNldHVwX3dpZGdldF9wcm90b3R5
cGUoZ1BhcnRzLT5oU2NhbGVXaWRnZXQpOwotICB9Ci0gIGlmICghZ1BhcnRzLT52U2NhbGVXaWRn
ZXQpIHsKLSAgICBnUGFydHMtPnZTY2FsZVdpZGdldCA9IGd0a192c2NhbGVfbmV3KE5VTEwpOwot
ICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ1BhcnRzLT52U2NhbGVXaWRnZXQpOwotICB9Ci0g
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50CiBlbnN1cmVfZW50cnlf
d2lkZ2V0KCkKIHsKICAgICBpZiAoIWdQYXJ0cy0+ZW50cnlXaWRnZXQpIHsKQEAgLTkyMSw4MyAr
OTA3LDYgQEAgbW96X2d0a19zY3JvbGxiYXJfdGh1bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBl
IHdpZGdldCwKIH0KIAogc3RhdGljIGdpbnQKLW1vel9ndGtfc2NhbGVfcGFpbnQoR2RrRHJhd2Fi
bGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgIEdk
a1JlY3RhbmdsZSogY2xpcHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgR3RrT3JpZW50YXRpb24gZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
KQotewotICBnaW50IHggPSAwLCB5ID0gMDsKLSAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGUgPSBD
b252ZXJ0R3RrU3RhdGUoc3RhdGUpOwotICBHdGtTdHlsZSogc3R5bGU7Ci0gIEd0a1dpZGdldCog
d2lkZ2V0OwotCi0gIGVuc3VyZV9zY2FsZV93aWRnZXQoKTsKLSAgd2lkZ2V0ID0gKChmbGFncyA9
PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkgPyBnUGFydHMtPmhTY2FsZVdpZGdldCA6IGdQ
YXJ0cy0+dlNjYWxlV2lkZ2V0KTsKLSAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwg
ZGlyZWN0aW9uKTsKLQotICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0K
LSAgaWYgKGZsYWdzID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKSB7Ci0gICAgeCA9IFhU
SElDS05FU1Moc3R5bGUpOwotICAgIHkrKzsKLSAgfQotICBlbHNlIHsKLSAgICB4Kys7Ci0gICAg
eSA9IFlUSElDS05FU1Moc3R5bGUpOwotICB9Ci0KLSAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwg
cmVjdC0+eCwgcmVjdC0+eSk7Ci0gIGd0a19zdHlsZV9hcHBseV9kZWZhdWx0X2JhY2tncm91bmQo
c3R5bGUsIGRyYXdhYmxlLCBUUlVFLCBHVEtfU1RBVEVfTk9STUFMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LCByZWN0LT54LCByZWN0LT55LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQp
OwotCi0gIGd0a19wYWludF9ib3goc3R5bGUsIGRyYXdhYmxlLCBHVEtfU1RBVEVfQUNUSVZFLCBH
VEtfU0hBRE9XX0lOLCBjbGlwcmVjdCwKLSAgICAgICAgICAgICAgICB3aWRnZXQsICJ0cm91Z2gi
LCByZWN0LT54ICsgeCwgcmVjdC0+eSArIHksCi0gICAgICAgICAgICAgICAgcmVjdC0+d2lkdGgg
LSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7Ci0KLSAgaWYgKHN0YXRlLT5mb2N1c2VkKQotICAg
IGd0a19wYWludF9mb2N1cyhzdHlsZSwgZHJhd2FibGUsIHN0YXRlX3R5cGUsIGNsaXByZWN0LCB3
aWRnZXQsICJ0cm91Z2giLAotICAgICAgICAgICAgICAgICAgICByZWN0LT54LCByZWN0LT55LCBy
ZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLQotICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwot
fQotCi1zdGF0aWMgZ2ludAotbW96X2d0a19zY2FsZV90aHVtYl9wYWludChHZGtEcmF3YWJsZSog
ZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
R2RrUmVjdGFuZ2xlKiBjbGlwcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBHdGtPcmllbnRhdGlvbiBmbGFncywgR3RrVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCi17Ci0gIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVydEd0a1N0YXRl
KHN0YXRlKTsKLSAgR3RrU3R5bGUqIHN0eWxlOwotICBHdGtXaWRnZXQqIHdpZGdldDsKLSAgZ2lu
dCB0aHVtYl93aWR0aCwgdGh1bWJfaGVpZ2h0LCB4LCB5OwotCi0gIGVuc3VyZV9zY2FsZV93aWRn
ZXQoKTsKLSAgd2lkZ2V0ID0gKChmbGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkg
PyBnUGFydHMtPmhTY2FsZVdpZGdldCA6IGdQYXJ0cy0+dlNjYWxlV2lkZ2V0KTsKLSAgZ3RrX3dp
ZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZGlyZWN0aW9uKTsKLQotICBzdHlsZSA9IGd0a193
aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0KLSAgLyogZGV0ZXJtaW5lIHRoZSB0aHVtYiBzaXpl
LCBhbmQgcG9zaXRpb24gdGhlIHRodW1iIGluIHRoZSBjZW50ZXIgaW4gdGhlIG9wcG9zaXRlIGF4
aXMgKi8KLSAgaWYgKGZsYWdzID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKSB7Ci0gICAg
bW96X2d0a19nZXRfc2NhbGV0aHVtYl9tZXRyaWNzKEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFM
LCAmdGh1bWJfd2lkdGgsICZ0aHVtYl9oZWlnaHQpOwotICAgIHggPSByZWN0LT54OwotICAgIHkg
PSByZWN0LT55ICsgKHJlY3QtPmhlaWdodCAtIHRodW1iX2hlaWdodCkgLyAyOwotICB9Ci0gIGVs
c2UgewotICAgIG1vel9ndGtfZ2V0X3NjYWxldGh1bWJfbWV0cmljcyhHVEtfT1JJRU5UQVRJT05f
VkVSVElDQUwsICZ0aHVtYl9oZWlnaHQsICZ0aHVtYl93aWR0aCk7Ci0gICAgeCA9IHJlY3QtPngg
KyAocmVjdC0+d2lkdGggLSB0aHVtYl93aWR0aCkgLyAyOwotICAgIHkgPSByZWN0LT55OwotICB9
Ci0KLSAgVFNPZmZzZXRTdHlsZUdDcyhzdHlsZSwgcmVjdC0+eCwgcmVjdC0+eSk7Ci0gIGd0a19w
YWludF9zbGlkZXIoc3R5bGUsIGRyYXdhYmxlLCBzdGF0ZV90eXBlLCBHVEtfU0hBRE9XX09VVCwg
Y2xpcHJlY3QsCi0gICAgICAgICAgICAgICAgICAgd2lkZ2V0LCAoZmxhZ3MgPT0gR1RLX09SSUVO
VEFUSU9OX0hPUklaT05UQUwpID8gImhzY2FsZSIgOiAidnNjYWxlIiwKLSAgICAgICAgICAgICAg
ICAgICB4LCB5LCB0aHVtYl93aWR0aCwgdGh1bWJfaGVpZ2h0LCBmbGFncyk7Ci0KLSAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKIG1vel9ndGtfZW50cnlfcGFpbnQo
R2RrRHJhd2FibGUqIGRyYXdhYmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgIEdka1JlY3RhbmdsZSogY2xpcHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKICAg
ICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1RleHREaXJlY3Rpb24gZGly
ZWN0aW9uKQpAQCAtMTMxMCwxNCArMTIxOSw2IEBAIG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIo
R3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAogICAgICAg
ICBlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCk7CiAgICAgICAgIHcgPSBnUGFydHMtPnByb2dyZXNX
aWRnZXQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9IT1JJWk9OVEFM
OgotICAgICAgICBlbnN1cmVfc2NhbGVfd2lkZ2V0KCk7Ci0gICAgICAgIHcgPSBnUGFydHMtPmhT
Y2FsZVdpZGdldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX1NDQUxFX1ZFUlRJ
Q0FMOgotICAgICAgICBlbnN1cmVfc2NhbGVfd2lkZ2V0KCk7Ci0gICAgICAgIHcgPSBnUGFydHMt
PnZTY2FsZVdpZGdldDsKLSAgICAgICAgYnJlYWs7CiAgICAgLyogVGhlc2Ugd2lkZ2V0cyBoYXZl
IG5vIGJvcmRlcnMsIHNpbmNlIHRoZXkgYXJlIG5vdCBjb250YWluZXJzLiAqLwogICAgIGNhc2Ug
TU9aX0dUS19DSEVDS0JVVFRPTjoKICAgICBjYXNlIE1PWl9HVEtfUkFESU9CVVRUT046CkBAIC0x
MzI2LDggKzEyMjcsNiBAQCBtb3pfZ3RrX2dldF93aWRnZXRfYm9yZGVyKEd0a1RoZW1lV2lkZ2V0
VHlwZSB3aWRnZXQsIGdpbnQqIGxlZnQsIGdpbnQqIHRvcCwKICAgICBjYXNlIE1PWl9HVEtfU0NS
T0xMQkFSX1RSQUNLX1ZFUlRJQ0FMOgogICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJf
SE9SSVpPTlRBTDoKICAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX1ZFUlRJQ0FMOgot
ICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9USFVNQl9IT1JJWk9OVEFMOgotICAgIGNhc2UgTU9aX0dU
S19TQ0FMRV9USFVNQl9WRVJUSUNBTDoKICAgICBjYXNlIE1PWl9HVEtfUFJPR1JFU1NfQ0hVTks6
CiAgICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdodCA9ICpib3R0b20gPSAwOwogICAgICAgICBy
ZXR1cm4gTU9aX0dUS19TVUNDRVNTOwpAQCAtMTM0NCwyMiArMTI0Myw2IEBAIG1vel9ndGtfZ2V0
X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2lu
dCogdG9wLAogfQogCiBnaW50Ci1tb3pfZ3RrX2dldF9zY2FsZXRodW1iX21ldHJpY3MoR3RrT3Jp
ZW50YXRpb24gb3JpZW50LCBnaW50KiB0aHVtYl9sZW5ndGgsIGdpbnQqIHRodW1iX2hlaWdodCkK
LXsKLSAgR3RrV2lkZ2V0KiB3aWRnZXQ7Ci0KLSAgZW5zdXJlX3NjYWxlX3dpZGdldCgpOwotICB3
aWRnZXQgPSAoKG9yaWVudCA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkgPyBnUGFydHMt
PmhTY2FsZVdpZGdldCA6IGdQYXJ0cy0+dlNjYWxlV2lkZ2V0KTsKLQotICBndGtfd2lkZ2V0X3N0
eWxlX2dldCAod2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl9sZW5ndGgi
LCB0aHVtYl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwg
dGh1bWJfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotZ2ludAogbW96X2d0a19nZXRfc2Nyb2xsYmFyX21ldHJp
Y3MoTW96R3RrU2Nyb2xsYmFyTWV0cmljcyAqbWV0cmljcykKIHsKICAgICBlbnN1cmVfc2Nyb2xs
YmFyX3dpZGdldCgpOwpAQCAtMTQyNCwxNiArMTMwNyw2IEBAIG1vel9ndGtfd2lkZ2V0X3BhaW50
KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsIEdka0RyYXdhYmxlKiBkcmF3YWJsZSwKICAgICBj
YXNlIE1PWl9HVEtfU0NST0xMRURfV0lORE9XOgogICAgICAgICByZXR1cm4gbW96X2d0a19zY3Jv
bGxlZF93aW5kb3dfcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9IT1JJWk9OVEFMOgotICAgIGNhc2Ug
TU9aX0dUS19TQ0FMRV9WRVJUSUNBTDoKLSAgICAgICAgcmV0dXJuIG1vel9ndGtfc2NhbGVfcGFp
bnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKEd0a09yaWVudGF0aW9uKSBmbGFncywgZGlyZWN0aW9uKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX0hPUklaT05UQUw6Ci0gICAg
Y2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX1ZFUlRJQ0FMOgotICAgICAgICByZXR1cm4gbW96X2d0
a19zY2FsZV90aHVtYl9wYWludChkcmF3YWJsZSwgcmVjdCwgY2xpcHJlY3QsIHN0YXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3RrT3JpZW50YXRpb24pIGZs
YWdzLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKICAgICBjYXNlIE1PWl9HVEtfRU5UUlk6
CiAgICAgICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKICAgICAgICAgcmV0dXJuIG1vel9ndGtf
ZW50cnlfcGFpbnQoZHJhd2FibGUsIHJlY3QsIGNsaXByZWN0LCBzdGF0ZSwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmMgYi9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9ndGszZHJhd2luZy5jCmluZGV4IGRkYTExMGQ5YzZmZDQ5MTZmMmQwZDVlMDk5MjA1OWQ4MDdh
ODU4NDcuLjY3NjYwNTQ3YzlkNTEzOTc4YTc2MzNkMTkxNjFlYjdjZDE3N2ZkZGEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmMKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYwpAQCAtMTc4LDIwICsxNzgsNiBAQCBlbnN1cmVfc2Nyb2xs
YmFyX3dpZGdldCgpCiB9CiAKIHN0YXRpYyBnaW50Ci1lbnN1cmVfc2NhbGVfd2lkZ2V0KCkKLXsK
LSAgaWYgKCFnUGFydHMtPmhTY2FsZVdpZGdldCkgewotICAgIGdQYXJ0cy0+aFNjYWxlV2lkZ2V0
ID0gZ3RrX2hzY2FsZV9uZXcoTlVMTCk7Ci0gICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFy
dHMtPmhTY2FsZVdpZGdldCk7Ci0gIH0KLSAgaWYgKCFnUGFydHMtPnZTY2FsZVdpZGdldCkgewot
ICAgIGdQYXJ0cy0+dlNjYWxlV2lkZ2V0ID0gZ3RrX3ZzY2FsZV9uZXcoTlVMTCk7Ci0gICAgc2V0
dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnZTY2FsZVdpZGdldCk7Ci0gIH0KLSAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKIGVuc3VyZV9lbnRyeV93aWRnZXQo
KQogewogICAgIGlmICghZ1BhcnRzLT5lbnRyeVdpZGdldCkgewpAQCAtODUwLDgyICs4MzYsNiBA
QCBtb3pfZ3RrX3Njcm9sbGJhcl90aHVtYl9wYWludChHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0
LAogfQogCiBzdGF0aWMgZ2ludAotbW96X2d0a19zY2FsZV9wYWludChjYWlyb190KiBjciwgR2Rr
UmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3Rh
dGUsIEd0a09yaWVudGF0aW9uIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgZ2ludCB4ID0gMCwgeSA9IDA7Ci0gIEd0a1N0YXRlVHlw
ZSBzdGF0ZV90eXBlID0gQ29udmVydEd0a1N0YXRlKHN0YXRlKTsKLSAgR3RrU3R5bGUqIHN0eWxl
OwotICBHdGtXaWRnZXQqIHdpZGdldDsKLQotICBlbnN1cmVfc2NhbGVfd2lkZ2V0KCk7Ci0gIHdp
ZGdldCA9ICgoZmxhZ3MgPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpID8gZ1BhcnRzLT5o
U2NhbGVXaWRnZXQgOiBnUGFydHMtPnZTY2FsZVdpZGdldCk7Ci0gIGd0a193aWRnZXRfc2V0X2Rp
cmVjdGlvbih3aWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpOwotCi0gIGlmIChmbGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRB
TCkgewotICAgIHggPSBYVEhJQ0tORVNTKHN0eWxlKTsKLSAgICB5Kys7Ci0gIH0KLSAgZWxzZSB7
Ci0gICAgeCsrOwotICAgIHkgPSBZVEhJQ0tORVNTKHN0eWxlKTsKLSAgfQotCi0gIGd0a19zdHls
ZV9hcHBseV9kZWZhdWx0X2JhY2tncm91bmQoc3R5bGUsIGNyLCBndGtfd2lkZ2V0X2dldF93aW5k
b3cgKHdpZGdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NU
QVRFX05PUk1BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT54
LCByZWN0LT55LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndp
ZHRoLCByZWN0LT5oZWlnaHQpOwotCi0gIGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBHVEtfU1RB
VEVfQUNUSVZFLCBHVEtfU0hBRE9XX0lOLAotICAgICAgICAgICAgICAgIHdpZGdldCwgInRyb3Vn
aCIsIHJlY3QtPnggKyB4LCByZWN0LT55ICsgeSwKLSAgICAgICAgICAgICAgICByZWN0LT53aWR0
aCAtIDIqeCwgcmVjdC0+aGVpZ2h0IC0gMip5KTsKLQotICBpZiAoc3RhdGUtPmZvY3VzZWQpCi0g
ICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBjciwgc3RhdGVfdHlwZSwgd2lkZ2V0LCAidHJvdWdo
IiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJl
Y3QtPmhlaWdodCk7Ci0KLSAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdp
bnQKLW1vel9ndGtfc2NhbGVfdGh1bWJfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSog
cmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBH
dGtPcmllbnRhdGlvbiBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVy
dEd0a1N0YXRlKHN0YXRlKTsKLSAgR3RrU3R5bGUqIHN0eWxlOwotICBHdGtXaWRnZXQqIHdpZGdl
dDsKLSAgZ2ludCB0aHVtYl93aWR0aCwgdGh1bWJfaGVpZ2h0LCB4LCB5OwotCi0gIGVuc3VyZV9z
Y2FsZV93aWRnZXQoKTsKLSAgd2lkZ2V0ID0gKChmbGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9S
SVpPTlRBTCkgPyBnUGFydHMtPmhTY2FsZVdpZGdldCA6IGdQYXJ0cy0+dlNjYWxlV2lkZ2V0KTsK
LSAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZGlyZWN0aW9uKTsKLQotICBzdHls
ZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0KLSAgLyogZGV0ZXJtaW5lIHRoZSB0
aHVtYiBzaXplLCBhbmQgcG9zaXRpb24gdGhlIHRodW1iIGluIHRoZSBjZW50ZXIgaW4gdGhlIG9w
cG9zaXRlIGF4aXMgKi8KLSAgaWYgKGZsYWdzID09IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFM
KSB7Ci0gICAgbW96X2d0a19nZXRfc2NhbGV0aHVtYl9tZXRyaWNzKEdUS19PUklFTlRBVElPTl9I
T1JJWk9OVEFMLCAmdGh1bWJfd2lkdGgsICZ0aHVtYl9oZWlnaHQpOwotICAgIHggPSByZWN0LT54
OwotICAgIHkgPSByZWN0LT55ICsgKHJlY3QtPmhlaWdodCAtIHRodW1iX2hlaWdodCkgLyAyOwot
ICB9Ci0gIGVsc2UgewotICAgIG1vel9ndGtfZ2V0X3NjYWxldGh1bWJfbWV0cmljcyhHVEtfT1JJ
RU5UQVRJT05fVkVSVElDQUwsICZ0aHVtYl9oZWlnaHQsICZ0aHVtYl93aWR0aCk7Ci0gICAgeCA9
IHJlY3QtPnggKyAocmVjdC0+d2lkdGggLSB0aHVtYl93aWR0aCkgLyAyOwotICAgIHkgPSByZWN0
LT55OwotICB9Ci0KLSAgZ3RrX3BhaW50X3NsaWRlcihzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIEdU
S19TSEFET1dfT1VULAotICAgICAgICAgICAgICAgICAgIHdpZGdldCwgKGZsYWdzID09IEdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMKSA/ICJoc2NhbGUiIDogInZzY2FsZSIsCi0gICAgICAgICAg
ICAgICAgICAgeCwgeSwgdGh1bWJfd2lkdGgsIHRodW1iX2hlaWdodCwgZmxhZ3MpOwotCi0gIHJl
dHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50CiBtb3pfZ3RrX2VudHJ5X3Bh
aW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCiAgICAgICAgICAgICAgICAgICAg
IEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgR3RrV2lkZ2V0KiB3aWRnZXQsCiAgICAgICAgICAgICAg
ICAgICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMTIyOSwxNCArMTEzOSw2IEBA
IG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2lu
dCogbGVmdCwgZ2ludCogdG9wLAogICAgICAgICBlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCk7CiAg
ICAgICAgIHcgPSBnUGFydHMtPnByb2dyZXNXaWRnZXQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTU9aX0dUS19TQ0FMRV9IT1JJWk9OVEFMOgotICAgICAgICBlbnN1cmVfc2NhbGVfd2lkZ2V0
KCk7Ci0gICAgICAgIHcgPSBnUGFydHMtPmhTY2FsZVdpZGdldDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNT1pfR1RLX1NDQUxFX1ZFUlRJQ0FMOgotICAgICAgICBlbnN1cmVfc2NhbGVfd2lk
Z2V0KCk7Ci0gICAgICAgIHcgPSBnUGFydHMtPnZTY2FsZVdpZGdldDsKLSAgICAgICAgYnJlYWs7
CiAgICAgLyogVGhlc2Ugd2lkZ2V0cyBoYXZlIG5vIGJvcmRlcnMsIHNpbmNlIHRoZXkgYXJlIG5v
dCBjb250YWluZXJzLiAqLwogICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTjoKICAgICBjYXNl
IE1PWl9HVEtfUkFESU9CVVRUT046CkBAIC0xMjQ1LDggKzExNDcsNiBAQCBtb3pfZ3RrX2dldF93
aWRnZXRfYm9yZGVyKEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsIGdpbnQqIGxlZnQsIGdpbnQq
IHRvcCwKICAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX1ZFUlRJQ0FMOgogICAgIGNh
c2UgTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDoKICAgICBjYXNlIE1PWl9HVEtf
U0NST0xMQkFSX1RIVU1CX1ZFUlRJQ0FMOgotICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9USFVNQl9I
T1JJWk9OVEFMOgotICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9USFVNQl9WRVJUSUNBTDoKICAgICBj
YXNlIE1PWl9HVEtfUFJPR1JFU1NfQ0hVTks6CiAgICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdo
dCA9ICpib3R0b20gPSAwOwogICAgICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwpAQCAtMTI2
MywyMiArMTE2Myw2IEBAIG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRU
eXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAogfQogCiBnaW50Ci1tb3pfZ3RrX2dl
dF9zY2FsZXRodW1iX21ldHJpY3MoR3RrT3JpZW50YXRpb24gb3JpZW50LCBnaW50KiB0aHVtYl9s
ZW5ndGgsIGdpbnQqIHRodW1iX2hlaWdodCkKLXsKLSAgR3RrV2lkZ2V0KiB3aWRnZXQ7Ci0KLSAg
ZW5zdXJlX3NjYWxlX3dpZGdldCgpOwotICB3aWRnZXQgPSAoKG9yaWVudCA9PSBHVEtfT1JJRU5U
QVRJT05fSE9SSVpPTlRBTCkgPyBnUGFydHMtPmhTY2FsZVdpZGdldCA6IGdQYXJ0cy0+dlNjYWxl
V2lkZ2V0KTsKLQotICBndGtfd2lkZ2V0X3N0eWxlX2dldCAod2lkZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgInNsaWRlcl9sZW5ndGgiLCB0aHVtYl9sZW5ndGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwgdGh1bWJfaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7Ci0KLSAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotZ2ludAog
bW96X2d0a19nZXRfc2Nyb2xsYmFyX21ldHJpY3MoTW96R3RrU2Nyb2xsYmFyTWV0cmljcyAqbWV0
cmljcykKIHsKICAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpOwpAQCAtMTM0MiwxNiArMTIy
Niw2IEBAIG1vel9ndGtfd2lkZ2V0X3BhaW50KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsIGNh
aXJvX3QqIGNyLAogICAgIGNhc2UgTU9aX0dUS19TQ1JPTExFRF9XSU5ET1c6CiAgICAgICAgIHJl
dHVybiBtb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19wYWludChjciwgcmVjdCwgc3RhdGUpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfU0NBTEVfSE9SSVpPTlRBTDoKLSAgICBjYXNl
IE1PWl9HVEtfU0NBTEVfVkVSVElDQUw6Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX3NjYWxlX3Bh
aW50KGNyLCByZWN0LCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEd0a09yaWVudGF0aW9uKSBmbGFncywgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBNT1pfR1RLX1NDQUxFX1RIVU1CX0hPUklaT05UQUw6Ci0gICAgY2FzZSBNT1pfR1RLX1ND
QUxFX1RIVU1CX1ZFUlRJQ0FMOgotICAgICAgICByZXR1cm4gbW96X2d0a19zY2FsZV90aHVtYl9w
YWludChjciwgcmVjdCwgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChHdGtPcmllbnRhdGlvbikgZmxhZ3MsIGRpcmVjdGlvbik7Ci0gICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTU9aX0dUS19FTlRSWToKICAgICAgICAgZW5zdXJlX2VudHJ5X3dpZGdldCgp
OwogICAgICAgICByZXR1cm4gbW96X2d0a19lbnRyeV9wYWludChjciwgcmVjdCwgc3RhdGUsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgKaW5kZXggYTk4MTU0M2E2YjJlNTlmNzNmNTg3MGNhY2Qx
NDcwMDg5ZTUyZDZmMC4uOWQxM2EwNzgwMzQ4YmY2NjcyOTZkYWZhMDY0MDJhYmJiNmY0NDU5NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaApAQCAtOTMsOCArOTMsNiBAQCB0eXBlZGVmIHN0
cnVjdCBfR3RrVGhlbWVQYXJ0cyB7CiAgICAgR3RrV2lkZ2V0KiByYWRpb2J1dHRvbldpZGdldDsK
ICAgICBHdGtXaWRnZXQqIGhvcml6U2Nyb2xsYmFyV2lkZ2V0OwogICAgIEd0a1dpZGdldCogdmVy
dFNjcm9sbGJhcldpZGdldDsKLSAgICBHdGtXaWRnZXQqIGhTY2FsZVdpZGdldDsKLSAgICBHdGtX
aWRnZXQqIHZTY2FsZVdpZGdldDsKICAgICBHdGtXaWRnZXQqIGVudHJ5V2lkZ2V0OwogICAgIEd0
a1dpZGdldCogY29tYm9Cb3hXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiBjb21ib0JveEJ1dHRvbldp
ZGdldDsKQEAgLTE0NywxMiArMTQ1LDYgQEAgdHlwZWRlZiBlbnVtIHsKICAgTU9aX0dUS19TQ1JP
TExCQVJfVEhVTUJfVkVSVElDQUwsCiAgIC8qIFBhaW50cyB0aGUgYmFja2dyb3VuZCBvZiBhIHNj
cm9sbGVkIHdpbmRvdyAqLwogICBNT1pfR1RLX1NDUk9MTEVEX1dJTkRPVywKLSAgLyogUGFpbnRz
IGEgR3RrU2NhbGUuICovCi0gIE1PWl9HVEtfU0NBTEVfSE9SSVpPTlRBTCwKLSAgTU9aX0dUS19T
Q0FMRV9WRVJUSUNBTCwKLSAgLyogUGFpbnRzIGEgR3RrU2NhbGUgdGh1bWIuICovCi0gIE1PWl9H
VEtfU0NBTEVfVEhVTUJfSE9SSVpPTlRBTCwKLSAgTU9aX0dUS19TQ0FMRV9USFVNQl9WRVJUSUNB
TCwKICAgTU9aX0dUS19FTlRSWSwKICAgLyogUGFpbnRzIGEgR3RrT3B0aW9uTWVudS4gKi8KICAg
TU9aX0dUS19EUk9QRE9XTiwKQEAgLTI3NywxNyArMjY5LDYgQEAgbW96X2d0a193aWRnZXRfZ2V0
X2ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiogaW50ZXJpb3JfZm9jdXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2ludCogZm9jdXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCk7
CiAKIC8qKgotICogR2V0IHRoZSBkZXNpcmVkIHNpemUgb2YgYSBHdGtTY2FsZSB0aHVtYgotICog
b3JpZW50OiAgICAgICAgICAgW0lOXSB0aGUgc2NhbGUgb3JpZW50YXRpb24KLSAqIHRodW1iX2xl
bmd0aDogICAgIFtPVVRdIHRoZSBsZW5ndGggb2YgdGhlIHRodW1iCi0gKiB0aHVtYl9oZWlnaHQ6
ICAgICBbT1VUXSB0aGUgaGVpZ2h0IG9mIHRoZSB0aHVtYgotICoKLSAqIHJldHVybnM6ICAgIE1P
Wl9HVEtfU1VDQ0VTUyBpZiB0aGVyZSB3YXMgbm8gZXJyb3IsIGFuIGVycm9yIGNvZGUgb3RoZXJ3
aXNlCi0gKi8KLWdpbnQKLW1vel9ndGtfZ2V0X3NjYWxldGh1bWJfbWV0cmljcyhHdGtPcmllbnRh
dGlvbiBvcmllbnQsIGdpbnQqIHRodW1iX2xlbmd0aCwgZ2ludCogdGh1bWJfaGVpZ2h0KTsKLQot
LyoqCiAgKiBHZXQgdGhlIGRlc2lyZWQgbWV0cmljcyBmb3IgYSBHdGtTY3JvbGxiYXIKICAqIG1l
dHJpY3M6ICAgICAgICAgIFtJTl0gIHN0cnVjdCB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIG1ldHJp
Y3MKICAqCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73519</attachid>
            <date>2010-11-10 11:48:45 -0800</date>
            <delta_ts>2010-12-15 17:10:48 -0800</delta_ts>
            <desc>Updated Patch</desc>
            <filename>bug-40139-20101110114845.patch</filename>
            <type>text/plain</type>
            <size>33858</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMThhYjVhYjY4OGU2MGY3ZDA4MWRjZjI5ZDc4Y2RlMGQyMTg1ZGE4Li5mZTFkZWNl
NjgyNmE0MDYwOWMzZDRjYTdlOTAxYTIxN2U5ZDY0MThjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMTAtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdpZGdl
dHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybWF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMzkKKworICAgICAgICBBZGRlZCBhIHBs
YXRmb3JtLXNwZWNpZmljIGJhc2VsaW5lIGZvciB0aGUgc2xpZGVyIHRyYW5zZm9ybWF0aW9uCisg
ICAgICAgIHRlc3QuIFRoaXMgYmFzZWxpbmUgc2F5cyAiRkFJTCIgYmVjYXVzZSB0aGUgdGVzdCBo
YXMgcGxhdGZvcm0tc3BlY2lmaWMKKyAgICAgICAgb2Zmc2V0cyBoYXJkLWNvZGVkLiBUaGUgcmVz
dWx0IGlzIG9ubHkgb25lIHRpY2sgb2ZmIGZyb20gZXhwZWN0ZWQgdGhvdWdoLAorICAgICAgICBz
byBpdCdzIGxpa2VseSBjb3JyZWN0IGZvciB1cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVy
LXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTEtMTAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhh
biBMb3Blei4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYTAzNGZjYWM3NTM0NWM2MjRj
Yzc2ZWQxNWY4NmZjMzQ2ZDNiNWRiYy4uOTkzNzljZTYxZGRmY2Q4ODAwM2NiZDNmNzk1NmUzY2Nm
MzNiZmY2YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTUyMzQsMTEgKzUyMzQsNiBA
QCBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kaXNjb25uZWN0ZWQtZnJhbWUuaHRtbAogZmFzdC9kb20v
R2VvbG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLWFscmVhZHkuaHRtbAogZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGlzY29ubmVjdGVkLWZyYW1lLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKIAotIyBH
VEsrIHRoZW1lLXJlbmRlcmVkIHdpZGdldHMgZG8gbm90IHN1cHBvcnQgQ1NTIHRyYW5zZm9ybXMK
LSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTM5Ci1mYXN0L2Zv
cm1zL3NsaWRlci10cmFuc2Zvcm1lZC5odG1sCi1mYXN0L2Zvcm1zL3NsaWRlci10cmFuc2Zvcm1l
ZC5odG1sCi0KICMgU29tZSBpbnB1dCB0eXBlPXJhbmdlIHRlc3RzIGZhaWwgYmVjYXVzZSBvZiB0
aGUgc2l6ZSAKICMgb2YgdGhlIHNsaWRlciB0aHVtYiBpbiBHVEsrIHRoZW1lcy4KIGZhc3QvZm9y
bXMvc2xpZGVyLW1vdXNlLWV2ZW50cy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvZmFzdC9mb3Jtcy9zbGlkZXItdHJhbnNmb3JtZWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9ybXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZGNlMjU5YjEyNmFmMTEwYjI2YTc2NjllMzM3NjY2YmExZjI5
ZDViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZm9y
bXMvc2xpZGVyLXRyYW5zZm9ybWVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKKworRkFJ
TDogZXhwZWN0ZWQgc2xpZGVyIHZhbHVlIDM5LCBnb3QgMzgKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZjMzY4NWVhZmI2MjgyODk5NDlj
YjAxZTg2ODlhNTdhMTIzMjBmMC4uZGVkMjc2MWY5NGRlNWRjYTcyZjRmN2NmNzNmYTE4NWFiNjBh
YmQxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MyBAQAorMjAxMC0xMC0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW0dUS10gV2lkZ2V0cyBkbyBub3Qgc3VwcG9ydCBDU1MgdHJhbnNmb3JtYXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDEzOQor
CisgICAgICAgIEluc3RlYWQgb2YgcmVuZGVyaW5nIGRpcmVjdGx5IG9udG8gdGhlIHRhcmdldCBk
cmF3YWJsZSB3aGVuIHJlbmRlcmluZworICAgICAgICBmb3JtIGNvbnRyb2xzIG9uIEdUSysgMi4w
LCByZW5kZXIgb250byBhbiBpbnRlcm1lZGlhdGUgc3VyZmFjZSBhbmQgdXNlCisgICAgICAgIGNh
aXJvIHRvIGJsaXQgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSB0YXJnZXQgc3VyZmFjZS4gVGhpcyBo
YXMgdHdvCisgICAgICAgIGJlbmVmaXRzLiBUaGUgZmlyc3QgaXMgdGhhdCBpdCBhbHdheXMgaG9u
b3JzIHRoZSBjdXJyZW50IENhaXJvCisgICAgICAgIHRyYW5zZm9ybWF0aW9uLiBUaGUgc2Vjb25k
IGlzIHRoYXQgc2luY2UgdGhlIGludGVybWVkaWF0ZSBkcmF3YWJsZSBpcworICAgICAgICBhbHdh
eXMgYSAzMi1iaXQgR2RrUGl4bWFwLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIGEgc2V0IG9mIHdp
ZGdldHMKKyAgICAgICAgcGVyLWNvbG9ybWFwIGFueSBsb25nZXIuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgYWxzbyBiZWdpbnMgdGhlIGFic3RyYWN0aW9uIG9mIHdpZGdldCByZW5kZXJpbmcgc28g
dGhhdCBHVEsrCisgICAgICAgIDIgYW5kIEdUSysgMyBjYW4gdXNlIHRoZSBzYW1lIGNvZGUgcGF0
aC4gVGhlIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lsbAorICAgICAgICBldmVudHVhbGx5IGhp
ZGUgYWxsIHZlcnNpb24gZGlmZmVyZW5jZXMgZnJvbSBSZW5kZXJUaGVtZUd0aywgd2hpY2ggY2Fu
CisgICAgICAgIGp1c3QgZm9jdXMgb24gaW50ZXJwcmV0aW5nIHRoZSBHdGtTdHlsZSBwcm9wZXJ0
aWVzLiAKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgV2lkZ2V0UmVuZGVyaW5Db250
ZXh0IHNvdXJjZSBmaWxlcyB0byB0aGUgc291cmNlcyBsaXN0LgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uY3BwOgorICAgICAgICAoV1RGOjpy
ZWZQbGF0Zm9ybVB0cik6IEFkZCBhIHNwZWNpYWxpemF0aW9uIGZvciBDYWlybyBwYXR0ZXJucy4K
KyAgICAgICAgKFdURjo6ZGVyZWZQbGF0Zm9ybVB0cik6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUmVmUHRyQ2Fpcm8uaDogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6IE5vIGxvbmdlciBrZWVwIGEgc2V0IG9mCisg
ICAgICAgIHdpZGdldHMgcGVyLWNvbG9ybWFwIGZvciBHVEsrLCBpbnN0ZWFkIGp1c3QgZGV0ZXJt
aW5lIGlmIHdlIGNhbiB1c2UgUkdCQQorICAgICAgICBjb2xvcm1hcHMgYW5kIGdvIGZyb20gdGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z2V0SW5kaWNhdG9yTWV0
cmljcyk6IFB1dCB0aGUgbG9naWMgZm9yCisgICAgICAgIGdldHRpbmcgdG9nZ2xlIGJ1dHRvbiBp
bmRpY2F0b3IgbWV0cmljcyBpbnRvIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KTogTm93IHVzZXMKKyAgICAgICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB0byBkbyB3aWRnZXQgcmVuZGVyaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VG9nZ2xlU2l6ZSk6IFVzZSB0aGUgbmV3IGdldEluZGljYXRvck1ldHJpY3MgaGVscGVy
LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oOiBBZGRlZCBhIG1lbWJl
ciB0byB0cmFjayB3aGV0aGVyIG9yIG5vdAorICAgICAgICAgIHRoZSB3aWRnZXRzIGFyZSB1c2lu
ZyBhIFJHQkEgY29sb3JtYXAuIEFsc28gcmVtb3ZlIGEgZGVmdW5jdCBQYWdlKgorICAgICAgICAg
IG1lbWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwOiBT
d2l0Y2ggYWxsIHdpZGdldCBkcmF3aW5nCisgICAgICAgIG9wZXJhdGlvbnMgdG8gdXNlIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6
cGFpbnRUcmFja0JhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbik6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6cHVyZ2VTY3JhdGNoQnVmZmVyKTogQWRkZWQsIHRoaXMgaXMgc2ltaWxhciB0
byB0aGUgc2NyYXRjaAorICAgICAgICBidWZmZXIgaW1wbGVtZW50YXRpb24gZnJvbSBDb250ZXh0
U2hhZG93LgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2VTY3JhdGNoQnVmZmVyVGltZXI6OmZpcmVk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXh0cmFTcGFjZUZvcldpZGdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojp+
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250
ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KTogQWRkZWQuCisKIDIwMTAtMTEt
MTAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDA0ODc4ODcyMGUyMDUxNWQyYzBlZDMwOGI3
YWIwMzI2NWI0ZTVhM2IuLjYxMTQzNWU5YWJkNDVmMTA3MTM5NDJmNGFjNzUyODllNWEzMGUyNjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtMzYzMSw2ICszNjMxLDkgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lk
Z2V0R3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dEd0azIuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
R3RrMy5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNv
ZGVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Jl
ZlB0ckNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCmluZGV4IGE2Yzk4M2UzY2EyNmU4MzU4YTNiZjdiMzQzZjE1ZTI1MTViYjI0M2QuLmM4
YjI0MmM4MTE3NzljNTFhYjY3N2ZhNDU2NmQxODUyZDI0NTgyZDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCkBAIC03Niw2ICs3NiwxOCBA
QCB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZJZk5vdE51bGwoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogcHRy
KQogICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KHB0cik7CiB9CiAKK3RlbXBsYXRl
PD4gdm9pZCByZWZJZk5vdE51bGwoY2Fpcm9fcGF0dGVybl90KiBwdHIpCit7CisgICAgaWYgKExJ
S0VMWShwdHIgIT0gMCkpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fcmVmZXJlbmNlKHB0cik7Cit9
CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19wYXR0ZXJuX3QqIHB0cikK
K3sKKyAgICBpZiAoTElLRUxZKHB0ciAhPSAwKSkKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0
cm95KHB0cik7Cit9CisKICNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKIHRlbXBsYXRlPD4gdm9p
ZCByZWZJZk5vdE51bGwoRmNQYXR0ZXJuKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKaW5kZXggMDQyOWVjNTA4ODZlODE1NzYxNDkyOWFm
NDM2Y2ZkMzBkMTExODk4Yy4uMjA0ZDFlMzJmZDUxYzk1YWU0ZDZmYTIyNzYyYzczODhjYWRhNjRi
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWly
by5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaApA
QCAtMjYsNiArMjYsNyBAQCB0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKIHR5cGVkZWYg
c3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKIHR5cGVkZWYgc3RydWN0IF9j
YWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9f
c2NhbGVkX2ZvbnQgY2Fpcm9fc2NhbGVkX2ZvbnRfdDsKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19w
YXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKIAogI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogdHlw
ZWRlZiBzdHJ1Y3QgX0ZjUGF0dGVybiBGY1BhdHRlcm47CkBAIC00NSw2ICs0Niw5IEBAIHRlbXBs
YXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19mb250X2ZhY2VfdCogcHRyKTsKIHRlbXBs
YXRlPD4gdm9pZCByZWZJZk5vdE51bGwoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogcHRyKTsKIHRlbXBs
YXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19zY2FsZWRfZm9udF90KiBwdHIpOwogCit0
ZW1wbGF0ZTw+IHZvaWQgcmVmSWZOb3ROdWxsKGNhaXJvX3BhdHRlcm5fdCopOwordGVtcGxhdGU8
PiB2b2lkIGRlcmVmSWZOb3ROdWxsKGNhaXJvX3BhdHRlcm5fdCopOworCiAjaWYgZGVmaW5lZChV
U0VfRlJFRVRZUEUpCiB0ZW1wbGF0ZTw+IHZvaWQgcmVmSWZOb3ROdWxsKEZjUGF0dGVybiogcHRy
KTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChGY1BhdHRlcm4qIHB0cik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggOGRmNWNkYTA5Mjc4Y2U4ODJl
Zjk4MDVlZjE3MTAwYjUzMTczODM4Mi4uZmU2YzllOWU1M2NmMmI3NzkyZTQxZjQzYzFiNzdiNzcz
MGFkZGYzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMyw2
ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVzZXJB
Z2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8
Z3RrL2d0ay5oPgpAQCAtMTUxLDE1ICsxNTMsMjYgQEAgUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRo
ZW1lR3RrKCkKICAgICAsIG1fcGF1c2VCdXR0b24oMCkKICAgICAsIG1fc2Vla0JhY2tCdXR0b24o
MCkKICAgICAsIG1fc2Vla0ZvcndhcmRCdXR0b24oMCkKLSAgICAsIG1fcGFydHNUYWJsZShhZG9w
dFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbCgwLCAwLCAwLCBnX2ZyZWUpKSkKKyNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgICwgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1h
cCh0cnVlKQorI2VuZGlmCiB7Ci0gICAgaWYgKCFtb3pHdGtSZWZDb3VudCkgewotICAgICAgICBt
b3pfZ3RrX2luaXQoKTsKIAotICAgICAgICAvLyBVc2UgdGhlIHRoZW1lIHBhcnRzIGZvciB0aGUg
ZGVmYXVsdCBkcmF3YWJsZS4KLSAgICAgICAgbW96X2d0a191c2VfdGhlbWVfcGFydHMocGFydHNG
b3JEcmF3YWJsZSgwKSk7CisgICAgbWVtc2V0KCZtX3RoZW1lUGFydHMsIDAsIHNpemVvZihHdGtU
aGVtZVBhcnRzKSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtDb2xvcm1hcCog
Y29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHQoKSk7CisgICAgaWYgKCFjb2xvcm1hcCkgeworICAgICAgICBtX3RoZW1lUGFydHNIYXZl
UkdCQUNvbG9ybWFwID0gZmFsc2U7CisgICAgICAgIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRf
ZGVmYXVsdF9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwogICAgIH0KKyAgICBt
X3RoZW1lUGFydHMuY29sb3JtYXAgPSBjb2xvcm1hcDsKKyNlbmRpZgogCisgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUuCisgICAgaWYgKCFtb3pHdGtSZWZD
b3VudCkgeworICAgICAgICBtb3pfZ3RrX2luaXQoKTsKKyAgICAgICAgbW96X2d0a191c2VfdGhl
bWVfcGFydHMoJm1fdGhlbWVQYXJ0cyk7CisgICAgfQogICAgICsrbW96R3RrUmVmQ291bnQ7CiAK
ICNpZiBFTkFCTEUoVklERU8pCkBAIC0xODIsMzYgKzE5NSwxOSBAQCBSZW5kZXJUaGVtZUd0azo6
flJlbmRlclRoZW1lR3RrKCkKICAgICBtX3NlZWtCYWNrQnV0dG9uLmNsZWFyKCk7CiAgICAgbV9z
ZWVrRm9yd2FyZEJ1dHRvbi5jbGVhcigpOwogCi0gICAgR0xpc3QqIHZhbHVlcyA9IGdfaGFzaF90
YWJsZV9nZXRfdmFsdWVzKG1fcGFydHNUYWJsZS5nZXQoKSk7Ci0gICAgZm9yIChndWludCBpID0g
MDsgaSA8IGdfbGlzdF9sZW5ndGgodmFsdWVzKTsgaSsrKQotICAgICAgICBtb3pfZ3RrX2Rlc3Ry
b3lfdGhlbWVfcGFydHNfd2lkZ2V0cygKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a1RoZW1l
UGFydHMqPihnX2xpc3RfbnRoX2RhdGEodmFsdWVzLCBpKSkpOwotCiAgICAgZ3RrX3dpZGdldF9k
ZXN0cm95KG1fZ3RrV2luZG93KTsKIH0KIAotR3RrVGhlbWVQYXJ0cyogUmVuZGVyVGhlbWVHdGs6
OnBhcnRzRm9yRHJhd2FibGUoR2RrRHJhd2FibGUqIGRyYXdhYmxlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUd0azo6Z2V0SW5kaWNhdG9yTWV0cmljcyhDb250cm9sUGFydCBwYXJ0LCBpbnQmIGlu
ZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3BhY2luZykgY29uc3QKIHsKLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgIC8vIEEgbnVsbCBkcmF3YWJsZSByZXByZXNlbnRzIHRoZSBkZWZh
dWx0IHNjcmVlbiBjb2xvcm1hcC4KLSAgICBHZGtDb2xvcm1hcCogY29sb3JtYXAgPSAwOwotICAg
IGlmICghZHJhd2FibGUpCi0gICAgICAgIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dF9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
Y29sb3JtYXAgPSBnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKGRyYXdhYmxlKTsKLQotICAgIEd0
a1RoZW1lUGFydHMqIHBhcnRzID0gc3RhdGljX2Nhc3Q8R3RrVGhlbWVQYXJ0cyo+KGdfaGFzaF90
YWJsZV9sb29rdXAobV9wYXJ0c1RhYmxlLmdldCgpLCBjb2xvcm1hcCkpOwotICAgIGlmICghcGFy
dHMpIHsKLSAgICAgICAgcGFydHMgPSBnX25ldzAoR3RrVGhlbWVQYXJ0cywgMSk7Ci0gICAgICAg
IHBhcnRzLT5jb2xvcm1hcCA9IGNvbG9ybWFwOwotICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0
KG1fcGFydHNUYWJsZS5nZXQoKSwgY29sb3JtYXAsIHBhcnRzKTsKKyAgICBBU1NFUlQocGFydCA9
PSBDaGVja2JveFBhcnQgfHwgcGFydCA9PSBSYWRpb1BhcnQpOworICAgIGlmIChwYXJ0ID09IENo
ZWNrYm94UGFydCkgeworICAgICAgICBtb3pfZ3RrX2NoZWNrYm94X2dldF9tZXRyaWNzKCZpbmRp
Y2F0b3JTaXplLCAmaW5kaWNhdG9yU3BhY2luZyk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0j
ZWxzZQotICAgIC8vIEZvciBHVEsrIDMuMCB3ZSBubyBsb25nZXIgaGF2ZSB0byB3b3JyeSBhYm91
dCBtYWludGFpbmluZyBhIHNldCBvZiB3aWRnZXRzIHBlci1jb2xvcm1hcC4KLSAgICBzdGF0aWMg
R3RrVGhlbWVQYXJ0cyogcGFydHMgPSBnX3NsaWNlX25ldzAoR3RrVGhlbWVQYXJ0cyk7Ci0jZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKIAotICAgIHJldHVybiBwYXJ0czsKKyAgICAvLyBSYWRp
b1BhcnQKKyAgICBtb3pfZ3RrX3JhZGlvX2dldF9tZXRyaWNzKCZpbmRpY2F0b3JTaXplLCAmaW5k
aWNhdG9yU3BhY2luZyk7CiB9CiAKIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBh
cnQgYXBwZWFyYW5jZSkKQEAgLTI4OSw2OSArMjg1LDYgQEAgc3RhdGljIHZvaWQgYWRqdXN0TW96
aWxsYVN0eWxlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxl
LAogICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCh5cGFkZGluZyArIGJvdHRvbSwg
Rml4ZWQpKTsKIH0KIAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUq
IHdpZGdldFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikK
LXsKLSAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3Vj
Y2VlZGVkCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgUGxhdGZvcm1SZWZQdHI8R2RrRHJhd2FibGU+IGRyYXdhYmxlKGNv
bnRleHQtPmdka0RyYXdhYmxlKCkpOwotICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QsIGNsaXBS
ZWN0OwotICAgIGlmIChkcmF3YWJsZSkgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0g
Y29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgICAgIEludFBvaW50IHBvcyA9IGN0bS5tYXBQb2ludChy
ZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBwYWludFJlY3QgPSBJbnRSZWN0KHBvcy54KCksIHBv
cy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gSW50ZXJz
ZWN0IHRoZSBjYWlybyByZWN0YW5nbGUgd2l0aCB0aGUgdGFyZ2V0IHdpZGdldCByZWdpb24uIFRo
aXMgIHdpbGwKLSAgICAgICAgLy8gcHJldmVudCB0aGUgdGhlbWUgZHJhd2luZyBjb2RlIGZyb20g
ZHJhd2luZyBpbnRvIHJlZ2lvbnMgdGhhdCBjYWlybyB3aWxsCi0gICAgICAgIC8vIGNsaXAgYW55
d2F5LgotICAgICAgICBkb3VibGUgY2xpcFgxLCBjbGlwWDIsIGNsaXBZMSwgY2xpcFkyOwotICAg
ICAgICBjYWlyb19jbGlwX2V4dGVudHMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksICZjbGlw
WDEsICZjbGlwWTEsICZjbGlwWDIsICZjbGlwWTIpOwotICAgICAgICBJbnRQb2ludCBjbGlwUG9z
ID0gY3RtLm1hcFBvaW50KEludFBvaW50KGNsaXBYMSwgY2xpcFkxKSk7Ci0KLSAgICAgICAgY2xp
cFJlY3Qud2lkdGggPSBjbGlwWDIgLSBjbGlwWDE7Ci0gICAgICAgIGNsaXBSZWN0LmhlaWdodCA9
IGNsaXBZMiAtIGNsaXBZMTsKLSAgICAgICAgY2xpcFJlY3QueCA9IGNsaXBQb3MueCgpOwotICAg
ICAgICBjbGlwUmVjdC55ID0gY2xpcFBvcy55KCk7Ci0gICAgICAgIGdka19yZWN0YW5nbGVfaW50
ZXJzZWN0KCZwYWludFJlY3QsICZjbGlwUmVjdCwgJmNsaXBSZWN0KTsKLQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEluIHNvbWUgc2l0dWF0aW9ucywgbGlrZSBkdXJpbmcgcHJpbnQgcHJldmll
d3MsIHRoaXMgR3JhcGhpY3NDb250ZXh0IGlzIG5vdAotICAgICAgICAvLyBiYWNrZWQgYnkgYSBH
ZGtEcmF3YWJsZS4gSW4gdGhvc2Ugc2l0dWF0aW9ucywgd2UgcmVuZGVyIG9udG8gYSBwaXhtYXAg
YW5kIHRoZW4KLSAgICAgICAgLy8gY29weSB0aGUgcmVuZGVyZWQgZGF0YSBiYWNrIHRvIHRoZSBH
cmFwaGljc0NvbnRleHQgdmlhIENhaXJvLgotICAgICAgICBkcmF3YWJsZSA9IGFkb3B0UGxhdGZv
cm1SZWYoZ2RrX3BpeG1hcF9uZXcoMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBnZGtf
dmlzdWFsX2dldF9kZXB0aChnZGtfdmlzdWFsX2dldF9zeXN0ZW0oKSkpKTsKLSAgICAgICAgcGFp
bnRSZWN0ID0gY2xpcFJlY3QgPSBJbnRSZWN0KDAsIDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0gICAgfQotCi0gICAgbW96X2d0a191c2VfdGhlbWVfcGFydHMocGFydHNGb3JEcmF3
YWJsZShkcmF3YWJsZS5nZXQoKSkpOwotICAgIGJvb2wgc3VjY2VzcyA9IG1vel9ndGtfd2lkZ2V0
X3BhaW50KHR5cGUsIGRyYXdhYmxlLmdldCgpLCAmcGFpbnRSZWN0LCAmY2xpcFJlY3QsIHdpZGdl
dFN0YXRlLCBmbGFncywgdGV4dERpcmVjdGlvbikgPT0gTU9aX0dUS19TVUNDRVNTOwotCi0gICAg
Ly8gSWYgdGhlIGRyYXdpbmcgd2FzIHN1Y2Nlc3NmdWwgYW5kIHdlIHJlbmRlcmVkIG9udG8gYSBw
aXhtYXAsIGNvcHkgdGhlCi0gICAgLy8gcmVzdWx0cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBHcmFw
aGljc0NvbnRleHQuCi0gICAgaWYgKHN1Y2Nlc3MgJiYgIWNvbnRleHQtPmdka0RyYXdhYmxlKCkp
IHsKLSAgICAgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgICAgIGNhaXJvX3NhdmUoY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgZ2RrX2Nh
aXJvX3NldF9zb3VyY2VfcGl4bWFwKGNhaXJvQ29udGV4dCwgZHJhd2FibGUuZ2V0KCksIHJlY3Qu
eCgpLCByZWN0LnkoKSk7Ci0gICAgICAgIGNhaXJvX3BhaW50KGNhaXJvQ29udGV4dCk7Ci0gICAg
ICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gIXN1
Y2Nlc3M7Ci19Ci0jZWxzZQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNb3ppbGxhR3RrV2lk
Z2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldFN0YXRlKiB3aWRnZXRTdGF0ZSwgaW50IGZsYWdz
LCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCi17Ci0gICAgLy8gUGFpbnRpbmcgaXMg
ZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBoYXZlIHN1Y2NlZWRlZAotICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIGZh
bHNlID09IHN1Y2Nlc3MsIGJlY2F1c2Ugb2YgYXdlc29tZS4KLSAgICBHZGtSZWN0YW5nbGUgcGFp
bnRSZWN0ID0gcmVjdDsKLSAgICByZXR1cm4gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksICZwYWludFJlY3QsIHdpZGdldFN0YXRlLCBmbGFncywg
dGV4dERpcmVjdGlvbikgIT0gTU9aX0dUS19TVUNDRVNTOwotfQotI2VuZGlmCi0KIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBpbnQgZmxhZ3MpCiB7CiAgICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJs
ZWQgc28ganVzdCBjbGFpbSB0byBoYXZlIHN1Y2NlZWRlZApAQCAtMzgyLDggKzMxNSw4IEBAIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVyT2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0
eXBlLCBSZW5kZXJPYmplY3QqIHJlCiAgICAgZWxzZQogICAgICAgICB3aWRnZXRTdGF0ZS5kZXBy
ZXNzZWQgPSBmYWxzZTsKIAotICAgIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGd0
a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAg
cmV0dXJuIHBhaW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmd2lkZ2V0
U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHdpZGdldENvbnRleHQoY29udGV4dCwgcmVjdCk7CisgICAgcmV0dXJuICF3aWRnZXRDb250ZXh0
LnBhaW50TW96aWxsYVdpZGdldCh0eXBlLCAmd2lkZ2V0U3RhdGUsIGZsYWdzLCBndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKIH0KIAogc3RhdGlj
IHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkKQEAgLTM5NCwxOSArMzI3LDcgQEAg
c3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgQ29udHIKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5
IG5vdCBjb3JyZWN0IHVzZSBvZiBpbmRpY2F0b3JTaXplIGFuZCBpbmRpY2F0b3JTcGFjaW5nLgog
ICAgIGdpbnQgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZzsKLQotICAgIHN3aXRjaCAo
YXBwZWFyYW5jZSkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBpZiAobW96X2d0
a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcp
ICE9IE1PWl9HVEtfU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGlmIChtb3pfZ3RrX3JhZGlvX2dldF9tZXRy
aWNzKCZpbmRpY2F0b3JTaXplLCAmaW5kaWNhdG9yU3BhY2luZykgIT0gTU9aX0dUS19TVUNDRVNT
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIHRoZW1lLT5nZXRJbmRpY2F0b3JNZXRyaWNzKGFwcGVh
cmFuY2UsIGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmcpOwogCiAgICAgLy8gT3RoZXIg
cG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMsIGJ1dCBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5k
IHRoZSBuYXRpdmUgbG9vay4KICAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlv
biBvcHRpb24gdmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRp
YmlsaXR5LgpAQCAtNjE0LDcgKzUzNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mCiAgICAg
aWYgKHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQogICAgICAgICBndGtQYXJ0ID0gTU9aX0dU
S19TQ0FMRV9WRVJUSUNBTDsKIAotICAgIHJldHVybiBwYWludFJlbmRlck9iamVjdChndGtQYXJ0
LCBvYmplY3QsIGluZm8uY29udGV4dCwgdG9SZW5kZXJCb3gob2JqZWN0KS0+YWJzb2x1dGVDb250
ZW50Qm94KCkpOworICAgIHJldHVybiBwYWludFJlbmRlck9iamVjdChndGtQYXJ0LCBvYmplY3Qs
IGluZm8uY29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAppbmRleCA2ZDMy
NGI2NDhlZGMxZTdjYjk3MTE2NjFmNTY5MzVmZWQzMjU2MzViLi5hYzA4Y2YxMTJmOWUxMjE3NmY5
ZjFkNDI4NzUzOTM3ZTJmMjdkYTJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVk
aWFDb250cm9sc1N0eWxlU2hlZXQoKTsKICNlbmRpZgogCi0gICAgYm9vbCBwYWludE1vemlsbGFH
dGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0JiwgR3RrV2lkZ2V0U3RhdGUqLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gPSBHVEtf
VEVYVF9ESVJfTk9ORSk7CisgICAgdm9pZCBnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0
LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3BhY2luZykgY29uc3Q7CiAKICAg
ICBHdGtXaWRnZXQqIGd0a1Njcm9sbGJhcigpOwogCkBAIC0xNjksNyArMTY5LDYgQEAgcHJpdmF0
ZToKICAgICBHdGtDb250YWluZXIqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwogCiAgICAgYm9vbCBw
YWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUsIFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncyA9IDApOwotICAgIEd0
a1RoZW1lUGFydHMqIHBhcnRzRm9yRHJhd2FibGUoR2RrRHJhd2FibGUqKSBjb25zdDsKIAogICAg
IG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRvdzsKICAgICBtdXRhYmxlIEd0a0NvbnRhaW5l
ciogbV9ndGtDb250YWluZXI7CkBAIC0xOTMsOSArMTkyLDExIEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPEltYWdlPiBtX3BhdXNlQnV0dG9uOwogICAgIFJlZlB0cjxJbWFnZT4gbV9zZWVrQmFja0J1
dHRvbjsKICAgICBSZWZQdHI8SW1hZ2U+IG1fc2Vla0ZvcndhcmRCdXR0b247Ci0gICAgUGFnZSog
bV9wYWdlOwotICAgIFBsYXRmb3JtUmVmUHRyPEdIYXNoVGFibGU+IG1fcGFydHNUYWJsZTsKLQor
ICAgIEd0a1RoZW1lUGFydHMgbV90aGVtZVBhcnRzOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
CisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworI2VuZGlmCisgICAgZnJp
ZW5kIGNsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKaW5kZXggMTliODk3Y2YwMmEzOTQ5NGVmZTIz
Y2VhOTM5ZjE0OTI0MjNkNGMyNy4uZjkyZGQyMGNhZTQwNjIyNjllMzQ2M2I1OGQwZmYzMzYwODA0
YTZhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIldpZGdldFJlbmRl
cmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJndGtkcmF3aW5nLmgiCiAjaW5jbHVkZSA8Z3RrL2d0
ay5oPgogCkBAIC0yMTYsNyArMjE3LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRU
cmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXIKICAgICAg
ICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAogICAgIEd0
a1RoZW1lV2lkZ2V0VHlwZSB0eXBlID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsU2Nyb2xsYmFyID8gTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUwgOiBNT1pfR1RL
X1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOwotICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1l
R3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+cGFpbnRNb3ppbGxhR3Rr
V2lkZ2V0KHR5cGUsIGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0LCAmc3RhdGUsIDApOworICAg
IFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Nyb2xs
YmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwgJnN0
YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNr
Z3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCkBA
IC0yMjQsNyArMjI2LDggQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2wKICAgICAvLyBUaGlzIGlz
IHVudXNlZCBieSB0aGUgbW96X2d0a19zY3JvbGxlY2Rfd2luZG93X3BhaW50LgogICAgIEd0a1dp
ZGdldFN0YXRlIHN0YXRlOwogICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0
KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3Jv
bGxiYXItPmhlaWdodCgpKTsKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRl
clRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0a1dpZGdldChNT1pf
R1RLX1NDUk9MTEVEX1dJTkRPVywgY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QsICZzdGF0ZSwg
MCk7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1
bGxTY3JvbGxiYXJSZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChN
T1pfR1RLX1NDUk9MTEVEX1dJTkRPVywgJnN0YXRlLCAwKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMjQwLDcgKzI0Myw4IEBAIHZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBT
Y3JvbGxiYXIqIHNjcm9sbGJhCiAgICAgc3RhdGUuY3VycG9zID0gc2Nyb2xsYmFyLT5jdXJyZW50
UG9zKCk7CiAKICAgICBHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSA9IHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX1ZF
UlRJQ0FMIDogTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDsKLSAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSkt
PnBhaW50TW96aWxsYUd0a1dpZGdldCh0eXBlLCBjb250ZXh0LCByZWN0LCAmc3RhdGUsIDApOwor
ICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsK
KyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldCh0eXBlLCAmc3RhdGUsIDApOwog
fQogCiBJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCkBAIC0yNTYsNiAr
MjYwLDkgQEAgSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnMKIAogYm9vbCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogeworICAgIGlmIChncmFwaGljc0Nv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Ly8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24gdGhlIGRhbWFn
ZVJlY3QKICAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9IE5vUGFydDsK
IApAQCAtMzQ4LDcgKzM1NSw4IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiCiAgICAgICAgIHN0
YXRlLmluSG92ZXIgPSBGQUxTRTsKICAgICB9CiAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPnBhaW50TW96aWxsYUd0
a1dpZGdldChNT1pfR1RLX1NDUk9MTEJBUl9CVVRUT04sIGNvbnRleHQsIHJlY3QsICZzdGF0ZSwg
ZmxhZ3MpOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0
LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdldChNT1pfR1RLX1ND
Uk9MTEJBUl9CVVRUT04sICZzdGF0ZSwgZmxhZ3MpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1l
R3RrOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiB2aWV3LCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JiODA2NTgyOTBlNjE0
N2NlN2IwYzVkOWQxOWI5YzA1NGIxMjg4NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiZ3RrZHJh
d2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsK
K2NsYXNzIFJlbmRlclRoZW1lR3RrOworCitjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKTsKKyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOworICAgIGJvb2wg
cGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSwgR3RrV2lkZ2V0U3RhdGUqLCBp
bnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gPSBHVEtfVEVYVF9ESVJfTk9ORSk7CisKK3ByaXZh
dGU6CisgICAgR3JhcGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRSZWN0
IG1fdGFyZ2V0UmVjdDsKKyAgICBHZGtSZWN0YW5nbGUgbV9wYWludFJlY3Q7CisgICAgSW50U2l6
ZSBtX2V4dHJhU3BhY2U7CisgICAgYm9vbCBtX2hhZEVycm9yOworCisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7CisjZWxzZQorICAgIGNhaXJvX3Qq
IG1fdGFyZ2V0OworI2VuZGlmCisKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yjg3MTJkMjc0ZjUxODgxZDc5NGJmYWUyYTdjNDJjN2FjNjU3ZjFiZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcApA
QCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBH
ZGtQaXhtYXAqIGdTY3JhdGNoQnVmZmVyID0gMDsKK3N0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1
ZmZlcigpCit7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnX29iamVjdF91bnJl
ZihnU2NyYXRjaEJ1ZmZlcik7CisgICAgZ1NjcmF0Y2hCdWZmZXIgPSAwOworfQorCisvLyBGSVhN
RTogUGVyaGFwcyB3ZSBjYW4gc2hhcmUgc29tZSBvZiB0aGlzIGNvZGUgd2l0aCB0aGUgQ29udGV4
dFNoYWRvd0NhaXJvLgorLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2Ug
YXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVuZGVyLiBJbnN0ZWFkIG9m
IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwK
Ky8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2Vk
IHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGlt
ZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0
Y2hCdWZmZXIoKTsgfQorfTsKK3N0YXRpYyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciBwdXJnZVNj
cmF0Y2hCdWZmZXJUaW1lcjsKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KCkKK3sKKyAgICBpZiAocHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RvcCgpOworICAgIHB1cmdlU2NyYXRjaEJ1ZmZl
clRpbWVyLnN0YXJ0T25lU2hvdCgyKTsKK30KKworc3RhdGljIEludFNpemUgZ2V0RXh0cmFTcGFj
ZUZvcldpZGdldChSZW5kZXJUaGVtZUd0ayogdGhlbWUpCit7CisgICAgLy8gQ2hlY2tib3hlcyBh
bmQgc2Nyb2xsYmFyIHRodW1icyBvZnRlbiBkcmF3IG91dHNpZGUgdGhlaXIgYm91bmRhcmllcy4g
SGVyZSB3ZSBmaWd1cmUgb3V0CisgICAgLy8gdGhlIG1heGltdW0gYW1vdW50IG9mIHNwYWNlIHdl
IG5lZWQgZm9yIGFueSB0eXBlIG9mIHdpZGdldCBhbmQgdXNlIHRoYXQgdG8gaW5jcmVhc2UgdGhl
CisgICAgLy8gc2l6ZSBvZiB0aGUgc2NyYXRjaCBidWZmZXIsIHdoaWxlIHByZXNlcnZpbmcgdGhl
IGZpbmFsIHdpZGdldCBwb3NpdGlvbi4KKworICAgIC8vIFRoZSBjaGVja2JveCBleHRyYSBzcGFj
ZSBpcyBjYWxjdWxhdGVkIGJ5IGxvb2tpbmcgYXQgdGhlIHdpZGdldCBzdHlsZS4KKyAgICBpbnQg
aW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZzsKKyAgICB0aGVtZS0+Z2V0SW5kaWNhdG9y
TWV0cmljcyhDaGVja2JveFBhcnQsIGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmcpOwor
ICAgIEludFNpemUgZXh0cmFTcGFjZShpbmRpY2F0b3JTcGFjaW5nLCBpbmRpY2F0b3JTcGFjaW5n
KTsKKworICAgIC8vIFNjcm9sbGJhciB0aHVtYnMgbmVlZCBhdCBsZWFzdCBhbiBleHRyYSBwaXhl
bCBhbG9uZyB0aGVpciBtb3ZlbWVudCBheGlzLgorICAgIHJldHVybiBleHRyYVNwYWNlLmV4cGFu
ZGVkVG8oSW50U2l6ZSgxLCAxKSk7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdl
dFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QpCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0Nv
bnRleHQpCisgICAgLCBtX3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3Io
ZmFsc2UpCit7CisgICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOworCisgICAgLy8g
RmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBz
byB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQgCisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFj
ZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5k
ZXJpbmcsIGp1c3QKKyAgICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxl
LiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5
LgorICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhp
Y3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpKSB7CisgICAgICAgIG1fcGFpbnRSZWN0ID0gZ3JhcGhp
Y3NDb250ZXh0LT5nZXRDVE0oKS5tYXBSZWN0KHRhcmdldFJlY3QpOworICAgICAgICBtX3Rhcmdl
dCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrRHJhd2FibGUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFNvbWUgd2lkZ2V0cyByZW5kZXIgb3V0c2lkZSB0aGVpciByZWN0YW5nbGVz
LiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgbV9leHRyYVNwYWNlID0gZ2V0RXh0
cmFTcGFjZUZvcldpZGdldCh0aGVtZSk7CisKKyAgICAvLyBPZmZzZXQgdGhlIHRhcmdldCByZWN0
YW5nbGUgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9m
IHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQo
bV9leHRyYVNwYWNlLndpZHRoKCksIG1fZXh0cmFTcGFjZS5oZWlnaHQoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdGFyZ2V0UmVjdC5zaXplKCkpOworCisgICAgaW50
IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCkgKyAobV9leHRyYVNwYWNlLndpZHRoKCkgKiAy
KTsKKyAgICBpbnQgaGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpICsgKG1fZXh0cmFTcGFj
ZS5oZWlnaHQoKSAqIDIpOworICAgIGludCBzY3JhdGNoV2lkdGggPSAwOworICAgIGludCBzY3Jh
dGNoSGVpZ2h0ID0gMDsKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdka19kcmF3
YWJsZV9nZXRfc2l6ZShnU2NyYXRjaEJ1ZmZlciwgJnNjcmF0Y2hXaWR0aCwgJnNjcmF0Y2hIZWln
aHQpOworCisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0
aGUgY3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgorICAgIGlmICghZ1NjcmF0Y2hCdWZm
ZXIgfHwgc2NyYXRjaFdpZHRoIDwgd2lkdGggfHwgc2NyYXRjaEhlaWdodCA8IGhlaWdodCkgewor
ICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsKKyAgICAgICAgLy8gUm91bmQgdG8gdGhlIG5l
YXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIg
c2l6ZWQgcmVxdWVzdHMuCisgICAgICAgIHdpZHRoID0gKDEgKyAod2lkdGggPj4gNSkpIDw8IDU7
CisgICAgICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKworICAgICAgICBn
U2NyYXRjaEJ1ZmZlciA9IGdka19waXhtYXBfbmV3KDAsIHdpZHRoLCBoZWlnaHQsIGdka19jb2xv
cm1hcF9nZXRfdmlzdWFsKHRoZW1lLT5tX3RoZW1lUGFydHMuY29sb3JtYXApLT5kZXB0aCk7Cisg
ICAgICAgIGdka19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1NjcmF0Y2hCdWZmZXIsIHRoZW1lLT5t
X3RoZW1lUGFydHMuY29sb3JtYXApOworICAgIH0KKyAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVm
ZmVyOworCisgICAgLy8gQ2xlYXIgdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgIFJlZlB0cjxjYWly
b190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1Nj
cmF0Y2hCdWZmZXIpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRl
eHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNo
QnVmZmVyQ29udGV4dC5nZXQoKSk7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJh
Y2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFsbGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAgIFJl
bmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFy
dHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3JhcGhpY3NDb250ZXh0LT5nZGtEcmF3YWJsZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBwYWludCB0aGUgcmVzdWx0cyBiYWNrIGlm
IHRoZXJlIHdhcyBhbiBlcnJvci4KKyAgICBpZiAobV9oYWRFcnJvcikgeworICAgICAgICBzY2hl
ZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRklYTUU6IEl0J3MgdW5jbGVhciBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgdGhl
IGN1cnJlbnQgc291cmNlIGhlcmUuCisgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gbV9ncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJu
X3Q+IHByZXZpb3VzU291cmNlKGNhaXJvX2dldF9zb3VyY2UoY2Fpcm9Db250ZXh0KSk7CisKKyAg
ICAvLyBUaGUgYmxpdCByZWN0YW5nbGUgaXMgdGhlIG9yaWdpbmFsIHRhcmdldCByZWN0YW5nbGUg
YWRqdXN0ZWQgZm9yIGFueSBleHRyYSBzcGFjZS4KKyAgICBJbnRSZWN0IGZ1bGxUYXJnZXRSZWN0
KG1fdGFyZ2V0UmVjdCk7CisgICAgZnVsbFRhcmdldFJlY3QuaW5mbGF0ZVgobV9leHRyYVNwYWNl
LndpZHRoKCkpOworICAgIGZ1bGxUYXJnZXRSZWN0LmluZmxhdGVZKG1fZXh0cmFTcGFjZS5oZWln
aHQoKSk7CisKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBn
U2NyYXRjaEJ1ZmZlciwgZnVsbFRhcmdldFJlY3QueCgpLCBmdWxsVGFyZ2V0UmVjdC55KCkpOwor
ICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIGZ1bGxUYXJnZXRSZWN0LngoKSwgZnVs
bFRhcmdldFJlY3QueSgpLCBmdWxsVGFyZ2V0UmVjdC53aWR0aCgpLCBmdWxsVGFyZ2V0UmVjdC5o
ZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3NldF9z
b3VyY2UoY2Fpcm9Db250ZXh0LCBwcmV2aW91c1NvdXJjZS5nZXQoKSk7CisgICAgc2NoZWR1bGVT
Y3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30KKworYm9vbCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojpw
YWludE1vemlsbGFXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEd0a1dpZGdldFN0YXRl
KiBzdGF0ZSwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCit7Cisg
ICAgLy8gU29tZXRpbWVzIG1vel9ndGtfd2lkZ2V0X3BhaW50IG1vZGlmaWVzIHRoZSBjbGlwcGlu
ZyByZWN0YW5nbGUsIHNvIHdlIG11c3QgdXNlIGEgY29weS4KKyAgICBHZGtSZWN0YW5nbGUgY2xp
cFJlY3QgPSBtX3BhaW50UmVjdDsKKyAgICBtX2hhZEVycm9yID0gbW96X2d0a193aWRnZXRfcGFp
bnQodHlwZSwgbV90YXJnZXQsICZjbGlwUmVjdCwgJm1fcGFpbnRSZWN0LAorICAgICAgICBzdGF0
ZSwgZmxhZ3MsIHRleHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4g
IW1faGFkRXJyb3I7Cit9CisKK30KKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTY2NTc4NTk3MTRmY2I4YjRkYTYyYWE0YmUwYjQ2MmFmMDE2OGMwNwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHRHdGszLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVuZGVyaW5nQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKKyAgICAsIG1fdGFy
Z2V0UmVjdCh0YXJnZXRSZWN0KQorICAgICwgbV9wYWludFJlY3QodGFyZ2V0UmVjdCkKKyAgICAs
IG1faGFkRXJyb3IoZmFsc2UpCisgICAgLCBtX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSkKK3sKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmluZ0Nv
bnRleHQoKQoreworfQorCitib29sIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxs
YVdpZGdldChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBp
bnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3sKKyAgICBtX2hhZEVy
cm9yID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgbV90YXJnZXQsICZtX3BhaW50UmVjdCwg
c3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7CisgICAgcmV0
dXJuICFtX2hhZEVycm9yOworfQorCit9CisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIK
</data>

          </attachment>
      

    </bug>

</bugzilla>