<?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>21599</bug_id>
          
          <creation_ts>2008-10-14 14:22:47 -0700</creation_ts>
          <short_desc>[GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs</short_desc>
          <delta_ts>2009-12-17 09:44:26 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>30623</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Marco Barisione">marco.barisione</reporter>
          <assigned_to name="Marco Barisione">marco.barisione</assigned_to>
          <cc>alp</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>mjs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95354</commentid>
    <comment_count>0</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-10-14 14:22:47 -0700</bug_when>
    <thetext>Add a GRefPtr that call g_object_ref/unref or other appropriate functions depending on the contained type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95357</commentid>
    <comment_count>1</comment_count>
      <attachid>24347</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-10-14 14:35:24 -0700</bug_when>
    <thetext>Created attachment 24347
Add GRefPtr and start the conversion to use it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95489</commentid>
    <comment_count>2</comment_count>
      <attachid>24347</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-10-15 19:05:18 -0700</bug_when>
    <thetext>Comment on attachment 24347
Add GRefPtr and start the conversion to use it

&gt;Index: JavaScriptCore/GNUmakefile.am
&gt;===================================================================
&gt;--- JavaScriptCore/GNUmakefile.am	(revision 37591)
&gt;+++ JavaScriptCore/GNUmakefile.am	(working copy)
&gt;@@ -245,9 +245,10 @@
&gt; 	JavaScriptCore/wtf/DisallowCType.h \
&gt; 	JavaScriptCore/wtf/FastMalloc.h \
&gt; 	JavaScriptCore/wtf/Forward.h \
&gt;+	JavaScriptCore/wtf/GetPtr.h \
&gt; 	JavaScriptCore/wtf/GOwnPtr.cpp \
&gt; 	JavaScriptCore/wtf/GOwnPtr.h \
&gt;-	JavaScriptCore/wtf/GetPtr.h \
&gt;+	JavaScriptCore/wtf/GRefPtr.h \
&gt; 	JavaScriptCore/wtf/HashCountedSet.h \
&gt; 	JavaScriptCore/wtf/HashFunctions.h \
&gt; 	JavaScriptCore/wtf/HashIterators.h \

^ Just a quick note: the source lists are sorted case-sensitively.

&gt;Index: JavaScriptCore/wtf/GRefPtr.h
&gt;===================================================================
&gt;--- JavaScriptCore/wtf/GRefPtr.h	(revision 0)
&gt;+++ JavaScriptCore/wtf/GRefPtr.h	(revision 0)
&gt;@@ -0,0 +1,165 @@
&gt;+/*
&gt;+ *  Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
&gt;+ *  Copyright (C) 2008 Collabora Ltd.
&gt;+ *
&gt;+ *  This library is free software; you can redistribute it and/or
&gt;+ *  modify it under the terms of the GNU Library General Public
&gt;+ *  License as published by the Free Software Foundation; either
&gt;+ *  version 2 of the License, or (at your option) any later version.
&gt;+ *
&gt;+ *  This library is distributed in the hope that it will be useful,
&gt;+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt;+ *  Library General Public License for more details.
&gt;+ *
&gt;+ *  You should have received a copy of the GNU Library General Public License
&gt;+ *  along with this library; see the file COPYING.LIB.  If not, write to
&gt;+ *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt;+ *  Boston, MA 02110-1301, USA.
&gt;+ *
&gt;+ */
&gt;+
&gt;+#ifndef WTF_GRefPtr_h
&gt;+#define WTF_GRefPtr_h
&gt;+
&gt;+#include &quot;AlwaysInline.h&quot;
&gt;+#include &lt;algorithm&gt;
&gt;+#include &lt;glib-object.h&gt;

Please use forward declarations instead of including GLib headers in WTF headers. g_object_ref/g_object_unref take a gpointer anyway so the G_OBJECT() cast isn&apos;t essential.

Please fix this in the recently-added GOwnPtr.h when you get the opportunity too.

&gt;+
&gt;+namespace WTF {
&gt;+    template &lt;typename T&gt; inline T* refPtr(T* ptr) { if (ptr) g_object_ref(G_OBJECT(ptr)); return ptr; }
&gt;+    template &lt;typename T&gt; inline void derefPtr(T* ptr) { if (ptr) g_object_unref(G_OBJECT(ptr)); }
&gt;+
&gt;+    template &lt;typename T&gt; class GRefPtr {
&gt;+    public:
&gt;+        GRefPtr() : m_ptr(0) { }
&gt;+        // GRefPtr takes the ownership of the ptr, making it easy to use it with GLib.
&gt;+        GRefPtr(T* ptr) : m_ptr(ptr) { }
&gt;+        GRefPtr(const GRefPtr&amp; o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) refPtr(ptr); }
&gt;+
&gt;+        ~GRefPtr() { if (T* ptr = m_ptr) derefPtr(ptr); }
&gt;+
&gt;+        template &lt;typename U&gt; GRefPtr(const GRefPtr&lt;U&gt;&amp; o) : m_ptr(o.get()) { if (T* ptr = m_ptr) refPtr(ptr); }
&gt;+
&gt;+        T* get() const { return m_ptr; }
&gt;+
&gt;+        void clear() { if (T* ptr = m_ptr) derefPtr(ptr); m_ptr = 0; }
&gt;+
&gt;+        T&amp; operator*() const { return *m_ptr; }
&gt;+        ALWAYS_INLINE T* operator-&gt;() const { return m_ptr; }
&gt;+
&gt;+        bool operator!() const { return !m_ptr; }
&gt;+
&gt;+        // This conversion operator allows implicit conversion to bool but not to other integer types.
&gt;+        typedef T* GRefPtr::*UnspecifiedBoolType;
&gt;+        operator UnspecifiedBoolType() const { return m_ptr ? &amp;GRefPtr::m_ptr : 0; }

You say that you don&apos;t allow implicit conversion to other integer types but you don&apos;t explain why not. That&apos;d let us drop the &apos;.get()&apos; when calling into GTK+ functions -- pretty convenient and means less code to modify if I understand correctly.

&gt;+
&gt;+        GRefPtr&amp; operator=(const GRefPtr&amp;);
&gt;+        GRefPtr&amp; operator=(T*);
&gt;+        template &lt;typename U&gt; GRefPtr&amp; operator=(const GRefPtr&lt;U&gt;&amp;);
&gt;+
&gt;+        void swap(GRefPtr&amp;);
&gt;+
&gt;+    private:
&gt;+        static T* hashTableDeletedValue() { return reinterpret_cast&lt;T*&gt;(-1); }
&gt;+
&gt;+        T* m_ptr;
&gt;+    };
&gt;+
&gt;+    template &lt;typename T&gt; inline GRefPtr&lt;T&gt;&amp; GRefPtr&lt;T&gt;::operator=(const GRefPtr&lt;T&gt;&amp; o)
&gt;+    {
&gt;+        T* optr = o.get();
&gt;+        if (optr)
&gt;+            refPtr(optr);
&gt;+        T* ptr = m_ptr;
&gt;+        m_ptr = optr;
&gt;+        if (ptr)
&gt;+            derefPtr(ptr);
&gt;+        return *this;
&gt;+    }
&gt;+
&gt;+    template &lt;typename T&gt; template &lt;typename U&gt; inline GRefPtr&lt;T&gt;&amp; GRefPtr&lt;T&gt;::operator=(const GRefPtr&lt;U&gt;&amp; o)
&gt;+    {
&gt;+        T* optr = o.get();
&gt;+        if (optr)
&gt;+            refPtr(optr);
&gt;+        T* ptr = m_ptr;
&gt;+        m_ptr = optr;
&gt;+        if (ptr)
&gt;+            derefPtr(ptr);
&gt;+        return *this;
&gt;+    }
&gt;+
&gt;+    template &lt;typename T&gt; inline GRefPtr&lt;T&gt;&amp; GRefPtr&lt;T&gt;::operator=(T* optr)
&gt;+    {
&gt;+        T* ptr = m_ptr;
&gt;+        m_ptr = optr;
&gt;+        if (ptr)
&gt;+            derefPtr(ptr);
&gt;+        return *this;
&gt;+    }
&gt;+
&gt;+    template &lt;class T&gt; inline void GRefPtr&lt;T&gt;::swap(GRefPtr&lt;T&gt;&amp; o)
&gt;+    {
&gt;+        std::swap(m_ptr, o.m_ptr);
&gt;+    }
&gt;+
&gt;+    template &lt;class T&gt; inline void swap(GRefPtr&lt;T&gt;&amp; a, GRefPtr&lt;T&gt;&amp; b)
&gt;+    {
&gt;+        a.swap(b);
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator==(const GRefPtr&lt;T&gt;&amp; a, const GRefPtr&lt;U&gt;&amp; b)
&gt;+    {
&gt;+        return a.get() == b.get();
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator==(const GRefPtr&lt;T&gt;&amp; a, U* b)
&gt;+    {
&gt;+        return a.get() == b;
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator==(T* a, const GRefPtr&lt;U&gt;&amp; b)
&gt;+    {
&gt;+        return a == b.get();
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator!=(const GRefPtr&lt;T&gt;&amp; a, const GRefPtr&lt;U&gt;&amp; b)
&gt;+    {
&gt;+        return a.get() != b.get();
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator!=(const GRefPtr&lt;T&gt;&amp; a, U* b)
&gt;+    {
&gt;+        return a.get() != b;
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline bool operator!=(T* a, const GRefPtr&lt;U&gt;&amp; b)
&gt;+    {
&gt;+        return a != b.get();
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline GRefPtr&lt;T&gt; static_pointer_cast(const GRefPtr&lt;U&gt;&amp; p)
&gt;+    {
&gt;+        return GRefPtr&lt;T&gt;(static_cast&lt;T*&gt;(p.get()));
&gt;+    }
&gt;+
&gt;+    template &lt;typename T, typename U&gt; inline GRefPtr&lt;T&gt; const_pointer_cast(const GRefPtr&lt;U&gt;&amp; p)
&gt;+    {
&gt;+        return GRefPtr&lt;T&gt;(const_cast&lt;T*&gt;(p.get()));
&gt;+    }
&gt;+
&gt;+    template &lt;typename T&gt; inline T* getPtr(const GRefPtr&lt;T&gt;&amp; p)
&gt;+    {
&gt;+        return p.get();
&gt;+    }
&gt;+
&gt;+} // namespace WTF
&gt;+
&gt;+using WTF::GRefPtr;
&gt;+using WTF::refPtr;
&gt;+using WTF::derefPtr;
&gt;+using WTF::static_pointer_cast;
&gt;+using WTF::const_pointer_cast;
&gt;+
&gt;+#endif // WTF_GRefPtr_h

This code seems to have a lot in common with RefPtr.h. I wonder if it&apos;d be possible to generalise that template and base GRefPtr upon it or one of the other existing ones in WTF?

&gt;Index: JavaScriptCore/ChangeLog
&gt;===================================================================
&gt;--- JavaScriptCore/ChangeLog	(revision 37591)
&gt;+++ JavaScriptCore/ChangeLog	(working copy)
&gt;@@ -1,3 +1,35 @@
&gt;+2008-10-14  Marco Barisione  &lt;marco.barisione@collabora.co.uk&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=21599
&gt;+
&gt;+        Add a GRefPtr class (similar to RefPtr) to handle ref counted
&gt;+        structures allocated by GLib and start the conversion to use it.
&gt;+
&gt;+        * GNUmakefile.am:
&gt;+        * wtf/GRefPtr.h: Added.
&gt;+        (WTF::refPtr):
&gt;+        (WTF::derefPtr):
&gt;+        (WTF::GRefPtr::GRefPtr):
&gt;+        (WTF::GRefPtr::~GRefPtr):
&gt;+        (WTF::GRefPtr::get):
&gt;+        (WTF::GRefPtr::clear):
&gt;+        (WTF::GRefPtr::operator*):
&gt;+        (WTF::GRefPtr::operator-&gt;):
&gt;+        (WTF::GRefPtr::operator!):
&gt;+        (WTF::GRefPtr::operator UnspecifiedBoolType):
&gt;+        (WTF::GRefPtr::hashTableDeletedValue):
&gt;+        (WTF::::operator):
&gt;+        (WTF::::swap):
&gt;+        (WTF::swap):
&gt;+        (WTF::operator==):
&gt;+        (WTF::operator!=):
&gt;+        (WTF::static_pointer_cast):
&gt;+        (WTF::const_pointer_cast):
&gt;+        (WTF::getPtr):
&gt;+
&gt; 2008-10-14  Alexey Proskuryakov  &lt;ap@webkit.org&gt;
&gt; 
&gt;         Reviewed by Darin Adler.
&gt;Index: WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
&gt;===================================================================
&gt;--- WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp	(revision 37591)
&gt;+++ WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp	(working copy)
&gt;@@ -26,6 +26,7 @@
&gt; #include &quot;FrameLoader.h&quot;
&gt; #include &quot;FrameView.h&quot;
&gt; #include &quot;FrameTree.h&quot;
&gt;+#include &quot;GRefPtrGtk.h&quot;
&gt; #include &quot;HTMLFormElement.h&quot;
&gt; #include &quot;HTMLFrameElement.h&quot;
&gt; #include &quot;HTMLFrameOwnerElement.h&quot;
&gt;@@ -266,13 +267,10 @@
&gt;         return;
&gt; 
&gt;     WebKitWebView* webView = getViewFromFrame(m_frame);
&gt;-    WebKitNetworkRequest* request = webkit_network_request_new(resourceRequest.url().string().utf8().data());
&gt;+    GRefPtr&lt;WebKitNetworkRequest&gt; request = webkit_network_request_new(resourceRequest.url().string().utf8().data());
&gt;     WebKitNavigationResponse response;
&gt;+    g_signal_emit_by_name(webView, &quot;navigation-requested&quot;, m_frame, request.get(), &amp;response);
&gt; 
&gt;-    g_signal_emit_by_name(webView, &quot;navigation-requested&quot;, m_frame, request, &amp;response);
&gt;-
&gt;-    g_object_unref(request);
&gt;-
&gt;     if (response == WEBKIT_NAVIGATION_RESPONSE_IGNORE) {
&gt;         (core(m_frame)-&gt;loader()-&gt;*policyFunction)(PolicyIgnore);
&gt;         return;
&gt;Index: WebKit/gtk/ChangeLog
&gt;===================================================================
&gt;--- WebKit/gtk/ChangeLog	(revision 37591)
&gt;+++ WebKit/gtk/ChangeLog	(working copy)
&gt;@@ -1,3 +1,15 @@
&gt;+2008-10-14  Marco Barisione  &lt;marco.barisione@collabora.co.uk&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=21599
&gt;+
&gt;+        Start the conversion to use GRefPtr.
&gt;+
&gt;+        * WebCoreSupport/FrameLoaderClientGtk.cpp:
&gt;+        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
&gt;+
&gt; 2008-10-06  David Hyatt  &lt;hyatt@apple.com&gt;
&gt; 
&gt;         Enable viewless Mac WebKit to paint some basic pages.
&gt;Index: WebCore/GNUmakefile.am
&gt;===================================================================
&gt;--- WebCore/GNUmakefile.am	(revision 37591)
&gt;+++ WebCore/GNUmakefile.am	(working copy)
&gt;@@ -1730,6 +1730,8 @@
&gt; 	WebCore/platform/gtk/EventLoopGtk.cpp \
&gt; 	WebCore/platform/gtk/FileChooserGtk.cpp \
&gt; 	WebCore/platform/gtk/FileSystemGtk.cpp \
&gt;+	WebCore/platform/gtk/GRefPtrGtk.cpp \
&gt;+	WebCore/platform/gtk/GRefPtrGtk.h \
&gt; 	WebCore/platform/gtk/KURLGtk.cpp \
&gt; 	WebCore/platform/gtk/KeyEventGtk.cpp \
&gt; 	WebCore/platform/gtk/KeyboardCodes.h \
&gt;Index: WebCore/platform/gtk/PopupMenuGtk.cpp
&gt;===================================================================
&gt;--- WebCore/platform/gtk/PopupMenuGtk.cpp	(revision 37591)
&gt;+++ WebCore/platform/gtk/PopupMenuGtk.cpp	(working copy)
&gt;@@ -36,14 +36,11 @@
&gt; 
&gt; PopupMenu::PopupMenu(PopupMenuClient* client)
&gt;     : m_popupClient(client)
&gt;-    , m_popup(0)
&gt; {
&gt; }
&gt; 
&gt; PopupMenu::~PopupMenu()
&gt; {
&gt;-    if (m_popup)
&gt;-        g_object_unref(m_popup);
&gt; }
&gt; 
&gt; void PopupMenu::show(const IntRect&amp; rect, FrameView* view, int index)
&gt;@@ -53,14 +50,14 @@
&gt;     if (!m_popup) {
&gt;         m_popup = GTK_MENU(gtk_menu_new());
&gt; #if GLIB_CHECK_VERSION(2,10,0)
&gt;-        g_object_ref_sink(G_OBJECT(m_popup));
&gt;+        g_object_ref_sink(G_OBJECT(m_popup.get()));
&gt; #else
&gt;-        g_object_ref(G_OBJECT(m_popup));
&gt;-        gtk_object_sink(GTK_OBJECT(m_popup));
&gt;+        g_object_ref(G_OBJECT(m_popup.get()));
&gt;+        gtk_object_sink(GTK_OBJECT(m_popup.get()));
&gt; #endif

Cann&apos;t we support g_object_ref_sink() directly in the smart pointer now?

&gt;-        g_signal_connect(m_popup, &quot;unmap&quot;, G_CALLBACK(menuUnmapped), this);
&gt;+        g_signal_connect(m_popup.get(), &quot;unmap&quot;, G_CALLBACK(menuUnmapped), this);
&gt;     } else
&gt;-        gtk_container_foreach(GTK_CONTAINER(m_popup), reinterpret_cast&lt;GtkCallback&gt;(menuRemoveItem), this);
&gt;+        gtk_container_foreach(GTK_CONTAINER(m_popup.get()), reinterpret_cast&lt;GtkCallback&gt;(menuRemoveItem), this);
&gt; 
&gt;     int x, y;
&gt;     gdk_window_get_origin(GTK_WIDGET(view-&gt;hostWindow()-&gt;platformWindow())-&gt;window, &amp;x, &amp;y);
&gt;@@ -81,20 +78,20 @@
&gt; 
&gt;         // FIXME: Apply the PopupMenuStyle from client()-&gt;itemStyle(i)
&gt;         gtk_widget_set_sensitive(item, client()-&gt;itemIsEnabled(i));
&gt;-        gtk_menu_shell_append(GTK_MENU_SHELL(m_popup), item);
&gt;+        gtk_menu_shell_append(GTK_MENU_SHELL(m_popup.get()), item);
&gt;         gtk_widget_show(item);
&gt;     }
&gt; 
&gt;-    gtk_menu_set_active(m_popup, index);
&gt;+    gtk_menu_set_active(m_popup.get(), index);
&gt; 
&gt; 
&gt;     // The size calls are directly copied from gtkcombobox.c which is LGPL
&gt;     GtkRequisition requisition;
&gt;-    gtk_widget_set_size_request(GTK_WIDGET(m_popup), -1, -1);
&gt;-    gtk_widget_size_request(GTK_WIDGET(m_popup), &amp;requisition);
&gt;-    gtk_widget_set_size_request(GTK_WIDGET(m_popup), MAX(rect.width(), requisition.width), -1);
&gt;+    gtk_widget_set_size_request(GTK_WIDGET(m_popup.get()), -1, -1);
&gt;+    gtk_widget_size_request(GTK_WIDGET(m_popup.get()), &amp;requisition);
&gt;+    gtk_widget_set_size_request(GTK_WIDGET(m_popup.get()), MAX(rect.width(), requisition.width), -1);
&gt; 
&gt;-    GList* children = GTK_MENU_SHELL(m_popup)-&gt;children;
&gt;+    GList* children = GTK_MENU_SHELL(m_popup.get())-&gt;children;
&gt;     if (size)
&gt;         for (int i = 0; i &lt; size; i++) {
&gt;             if (i &gt; index)
&gt;@@ -111,13 +108,13 @@
&gt;         // Center vertically the empty popup in the combo box area
&gt;         m_menuPosition.setY(m_menuPosition.y() - rect.height() / 2);
&gt; 
&gt;-    gtk_menu_popup(m_popup, NULL, NULL, reinterpret_cast&lt;GtkMenuPositionFunc&gt;(menuPositionFunction), this, 0, gtk_get_current_event_time());
&gt;+    gtk_menu_popup(m_popup.get(), NULL, NULL, reinterpret_cast&lt;GtkMenuPositionFunc&gt;(menuPositionFunction), this, 0, gtk_get_current_event_time());
&gt; }
&gt; 
&gt; void PopupMenu::hide()
&gt; {
&gt;     ASSERT(m_popup);
&gt;-    gtk_menu_popdown(m_popup);
&gt;+    gtk_menu_popdown(m_popup.get());
&gt; }
&gt; 
&gt; void PopupMenu::updateFromElement()
&gt;@@ -153,7 +150,7 @@
&gt; void PopupMenu::menuRemoveItem(GtkWidget* widget, PopupMenu* that)
&gt; {
&gt;     ASSERT(that-&gt;m_popup);
&gt;-    gtk_container_remove(GTK_CONTAINER(that-&gt;m_popup), widget);
&gt;+    gtk_container_remove(GTK_CONTAINER(that-&gt;m_popup.get()), widget);
&gt; }
&gt; 
&gt; }
&gt;Index: WebCore/platform/gtk/GRefPtrGtk.h
&gt;===================================================================
&gt;--- WebCore/platform/gtk/GRefPtrGtk.h	(revision 0)
&gt;+++ WebCore/platform/gtk/GRefPtrGtk.h	(revision 0)
&gt;@@ -0,0 +1,36 @@
&gt;+/*
&gt;+ * Copyright (C) 2008 Collabora Ltd.
&gt;+ *
&gt;+ * This library is free software; you can redistribute it and/or
&gt;+ * modify it under the terms of the GNU Library General Public
&gt;+ * License as published by the Free Software Foundation; either
&gt;+ * version 2 of the License, or (at your option) any later version.
&gt;+ *
&gt;+ * This library is distributed in the hope that it will be useful,
&gt;+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt;+ * Library General Public License for more details.
&gt;+ *
&gt;+ * You should have received a copy of the GNU Library General Public License
&gt;+ * along with this library; see the file COPYING.LIB.  If not, write to
&gt;+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt;+ * Boston, MA 02110-1301, USA.
&gt;+ */
&gt;+
&gt;+#ifndef GRefPtrGtk_h
&gt;+#define GRefPtrGtk_h
&gt;+
&gt;+#include &lt;gtk/gtk.h&gt;

Again, please avoid this include in WebCore headers and use forward declarations instead.

&gt;+#include &lt;wtf/GRefPtr.h&gt;
&gt;+
&gt;+namespace WTF {
&gt;+
&gt;+  template &lt;&gt; GtkTargetList* refPtr(GtkTargetList* ptr);
&gt;+  template &lt;&gt; void derefPtr(GtkTargetList* ptr);
&gt;+
&gt;+  template &lt;&gt; GdkCursor* refPtr(GdkCursor* ptr);
&gt;+  template &lt;&gt; void derefPtr(GdkCursor* ptr);
&gt;+
&gt;+} // namespace WTF
&gt;+
&gt;+#endif // GRefPtrGtk_h
&gt;Index: WebCore/platform/gtk/GRefPtrGtk.cpp
&gt;===================================================================
&gt;--- WebCore/platform/gtk/GRefPtrGtk.cpp	(revision 0)
&gt;+++ WebCore/platform/gtk/GRefPtrGtk.cpp	(revision 0)
&gt;@@ -0,0 +1,51 @@
&gt;+/*
&gt;+ *  Copyright (C) 2008 Collabora Ltd.
&gt;+ *
&gt;+ *  This library is free software; you can redistribute it and/or
&gt;+ *  modify it under the terms of the GNU Lesser General Public
&gt;+ *  License as published by the Free Software Foundation; either
&gt;+ *  version 2 of the License, or (at your option) any later version.
&gt;+ *
&gt;+ *  This library is distributed in the hope that it will be useful,
&gt;+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt;+ *  Lesser General Public License for more details.
&gt;+ *
&gt;+ *  You should have received a copy of the GNU Lesser General Public
&gt;+ *  License along with this library; if not, write to the Free Software
&gt;+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
&gt;+ */
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;GRefPtrGtk.h&quot;
&gt;+
&gt;+namespace WTF {
&gt;+
&gt;+template &lt;&gt; GtkTargetList* refPtr(GtkTargetList* ptr)
&gt;+{
&gt;+    if (ptr)
&gt;+        gtk_target_list_ref(ptr);
&gt;+    return ptr;
&gt;+}
&gt;+
&gt;+template &lt;&gt; void derefPtr(GtkTargetList* ptr)
&gt;+{
&gt;+    if (ptr)
&gt;+        gtk_target_list_unref(ptr);
&gt;+}
&gt;+
&gt;+template &lt;&gt; GdkCursor* refPtr(GdkCursor* ptr)
&gt;+{
&gt;+    if (ptr)
&gt;+        gdk_cursor_ref(ptr);
&gt;+    return ptr;
&gt;+}
&gt;+
&gt;+template &lt;&gt; void derefPtr(GdkCursor* ptr)
&gt;+{
&gt;+    if (ptr)
&gt;+        gdk_cursor_unref(ptr);
&gt;+}
&gt;+
&gt;+}
&gt;+
&gt;Index: WebCore/platform/PopupMenu.h
&gt;===================================================================
&gt;--- WebCore/platform/PopupMenu.h	(revision 37591)
&gt;+++ WebCore/platform/PopupMenu.h	(working copy)
&gt;@@ -48,6 +48,7 @@
&gt; typedef struct _GtkMenu GtkMenu;
&gt; typedef struct _GtkMenuItem GtkMenuItem;
&gt; typedef struct _GtkWidget GtkWidget;
&gt;+#include &quot;GRefPtrGtk.h&quot;
&gt; #include &lt;wtf/HashMap.h&gt;
&gt; #include &lt;glib.h&gt;
&gt; #elif PLATFORM(WX)
&gt;@@ -164,7 +165,7 @@
&gt;     bool m_scrollbarCapturingMouse;
&gt; #elif PLATFORM(GTK)
&gt;     IntPoint m_menuPosition;
&gt;-    GtkMenu* m_popup;
&gt;+    GRefPtr&lt;GtkMenu&gt; m_popup;
&gt;     HashMap&lt;GtkWidget*, int&gt; m_indexMap;
&gt;     static void menuItemActivated(GtkMenuItem* item, PopupMenu*);
&gt;     static void menuUnmapped(GtkWidget*, PopupMenu*);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96296</commentid>
    <comment_count>3</comment_count>
    <who name="Kalle Vahlman">zuh</who>
    <bug_when>2008-10-22 23:57:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Please use forward declarations instead of including GLib headers in WTF
&gt; headers. g_object_ref/g_object_unref take a gpointer anyway so the G_OBJECT()
&gt; cast isn&apos;t essential.

It&apos;s actually harmful, since it&apos;s not just a cast, but a check for the type (which is in itself trivial, but adds up. g_type_check_instance_cast() is often seen at the top of profiling). Furthermore, g_object_ref/unref() already checks that G_IS_OBJECT() so the check is actually made twice...
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96321</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-23 05:53:39 -0700</bug_when>
    <thetext>(In reply to comment #2)

&gt; 
&gt; &gt;+
&gt; &gt;+        // This conversion operator allows implicit conversion to bool but not to other integer types.
&gt; &gt;+        typedef T* GRefPtr::*UnspecifiedBoolType;
&gt; &gt;+        operator UnspecifiedBoolType() const { return m_ptr ? &amp;GRefPtr::m_ptr : 0; }
&gt; 
&gt; You say that you don&apos;t allow implicit conversion to other integer types but you
&gt; don&apos;t explain why not. That&apos;d let us drop the &apos;.get()&apos; when calling into GTK+
&gt; functions -- pretty convenient and means less code to modify if I understand
&gt; correctly.

We follow this pattern in all the WTF smart pointers. The reason is that we want to allow:

if (m_smartPtr) { ... }

but not:

if (m_smartPtr == 1) { ... }

Since it is not type safe and does not really make sense (it shouldn&apos;t be the case that all non-null pointers convert to 1). Implementing an implicit bool conversion in the straightforward way will accidentally allow the latter.

Supporting other integer conversions (especially in this bogus way) won&apos;t address the .get() issue, which is about implicit conversion to raw pointer.

In general we dont add that to our smart pointers because we want to avoid accidental violation of refcounting safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162801</commentid>
    <comment_count>5</comment_count>
      <attachid>43030</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-11-11 22:52:56 -0800</bug_when>
    <thetext>Created attachment 43030
Cleaned up patch against ToT

I feel that this functionality is important for preventing memory leaks in the GTK+ port, so I&apos;ve attached a cleaned up version against ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162990</commentid>
    <comment_count>6</comment_count>
      <attachid>43087</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-11-12 11:52:09 -0800</bug_when>
    <thetext>Created attachment 43087
Updated patch which includes the adoptRef idiom

Based on bdash&apos;s comments from IRC I&apos;m attaching an updated patch. This version automatically bumps the reference count of incoming gobjects, but also includes an adoptGRef function which will create a GRefPtr without increasing the reference count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162999</commentid>
    <comment_count>7</comment_count>
      <attachid>43088</attachid>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2009-11-12 12:01:20 -0800</bug_when>
    <thetext>Created attachment 43088
chat log with gtkmm developers

I went to the gtkmm developers asking them about their opinions on this, as they have a lot of experience with wrapping glib API in C++ (it&apos;s what they do for a living). The resulting chat is attached, I took the freedom to remove unrelated messages.

For tl;dr people, I guess the main arguments were:
- take a reference in the default constructor (done by the recent patch)
- make the constructor explicit
- don&apos;t have an operator=(T*)
- do use the get() idiom
- the WTF API is bad in places
- WTF is a cool namespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166646</commentid>
    <comment_count>8</comment_count>
      <attachid>43087</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-25 22:35:26 -0800</bug_when>
    <thetext>Comment on attachment 43087
Updated patch which includes the adoptRef idiom

Style:
1 template &lt;&gt; GtkTargetList* refGPtr(GtkTargetList* ptr);
 32 template &lt;&gt; void derefGPtr(GtkTargetList* ptr);
 33 
 34 template &lt;&gt; GdkCursor* refGPtr(GdkCursor* ptr);
 35 template &lt;&gt; void derefGPtr(GdkCursor* ptr);

(no arg names)

I wonder if we should write these with a PointerTraits helper type instead:
 31 template &lt;&gt; GtkTargetList* refGPtr(GtkTargetList* ptr);
 32 template &lt;&gt; void derefGPtr(GtkTargetList* ptr);

a stuct which had a ref and deref method, which one single generic refGPtr could call instead.  Although I would be the first to tell you that I *am not* a C++ template expert.
Maybe I&apos;m also just not understanding what those are.

 167     return GRefPtr&lt;T&gt;(p, true);
would be clearer using an Adopt enum instead of a boolean.
See examples like     enum PlacementNewAdoptType { PlacementNewAdopt }; in RefPtr.h

Inconsistent spacing:
33 template&lt;typename T&gt; class GRefPtr;
 34 template &lt;typename T&gt; GRefPtr&lt;T&gt; adoptGRef(T*);

I think we need to go one more round on this.  r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170004</commentid>
    <comment_count>9</comment_count>
      <attachid>44540</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-12-09 08:34:36 -0800</bug_when>
    <thetext>Created attachment 44540
Updated patch with style fixes

I&apos;ve attached an updated patch with the style fixes. It also moves GRefPtr to the JavaScriptCore/wtf/gtk directory with GOwnPtr. I started implementing the PointerTraits approach that Eric requested, but it seemed to increase the complexity of the patch a bit (as well as the in-memeory size). Perhaps a namespace would be a better approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170034</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-09 10:13:24 -0800</bug_when>
    <thetext>Attachment 44540 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/gtk/PopupMenuGtk.cpp:89:  Use std::max() or std::max&lt;type&gt;() instead of the MAX() macro.  [runtime/max_min_macros] [4]
WebCore/platform/gtk/PopupMenuGtk.cpp:108:  Use 0 instead of NULL.  [readability/null] [5]
JavaScriptCore/wtf/gtk/GRefPtr.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172255</commentid>
    <comment_count>11</comment_count>
      <attachid>44963</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-12-16 04:42:37 -0800</bug_when>
    <thetext>Created attachment 44963
Updated patch with style fixes (rev. 2)

I&apos;ve added a new patch changes based on the check-style bot output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172256</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 04:44:55 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44963 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172706</commentid>
    <comment_count>13</comment_count>
      <attachid>44963</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-17 03:11:52 -0800</bug_when>
    <thetext>Comment on attachment 44963
Updated patch with style fixes (rev. 2)

OK, let&apos;s go ahead on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172713</commentid>
    <comment_count>14</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-17 04:22:30 -0800</bug_when>
    <thetext>Landed as r52246.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172742</commentid>
    <comment_count>15</comment_count>
      <attachid>44963</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-17 06:44:39 -0800</bug_when>
    <thetext>Comment on attachment 44963
Updated patch with style fixes (rev. 2)

Clearing review flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172756</commentid>
    <comment_count>16</comment_count>
      <attachid>45065</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-12-17 07:23:06 -0800</bug_when>
    <thetext>Created attachment 45065
Patch with missing GHashTable specialization

The previous patch was missing the template specialization for GHashTable, which was causing crashes in plugin tests. I&apos;ve attached a patch with the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172758</commentid>
    <comment_count>17</comment_count>
      <attachid>45065</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-17 07:25:56 -0800</bug_when>
    <thetext>Comment on attachment 45065
Patch with missing GHashTable specialization

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172816</commentid>
    <comment_count>18</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-17 09:34:57 -0800</bug_when>
    <thetext>Reopenning so that cq will land the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172823</commentid>
    <comment_count>19</comment_count>
      <attachid>45065</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-17 09:44:19 -0800</bug_when>
    <thetext>Comment on attachment 45065
Patch with missing GHashTable specialization

Clearing flags on attachment: 45065

Committed r52258: &lt;http://trac.webkit.org/changeset/52258&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172824</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-17 09:44:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24347</attachid>
            <date>2008-10-14 14:35:24 -0700</date>
            <delta_ts>2008-10-15 19:05:18 -0700</delta_ts>
            <desc>Add GRefPtr and start the conversion to use it</desc>
            <filename>grefptr.patch</filename>
            <type>text/plain</type>
            <size>18180</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNzU5MSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsOSArMjQ1LDEwIEBACiAJ
SmF2YVNjcmlwdENvcmUvd3RmL0Rpc2FsbG93Q1R5cGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3Rm
L0Zhc3RNYWxsb2MuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaCBcCisJSmF2YVNj
cmlwdENvcmUvd3RmL0dldFB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5jcHAg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmggXAotCUphdmFTY3JpcHRDb3JlL3d0Zi9H
ZXRQdHIuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0dSZWZQdHIuaCBcCiAJSmF2YVNjcmlwdENv
cmUvd3RmL0hhc2hDb3VudGVkU2V0LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoRnVuY3Rp
b25zLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoSXRlcmF0b3JzLmggXApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL0dSZWZQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93
dGYvR1JlZlB0ci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0dSZWZQdHIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgV1RGX0dSZWZQdHJfaAorI2RlZmluZSBXVEZfR1JlZlB0cl9oCisKKyNpbmNsdWRlICJBbHdh
eXNJbmxpbmUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiByZWZQdHIoVCogcHRyKSB7IGlmIChwdHIpIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIpKTsg
cmV0dXJuIHB0cjsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZXJl
ZlB0cihUKiBwdHIpIHsgaWYgKHB0cikgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QocHRyKSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHUmVmUHRyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEdSZWZQdHIoKSA6IG1fcHRyKDApIHsgfQorICAgICAgICAvLyBHUmVmUHRyIHRh
a2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIHB0ciwgbWFraW5nIGl0IGVhc3kgdG8gdXNlIGl0IHdp
dGggR0xpYi4KKyAgICAgICAgR1JlZlB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IH0KKyAgICAg
ICAgR1JlZlB0cihjb25zdCBHUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQqIHB0
ciA9IG1fcHRyKSByZWZQdHIocHRyKTsgfQorCisgICAgICAgIH5HUmVmUHRyKCkgeyBpZiAoVCog
cHRyID0gbV9wdHIpIGRlcmVmUHRyKHB0cik7IH0KKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4gR1JlZlB0cihjb25zdCBHUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgaWYg
KFQqIHB0ciA9IG1fcHRyKSByZWZQdHIocHRyKTsgfQorCisgICAgICAgIFQqIGdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyOyB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpIHsgaWYgKFQqIHB0ciA9
IG1fcHRyKSBkZXJlZlB0cihwdHIpOyBtX3B0ciA9IDA7IH0KKworICAgICAgICBUJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqbV9wdHI7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSBUKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKworICAgICAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQorCisgICAgICAgIC8vIFRoaXMgY29udmVy
c2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3Qg
dG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICAgICAgdHlwZWRlZiBUKiBHUmVmUHRyOjoqVW5z
cGVjaWZpZWRCb29sVHlwZTsKKyAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJkdSZWZQdHI6Om1fcHRyIDogMDsgfQorCisgICAgICAg
IEdSZWZQdHImIG9wZXJhdG9yPShjb25zdCBHUmVmUHRyJik7CisgICAgICAgIEdSZWZQdHImIG9w
ZXJhdG9yPShUKik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBHUmVmUHRyJiBvcGVy
YXRvcj0oY29uc3QgR1JlZlB0cjxVPiYpOworCisgICAgICAgIHZvaWQgc3dhcChHUmVmUHRyJik7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9CisKKyAgICAgICAgVCogbV9w
dHI7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgR1JlZlB0cjxU
PiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IEdSZWZQdHI8VD4mIG8pCisgICAgeworICAg
ICAgICBUKiBvcHRyID0gby5nZXQoKTsKKyAgICAgICAgaWYgKG9wdHIpCisgICAgICAgICAgICBy
ZWZQdHIob3B0cik7CisgICAgICAgIFQqIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IG9w
dHI7CisgICAgICAgIGlmIChwdHIpCisgICAgICAgICAgICBkZXJlZlB0cihwdHIpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBs
YXRlIDx0eXBlbmFtZSBVPiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9
KGNvbnN0IEdSZWZQdHI8VT4mIG8pCisgICAgeworICAgICAgICBUKiBvcHRyID0gby5nZXQoKTsK
KyAgICAgICAgaWYgKG9wdHIpCisgICAgICAgICAgICByZWZQdHIob3B0cik7CisgICAgICAgIFQq
IHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IG9wdHI7CisgICAgICAgIGlmIChwdHIpCisg
ICAgICAgICAgICBkZXJlZlB0cihwdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVmUHRyPFQ+
OjpvcGVyYXRvcj0oVCogb3B0cikKKyAgICB7CisgICAgICAgIFQqIHB0ciA9IG1fcHRyOworICAg
ICAgICBtX3B0ciA9IG9wdHI7CisgICAgICAgIGlmIChwdHIpCisgICAgICAgICAgICBkZXJlZlB0
cihwdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNs
YXNzIFQ+IGlubGluZSB2b2lkIEdSZWZQdHI8VD46OnN3YXAoR1JlZlB0cjxUPiYgbykKKyAgICB7
CisgICAgICAgIHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3YXAoR1JlZlB0cjxUPiYgYSwgR1JlZlB0cjxUPiYg
YikKKyAgICB7CisgICAgICAgIGEuc3dhcChiKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRy
PFQ+JiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0
KCkgPT0gYi5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBj
b25zdCBHUmVmUHRyPFU+JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBHUmVmUHRyPFQ+JiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkg
IT0gYjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2FzdChj
b25zdCBHUmVmUHRyPFU+JiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8VD4oc3Rh
dGljX2Nhc3Q8VCo+KHAuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4gY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0
IEdSZWZQdHI8VT4mIHApCisgICAgeworICAgICAgICByZXR1cm4gR1JlZlB0cjxUPihjb25zdF9j
YXN0PFQqPihwLmdldCgpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUKiBnZXRQdHIoY29uc3QgR1JlZlB0cjxUPiYgcCkKKyAgICB7CisgICAgICAgIHJldHVy
biBwLmdldCgpOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6R1Jl
ZlB0cjsKK3VzaW5nIFdURjo6cmVmUHRyOwordXNpbmcgV1RGOjpkZXJlZlB0cjsKK3VzaW5nIFdU
Rjo6c3RhdGljX3BvaW50ZXJfY2FzdDsKK3VzaW5nIFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0Owor
CisjZW5kaWYgLy8gV1RGX0dSZWZQdHJfaApJbmRleDogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzc1OTEp
CisrKyBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NSBAQAorMjAwOC0xMC0xNCAgTWFyY28gQmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNvbGxh
Ym9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVmIGNvdW50ZWQgZ2xp
Yi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgQWRkIGEgR1JlZlB0ciBjbGFzcyAoc2ltaWxhciB0
byBSZWZQdHIpIHRvIGhhbmRsZSByZWYgY291bnRlZAorICAgICAgICBzdHJ1Y3R1cmVzIGFsbG9j
YXRlZCBieSBHTGliIGFuZCBzdGFydCB0aGUgY29udmVyc2lvbiB0byB1c2UgaXQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiB3dGYvR1JlZlB0ci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6cmVmUHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZQdHIpOgorICAgICAgICAo
V1RGOjpHUmVmUHRyOjpHUmVmUHRyKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6fkdSZWZQdHIp
OgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpnZXQpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpj
bGVhcik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6
OkdSZWZQdHI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvciEp
OgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToK
KyAgICAgICAgKFdURjo6R1JlZlB0cjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdURjo6OjpvcGVyYXRvcik6CisgICAgICAgIChXVEY6Ojo6c3dhcCk6CisgICAgICAgIChXVEY6
OnN3YXApOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3QpOgorICAgICAgICAoV1RG
Ojpjb25zdF9wb2ludGVyX2Nhc3QpOgorICAgICAgICAoV1RGOjpnZXRQdHIpOgorCiAyMDA4LTEw
LTE0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAzNzU5MSkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1l
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtMjY2LDEz
ICsyNjcsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3Qq
IHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyhyZXNvdXJjZVJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrUmVx
dWVzdD4gcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHJlc291cmNlUmVxdWVz
dC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBXZWJLaXROYXZpZ2F0aW9uUmVz
cG9uc2UgcmVzcG9uc2U7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJuYXZp
Z2F0aW9uLXJlcXVlc3RlZCIsIG1fZnJhbWUsIHJlcXVlc3QuZ2V0KCksICZyZXNwb25zZSk7CiAK
LSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgIm5hdmlnYXRpb24tcmVxdWVzdGVk
IiwgbV9mcmFtZSwgcmVxdWVzdCwgJnJlc3BvbnNlKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHJl
cXVlc3QpOwotCiAgICAgaWYgKHJlc3BvbnNlID09IFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNF
X0lHTk9SRSkgewogICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5j
dGlvbikoUG9saWN5SWdub3JlKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3
NTkxKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOC0xMC0xNCAgTWFyY28gQmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNvbGxh
Ym9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVmIGNvdW50ZWQgZ2xp
Yi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgU3RhcnQgdGhlIGNvbnZlcnNpb24gdG8gdXNlIEdS
ZWZQdHIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorCiAyMDA4LTEwLTA2ICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgdmlld2xlc3MgTWFjIFdlYktpdCB0byBw
YWludCBzb21lIGJhc2ljIHBhZ2VzLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNzU5MSkKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MzAsNiArMTczMCw4IEBA
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxl
U3lzdGVtR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvS1VSTEd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5Ym9hcmRDb2Rlcy5oIFwKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAkocmV2aXNpb24gMzc1OTEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNCArMzYs
MTEgQEAKIAogUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKLSAgICAsIG1fcG9wdXAoMCkKIHsKIH0KIAogUG9w
dXBNZW51Ojp+UG9wdXBNZW51KCkKIHsKLSAgICBpZiAobV9wb3B1cCkKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYobV9wb3B1cCk7CiB9CiAKIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQpAQCAtNTMsMTQgKzUwLDE0IEBA
CiAgICAgaWYgKCFtX3BvcHVwKSB7CiAgICAgICAgIG1fcG9wdXAgPSBHVEtfTUVOVShndGtfbWVu
dV9uZXcoKSk7CiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsMTAsMCkKLSAgICAgICAgZ19vYmpl
Y3RfcmVmX3NpbmsoR19PQkpFQ1QobV9wb3B1cCkpOworICAgICAgICBnX29iamVjdF9yZWZfc2lu
ayhHX09CSkVDVChtX3BvcHVwLmdldCgpKSk7CiAjZWxzZQotICAgICAgICBnX29iamVjdF9yZWYo
R19PQkpFQ1QobV9wb3B1cCkpOwotICAgICAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVCht
X3BvcHVwKSk7CisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChtX3BvcHVwLmdldCgpKSk7
CisgICAgICAgIGd0a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKG1fcG9wdXAuZ2V0KCkpKTsKICNl
bmRpZgotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAsICJ1bm1hcCIsIEdfQ0FMTEJB
Q0sobWVudVVubWFwcGVkKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1
cC5nZXQoKSwgInVubWFwIiwgR19DQUxMQkFDSyhtZW51VW5tYXBwZWQpLCB0aGlzKTsKICAgICB9
IGVsc2UKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9wb3B1
cCksIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrQ2FsbGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7
CisgICAgICAgIGd0a19jb250YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0
KCkpLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMp
OwogCiAgICAgaW50IHgsIHk7CiAgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKEdUS19XSURHRVQo
dmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKS0+d2luZG93LCAmeCwgJnkpOwpA
QCAtODEsMjAgKzc4LDIwIEBACiAKICAgICAgICAgLy8gRklYTUU6IEFwcGx5IHRoZSBQb3B1cE1l
bnVTdHlsZSBmcm9tIGNsaWVudCgpLT5pdGVtU3R5bGUoaSkKICAgICAgICAgZ3RrX3dpZGdldF9z
ZXRfc2Vuc2l0aXZlKGl0ZW0sIGNsaWVudCgpLT5pdGVtSXNFbmFibGVkKGkpKTsKLSAgICAgICAg
Z3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXApLCBpdGVtKTsKKyAg
ICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkp
LCBpdGVtKTsKICAgICAgICAgZ3RrX3dpZGdldF9zaG93KGl0ZW0pOwogICAgIH0KIAotICAgIGd0
a19tZW51X3NldF9hY3RpdmUobV9wb3B1cCwgaW5kZXgpOworICAgIGd0a19tZW51X3NldF9hY3Rp
dmUobV9wb3B1cC5nZXQoKSwgaW5kZXgpOwogCiAKICAgICAvLyBUaGUgc2l6ZSBjYWxscyBhcmUg
ZGlyZWN0bHkgY29waWVkIGZyb20gZ3RrY29tYm9ib3guYyB3aGljaCBpcyBMR1BMCiAgICAgR3Rr
UmVxdWlzaXRpb24gcmVxdWlzaXRpb247Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0
KEdUS19XSURHRVQobV9wb3B1cCksIC0xLCAtMSk7Ci0gICAgZ3RrX3dpZGdldF9zaXplX3JlcXVl
c3QoR1RLX1dJREdFVChtX3BvcHVwKSwgJnJlcXVpc2l0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3Nl
dF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwKSwgTUFYKHJlY3Qud2lkdGgoKSwgcmVx
dWlzaXRpb24ud2lkdGgpLCAtMSk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdU
S19XSURHRVQobV9wb3B1cC5nZXQoKSksIC0xLCAtMSk7CisgICAgZ3RrX3dpZGdldF9zaXplX3Jl
cXVlc3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgJnJlcXVpc2l0aW9uKTsKKyAgICBndGtf
d2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgTUFYKHJl
Y3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7CiAKLSAgICBHTGlzdCogY2hpbGRy
ZW4gPSBHVEtfTUVOVV9TSEVMTChtX3BvcHVwKS0+Y2hpbGRyZW47CisgICAgR0xpc3QqIGNoaWxk
cmVuID0gR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSktPmNoaWxkcmVuOwogICAgIGlmIChz
aXplKQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAg
ICAgaWYgKGkgPiBpbmRleCkKQEAgLTExMSwxMyArMTA4LDEzIEBACiAgICAgICAgIC8vIENlbnRl
ciB2ZXJ0aWNhbGx5IHRoZSBlbXB0eSBwb3B1cCBpbiB0aGUgY29tYm8gYm94IGFyZWEKICAgICAg
ICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSByZWN0LmhlaWdodCgp
IC8gMik7CiAKLSAgICBndGtfbWVudV9wb3B1cChtX3BvcHVwLCBOVUxMLCBOVUxMLCByZWludGVy
cHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhp
cywgMCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7CisgICAgZ3RrX21lbnVfcG9wdXAo
bV9wb3B1cC5nZXQoKSwgTlVMTCwgTlVMTCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRp
b25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGd0a19nZXRfY3VycmVudF9l
dmVudF90aW1lKCkpOwogfQogCiB2b2lkIFBvcHVwTWVudTo6aGlkZSgpCiB7CiAgICAgQVNTRVJU
KG1fcG9wdXApOwotICAgIGd0a19tZW51X3BvcGRvd24obV9wb3B1cCk7CisgICAgZ3RrX21lbnVf
cG9wZG93bihtX3BvcHVwLmdldCgpKTsKIH0KIAogdm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21F
bGVtZW50KCkKQEAgLTE1Myw3ICsxNTAsNyBAQAogdm9pZCBQb3B1cE1lbnU6Om1lbnVSZW1vdmVJ
dGVtKEd0a1dpZGdldCogd2lkZ2V0LCBQb3B1cE1lbnUqIHRoYXQpCiB7CiAgICAgQVNTRVJUKHRo
YXQtPm1fcG9wdXApOwotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIodGhh
dC0+bV9wb3B1cCksIHdpZGdldCk7CisgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUih0aGF0LT5tX3BvcHVwLmdldCgpKSwgd2lkZ2V0KTsKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dSZWZQdHJHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJHdGtfaAorI2RlZmlu
ZSBHUmVmUHRyR3RrX2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvR1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworICB0ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0
KiByZWZQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKyAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlB0
cihHdGtUYXJnZXRMaXN0KiBwdHIpOworCisgIHRlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmUHRy
KEdka0N1cnNvciogcHRyKTsKKyAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZlB0cihHZGtDdXJzb3Iq
IHB0cik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gR1JlZlB0ckd0a19oCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IEd0a1RhcmdldExp
c3QqIHJlZlB0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3RrX3RhcmdldF9saXN0X3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHZGtD
dXJzb3IqIHJlZlB0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBn
ZGtfY3Vyc29yX3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZv
aWQgZGVyZWZQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ2Rr
X2N1cnNvcl91bnJlZihwdHIpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAkocmV2
aXNpb24gMzc1OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw3IEBACiB0eXBlZGVmIHN0cnVjdCBfR3RrTWVudSBHdGtNZW51Owog
dHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnVJdGVtIEd0a01lbnVJdGVtOwogdHlwZWRlZiBzdHJ1Y3Qg
X0d0a1dpZGdldCBHdGtXaWRnZXQ7CisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2VsaWYgUExBVEZPUk0oV1gpCkBA
IC0xNjQsNyArMTY1LDcgQEAKICAgICBib29sIG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2U7CiAj
ZWxpZiBQTEFURk9STShHVEspCiAgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgR3Rr
TWVudSogbV9wb3B1cDsKKyAgICBHUmVmUHRyPEd0a01lbnU+IG1fcG9wdXA7CiAgICAgSGFzaE1h
cDxHdGtXaWRnZXQqLCBpbnQ+IG1faW5kZXhNYXA7CiAgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1B
Y3RpdmF0ZWQoR3RrTWVudUl0ZW0qIGl0ZW0sIFBvcHVwTWVudSopOwogICAgIHN0YXRpYyB2b2lk
IG1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUqKTsKSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzU5MSkK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MDgtMTAtMTQgIE1hcmNvIEJhcmlzaW9uZSAgPG1hcmNvLmJhcmlzaW9uZUBjb2xsYWJvcmEuY28u
dWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dU
S10gV2ViS2l0IEdUSyBuZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGdsaWIvZ29iamVj
dCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTU5OQorCisgICAgICAgIFNwZWNpYWxpemUgcmVmUHRyIGFuZCBkZXJlZlB0ciBmb3IgdHlw
ZXMgZnJvbSBHREsgb3IgR1RLIGFuZCBzdGFydCB0aGUKKyAgICAgICAgY29udmVyc2lvbiB0byB1
c2UgR1JlZlB0ci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRm
b3JtL1BvcHVwTWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OnJlZlB0cik6CisgICAgICAgIChXVEY6OmRlcmVmUHRyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVu
dTo6UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6flBvcHVwTWVudSk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBNZW51OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6bWVudVJlbW92
ZUl0ZW0pOgorCiAyMDA4LTEwLTE0ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTUK
</data>
<flag name="review"
          id="11092"
          type_id="1"
          status="-"
          setter="alp"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43030</attachid>
            <date>2009-11-11 22:52:56 -0800</date>
            <delta_ts>2009-11-12 11:52:09 -0800</delta_ts>
            <desc>Cleaned up patch against ToT</desc>
            <filename>0001-Introduce-GRefPtr-and-begin-to-use-it.patch</filename>
            <type>text/plain</type>
            <size>19866</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBjM2IzYjljZjgxMmNmN2VkOGQxMGYxOGM0ODM4NTY4Y2E1MmE2MzRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTEgTm92IDIwMDkgMjA6NTQ6MzMgLTA4MDAKU3ViamVj
dDogW1BBVENIXSBJbnRyb2R1Y2UgR1JlZlB0ciBhbmQgYmVnaW4gdG8gdXNlIGl0LgoKLS0tCiBK
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMg
KysrKwogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAg
fCAgICAzICstCiBKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5jcHAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDYgLQogSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuaCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAxIC0KIEphdmFTY3JpcHRDb3JlL3d0Zi9HUmVmUHRyLmggICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE3OCArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrKwogV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNv
cmUvcGxhdGZvcm0vUG9wdXBNZW51LmggICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQog
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgICAgICAgICAgICAgICAgfCAgIDU0
ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oICAgICAgICAgICAgICAg
ICAgfCAgIDM5ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwICAg
ICAgICAgICAgICB8ICAgMjcgKystLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEyICsrCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcCB8ICAgIDMgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDM2MCBp
bnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2Ny
aXB0Q29yZS93dGYvR1JlZlB0ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR1JlZlB0ckd0ay5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmgKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNzE5OGY1NS4uOWVhNjBjMiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDA5LTExLTExICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0
aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdlYktpdCBHVEsgbmVlZHMgYSB3cmFwcGVyIGZv
ciByZWYgY291bnRlZCBnbGliL2dvYmplY3Qgc3RydWN0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTkKKworICAgICAgICBJbnRyb2R1Y2UgR1Jl
ZlB0ciBhbmQgYmVnaW4gdG8gdXNlIGl0LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogd3RmL0dPd25QdHIuY3BwOiBNYWtlIEdSZWZQdHIgdGhlIEhhc2hUYWJsZSBjb250
YWluZXIuCisgICAgICAgICogd3RmL0dPd25QdHIuaDoKKyAgICAgICAgKiB3dGYvR1JlZlB0ci5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0
cik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OkdSZWZQdHIpOgorICAgICAgICAoV1RGOjpHUmVm
UHRyOjp+R1JlZlB0cik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OmNsZWFyKToKKyAgICAgICAg
KFdURjo6R1JlZlB0cjo6Z2V0KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OkdSZWZQ
dHI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Om9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpoYXNoVGFibGVEZWxldGVkVmFs
dWUpOgorICAgICAgICAoV1RGOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdURjo6Ojpzd2FwKToK
KyAgICAgICAgKFdURjo6c3dhcCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdCk6
CisgICAgICAgIChXVEY6OmNvbnN0X3BvaW50ZXJfY2FzdCk6CisgICAgICAgIChXVEY6OmdldFB0
cik6CisKIDIwMDktMTEtMTEgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmFtCmluZGV4IGRmOWYwOWMuLjZhZjZkYzggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBA
IC0yMzYsOSArMjM2LDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9EZXF1ZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvRGlzYWxsb3dDVHlwZS5o
IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvRm9yd2FyZC5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYv
R2V0UHRyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL0dPd25QdHIuaCBcCi0JSmF2YVNjcmlwdENvcmUvd3RmL0dldFB0ci5oIFwKKwlK
YXZhU2NyaXB0Q29yZS93dGYvR1JlZlB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvSGFzaENv
dW50ZWRTZXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hGdW5jdGlvbnMuaCBcCiAJSmF2
YVNjcmlwdENvcmUvd3RmL0hhc2hJdGVyYXRvcnMuaCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS93dGYvR093blB0ci5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5jcHAKaW5k
ZXggNDMyODg1Zi4uNTg4NjlmNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL0dPd25Q
dHIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmNwcApAQCAtNTYsMTAgKzU2
LDQgQEAgdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdEaXI+KEdEaXIqIHB0cikKICAg
ICAgICAgZ19kaXJfY2xvc2UocHRyKTsKIH0KIAotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRH
UHRyPEdIYXNoVGFibGU+KEdIYXNoVGFibGUqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAg
ICBnX2hhc2hfdGFibGVfdW5yZWYocHRyKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L0dPd25QdHIuaAppbmRleCA0OTkzMzQ4Li5lNGNlNWI0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS93dGYvR093blB0ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmgKQEAg
LTM1LDcgKzM1LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R011dGV4PihHTXV0ZXgqKTsKICAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVk
R1B0cjxHUGF0dGVyblNwZWM+KEdQYXR0ZXJuU3BlYyopOwogICAgIHRlbXBsYXRlPD4gdm9pZCBm
cmVlT3duZWRHUHRyPEdEaXI+KEdEaXIqKTsKLSAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVk
R1B0cjxHSGFzaFRhYmxlPihHSGFzaFRhYmxlKik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgR093blB0ciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0dSZWZQdHIuaCBiL0phdmFTY3JpcHRDb3JlL3d0
Zi9HUmVmUHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5OWZhZAot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9HUmVmUHRyLmgKQEAgLTAsMCAr
MSwxNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdURl9HUmVmUHRyX2gKKyNkZWZpbmUgV1RGX0dSZWZQdHJfaAor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgIkFsd2F5c0lubGluZS5oIgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiByZWZHUHRyKFQq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYocHRyKTsKKyAgICBy
ZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgZGVyZWZH
UHRyKFQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR1JlZlB0ciB7CitwdWJsaWM6Cisg
ICAgR1JlZlB0cigpIDogbV9wdHIoMCkgeyB9CisgICAgR1JlZlB0cihUKiBwdHIpIDogbV9wdHIo
cHRyKSB7IH0KKyAgICBHUmVmUHRyKGNvbnN0IEdSZWZQdHImIG8pIDogbV9wdHIoby5tX3B0cikg
eyBpZiAoVCogcHRyID0gbV9wdHIpIHJlZkdQdHIocHRyKTsgfQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPiBHUmVmUHRyKGNvbnN0IEdSZWZQdHI8VT4mIG8pIDogbV9wdHIoby5nZXQoKSkgeyBp
ZiAoVCogcHRyID0gbV9wdHIpIHJlZkdQdHIocHRyKTsgfQorCisgICAgfkdSZWZQdHIoKSB7IGlm
IChUKiBwdHIgPSBtX3B0cikgZGVyZWZHUHRyKHB0cik7IH0KKworICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKFQqIHB0ciA9IG1fcHRyKQorICAgICAgICAgICAgZGVyZWZHUHRy
KHB0cik7CisgICAgICAgIG1fcHRyID0gMDsKKyAgICB9CisKKyAgICBUKiBnZXQoKSBjb25zdCB7
IHJldHVybiBtX3B0cjsgfQorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3B0
cjsgfQorICAgIEFMV0FZU19JTkxJTkUgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyOyB9CisKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQor
CisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJz
aW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVkZWYg
VCogR1JlZlB0cjo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJkdSZWZQdHI6Om1fcHRyIDogMDsg
fQorCisgICAgR1JlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IEdSZWZQdHImKTsKKyAgICBHUmVmUHRy
JiBvcGVyYXRvcj0oVCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBHUmVmUHRyJiBvcGVy
YXRvcj0oY29uc3QgR1JlZlB0cjxVPiYpOworCisgICAgdm9pZCBzd2FwKEdSZWZQdHImKTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9CisKKyAgICBUKiBtX3B0cjsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9
KGNvbnN0IEdSZWZQdHI8VD4mIG8pCit7CisgICAgVCogb3B0ciA9IG8uZ2V0KCk7CisgICAgaWYg
KG9wdHIpCisgICAgICAgIHJlZkdQdHIob3B0cik7CisgICAgVCogcHRyID0gbV9wdHI7CisgICAg
bV9wdHIgPSBvcHRyOworICAgIGlmIChwdHIpCisgICAgICAgIGRlcmVmR1B0cihwdHIpOworICAg
IHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRlIDx0eXBl
bmFtZSBVPiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IEdS
ZWZQdHI8VT4mIG8pCit7CisgICAgVCogb3B0ciA9IG8uZ2V0KCk7CisgICAgaWYgKG9wdHIpCisg
ICAgICAgIHJlZkdQdHIob3B0cik7CisgICAgVCogcHRyID0gbV9wdHI7CisgICAgbV9wdHIgPSBv
cHRyOworICAgIGlmIChwdHIpCisgICAgICAgIGRlcmVmR1B0cihwdHIpOworICAgIHJldHVybiAq
dGhpczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVm
UHRyPFQ+OjpvcGVyYXRvcj0oVCogb3B0cikKK3sKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBt
X3B0ciA9IG9wdHI7CisgICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZHUHRyKHB0cik7CisgICAg
cmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgR1JlZlB0
cjxUPjo6c3dhcChHUmVmUHRyPFQ+JiBvKQoreworICAgIHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0
cik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKEdSZWZQdHI8VD4m
IGEsIEdSZWZQdHI8VD4mIGIpCit7CisgICAgYS5zd2FwKGIpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRy
PFQ+JiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQoreworICAgIHJldHVybiBhLmdldCgpID09IGIu
Z2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdSZWZQdHI8VD4mIGEsIFUqIGIpCit7CisgICAgcmV0dXJuIGEu
Z2V0KCkgPT0gYjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1
cm4gYSA9PSBiLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHUmVmUHRyPFQ+JiBhLCBjb25zdCBHUmVmUHRy
PFU+JiBiKQoreworICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdS
ZWZQdHI8VD4mIGEsIFUqIGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oVCog
YSwgY29uc3QgR1JlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSAhPSBiLmdldCgpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4gc3Rh
dGljX3BvaW50ZXJfY2FzdChjb25zdCBHUmVmUHRyPFU+JiBwKQoreworICAgIHJldHVybiBHUmVm
UHRyPFQ+KHN0YXRpY19jYXN0PFQqPihwLmdldCgpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgR1JlZlB0cjxUPiBjb25zdF9wb2ludGVyX2Nhc3QoY29u
c3QgR1JlZlB0cjxVPiYgcCkKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxUPihjb25zdF9jYXN0PFQq
PihwLmdldCgpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
KGNvbnN0IEdSZWZQdHI8VD4mIHApCit7CisgICAgcmV0dXJuIHAuZ2V0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkdSZWZQdHI7Cit1c2luZyBXVEY6OnJlZkdQdHI7
Cit1c2luZyBXVEY6OmRlcmVmR1B0cjsKK3VzaW5nIFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDsK
K3VzaW5nIFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0OworCisjZW5kaWYgLy8gV1RGX0dSZWZQdHJf
aApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA2OWRmMThlLi5jMjA4Mjk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA5LTExLTExICBNYXJ0aW4gUm9i
aW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFdlYktpdCBHVEsgbmVlZHMg
YSB3cmFwcGVyIGZvciByZWYgY291bnRlZCBnbGliL2dvYmplY3Qgc3RydWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTkKKworICAgICAgICBJ
bnRyb2R1Y2UgR1JlZlB0ciBhbmQgYmVnaW4gdG8gdXNlIGl0LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgYmVjYXVzZSBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnUuaDogVXNlIEdSZWZQdHIg
dG8gaG9sZCBtX3BvcHVwLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIp
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBN
ZW51Ojp+UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6c2hvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51OjptZW51UmVtb3ZlSXRlbSk6CisKIDIwMDktMTEtMTEgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciBAcjUwNzYwIHdp
dGggRU5BQkxFX0ZJTFRFUlMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAzYjk5NDE5Li5kMzAzMTA3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTE5NjIsNiArMTk2Miw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Bs
dWdpbldpZGdldC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9MYW5ndWFnZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Q
b3B1cE1lbnUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgKaW5kZXggMjMxNWYwMi4u
ZGY2MGY1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHR5cGVkZWYgc3RydWN0IF9HdGtNZW51IEd0a01lbnU7CiB0eXBlZGVmIHN0cnVj
dCBfR3RrTWVudUl0ZW0gR3RrTWVudUl0ZW07CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0
a1dpZGdldDsKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDxnbGliLmg+CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTE3NSw3ICsxNzYs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG93UG9wdXA7CiAjZWxpZiBQTEFURk9STShHVEsp
CiAgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgR3RrTWVudSogbV9wb3B1cDsKKyAg
ICBHUmVmUHRyPEd0a01lbnU+IG1fcG9wdXA7CiAgICAgSGFzaE1hcDxHdGtXaWRnZXQqLCBpbnQ+
IG1faW5kZXhNYXA7CiAgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrTWVudUl0
ZW0qIGl0ZW0sIFBvcHVwTWVudSopOwogICAgIHN0YXRpYyB2b2lkIG1lbnVVbm1hcHBlZChHdGtX
aWRnZXQqLCBQb3B1cE1lbnUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dS
ZWZQdHJHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0N2I5OQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKworI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfcmVmKHB0cik7CisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihwdHIpOwor
fQorCit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRy
OworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dSZWZQdHJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
Nzk0MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0
ay5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEdSZWZQdHJHdGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2luY2x1ZGUg
IkdSZWZQdHIuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgR3RrVGFyZ2V0TGlz
dDsKK3R5cGVkZWYgc3RydWN0IF9HZGtDdXJzb3IgR2RrQ3Vyc29yOworCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBw
dHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKwor
dGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKTsKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCmluZGV4IDNmNmIwMmEuLjM1MWYyZmMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApAQCAtNDIsOSArNDIsOCBAQCBQb3B1cE1l
bnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKIFBvcHVwTWVudTo6flBvcHVw
TWVudSgpCiB7CiAgICAgaWYgKG1fcG9wdXApIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fcG9wdXAsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV9wb3B1cC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAg
ICAgICAgIGhpZGUoKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9wb3B1cCk7CiAgICAgfQog
fQogCkBAIC01NCwxMCArNTMsMTAgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVj
dCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAKICAgICBpZiAoIW1fcG9wdXAp
IHsKICAgICAgICAgbV9wb3B1cCA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKLSAgICAgICAg
Z19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QobV9wb3B1cCkpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fcG9wdXAsICJ1bm1hcCIsIEdfQ0FMTEJBQ0sobWVudVVubWFwcGVkKSwgdGhpcyk7
CisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKG1fcG9wdXAuZ2V0KCkpOworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0sobWVudVVubWFw
cGVkKSwgdGhpcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGd0a19jb250YWluZXJfZm9yZWFjaChH
VEtfQ09OVEFJTkVSKG1fcG9wdXApLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPihtZW51
UmVtb3ZlSXRlbSksIHRoaXMpOworICAgICAgICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NP
TlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVu
dVJlbW92ZUl0ZW0pLCB0aGlzKTsKIAogICAgIGludCB4LCB5OwogICAgIGdka193aW5kb3dfZ2V0
X29yaWdpbihHVEtfV0lER0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCkpLT53aW5kb3csICZ4LCAmeSk7CkBAIC03OCwyMCArNzcsMjAgQEAgdm9pZCBQb3B1cE1lbnU6
OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAK
ICAgICAgICAgLy8gRklYTUU6IEFwcGx5IHRoZSBQb3B1cE1lbnVTdHlsZSBmcm9tIGNsaWVudCgp
LT5pdGVtU3R5bGUoaSkKICAgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGl0ZW0sIGNs
aWVudCgpLT5pdGVtSXNFbmFibGVkKGkpKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5k
KEdUS19NRU5VX1NIRUxMKG1fcG9wdXApLCBpdGVtKTsKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxf
YXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBpdGVtKTsKICAgICAgICAgZ3Rr
X3dpZGdldF9zaG93KGl0ZW0pOwogICAgIH0KIAotICAgIGd0a19tZW51X3NldF9hY3RpdmUobV9w
b3B1cCwgaW5kZXgpOworICAgIGd0a19tZW51X3NldF9hY3RpdmUobV9wb3B1cC5nZXQoKSwgaW5k
ZXgpOwogCiAKICAgICAvLyBUaGUgc2l6ZSBjYWxscyBhcmUgZGlyZWN0bHkgY29waWVkIGZyb20g
Z3RrY29tYm9ib3guYyB3aGljaCBpcyBMR1BMCiAgICAgR3RrUmVxdWlzaXRpb24gcmVxdWlzaXRp
b247Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cCks
IC0xLCAtMSk7Ci0gICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVw
KSwgJnJlcXVpc2l0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJ
REdFVChtX3BvcHVwKSwgTUFYKHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7
CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cC5nZXQo
KSksIC0xLCAtMSk7CisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3Bv
cHVwLmdldCgpKSwgJnJlcXVpc2l0aW9uKTsKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVl
c3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgTUFYKHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRp
b24ud2lkdGgpLCAtMSk7CiAKLSAgICBHTGlzdCogY2hpbGRyZW4gPSBHVEtfTUVOVV9TSEVMTCht
X3BvcHVwKS0+Y2hpbGRyZW47CisgICAgR0xpc3QqIGNoaWxkcmVuID0gR1RLX01FTlVfU0hFTEwo
bV9wb3B1cC5nZXQoKSktPmNoaWxkcmVuOwogICAgIGlmIChzaXplKQogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgaWYgKGkgPiBpbmRleCkKQEAg
LTEwOCwxMyArMTA3LDEzIEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHJl
Y3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogICAgICAgICAvLyBDZW50ZXIgdmVydGlj
YWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBhcmVhCiAgICAgICAgIG1fbWVu
dVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gcmVjdC5oZWlnaHQoKSAvIDIpOwog
Ci0gICAgZ3RrX21lbnVfcG9wdXAobV9wb3B1cCwgTlVMTCwgTlVMTCwgcmVpbnRlcnByZXRfY2Fz
dDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGd0
a19nZXRfY3VycmVudF9ldmVudF90aW1lKCkpOworICAgIGd0a19tZW51X3BvcHVwKG1fcG9wdXAu
Z2V0KCksIE5VTEwsIE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4o
bWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGlt
ZSgpKTsKIH0KIAogdm9pZCBQb3B1cE1lbnU6OmhpZGUoKQogewogICAgIEFTU0VSVChtX3BvcHVw
KTsKLSAgICBndGtfbWVudV9wb3Bkb3duKG1fcG9wdXApOworICAgIGd0a19tZW51X3BvcGRvd24o
bV9wb3B1cC5nZXQoKSk7CiB9CiAKIHZvaWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgp
CkBAIC0xNTAsNyArMTQ5LDcgQEAgdm9pZCBQb3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9u
KEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEkKIHZvaWQgUG9wdXBN
ZW51OjptZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqIHdpZGdldCwgUG9wdXBNZW51KiB0aGF0KQog
ewogICAgIEFTU0VSVCh0aGF0LT5tX3BvcHVwKTsKLSAgICBndGtfY29udGFpbmVyX3JlbW92ZShH
VEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXApLCB3aWRnZXQpOworICAgIGd0a19jb250YWluZXJf
cmVtb3ZlKEdUS19DT05UQUlORVIodGhhdC0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKaW5kZXggNzkxYzM0Mi4uNDQyNjE5YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMS0x
MSAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBXZWJL
aXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVmIGNvdW50ZWQgZ2xpYi9nb2JqZWN0IHN0cnVj
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk5
CisKKyAgICAgICAgSW50cm9kdWNlIEdSZWZQdHIgYW5kIGJlZ2luIHRvIHVzZSBpdC4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDogRmlyc3QgbW92
ZXMgdG93YXJkIHVzaW5nIEdSZWZQdHIuCisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4pOgorCiAyMDA5LTExLTExICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
IDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEhvbGdlciBGcmV5dGhlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggZjc2NzI5ZC4uYzA1ZDFiZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgogI2luY2x1
ZGUgIkd0a1BsdWdpbldpZGdldC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC00MjcsNyArNDI4LDcgQEAgUGFzc1JlZlB0
cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYg
cGx1Z2luU2l6ZSwgSFQKICAgICBDU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gbWltZVR5cGUudXRm
OCgpOwogCiAgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUo
KSk7Ci0gICAgR093blB0cjxHSGFzaFRhYmxlPiBoYXNoKGdfaGFzaF90YWJsZV9uZXdfZnVsbChn
X3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUpKTsKKyAgICBHUmVmUHRyPEdI
YXNoVGFibGU+IGhhc2goZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2Vx
dWFsLCBnX2ZyZWUsIGdfZnJlZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJh
bU5hbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoaGFzaC5n
ZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYXJhbU5hbWVzW2ld
LnV0ZjgoKS5kYXRhKCkpLAotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43087</attachid>
            <date>2009-11-12 11:52:09 -0800</date>
            <delta_ts>2009-12-09 08:34:36 -0800</delta_ts>
            <desc>Updated patch which includes the adoptRef idiom</desc>
            <filename>0001-Introduce-GRefPtr-and-begin-to-use-it.patch</filename>
            <type>text/plain</type>
            <size>20272</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBlMGZhYjhkZjNiNWNkNWM5YjZlOGYyNGM0NjY2MTJlOGNhZmUxNTlkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTEgTm92IDIwMDkgMjA6NTQ6MzMgLTA4MDAKU3ViamVj
dDogW1BBVENIXSBJbnRyb2R1Y2UgR1JlZlB0ciBhbmQgYmVnaW4gdG8gdXNlIGl0LgoKLS0tCiBK
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMg
KysrKwogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAg
fCAgICAzICstCiBKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5jcHAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDYgLQogSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuaCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAxIC0KIEphdmFTY3JpcHRDb3JlL3d0Zi9HUmVmUHRyLmggICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE5MiArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrKwogV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNv
cmUvcGxhdGZvcm0vUG9wdXBNZW51LmggICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQog
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgICAgICAgICAgICAgICAgfCAgIDU0
ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oICAgICAgICAgICAgICAg
ICAgfCAgIDM5ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgICAg
ICAgICAgICAgIHwgICAyNiArKy0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTIgKysKIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwIHwgICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwgMzczIGlu
c2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3Jp
cHRDb3JlL3d0Zi9HUmVmUHRyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAyMWExZDdhLi45NTExMGY2IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDktMTEtMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRp
bi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBuZWVkcyBhIHdyYXBwZXIgZm9y
IHJlZiBjb3VudGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAgICAgIEludHJvZHVjZSBHUmVm
UHRyIGFuZCBiZWdpbiB0byB1c2UgaXQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiB3dGYvR093blB0ci5jcHA6IE1ha2UgR1JlZlB0ciB0aGUgSGFzaFRhYmxlIGNvbnRh
aW5lci4KKyAgICAgICAgKiB3dGYvR093blB0ci5oOgorICAgICAgICAqIHd0Zi9HUmVmUHRyLmg6
IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWZHUHRyKToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRy
KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6R1JlZlB0cik6CisgICAgICAgIChXVEY6OkdSZWZQ
dHI6On5HUmVmUHRyKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpHUmVmUHRyOjpnZXQpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvciopOgor
ICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdURjo6R1JlZlB0
cjo6b3BlcmF0b3IhKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSk6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Omhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXVEY6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjo6OnN3YXApOgor
ICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0KToK
KyAgICAgICAgKFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0KToKKyAgICAgICAgKFdURjo6Z2V0UHRy
KToKKwogMjAwOS0xMS0xMiAgUmljaGFyZCBNb2UgR3VzdGF2c2VuICA8cmljaGFyZC5ndXN0YXZz
ZW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjlmMDljLi42YWY2ZGM4IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMjM2LDkgKzIzNiwxMCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3Rm
L0Rpc2FsbG93Q1R5cGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0ZvcndhcmQuaCBcCisJSmF2
YVNjcmlwdENvcmUvd3RmL0dldFB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5j
cHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmggXAotCUphdmFTY3JpcHRDb3JlL3d0
Zi9HZXRQdHIuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0dSZWZQdHIuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL0hhc2hDb3VudGVkU2V0LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoRnVu
Y3Rpb25zLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoSXRlcmF0b3JzLmggXApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L0dPd25QdHIuY3BwCmluZGV4IDQzMjg4NWYuLjU4ODY5ZjQgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9HT3duUHRyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5j
cHAKQEAgLTU2LDEwICs1Niw0IEBAIHRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGly
PihHRGlyKiBwdHIpCiAgICAgICAgIGdfZGlyX2Nsb3NlKHB0cik7CiB9CiAKLXRlbXBsYXRlIDw+
IHZvaWQgZnJlZU93bmVkR1B0cjxHSGFzaFRhYmxlPihHSGFzaFRhYmxlKiBwdHIpCi17Ci0gICAg
aWYgKHB0cikKLSAgICAgICAgZ19oYXNoX3RhYmxlX3VucmVmKHB0cik7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuaCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmgKaW5kZXggNDk5MzM0OC4uZTRjZTViNCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93
dGYvR093blB0ci5oCkBAIC0zNSw3ICszNSw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBs
YXRlPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdNdXRleD4oR011dGV4Kik7CiAgICAgdGVtcGxhdGU8
PiB2b2lkIGZyZWVPd25lZEdQdHI8R1BhdHRlcm5TcGVjPihHUGF0dGVyblNwZWMqKTsKICAgICB0
ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGlyPihHRGlyKik7Ci0gICAgdGVtcGxhdGU8
PiB2b2lkIGZyZWVPd25lZEdQdHI8R0hhc2hUYWJsZT4oR0hhc2hUYWJsZSopOwogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEdPd25QdHIgOiBwdWJsaWMgTm9uY29weWFibGUgewog
ICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9HUmVmUHRyLmggYi9K
YXZhU2NyaXB0Q29yZS93dGYvR1JlZlB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjU0Zjc2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvR1Jl
ZlB0ci5oCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRp
biBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXVEZfR1JlZlB0cl9oCisjZGVmaW5l
IFdURl9HUmVmUHRyX2gKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJBbHdheXNJ
bmxpbmUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogcmVmR1B0cihUKiBwdHIpOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IGRlcmVmR1B0cihUKiBwdHIpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgR1JlZlB0cjsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBHUmVmUHRyPFQ+IGFkb3B0R1JlZihUKik7CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHUmVmUHRyIHsKK3B1YmxpYzoKKyAgICBHUmVmUHRyKCkg
OiBtX3B0cigwKSB7IH0KKyAgICBHUmVmUHRyKFQqIHB0cikgOiBtX3B0cihwdHIpIHsgaWYgKHB0
cikgcmVmR1B0cihwdHIpOyB9CisgICAgR1JlZlB0cihjb25zdCBHUmVmUHRyJiBvKSA6IG1fcHRy
KG8ubV9wdHIpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSByZWZHUHRyKHB0cik7IH0KKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4gR1JlZlB0cihjb25zdCBHUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8u
Z2V0KCkpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSByZWZHUHRyKHB0cik7IH0KKworICAgIH5HUmVm
UHRyKCkgeyBpZiAoVCogcHRyID0gbV9wdHIpIGRlcmVmR1B0cihwdHIpOyB9CisKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChUKiBwdHIgPSBtX3B0cikKKyAgICAgICAgICAg
IGRlcmVmR1B0cihwdHIpOworICAgICAgICBtX3B0ciA9IDA7CisgICAgfQorCisgICAgVCogZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqbV9wdHI7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBtX3B0cjsgfQorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV9wdHI7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGlj
aXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAg
ICB0eXBlZGVmIFQqIEdSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOworICAgIG9wZXJhdG9y
IFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA/ICZHUmVmUHRyOjpt
X3B0ciA6IDA7IH0KKworICAgIEdSZWZQdHImIG9wZXJhdG9yPShjb25zdCBHUmVmUHRyJik7Cisg
ICAgR1JlZlB0ciYgb3BlcmF0b3I9KFQqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gR1Jl
ZlB0ciYgb3BlcmF0b3I9KGNvbnN0IEdSZWZQdHI8VT4mKTsKKworICAgIHZvaWQgc3dhcChHUmVm
UHRyJik7CisgICAgZnJpZW5kIEdSZWZQdHIgYWRvcHRHUmVmPFQ+KFQqKTsKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4oLTEpOyB9CisgICAgLy8gQWRvcHRpbmcgY29uc3RydWN0b3IuCisgICAgR1Jl
ZlB0cihUKiBwdHIsIGJvb2wpIDogbV9wdHIocHRyKSB7fQorCisgICAgVCogbV9wdHI7Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQdHI8VD46Om9w
ZXJhdG9yPShjb25zdCBHUmVmUHRyPFQ+JiBvKQoreworICAgIFQqIG9wdHIgPSBvLmdldCgpOwor
ICAgIGlmIChvcHRyKQorICAgICAgICByZWZHUHRyKG9wdHIpOworICAgIFQqIHB0ciA9IG1fcHRy
OworICAgIG1fcHRyID0gb3B0cjsKKyAgICBpZiAocHRyKQorICAgICAgICBkZXJlZkdQdHIocHRy
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQdHI8VD46Om9wZXJhdG9yPShj
b25zdCBHUmVmUHRyPFU+JiBvKQoreworICAgIFQqIG9wdHIgPSBvLmdldCgpOworICAgIGlmIChv
cHRyKQorICAgICAgICByZWZHUHRyKG9wdHIpOworICAgIFQqIHB0ciA9IG1fcHRyOworICAgIG1f
cHRyID0gb3B0cjsKKyAgICBpZiAocHRyKQorICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgR1JlZlB0cjxU
PiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9KFQqIG9wdHIpCit7CisgICAgVCogcHRyID0gbV9wdHI7
CisgICAgbV9wdHIgPSBvcHRyOworICAgIGlmIChwdHIpCisgICAgICAgIGRlcmVmR1B0cihwdHIp
OworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lk
IEdSZWZQdHI8VD46OnN3YXAoR1JlZlB0cjxUPiYgbykKK3sKKyAgICBzdGQ6OnN3YXAobV9wdHIs
IG8ubV9wdHIpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgc3dhcChHUmVm
UHRyPFQ+JiBhLCBHUmVmUHRyPFQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
R1JlZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXQo
KSA9PSBiLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQoreworICAgIHJl
dHVybiBhLmdldCgpID09IGI7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIpCit7Cisg
ICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgY29uc3Qg
R1JlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiBhLmdldCgpICE9IGI7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KFQqIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIpCit7CisgICAgcmV0dXJuIGEgIT0gYi5nZXQo
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBHUmVmUHRy
PFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgR1JlZlB0cjxVPiYgcCkKK3sKKyAgICByZXR1
cm4gR1JlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocC5nZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4gY29uc3RfcG9pbnRlcl9j
YXN0KGNvbnN0IEdSZWZQdHI8VT4mIHApCit7CisgICAgcmV0dXJuIEdSZWZQdHI8VD4oY29uc3Rf
Y2FzdDxUKj4ocC5nZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0cihjb25zdCBHUmVmUHRyPFQ+JiBwKQoreworICAgIHJldHVybiBwLmdldCgpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gR1JlZlB0cjxUPiBhZG9wdEdSZWYoVCogcCkKK3sKKyAg
ICByZXR1cm4gR1JlZlB0cjxUPihwLCB0cnVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiByZWZHUHRyKFQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29i
amVjdF9yZWZfc2luayhwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBkZXJlZkdQdHIoVCogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkdSZWZQdHI7Cit1c2luZyBXVEY6OnJlZkdQdHI7Cit1c2luZyBXVEY6OmRlcmVm
R1B0cjsKK3VzaW5nIFdURjo6YWRvcHRHUmVmOwordXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9j
YXN0OwordXNpbmcgV1RGOjpjb25zdF9wb2ludGVyX2Nhc3Q7CisKKyNlbmRpZiAvLyBXVEZfR1Jl
ZlB0cl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGE2OWNlZmQuLmIzMmNiMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMTEtMTIgIE1hcnRp
biBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBu
ZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAg
ICAgIEludHJvZHVjZSBHUmVmUHRyIGFuZCBiZWdpbiB0byB1c2UgaXQuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBiZWNhdXNlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcy4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudS5oOiBVc2UgR1Jl
ZlB0ciB0byBob2xkIG1fcG9wdXAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVm
R1B0cik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cE1lbnU6On5Qb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6aGlkZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnU6Om1lbnVSZW1vdmVJdGVtKToKKwogMjAwOS0xMS0xMiAgRGFuaWVsIEJhdGVz
ICA8ZGJhdGVzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQppbmRleCAzYjk5NDE5Li5kMzAzMTA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5NjIsNiArMTk2Miw4IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0
ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFn
ZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vUG9wdXBNZW51LmgKaW5kZXggMjMxNWYwMi4uZGY2MGY1NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Bv
cHVwTWVudS5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYg
c3RydWN0IF9HdGtNZW51IEd0a01lbnU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrTWVudUl0ZW0gR3Rr
TWVudUl0ZW07CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKyNpbmNsdWRl
ICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxnbGli
Lmg+CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTE3NSw3ICsxNzYsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9zaG93UG9wdXA7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgSW50UG9pbnQgbV9t
ZW51UG9zaXRpb247Ci0gICAgR3RrTWVudSogbV9wb3B1cDsKKyAgICBHUmVmUHRyPEd0a01lbnU+
IG1fcG9wdXA7CiAgICAgSGFzaE1hcDxHdGtXaWRnZXQqLCBpbnQ+IG1faW5kZXhNYXA7CiAgICAg
c3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrTWVudUl0ZW0qIGl0ZW0sIFBvcHVwTWVu
dSopOwogICAgIHN0YXRpYyB2b2lkIG1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUq
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjY0N2I5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2Jp
bnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBHdGtUYXJnZXRM
aXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBndGtfdGFyZ2V0X2xpc3RfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIp
CisgICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBH
ZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk0MWY1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJH
dGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2luY2x1ZGUgIkdSZWZQdHIuaCIKKwordHlw
ZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgR3RrVGFyZ2V0TGlzdDsKK3R5cGVkZWYgc3RydWN0
IF9HZGtDdXJzb3IgR2RrQ3Vyc29yOworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4g
R3RrVGFyZ2V0TGlzdCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKwordGVtcGxhdGUgPD4gR2RrQ3Vy
c29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRy
KEdka0N1cnNvciogcHRyKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1l
bnVHdGsuY3BwCmluZGV4IDNmNmIwMmEuLjE5ZGQ0ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9w
dXBNZW51R3RrLmNwcApAQCAtNDIsOSArNDIsOCBAQCBQb3B1cE1lbnU6OlBvcHVwTWVudShQb3B1
cE1lbnVDbGllbnQqIGNsaWVudCkKIFBvcHVwTWVudTo6flBvcHVwTWVudSgpCiB7CiAgICAgaWYg
KG1fcG9wdXApIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fcG9wdXAsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9wb3B1cC5nZXQoKSwgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgICAgIGhpZGUoKTsKLSAg
ICAgICAgZ19vYmplY3RfdW5yZWYobV9wb3B1cCk7CiAgICAgfQogfQogCkBAIC01NCwxMCArNTMs
OSBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcq
IHZpZXcsIGludCBpbmRleCkKIAogICAgIGlmICghbV9wb3B1cCkgewogICAgICAgICBtX3BvcHVw
ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwotICAgICAgICBnX29iamVjdF9yZWZfc2luayhH
X09CSkVDVChtX3BvcHVwKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cCwgInVu
bWFwIiwgR19DQUxMQkFDSyhtZW51VW5tYXBwZWQpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3BvcHVwLmdldCgpLCAidW5tYXAiLCBHX0NBTExCQUNLKG1lbnVVbm1hcHBlZCks
IHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NP
TlRBSU5FUihtX3BvcHVwKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92
ZUl0ZW0pLCB0aGlzKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlO
RVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrQ2FsbGJhY2s+KG1lbnVSZW1v
dmVJdGVtKSwgdGhpcyk7CiAKICAgICBpbnQgeCwgeTsKICAgICBnZGtfd2luZG93X2dldF9vcmln
aW4oR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKS0+
d2luZG93LCAmeCwgJnkpOwpAQCAtNzgsMjAgKzc2LDIwIEBAIHZvaWQgUG9wdXBNZW51OjpzaG93
KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogCiAgICAg
ICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51U3R5bGUgZnJvbSBjbGllbnQoKS0+aXRl
bVN0eWxlKGkpCiAgICAgICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShpdGVtLCBjbGllbnQo
KS0+aXRlbUlzRW5hYmxlZChpKSk7Ci0gICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtf
TUVOVV9TSEVMTChtX3BvcHVwKSwgaXRlbSk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVu
ZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgaXRlbSk7CiAgICAgICAgIGd0a193aWRn
ZXRfc2hvdyhpdGVtKTsKICAgICB9CiAKLSAgICBndGtfbWVudV9zZXRfYWN0aXZlKG1fcG9wdXAs
IGluZGV4KTsKKyAgICBndGtfbWVudV9zZXRfYWN0aXZlKG1fcG9wdXAuZ2V0KCksIGluZGV4KTsK
IAogCiAgICAgLy8gVGhlIHNpemUgY2FsbHMgYXJlIGRpcmVjdGx5IGNvcGllZCBmcm9tIGd0a2Nv
bWJvYm94LmMgd2hpY2ggaXMgTEdQTAogICAgIEd0a1JlcXVpc2l0aW9uIHJlcXVpc2l0aW9uOwot
ICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXApLCAtMSwg
LTEpOwotICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cCksICZy
ZXF1aXNpdGlvbik7Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQo
bV9wb3B1cCksIE1BWChyZWN0LndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRoKSwgLTEpOworICAg
IGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXAuZ2V0KCkpLCAt
MSwgLTEpOworICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cC5n
ZXQoKSksICZyZXF1aXNpdGlvbik7CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdU
S19XSURHRVQobV9wb3B1cC5nZXQoKSksIE1BWChyZWN0LndpZHRoKCksIHJlcXVpc2l0aW9uLndp
ZHRoKSwgLTEpOwogCi0gICAgR0xpc3QqIGNoaWxkcmVuID0gR1RLX01FTlVfU0hFTEwobV9wb3B1
cCktPmNoaWxkcmVuOworICAgIEdMaXN0KiBjaGlsZHJlbiA9IEdUS19NRU5VX1NIRUxMKG1fcG9w
dXAuZ2V0KCkpLT5jaGlsZHJlbjsKICAgICBpZiAoc2l6ZSkKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpID4gaW5kZXgpCkBAIC0xMDgs
MTMgKzEwNiwxMyBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBG
cmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkg
dGhlIGVtcHR5IHBvcHVwIGluIHRoZSBjb21ibyBib3ggYXJlYQogICAgICAgICBtX21lbnVQb3Np
dGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAotICAg
IGd0a19tZW51X3BvcHVwKG1fcG9wdXAsIE5VTEwsIE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8R3Rr
TWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0
X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsKKyAgICBndGtfbWVudV9wb3B1cChtX3BvcHVwLmdldCgp
LCBOVUxMLCBOVUxMLCByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQ
b3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgMCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7
CiB9CiAKIHZvaWQgUG9wdXBNZW51OjpoaWRlKCkKIHsKICAgICBBU1NFUlQobV9wb3B1cCk7Ci0g
ICAgZ3RrX21lbnVfcG9wZG93bihtX3BvcHVwKTsKKyAgICBndGtfbWVudV9wb3Bkb3duKG1fcG9w
dXAuZ2V0KCkpOwogfQogCiB2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAt
MTUwLDcgKzE0OCw3IEBAIHZvaWQgUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5jdGlvbihHdGtN
ZW51KiwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJCiB2b2lkIFBvcHVwTWVudTo6
bWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiB3aWRnZXQsIFBvcHVwTWVudSogdGhhdCkKIHsKICAg
ICBBU1NFUlQodGhhdC0+bV9wb3B1cCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NP
TlRBSU5FUih0aGF0LT5tX3BvcHVwKSwgd2lkZ2V0KTsKKyAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmlu
ZGV4IDc5MWMzNDIuLjQ0MjYxOWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTEtMTEgIE1h
cnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdU
SyBuZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisg
ICAgICAgIEludHJvZHVjZSBHUmVmUHRyIGFuZCBiZWdpbiB0byB1c2UgaXQuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IEZpcnN0IG1vdmVzIHRv
d2FyZCB1c2luZyBHUmVmUHRyLgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlUGx1Z2luKToKKwogMjAwOS0xMS0xMSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xn
ZXIgRnJleXRoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwCmluZGV4IGY3NjcyOWQuLjI4YmVmMmMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAj
aW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlICJH
dGtQbHVnaW5XaWRnZXQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgpAQCAtNDI3LDcgKzQyOCw3IEBAIFBhc3NSZWZQdHI8V2lk
Z2V0PiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdp
blNpemUsIEhUCiAgICAgQ1N0cmluZyBtaW1lVHlwZVN0cmluZyA9IG1pbWVUeXBlLnV0ZjgoKTsK
IAogICAgIEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwot
ICAgIEdPd25QdHI8R0hhc2hUYWJsZT4gaGFzaChnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJf
aGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19mcmVlKSk7CisgICAgR1JlZlB0cjxHSGFzaFRh
YmxlPiBoYXNoID0gYWRvcHRHUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn
X3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1OYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0
KGhhc2guZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAocGFyYW1O
YW1lc1tpXS51dGY4KCkuZGF0YSgpKSwKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="24744"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43088</attachid>
            <date>2009-11-12 12:01:20 -0800</date>
            <delta_ts>2009-11-12 12:01:20 -0800</delta_ts>
            <desc>chat log with gtkmm developers</desc>
            <filename>gtkmm.log</filename>
            <type>text/plain</type>
            <size>7820</size>
            <attacher name="Benjamin Otte">otte</attacher>
            
              <data encoding="base64">PENvbXBhbnk+IHF1ZXN0aW9uIGFib3V0IHNtYXJ0IHBvaW50ZXJzIGZyb20gYSBwb29yIEMrKyBp
Z25vcmFudDoKPENvbXBhbnk+IHdlJ3JlIGludGVuZGluZyB0byB3cmFwIG1lbWJlciBDIG9iamVj
dHMgaW4gd2Via2l0IHdpdGggc21hcnQgcG9pbnRlcnMKPENvbXBhbnk+IHdvdWxkIHlvdSBhZGQg
YW4gYXV0b21hdGljIGNvbnZlcnNpb24gb3BlcmF0b3IgZ2l2aW5nIHlvdSB0aGUgdW5kZXJseWlu
ZyBDIHN0cnVjdD8KPENvbXBhbnk+IHdlJ2QgaGF2ZSB0byBjYWxsIHN0dWZmIGxpa2UgZ3RrX3dp
bmRvd19wcmVzZW50IChtX3dpbmRvdy5nZXQoKSk7IC0gYW5kIHRoYXQgbWFrZXMgdGhlIGNvZGUg
dWdseQo8Q29tcGFueT4gb3RvaCBpbXBsaWNpdCBzbWFydG5lc3MgdGVuZHMgdG8gYml0ZSBvbmUg
aW4gdGhlIGFzcwo8Q29tcGFueT4gcmVmZXJlbmNlIGlzIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU5OQo8ZGFuaWVsaz4gc2hvcnQgYW5zd2VyOiBkb24ndAo8Q29t
cGFueT4gaSB3YW50IHRoZSBsb25nIGFuc3dlciA6KQo8ZGFuaWVsaz4gSSBoYXZlIHRvIHRoaW5r
IGFib3V0IGl0IGZvciBhIGZldyBtaW51dGVzIDopCjxDb21wYW55PiB0YWtlIHlvdXIgdGltZQoq
IENvbXBhbnkgZ2V0cyBkaW5uZXIKPGRhbmllbGs+IGEgY291cGxlIG9mIGNvbW1lbnRzOgo8ZGFu
aWVsaz4gPisgICAgICAgIH5HUmVmUHRyKCkgeyBpZiAoVCogcHRyID0gbV9wdHIpIGRlcmVmUHRy
KHB0cik7IH0KPGRhbmllbGs+IHRoZSBjb21waWxlciBpcyB1c3VhbGx5IHNtYXJ0IGVub3VnaCB0
byBub3QgZmV0Y2ggdGhlIHZhcmlhYmxlJ3MgdmFsdWUgYWdhaW4gd2l0aG91dCBtYWtpbmcgaXQg
ZXhwbGljaXQgYXMgZG9uZSBoZXJlCjxkYW5pZWxrPiByZWZQdHIoKSBhbmQgZGVyZWZQdHIoKSBn
aXZlIG1lIHRoZSBjcmVlcHMKPGRhbmllbGs+IEknZCBtYWtlIHRoZSBHUmVmUHRyKFQqIHB0cikg
OiBtX3B0cihwdHIpIHsgfSBleHBsaWNpdAo8ZGFuaWVsaz4geW91IGRvIG5vdCBuZWVkIG9wZXJh
dG9yISgpIHNpbmNlIHlvdSBoYXZlIHRoZSBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIFBNRiBhbHJl
YWR5CjxkYW5pZWxrPiAob24gYSBzaWRlIG5vdGUsIEkgdGhpbmsgcmV0dXJuaW5nIGEgUE1GIGlz
IG92ZXIgdGhlIHRvcCwgSSB0ZW5kIHRvIGp1c3QgaGF2ZSBhbiBvcGVyYXRvciBjb25zdCB2b2lk
KigpIHdoaWNoIGlzIGxlc3MgdWdseSBhbmQgZ29vZCBlbm91Z2gpCjxkYW5pZWxrPiBkb24ndCBu
YW1lIHRoZSByZXNldCBtZXRob2QgY2xlYXIoKSEKPGRhbmllbGs+IGNsZWFyKCkgaXMgZm9yIGNv
bnRhaW5lcnMKPGRhbmllbGs+IGJldHRlciByZW5hbWUgaXQgdG8gcmVzZXQoKQo8ZGFuaWVsaz4g
eW91IG1heSB3YW50IHRvIGhhdmUgYSByZXNldCgpIHdpdGggYSBwYXJhbWV0ZXIgYXMgd2VsbCwg
bGlrZSBzdGQ6OmF1dG9fcHRyPD4KPGRhbmllbGs+IGVlazogR1JlZlB0ciYgb3BlcmF0b3I9KFQq
KTsgCjxkYW5pZWxrPiBkb24ndAo8ZGFuaWVsaz4gcmVzZXQoKSB3b3VsZCBmdWxmaWxsIHRoZSBz
YW1lIHB1cnBvc2UsIGJ1dCBiZSBleHBsaWNpdAo8ZGFuaWVsaz4gdXNlIHRoZSBzd2FwKCkgdGVj
aG5pcXVlIGZvciBjb3B5IGFzc2lnbm1lbnQsIGl0J3MgbmljZSwgY2xlYW4sIGFuZCBhaXJ0aWdo
dAo8ZGFuaWVsaz4gaWYgeW91IGdvIGZvciBhbiBvcGVyYXRvciBjb25zdCB2b2lkKigpIGluc3Rl
YWQgb2YgdGhlIFBNRiB2ZXJzaW9uLCB5b3UgY291bGQgZXZlbiBkcm9wIHRoZSBjb21wYXJpc29u
IG9wZXJhdG9yczogbGVzcyBjb2RlICh5b3Ugd291bGQganVzdCByZXR1cm4gdGhlIHBvaW50ZXIg
ZnJvbSB0aGUgb3BlcmF0b3IpCjxkYW5pZWxrPiBhbHNvLCBmb3IgR09iamVjdCBjb2RlIHlvdSB3
aWxsIHByb2JhYmx5IG5lZWQgcmVpbnRlcnByZXRfcG9pbnRlcl9jYXN0IGFzIHdlbGwKPGRhbmll
bGs+IHlvdSBtYXkgd2FudCB0byBhZGQgYSBjb25zdHJ1Y3RvciBvdmVybG9hZCB3aXRoIGEgdGFn
IGVudW0gYXJndW1lbnQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5ICJ0YWtlIG93bmVyc2hpcCIgZXhw
bGljaXRseSBhdCBjb25zdHJ1Y3Rpb24gdGltZQo8ZGFuaWVsaz4gc28geW91IGNhbiBkbyBib3Ro
IHdpdGhvdXQgcmVzb3J0aW5nIHRvIGRpcmVjdCBjYWxscyB0byByZWZQdHIoKSBhbmQgZGVyZWZQ
dHIoKQo8ZGFuaWVsaz4gc2VlIGFsc28gaHR0cDovL2dpdC5nbm9tZS5vcmcvY2dpdC9yZWdleHhl
ci90cmVlL3NyYy9zaGFyZWRwdHIuaCBmb3Igc29tZSBvZiB0aGUgdGhpbmdzIEkgbWVudGlvbmVk
CjxkYW5pZWxrPiBCVFcsIEkgbGlrZSB0aGUgV1RGIG5hbWVzcGFjZSA6KQo8ZGFuaWVsaz4gc28K
PGRhbmllbGs+IHJlZ2FyZGluZyB0aGUgaW1wbGljaXQgY29udmVyc2lvbiB0byBUKgo8ZGFuaWVs
az4gd2l0aCB5b3VyIGN1cnJlbnQgaW50ZXJmYWNlLCBpdCB3b3VsZCBiZSB2ZXJ5IGVhc3kgdG8g
ZW5kIHVwIHdpdGggY29kZSB0aGF0IGltcGxpY2l0bHkgY29udmVydHMgdG8gVCogYW5kIGJhY2sg
dG8gR1JlZlB0cjxUPgo8ZGFuaWVsaz4gaG93ZXZlciwgdGhlIG1vcmUgZGFuZ2Vyb3VzIGJpdCBp
cyBhY3R1YWxseSB0aGUgaW1wbGljaXQgY29udmVyc2lvbiBkb25lIGJ5IHRoZSBub24tZXhwbGlj
aXQgY29uc3RydWN0b3IsIHdoaWNoIEkgYWxyZWFkeSBtZW50aW9uZWQKPGRhbmllbGs+IGRlZmlu
aXRlbHkgZ2V0IHJpZCBvZiB0aGF0LCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgdGhlIGN0b3IgdGFr
ZXMgb3duZXJzaGlwCjxkZXNjZW5kZXI+IGdldCgpIGlzIGNvbW1vbiBlbm91Z2gsIGJvb3N0IHNo
YXJlZCBwb2ludGVycyB1c2VzIGdldCgpIGFzIHdlbGwKPGRhbmllbGs+IHllcywgb2YgY291cnNl
IGdldCgpIGlzIGNvbW1vbiA6KQo8ZGFuaWVsaz4gSSB1c2UgaXQgZm9yIG15IHNtYXJ0IHBvaW50
ZXJzIGFzIHdlbGwKPGRhbmllbGs+IGhvd2V2ZXIsIGluIHRoaXMgY2FzZSBpdCBpcyBkZWJhdGFi
bGUuLi4gSSdkIHN0aWxsIHByZWZlciBnZXQoKSBvdmVyIHRoZSBpbXBsaWNpdCBjb252ZXJzaW9u
LCBidXQgaXQgaXMgbm90IGFzIGRhbmdlcm91cyBhcyBzYXkgYW4gaW1wbGljaXQgc3RkOjpzdHJp
bmc6OmNfc3RyKCkgd291bGQgYmUKPGRlc2NlbmRlcj4geWVhaCB0aGF0IGlzIHRydWUKPGRlc2Nl
bmRlcj4gYWx0aG91Z2ggb25lIHdvbmRlcnMgc2hhcmVkX3B0cjxjaGFyPgo8ZGFuaWVsaz4gYmVj
YXVzZSBldmVuIGluIEMgY29udGV4dCwgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgc2hhcmVkIGFuZCBy
ZWZlcmVuY2UgY291bnRlZAo8ZGFuaWVsaz4gd2VsbCwgc2hhcmVkX3B0cjxjaGFyPiB3b3VsZCBi
ZSBkYW5nZXJvdXMgaWYgaXQgd291bGQgc3VwcG9ydCBhcnJheXMgOikKPGRhbmllbGs+IGFuZCBo
YWQgdGhlIGltcGxpY2l0IGNvbnZlcnNpb24KPGRhbmllbGs+IGJlY2F1c2UgaXQgcmVmZXJzIHRv
IGEgcmVzb3VyY2UgdGhhdCBjb3VsZCBnbyBvdXQgb2Ygc2NvcGUgdG9nZXRoZXIgd2l0aCB0aGUg
c2hhcmVkX3B0cgo8ZGFuaWVsaz4gYWN0dWFsbHksIHRoYXQncyB0aGUgY2FzZSBoZXJlIGFzIHdl
bGwKKiBkZXNjZW5kZXIgYWxzbyBsaWtlcyB0aGUgV1RGIG5hbWVzcGFjZSAKPGRhbmllbGs+IGlu
IGFueSBjYXNlLCB0aGUgY3VycmVudCBpbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gVCogdG8gR1Jl
ZlB0cjxUPiBpcyBmYXIgbW9yZSBkYW5nZXJvdXMgdGhhbiBhbiBpbXBsaWNpdCBjb252ZXJzaW9u
IHRvIFQqIHdvdWxkIGJlCjxkYW5pZWxrPiBkZWZpbml0ZWx5IG1ha2UgdGhhdCBleHBsaWNpdAo8
ZGFuaWVsaz4gYW5kIHRoZSB0YWcgZW51bSBjdG9yIEkgcHJvcG9zZWQgd291bGQgd29yayBsaWtl
IHRoaXM6CjxkYW5pZWxrPiBlbnVtIFRha2VPd25lcnNoaXAgeyBUQUtFX09XTkVSU0hJUCB9Owo8
ZGFuaWVsaz4gZXhwbGljaXQgR1JlZlB0cihUKik7CjxkYW5pZWxrPiBHUmVmUHRyKFQqLCBUYWtl
T3duZXJzaGlwKTsKPGRhbmllbGs+IHRoZSBvbmUgYXJndW1lbnQgY3RvciB3b3VsZCBjYWxsIGdf
b2JqZWN0X3JlZigpCjxkYW5pZWxrPiB0aGUgb3ZlcmxvYWRlZCBvbmUgd291bGQgbm90CjxkZXNj
ZW5kZXI+IEkgZG8gdGhpbmsgbWFraW5nIGdldCgpIGV4cGxpY2l0IGlzIGdvb2Q7IEkgY2FuJ3Qg
Y2l0ZSBvZmZoYW5kIGV4YW1wbGVzIG9mIGhvdyBhbiBpbXBsaWNpdCB2ZXJzaW9uIGNvdWxkIGdv
IGF3cnksIHNvIEknZCBqdXN0IHNheSBteSBzcGlkZXkgc2Vuc2UgdGVsbHMgbWUgc28KPGRhbmll
bGs+IHRoZSBhcmd1bWVudCBpcyBhIGR1bW15IHRvIGRpZmZlcmVudGlhdGUgdGhlIGN0b3JzCjxk
YW5pZWxrPiBkZXNjZW5kZXI6IGl0IGRlcGVuZHMgOikKPGRlc2NlbmRlcj4gbWF5YmUgdGhlIGdl
bmVyYWwgcnVsZSBpZiB5b3UgZG9uJ3Qga25vdyBiZXR0ZXIsIGl0J3Mgd29ydGggZm9sbG93aW5n
IEJvb3N0J3MgZGVzaWduIGRlY2lzaW9uCjxkYW5pZWxrPiB0aGUgcHJvYmxlbSBhcmUgc2l0dWF0
aW9ucyB3aGVyZSB5b3UgaGF2ZSB0ZW1wb3JhcmllcyB0aGF0IHZhbmlzaCBpbW1lZGlhdGVseSBh
ZnRlciB0aGUgZGVyZWZlcmVuY2UKPGRhbmllbGs+IGluIGFueSBjYXNlLCBJIHRoaW5rIENvbXBh
bnkgaGFzIGVub3VnaCBmb2RkZXIgdG8gcHJvY2VzcyBub3cgOikKPGRlc2NlbmRlcj4gSSdtIHRv
byBsYXp5IHRvIHdoaXAgb3V0IG15IE1vcmUgRWZmZWN0aXZlIEMrKyBib29rLCBJJ20gc3VyZSBp
dCBoYXMgc29tZXRoaW5nIHRvIHNheSBvbiB0aGlzIGluIHRoZSBzbWFydCBwb2ludGVyIGNoYXB0
ZXIKPGRhbmllbGs+IEkgd291bGQgYmV0IG9uIGl0CjxkZXNjZW5kZXI+IGl0IGp1c3Qga2luZGEg
c2VlbXMgdG8gbWUgdGhhdCBhIHdyYXBwZXIgbGlrZSBhIHNtYXJ0IHBvaW50ZXIgY2xhc3Mgc2hv
dWxkIG1ha2Ugc3VjaCBjb252ZXJzaW9ucyBleHBsaWNpdCwgYmVjYXVzZSBpdCdzIG1hZGUgdG8g
bWFrZSB0aGluZ3Mgc2FmZSAtIHRvIG1vdmUgb3V0IG9mICdzYWZlIG1vZGUnIHNob3VsZCByZXF1
aXJlIGV4cGxpY2l0bmVzcyBvbiB0aGUgcGFydCBvZiB0aGUgdXNlcgo8ZGFuaWVsaz4gaXQgY2Fu
IGJlIHNhaWQgaW4gbW9yZSBzcGVjaWZpYyB0ZXJtcyA6KQo8ZGFuaWVsaz4gYXMgSSBzYWlkLCB0
aGUgdHJvdWJsZSBzdGFydHMgaWYgeW91IGhhdmUgdGVtcG9yYXJpZXMKPGRlc2NlbmRlcj4gaG93
IHNvPwo8ZGVzY2VuZGVyPiBvaC4uIEdSZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyB9IDwt
IHRoaXMgaXMgYmFkCjxkYW5pZWxrPiB5ZXMsIEkgc2FpZCBzbyBhbHJlYWR5IDopCjxkYW5pZWxr
PiBpdCdzIHdvcnNlIHRoYW4gdGhlIHByb3Bvc2VkIGNvbnZlcnNpb24KPGRlc2NlbmRlcj4gcGFy
ZG9uIG1lLCBJIGRpZG4ndCBsb29rIGF0IHRoZSB3YWxsIG9mIHRleHQgdG9vIGNsb3NlbHkgOnAK
PGRhbmllbGs+IGFoIG9rIDopCjxkYW5pZWxrPiBhbnl3YXksIGltYWdpbmU6CjxkYW5pZWxrPiBz
dGQ6OnN0cmluZyBzb21lX2Z1bmMoKTsKPGRhbmllbGs+IGNvbnN0IGNoYXIqIGZvbyA9IHNvbWVf
ZnVuYygpOwo8ZGFuaWVsaz4gdGhhdCB3b3VsZCBjb21waWxlIGlmIGNfc3RyKCkgd2VyZSBpbXBs
aWNpdAo8ZGVzY2VuZGVyPiAoZG9uJ3QgbWluZCBtZSBpZiBJJ20gc2xvdyBhdCBhYnNvcmJpbmcg
cmlnaHQgbm93LCB0b28gbXVjaCBKYXZhIGNvZGluZyByZWNlbnRseSkKPGRhbmllbGs+IG9oLCBK
YXZhIGRlc3Ryb3lzIGNvZGVyIGJyYWlucyA6KQo8ZGFuaWVsaz4gYnV0IEkgdGhpbmsgeW91IGNh
biBzZWUgdGhlIHByb2JsZW0gaW4gdGhlIHR3byBsaW5lcyBhYm92ZSA6KQo8ZGVzY2VuZGVyPiBv
aCBJIGtub3cgYWJvdXQgdGhlIHN0cmluZyBwcm9ibGVtCjxkYW5pZWxrPiBpdCdzIHRoZSBiYXNp
YyB1bmRlcmx5aW5nIHByb2JsZW0KPGRlc2NlbmRlcj4gaXQncyBsaWtlIHRoZSBwb3N0ZXIgY2hp
bGQgb2Ygd2h5IGltcGxpY2l0IGNvbnZlcnNpb24gY2FuIGJlIGJhZAo8ZGFuaWVsaz4gaW4gdGhl
IEdSZWZQdHI8PiBjYXNlLCBpdCBtYXkgYmUgbm90IHRoYXQgZGFuZ2Vyb3VzIGluIHByYWN0aWNl
CjxkYW5pZWxrPiBidXQgdGhlIHVuZGVybHlpbmcgcHJvYmxlbSBpcyB0aGUgc2FtZQo8ZGVzY2Vu
ZGVyPiB5ZWFoCjxkZXNjZW5kZXI+IGlzIHRoaXMgR1JlZlB0cjw+IG1lYW50IHRvIHdyYXAgYW55
dGhuaWc/CjxkYW5pZWxrPiB3ZWxsIHllYWgsIEdPYmplY3QgcG9pbnRlcnMgOikKPGRlc2NlbmRl
cj4gSSBtZWFudCwgaXMgaXQgbWVhbnQgdG8gd3JhcCBhbnkgdHlwZSB5b3UgdGhyb3cgYXQgaXQ/
CjxkYW5pZWxrPiBubywgaXQganVzdCBkb2VzIHRoZSByZWZjb3VudGluZyBmb3IgR09iamVjdCBp
bnN0YW5jZXMKPGRlc2NlbmRlcj4gaG1tLCB0aGUgZnJlZSBmdW5jdGlvbnMgcmVmUHRyIGFuZCBk
ZXJlZlB0ciB0ZWxscyBtZSBvdGhlcndpc2UKPGRhbmllbGs+IGFzayBDb21wYW55IDopCjxkYW5p
ZWxrPiAob2J2aW91c2x5LCBHT2JqZWN0IGluc3RhbmNlcyBpbmNsdWRlcyBpbnN0YW5jZXMgb2Yg
ZGVyaXZlZCB0eXBlcykKPGRlc2NlbmRlcj4gQ29tcGFueSwgaXMgR1JlZlB0cjw+IG1lYW50IHRv
IHdyYXAgYW55IHR5cGUgeW91IHRocm93IGF0IGl0LCBtdWNoIGxpa2UgYm9vc3Q6OnNoYXJlZF9w
dHI8Pj8KPGRlc2NlbmRlcj4gYWN0dWFsbHkgdGhpcyBvbmUgaXMgbW9yZSBsaWtlIGJvb3N0Ojpp
bnRydXNpdmVfcHRyCjxkYW5pZWxrPiBleGFjdGx5CjxDb21wYW55PiBvdWNoCjxkYW5pZWxrPiBv
ciBVdGlsOjpTaGFyZWRQdHI8PiBpbiByZWdleHhlcgo8Q29tcGFueT4gbG90cyBvZiBiYWNrbG9n
CjxkYW5pZWxrPiB5ZXMsIGZvZGRlciBmb3IgeW91ciBicmFpbiA6KQo8Q29tcGFueT4gbW9zdCBv
ZiB0aGUgc3R1ZmYgaXMgdG8gbWF0Y2ggd2hhdCB3ZWJjb3JlcyB0ZW1wbGF0ZSBmcmFtZXdvcmsg
ZG9lcyB3aXRoIGl0cyBSZWZQdHIKPGRhbmllbGs+ICJhc2ssIGFuZCB5ZSBzaGFsbCBiZSBnaXZl
biIgOikKPENvbXBhbnk+IHNvIGNsZWFyIHZzIHJlc2V0IGV0YyBhcmUgYWxyZWFkeSBnaXZlbgo8
ZGFuaWVsaz4gZWVlawo8ZGFuaWVsaz4gaXQgaXMgYmFkIGVub3VnaCB3ZSBtYWRlIHRoYXQgbWlz
dGFrZSBpbiBnbGlibW0KPENvbXBhbnk+IGZlZWwgZnJlZSB0byB3cml0ZSBhIHBhdGNoIHRvIHdl
YmtpdCBhbmQgc2VlIGlmIHlvdSBnZXQgdGhyb3VnaCB3aXRoIGl0IDpwCjxkYW5pZWxrPiBhbnl3
YXksIHlvdSBtYXkgd2FudCB0byBwcmVzZW50IHRoZSBiYWNrbG9nIHRvIHRoZSBXZWJraXQgZ3V5
cwo8ZGVzY2VuZGVyPiBJIHRoaW5rIHRoYXQncyBhIGJpdCB0b28gdGhpY2sgdG8gcGFyc2UKPGRl
c2NlbmRlcj4gSSBzdWdnZXN0IGNvcHlpbmcgdGhlIHNvdXJjZSBvZiBpbnRydXNpdmVfcHRyIGZy
b20gYm9vc3QsIGRvIGEgZmV3IHJlbmFtZXMgYW5kIHVzZSBpdCA6RAo8ZGVzY2VuZGVyPiBoZWNr
IHRoaXMgb25lIGxvb2tzIGFsbW9zdCBsaWtlIGl0CjxkYW5pZWxrPiB3ZWxsLCB0aGUgdGhpY2sg
YmFja2xvZyBleHBsYWlucyB0aGUgd2h5cwo8Q29tcGFueT4gaSB3b25kZXIgaG93IHRvIG1ha2Ug
eW91IHdyaXRlIHRoYXQgc3VtbWFyeSBpbnRvIHRoZSBidWcgcmVwb3J0CjxkZXNjZW5kZXI+IENv
bXBhbnksIGVzc2VudGlhbGx5IGl0IHBvaW50cyBkb3duIHRvIHRoaXM6CjxkZXNjZW5kZXI+IHRo
ZSBjb25zdHJ1Y3RvciBSZWZQdHIoVCopIG11c3QgYmUgbWFkZSBleHBsaWNpdCB0byBhdm9pZCB1
bmludGVudGlvbmFsIGNvbnZlcnNpb25zCjxkZXNjZW5kZXI+IGdldCgpIHNob3VsZCByZW1haW4s
IGZvciB0aGUgc2FtZSByZWFzb24gKHRob3VnaCBtdWNoIHdlYWtlcikKPGRhbmllbGs+IGFuZCB0
aGUgaW1wbGljaXQgYXNzaWdubWVudCBtdXN0IGdvIGFzIHdlbGwKPGRlc2NlbmRlcj4gcy9wb2lu
dHMvYm9pbHMvCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44540</attachid>
            <date>2009-12-09 08:34:36 -0800</date>
            <delta_ts>2009-12-16 04:42:37 -0800</delta_ts>
            <desc>Updated patch with style fixes</desc>
            <filename>0001-Initial-GRefPtr-implementation.patch</filename>
            <type>text/plain</type>
            <size>19874</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA0ZmM0MTYzYmQzMGYxMGJmMzRmMWM4YjRhMTQ1Yjk2YWU3YzY1MzBjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IEZyaSwgNCBEZWMgMjAwOSAwMDoxMzowNCAtMDgwMApTdWJqZWN0
OiBbUEFUQ0hdIEluaXRpYWwgR1JlZlB0ciBpbXBsZW1lbnRhdGlvbi4KCi0tLQogSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsrKysKIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwICAgICAgICAgICAgICAgICB8ICAg
IDcgLQogSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HUmVmUHRyLmggICAgICAgICAgICAgICAgICAg
fCAgMTk0ICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9wbGF0Zm9ybS9Q
b3B1cE1lbnUuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCAgICAgICAgICAgICAgICB8ICAgNTQgKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggICAgICAgICAgICAgICAgICB8ICAgMzkgKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCAgICAgICAgICAgICAgfCAg
IDI3ICsrLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAxMiArKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAgfCAgICAzICstCiAxMiBmaWxlcyBjaGFuZ2VkLCAzNzggaW5zZXJ0aW9ucygrKSwg
MjQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvd3RmL2d0
ay9HUmVmUHRyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQ
dHJHdGsuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCA1YTZlM2ViLi4yMWIyNDI2IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMDktMTItMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5y
b2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBuZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3Vu
dGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAgICAgIEltcGxlbWVudCBHUmVmUHRyLCBhIHNt
YXJ0IHBvaW50ZXIgZm9yIHJlZmVyZW5jZSBjb3VudGVkIEdPYmplY3QgdHlwZXMuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiB3dGYvZ3RrL0dPd25QdHIuY3BwOgorICAg
ICAgICAoV1RGOjpHRGlyKToKKyAgICAgICAgKiB3dGYvZ3RrL0dSZWZQdHIuaDogQWRkZWQuCisg
ICAgICAgIChXVEY6Oik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OkdSZWZQdHIpOgorICAgICAg
ICAoV1RGOjpHUmVmUHRyOjp+R1JlZlB0cik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OmNsZWFy
KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6Z2V0KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3ItPik6CisgICAgICAg
IChXVEY6OkdSZWZQdHI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Om9wZXJh
dG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpoYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6Ojpzd2FwKToKKyAgICAgICAgKFdURjo6c3dhcCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6c3RhdGljX3Bv
aW50ZXJfY2FzdCk6CisgICAgICAgIChXVEY6OmNvbnN0X3BvaW50ZXJfY2FzdCk6CisgICAgICAg
IChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6
OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorCiAyMDA5LTEyLTA4ICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRiYTMwNWEuLjU2MGMwYTAgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC0yODgsNiArMjg4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRyYWl0cy5oIFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25Q
dHIuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HUmVmUHRyLmggXAogCUphdmFTY3JpcHRD
b3JlL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9ndGsv
VGhyZWFkaW5nR3RrLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ29sbGF0b3Iu
aCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwIGIvSmF2
YVNjcmlwdENvcmUvd3RmL2d0ay9HT3duUHRyLmNwcAppbmRleCA4OTk5OTYyLi4xYTE1MWI5IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9ndGsvR093blB0ci5jcHAKQEAgLTU3LDExICs1Nyw0IEBAIHRlbXBsYXRl
IDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGlyPihHRGlyKiBwdHIpCiAgICAgaWYgKHB0cikKICAg
ICAgICAgZ19kaXJfY2xvc2UocHRyKTsKIH0KLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRH
UHRyPEdIYXNoVGFibGU+KEdIYXNoVGFibGUqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAg
ICBnX2hhc2hfdGFibGVfdW5yZWYocHRyKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dSZWZQdHIuaCBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9ndGsvR1JlZlB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3
NDUzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dSZWZQdHIu
aApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9i
aW5zb24KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV1RGX0dSZWZQdHJfaAorI2RlZmluZSBXVEZf
R1JlZlB0cl9oCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSAiQWx3YXlzSW5saW5l
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIEdSZWZQdHJBZG9wdFR5cGUgeyBHUmVmUHRy
QWRvcHQgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiByZWZHUHRyKFQqKTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZXJlZkdQdHIoVCopOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEdSZWZQdHI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gR1Jl
ZlB0cjxUPiBhZG9wdEdSZWYoVCopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR1Jl
ZlB0ciB7CitwdWJsaWM6CisgICAgR1JlZlB0cigpIDogbV9wdHIoMCkgeyB9CisgICAgR1JlZlB0
cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHJlZkdQdHIocHRyKTsgfQorICAgIEdS
ZWZQdHIoY29uc3QgR1JlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBwdHIgPSBt
X3B0cikgcmVmR1B0cihwdHIpOyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IEdSZWZQdHIo
Y29uc3QgR1JlZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7IGlmIChUKiBwdHIgPSBtX3B0
cikgcmVmR1B0cihwdHIpOyB9CisKKyAgICB+R1JlZlB0cigpIHsgaWYgKFQqIHB0ciA9IG1fcHRy
KSBkZXJlZkdQdHIocHRyKTsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBp
ZiAoVCogcHRyID0gbV9wdHIpCisgICAgICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICAgICAg
bV9wdHIgPSAwOworICAgIH0KKworICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9
CisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CisgICAgQUxXQVlT
X0lOTElORSBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKworICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CisKKyAgICAvLyBUaGlzIGNv
bnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQg
bm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBUKiBHUmVmUHRyOjoqVW5z
cGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9wdHIgPyAmR1JlZlB0cjo6bV9wdHIgOiAwOyB9CisKKyAgICBHUmVmUHRy
JiBvcGVyYXRvcj0oY29uc3QgR1JlZlB0ciYpOworICAgIEdSZWZQdHImIG9wZXJhdG9yPShUKik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IEdSZWZQdHImIG9wZXJhdG9yPShjb25zdCBHUmVm
UHRyPFU+Jik7CisKKyAgICB2b2lkIHN3YXAoR1JlZlB0ciYpOworICAgIGZyaWVuZCBHUmVmUHRy
IGFkb3B0R1JlZjxUPihUKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFQqIGhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQorICAgIC8v
IEFkb3B0aW5nIGNvbnN0cnVjdG9yLgorICAgIEdSZWZQdHIoVCogcHRyLCBHUmVmUHRyQWRvcHRU
eXBlKSA6IG1fcHRyKHB0cikge30KKworICAgIFQqIG1fcHRyOworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3Qg
R1JlZlB0cjxUPiYgbykKK3sKKyAgICBUKiBvcHRyID0gby5nZXQoKTsKKyAgICBpZiAob3B0cikK
KyAgICAgICAgcmVmR1B0cihvcHRyKTsKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBtX3B0ciA9
IG9wdHI7CisgICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZHUHRyKHB0cik7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+
IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgR1JlZlB0cjxV
PiYgbykKK3sKKyAgICBUKiBvcHRyID0gby5nZXQoKTsKKyAgICBpZiAob3B0cikKKyAgICAgICAg
cmVmR1B0cihvcHRyKTsKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBtX3B0ciA9IG9wdHI7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZHUHRyKHB0cik7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQdHI8VD46
Om9wZXJhdG9yPShUKiBvcHRyKQoreworICAgIFQqIHB0ciA9IG1fcHRyOworICAgIG1fcHRyID0g
b3B0cjsKKyAgICBpZiAocHRyKQorICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBHUmVmUHRyPFQ+Ojpz
d2FwKEdSZWZQdHI8VD4mIG8pCit7CisgICAgc3RkOjpzd2FwKG1fcHRyLCBvLm1fcHRyKTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3YXAoR1JlZlB0cjxUPiYgYSwgR1Jl
ZlB0cjxUPiYgYikKK3sKKyAgICBhLnN3YXAoYik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdSZWZQdHI8VD4mIGEs
IGNvbnN0IEdSZWZQdHI8VT4mIGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgVSogYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSA9
PSBiOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShUKiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQoreworICAgIHJldHVybiBhID09
IGIuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEdSZWZQdHI8VD4mIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIp
Cit7CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR1JlZlB0cjxU
PiYgYSwgVSogYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSBiOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBhLCBjb25z
dCBHUmVmUHRyPFU+JiBiKQoreworICAgIHJldHVybiBhICE9IGIuZ2V0KCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgR1JlZlB0cjxUPiBzdGF0aWNfcG9p
bnRlcl9jYXN0KGNvbnN0IEdSZWZQdHI8VT4mIHApCit7CisgICAgcmV0dXJuIEdSZWZQdHI8VD4o
c3RhdGljX2Nhc3Q8VCo+KHAuZ2V0KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChjb25zdCBHUmVm
UHRyPFU+JiBwKQoreworICAgIHJldHVybiBHUmVmUHRyPFQ+KGNvbnN0X2Nhc3Q8VCo+KHAuZ2V0
KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoY29uc3Qg
R1JlZlB0cjxUPiYgcCkKK3sKKyAgICByZXR1cm4gcC5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IEdSZWZQdHI8VD4gYWRvcHRHUmVmKFQqIHApCit7CisgICAgcmV0dXJuIEdSZWZQ
dHI8VD4ocCwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUKiByZWZHUHRyKFQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9y
ZWZfc2luayhwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBkZXJlZkdQdHIoVCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OkdSZWZQdHI7Cit1c2luZyBXVEY6OnJlZkdQdHI7Cit1c2luZyBXVEY6OmRlcmVmR1B0cjsK
K3VzaW5nIFdURjo6YWRvcHRHUmVmOwordXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0Owor
dXNpbmcgV1RGOjpjb25zdF9wb2ludGVyX2Nhc3Q7CisKKyNlbmRpZiAvLyBXVEZfR1JlZlB0cl9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGM5MjU3ODAuLjg5MDQwNGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTItMDkgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBuZWVkcyBh
IHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAgICAgIEFk
ZCBHUmVmUHRyIHN1cHBvcnQgZm9yIEdUSyB0eXBlcyB0byBXZWJDb3JlLCBhcyBKU0MgZG9lcyBu
b3QgbGluayBhZ2FpbnN0CisgICAgICAgIEdUSysuIEFsc28gY29udmVydCBQb3B1cE1lbnU6Om1f
cG91cCBmcm9tIGEgcmF3IHBvaW50ZXIgdG8gYSBHUmVmUHRyLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBhcyBmdW5jdGlvbmFsaXR5IGhhcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnJlZkdQdHIp
OgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpQb3B1cE1lbnUpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9wdXBNZW51Ojp+UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVu
dTo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UG9wdXBNZW51OjptZW51UmVtb3ZlSXRlbSk6CisKIDIwMDktMTItMDkgIE9saXZl
ciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXgKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDYyNzhlMzUuLjlkZTkwMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTk3NSw2ICsxOTc1LDggQEAgd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5j
cHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51LmgKaW5kZXggMjMxNWYwMi4uZGY2MGY1NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1BvcHVw
TWVudS5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgc3Ry
dWN0IF9HdGtNZW51IEd0a01lbnU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrTWVudUl0ZW0gR3RrTWVu
dUl0ZW07CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKyNpbmNsdWRlICJH
UmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxnbGliLmg+
CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTE3NSw3ICsxNzYsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zaG93UG9wdXA7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgSW50UG9pbnQgbV9tZW51
UG9zaXRpb247Ci0gICAgR3RrTWVudSogbV9wb3B1cDsKKyAgICBHUmVmUHRyPEd0a01lbnU+IG1f
cG9wdXA7CiAgICAgSGFzaE1hcDxHdGtXaWRnZXQqLCBpbnQ+IG1faW5kZXhNYXA7CiAgICAgc3Rh
dGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrTWVudUl0ZW0qIGl0ZW0sIFBvcHVwTWVudSop
OwogICAgIHN0YXRpYyB2b2lkIG1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUqKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjY0N2I5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNv
bgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0
KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBn
dGtfdGFyZ2V0X2xpc3RfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHZGtD
dXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBn
ZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dSZWZQdHJHdGsuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk0MWY1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJHdGtf
aAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2luY2x1ZGUgIkdSZWZQdHIuaCIKKwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgR3RrVGFyZ2V0TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9H
ZGtDdXJzb3IgR2RrQ3Vyc29yOworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3Rr
VGFyZ2V0TGlzdCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKwordGVtcGxhdGUgPD4gR2RrQ3Vyc29y
KiByZWZHUHRyKEdka0N1cnNvciogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdk
a0N1cnNvciogcHRyKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuY3BwCmluZGV4IDNmNmIwMmEuLmM1MzNkNGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBN
ZW51R3RrLmNwcApAQCAtMzUsMTYgKzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUG9w
dXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BvcHVw
Q2xpZW50KGNsaWVudCkKLSAgICAsIG1fcG9wdXAoMCkKIHsKIH0KIAogUG9wdXBNZW51Ojp+UG9w
dXBNZW51KCkKIHsKICAgICBpZiAobV9wb3B1cCkgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV9wb3B1cCwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3BvcHVwLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
ICAgICAgICAgaGlkZSgpOwotICAgICAgICBnX29iamVjdF91bnJlZihtX3BvcHVwKTsKICAgICB9
CiB9CiAKQEAgLTU0LDEwICs1Miw5IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogCiAgICAgaWYgKCFtX3BvcHVw
KSB7CiAgICAgICAgIG1fcG9wdXAgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci0gICAgICAg
IGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKG1fcG9wdXApKTsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3BvcHVwLCAidW5tYXAiLCBHX0NBTExCQUNLKG1lbnVVbm1hcHBlZCksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJ1bm1hcCIsIEdfQ0FM
TEJBQ0sobWVudVVubWFwcGVkKSwgdGhpcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGd0a19jb250
YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXApLCByZWludGVycHJldF9jYXN0PEd0
a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMpOworICAgICAgICBndGtfY29udGFpbmVy
X2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxH
dGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKIAogICAgIGludCB4LCB5OwogICAg
IGdka193aW5kb3dfZ2V0X29yaWdpbihHVEtfV0lER0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCkpLT53aW5kb3csICZ4LCAmeSk7CkBAIC03OCwyMCArNzUsMjAgQEAg
dm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3
LCBpbnQgaW5kZXgpCiAKICAgICAgICAgLy8gRklYTUU6IEFwcGx5IHRoZSBQb3B1cE1lbnVTdHls
ZSBmcm9tIGNsaWVudCgpLT5pdGVtU3R5bGUoaSkKICAgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKGl0ZW0sIGNsaWVudCgpLT5pdGVtSXNFbmFibGVkKGkpKTsKLSAgICAgICAgZ3RrX21l
bnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXApLCBpdGVtKTsKKyAgICAgICAg
Z3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBpdGVt
KTsKICAgICAgICAgZ3RrX3dpZGdldF9zaG93KGl0ZW0pOwogICAgIH0KIAotICAgIGd0a19tZW51
X3NldF9hY3RpdmUobV9wb3B1cCwgaW5kZXgpOworICAgIGd0a19tZW51X3NldF9hY3RpdmUobV9w
b3B1cC5nZXQoKSwgaW5kZXgpOwogCiAKICAgICAvLyBUaGUgc2l6ZSBjYWxscyBhcmUgZGlyZWN0
bHkgY29waWVkIGZyb20gZ3RrY29tYm9ib3guYyB3aGljaCBpcyBMR1BMCiAgICAgR3RrUmVxdWlz
aXRpb24gcmVxdWlzaXRpb247Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19X
SURHRVQobV9wb3B1cCksIC0xLCAtMSk7Ci0gICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RL
X1dJREdFVChtX3BvcHVwKSwgJnJlcXVpc2l0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXpl
X3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwKSwgTUFYKHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRp
b24ud2lkdGgpLCAtMSk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURH
RVQobV9wb3B1cC5nZXQoKSksIC0xLCAtMSk7CisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3Qo
R1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgJnJlcXVpc2l0aW9uKTsKKyAgICBndGtfd2lkZ2V0
X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgTUFYKHJlY3Qud2lk
dGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7CiAKLSAgICBHTGlzdCogY2hpbGRyZW4gPSBH
VEtfTUVOVV9TSEVMTChtX3BvcHVwKS0+Y2hpbGRyZW47CisgICAgR0xpc3QqIGNoaWxkcmVuID0g
R1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSktPmNoaWxkcmVuOwogICAgIGlmIChzaXplKQog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgaWYg
KGkgPiBpbmRleCkKQEAgLTEwOCwxMyArMTA1LDEzIEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNv
bnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQogICAgICAgICAv
LyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBhcmVh
CiAgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gcmVjdC5o
ZWlnaHQoKSAvIDIpOwogCi0gICAgZ3RrX21lbnVfcG9wdXAobV9wb3B1cCwgTlVMTCwgTlVMTCwg
cmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlv
biksIHRoaXMsIDAsIGd0a19nZXRfY3VycmVudF9ldmVudF90aW1lKCkpOworICAgIGd0a19tZW51
X3BvcHVwKG1fcG9wdXAuZ2V0KCksIE5VTEwsIE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVu
dVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0X2N1
cnJlbnRfZXZlbnRfdGltZSgpKTsKIH0KIAogdm9pZCBQb3B1cE1lbnU6OmhpZGUoKQogewogICAg
IEFTU0VSVChtX3BvcHVwKTsKLSAgICBndGtfbWVudV9wb3Bkb3duKG1fcG9wdXApOworICAgIGd0
a19tZW51X3BvcGRvd24obV9wb3B1cC5nZXQoKSk7CiB9CiAKIHZvaWQgUG9wdXBNZW51Ojp1cGRh
dGVGcm9tRWxlbWVudCgpCkBAIC0xNTAsNyArMTQ3LDcgQEAgdm9pZCBQb3B1cE1lbnU6Om1lbnVQ
b3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVz
aEkKIHZvaWQgUG9wdXBNZW51OjptZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqIHdpZGdldCwgUG9w
dXBNZW51KiB0aGF0KQogewogICAgIEFTU0VSVCh0aGF0LT5tX3BvcHVwKTsKLSAgICBndGtfY29u
dGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXApLCB3aWRnZXQpOworICAg
IGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIodGhhdC0+bV9wb3B1cC5nZXQoKSks
IHdpZGdldCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZGZhYzkzNC4uMDY0MGViMSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAwOS0xMi0wOSAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmluc29u
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVmIGNvdW50ZWQgZ2xp
Yi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgQ29udmVydCBhIHVzZSBvZiBHT3duUHRyIGZvciBh
IHJlZmVyZW5jZSBjb3VudGVkIHR5cGUgdG8gR1JlZlB0ci4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisKIDIwMDktMTItMDggIENocmlzdGlhbiBEeXdh
biAgPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2
byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBmZDEzNWU0Li41OTVhZjU1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgogI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJHUmVmUHRyLmgiCiAjaW5jbHVkZSAi
R3RrUGx1Z2luV2lkZ2V0LmgiCiAjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAgLTQ0MCw3ICs0NDEsNyBAQCBQYXNzUmVmUHRyPFdp
ZGdldD4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVn
aW5TaXplLCBIVAogICAgIENTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSBtaW1lVHlwZS51dGY4KCk7
CiAKICAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsK
LSAgICBHT3duUHRyPEdIYXNoVGFibGU+IGhhc2goZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3Ry
X2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfZnJlZSkpOworICAgIEdSZWZQdHI8R0hhc2hU
YWJsZT4gaGFzaCA9IGFkb3B0R1JlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwg
Z19zdHJfZXF1YWwsIGdfZnJlZSwgZ19mcmVlKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtTmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgZ19oYXNoX3RhYmxlX2luc2Vy
dChoYXNoLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwKHBhcmFt
TmFtZXNbaV0udXRmOCgpLmRhdGEoKSksCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44963</attachid>
            <date>2009-12-16 04:42:37 -0800</date>
            <delta_ts>2009-12-17 07:23:06 -0800</delta_ts>
            <desc>Updated patch with style fixes (rev. 2)</desc>
            <filename>0001-Initial-GRefPtr-implementation.patch</filename>
            <type>text/plain</type>
            <size>20196</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA0MGM4NjA5YmMzOWY4MGJhMDYyYjYxMjRiOGNmYjUwNDE3NmQwYTI3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IEZyaSwgNCBEZWMgMjAwOSAwMDoxMzowNCAtMDgwMApTdWJqZWN0
OiBbUEFUQ0hdIEluaXRpYWwgR1JlZlB0ciBpbXBsZW1lbnRhdGlvbi4KCi0tLQogSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsrKysKIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwICAgICAgICAgICAgICAgICB8ICAg
IDcgLQogSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HUmVmUHRyLmggICAgICAgICAgICAgICAgICAg
fCAgMTk0ICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9wbGF0Zm9ybS9Q
b3B1cE1lbnUuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCAgICAgICAgICAgICAgICB8ICAgNTQgKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggICAgICAgICAgICAgICAgICB8ICAgMzkgKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCAgICAgICAgICAgICAgfCAg
IDM0ICsrLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAxMiArKwogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAgfCAgICAzICstCiAxMiBmaWxlcyBjaGFuZ2VkLCAzODEgaW5zZXJ0aW9ucygrKSwg
MjggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvd3RmL2d0
ay9HUmVmUHRyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQ
dHJHdGsuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCA4MjgyZjgyLi5kYWFjNDQzIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMDktMTItMTYgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5y
b2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBuZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3Vu
dGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAgICAgIEltcGxlbWVudCBHUmVmUHRyLCBhIHNt
YXJ0IHBvaW50ZXIgZm9yIHJlZmVyZW5jZSBjb3VudGVkIEdPYmplY3QgdHlwZXMuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiB3dGYvZ3RrL0dPd25QdHIuY3BwOgorICAg
ICAgICAoV1RGOjpHRGlyKToKKyAgICAgICAgKiB3dGYvZ3RrL0dSZWZQdHIuaDogQWRkZWQuCisg
ICAgICAgIChXVEY6Oik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OkdSZWZQdHIpOgorICAgICAg
ICAoV1RGOjpHUmVmUHRyOjp+R1JlZlB0cik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6OmNsZWFy
KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6Z2V0KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3ItPik6CisgICAgICAg
IChXVEY6OkdSZWZQdHI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Om9wZXJh
dG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpoYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6Ojpzd2FwKToKKyAgICAgICAgKFdURjo6c3dhcCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6c3RhdGljX3Bv
aW50ZXJfY2FzdCk6CisgICAgICAgIChXVEY6OmNvbnN0X3BvaW50ZXJfY2FzdCk6CisgICAgICAg
IChXVEY6OmdldFB0cik6CisgICAgICAgIChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6
OnJlZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorCiAyMDA5LTEyLTE1ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
ICJyPW1lIiBXZWluaWcuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5h
bSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRiYTMwNWEuLjU2MGMwYTAg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yODgsNiArMjg4LDcgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRyYWl0cy5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvZ3Rr
L0dPd25QdHIuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HUmVmUHRyLmggXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi9ndGsvVGhyZWFkaW5nR3RrLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvQ29s
bGF0b3IuaCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HT3duUHRyLmNwcAppbmRleCA4OTk5OTYyLi4xYTE1
MWI5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvR093blB0ci5jcHAKQEAgLTU3LDExICs1Nyw0IEBAIHRl
bXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGlyPihHRGlyKiBwdHIpCiAgICAgaWYgKHB0
cikKICAgICAgICAgZ19kaXJfY2xvc2UocHRyKTsKIH0KLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVl
T3duZWRHUHRyPEdIYXNoVGFibGU+KEdIYXNoVGFibGUqIHB0cikKLXsKLSAgICBpZiAocHRyKQot
ICAgICAgICBnX2hhc2hfdGFibGVfdW5yZWYocHRyKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dSZWZQdHIuaCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjU1OGRkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dS
ZWZQdHIuaApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0
aW4gUm9iaW5zb24KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV1RGX0dSZWZQdHJfaAorI2RlZmlu
ZSBXVEZfR1JlZlB0cl9oCisKKyNpbmNsdWRlICJBbHdheXNJbmxpbmUuaCIKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIEdSZWZQdHJBZG9wdFR5cGUgeyBH
UmVmUHRyQWRvcHQgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiByZWZHUHRy
KFQqKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZXJlZkdQdHIoVCopOwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEdSZWZQdHI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gR1JlZlB0cjxUPiBhZG9wdEdSZWYoVCopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgR1JlZlB0ciB7CitwdWJsaWM6CisgICAgR1JlZlB0cigpIDogbV9wdHIoMCkgeyB9CisgICAg
R1JlZlB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHJlZkdQdHIocHRyKTsgfQor
ICAgIEdSZWZQdHIoY29uc3QgR1JlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBw
dHIgPSBtX3B0cikgcmVmR1B0cihwdHIpOyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IEdS
ZWZQdHIoY29uc3QgR1JlZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7IGlmIChUKiBwdHIg
PSBtX3B0cikgcmVmR1B0cihwdHIpOyB9CisKKyAgICB+R1JlZlB0cigpIHsgaWYgKFQqIHB0ciA9
IG1fcHRyKSBkZXJlZkdQdHIocHRyKTsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBpZiAoVCogcHRyID0gbV9wdHIpCisgICAgICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAg
ICAgICAgbV9wdHIgPSAwOworICAgIH0KKworICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyOyB9CisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CisgICAg
QUxXQVlTX0lOTElORSBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CisKKyAgICAvLyBU
aGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9v
bCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBUKiBHUmVmUHRy
OjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmR1JlZlB0cjo6bV9wdHIgOiAwOyB9CisKKyAgICBH
UmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgR1JlZlB0ciYpOworICAgIEdSZWZQdHImIG9wZXJhdG9y
PShUKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IEdSZWZQdHImIG9wZXJhdG9yPShjb25z
dCBHUmVmUHRyPFU+Jik7CisKKyAgICB2b2lkIHN3YXAoR1JlZlB0ciYpOworICAgIGZyaWVuZCBH
UmVmUHRyIGFkb3B0R1JlZjxUPihUKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFQqIGhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQor
ICAgIC8vIEFkb3B0aW5nIGNvbnN0cnVjdG9yLgorICAgIEdSZWZQdHIoVCogcHRyLCBHUmVmUHRy
QWRvcHRUeXBlKSA6IG1fcHRyKHB0cikge30KKworICAgIFQqIG1fcHRyOworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVmUHRyPFQ+OjpvcGVyYXRvcj0o
Y29uc3QgR1JlZlB0cjxUPiYgbykKK3sKKyAgICBUKiBvcHRyID0gby5nZXQoKTsKKyAgICBpZiAo
b3B0cikKKyAgICAgICAgcmVmR1B0cihvcHRyKTsKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBt
X3B0ciA9IG9wdHI7CisgICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZHUHRyKHB0cik7CisgICAg
cmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVu
YW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+JiBHUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgR1Jl
ZlB0cjxVPiYgbykKK3sKKyAgICBUKiBvcHRyID0gby5nZXQoKTsKKyAgICBpZiAob3B0cikKKyAg
ICAgICAgcmVmR1B0cihvcHRyKTsKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBtX3B0ciA9IG9w
dHI7CisgICAgaWYgKHB0cikKKyAgICAgICAgZGVyZWZHUHRyKHB0cik7CisgICAgcmV0dXJuICp0
aGlzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQ
dHI8VD46Om9wZXJhdG9yPShUKiBvcHRyKQoreworICAgIFQqIHB0ciA9IG1fcHRyOworICAgIG1f
cHRyID0gb3B0cjsKKyAgICBpZiAocHRyKQorICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBHUmVmUHRy
PFQ+Ojpzd2FwKEdSZWZQdHI8VD4mIG8pCit7CisgICAgc3RkOjpzd2FwKG1fcHRyLCBvLm1fcHRy
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3YXAoR1JlZlB0cjxUPiYg
YSwgR1JlZlB0cjxUPiYgYikKK3sKKyAgICBhLnN3YXAoYik7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdSZWZQdHI8
VD4mIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5n
ZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgVSogYikKK3sKKyAgICByZXR1cm4gYS5n
ZXQoKSA9PSBiOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShUKiBhLCBjb25zdCBHUmVmUHRyPFU+JiBiKQoreworICAgIHJldHVy
biBhID09IGIuZ2V0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdSZWZQdHI8VD4mIGEsIGNvbnN0IEdSZWZQdHI8
VT4mIGIpCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR1Jl
ZlB0cjxUPiYgYSwgVSogYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSBiOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBh
LCBjb25zdCBHUmVmUHRyPFU+JiBiKQoreworICAgIHJldHVybiBhICE9IGIuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgR1JlZlB0cjxUPiBzdGF0
aWNfcG9pbnRlcl9jYXN0KGNvbnN0IEdSZWZQdHI8VT4mIHApCit7CisgICAgcmV0dXJuIEdSZWZQ
dHI8VD4oc3RhdGljX2Nhc3Q8VCo+KHAuZ2V0KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChjb25z
dCBHUmVmUHRyPFU+JiBwKQoreworICAgIHJldHVybiBHUmVmUHRyPFQ+KGNvbnN0X2Nhc3Q8VCo+
KHAuZ2V0KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIo
Y29uc3QgR1JlZlB0cjxUPiYgcCkKK3sKKyAgICByZXR1cm4gcC5nZXQoKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IEdSZWZQdHI8VD4gYWRvcHRHUmVmKFQqIHApCit7CisgICAgcmV0dXJu
IEdSZWZQdHI8VD4ocCwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiByZWZHUHRyKFQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29i
amVjdF9yZWZfc2luayhwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBkZXJlZkdQdHIoVCogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkdSZWZQdHI7Cit1c2luZyBXVEY6OnJlZkdQdHI7Cit1c2luZyBXVEY6OmRlcmVm
R1B0cjsKK3VzaW5nIFdURjo6YWRvcHRHUmVmOwordXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9j
YXN0OwordXNpbmcgV1RGOjpjb25zdF9wb2ludGVyX2Nhc3Q7CisKKyNlbmRpZiAvLyBXVEZfR1Jl
ZlB0cl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDI1MjY4MDUuLjQ1MWUxNGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTItMTYgIE1hcnRp
biBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0IEdUSyBu
ZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGdsaWIvZ29iamVjdCBzdHJ1Y3RzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5OQorCisgICAg
ICAgIEFkZCBHUmVmUHRyIHN1cHBvcnQgZm9yIEdUSyB0eXBlcyB0byBXZWJDb3JlLCBhcyBKU0Mg
ZG9lcyBub3QgbGluayBhZ2FpbnN0CisgICAgICAgIEdUSysuIEFsc28gY29udmVydCBQb3B1cE1l
bnU6Om1fcG91cCBmcm9tIGEgcmF3IHBvaW50ZXIgdG8gYSBHUmVmUHRyLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyBmdW5jdGlvbmFsaXR5IGhhcyBub3QgY2hhbmdlZC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnJl
ZkdQdHIpOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9HUmVmUHRyR3RrLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpQb3B1cE1lbnUpOgorICAgICAg
ICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp+UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudTo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjptZW51UmVtb3ZlSXRlbSk6CisKIDIwMDktMTItMTMg
IFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDk3ZjM3MjEuLjIxMzI5ZTQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtMTk4MCw2ICsxOTgwLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9G
aWxlQ2hvb3Nlckd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVn
aW5XaWRnZXQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgKaW5k
ZXggNGM0ZDNkMi4uODY5MjQ3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1l
bnUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCkBAIC00OCw2ICs0OCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgc3RydWN0IF9HdGtNZW51IEd0a01lbnU7CiB0
eXBlZGVmIHN0cnVjdCBfR3RrTWVudUl0ZW0gR3RrTWVudUl0ZW07CiB0eXBlZGVmIHN0cnVjdCBf
R3RrV2lkZ2V0IEd0a1dpZGdldDsKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjZWxpZiBQTEFURk9STShXWCkKQEAg
LTE3Myw3ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG93UG9wdXA7CiAjZWxpZiBQ
TEFURk9STShHVEspCiAgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgR3RrTWVudSog
bV9wb3B1cDsKKyAgICBHUmVmUHRyPEd0a01lbnU+IG1fcG9wdXA7CiAgICAgSGFzaE1hcDxHdGtX
aWRnZXQqLCBpbnQ+IG1faW5kZXhNYXA7CiAgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0
ZWQoR3RrTWVudUl0ZW0qIGl0ZW0sIFBvcHVwTWVudSopOwogICAgIHN0YXRpYyB2b2lkIG1lbnVV
bm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0N2I5OQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIK
KworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3Qq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfcmVmKHB0cik7
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFy
Z2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF91
bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29y
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAg
ICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3Iq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43Nzk0MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR1JlZlB0ckd0ay5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNv
bgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIEdSZWZQdHJHdGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gK
KworI2luY2x1ZGUgIkdSZWZQdHIuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3Qg
R3RrVGFyZ2V0TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9HZGtDdXJzb3IgR2RrQ3Vyc29yOworCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmR1B0cihHdGtU
YXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlz
dCogcHRyKTsKKwordGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRy
KTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCmluZGV4IDNmNmIwMmEuLjAz
NjNhYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApAQCAtMzUsMTYgKzM1
LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBN
ZW51Q2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKLSAgICAsIG1f
cG9wdXAoMCkKIHsKIH0KIAogUG9wdXBNZW51Ojp+UG9wdXBNZW51KCkKIHsKICAgICBpZiAobV9w
b3B1cCkgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9w
b3B1cCwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLmdldCgpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKICAgICAgICAgaGlkZSgpOwotICAgICAg
ICBnX29iamVjdF91bnJlZihtX3BvcHVwKTsKICAgICB9CiB9CiAKQEAgLTU0LDEwICs1Miw5IEBA
IHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmll
dywgaW50IGluZGV4KQogCiAgICAgaWYgKCFtX3BvcHVwKSB7CiAgICAgICAgIG1fcG9wdXAgPSBH
VEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci0gICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JK
RUNUKG1fcG9wdXApKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLCAidW5tYXAi
LCBHX0NBTExCQUNLKG1lbnVVbm1hcHBlZCksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fcG9wdXAuZ2V0KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0sobWVudVVubWFwcGVkKSwgdGhp
cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGd0a19jb250YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJ
TkVSKG1fcG9wdXApLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRl
bSksIHRoaXMpOworICAgICAgICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUiht
X3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0
ZW0pLCB0aGlzKTsKIAogICAgIGludCB4LCB5OwogICAgIGdka193aW5kb3dfZ2V0X29yaWdpbihH
VEtfV0lER0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLT53aW5k
b3csICZ4LCAmeSk7CkBAIC03OCwyMCArNzUsMjAgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29u
c3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAKICAgICAgICAg
Ly8gRklYTUU6IEFwcGx5IHRoZSBQb3B1cE1lbnVTdHlsZSBmcm9tIGNsaWVudCgpLT5pdGVtU3R5
bGUoaSkKICAgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGl0ZW0sIGNsaWVudCgpLT5p
dGVtSXNFbmFibGVkKGkpKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5V
X1NIRUxMKG1fcG9wdXApLCBpdGVtKTsKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdU
S19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBpdGVtKTsKICAgICAgICAgZ3RrX3dpZGdldF9z
aG93KGl0ZW0pOwogICAgIH0KIAotICAgIGd0a19tZW51X3NldF9hY3RpdmUobV9wb3B1cCwgaW5k
ZXgpOworICAgIGd0a19tZW51X3NldF9hY3RpdmUobV9wb3B1cC5nZXQoKSwgaW5kZXgpOwogCiAK
ICAgICAvLyBUaGUgc2l6ZSBjYWxscyBhcmUgZGlyZWN0bHkgY29waWVkIGZyb20gZ3RrY29tYm9i
b3guYyB3aGljaCBpcyBMR1BMCiAgICAgR3RrUmVxdWlzaXRpb24gcmVxdWlzaXRpb247Ci0gICAg
Z3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cCksIC0xLCAtMSk7
Ci0gICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwKSwgJnJlcXVp
c2l0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3Bv
cHVwKSwgTUFYKHJlY3Qud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7CisgICAgZ3Rr
X3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KEdUS19XSURHRVQobV9wb3B1cC5nZXQoKSksIC0xLCAt
MSk7CisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgp
KSwgJnJlcXVpc2l0aW9uKTsKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJ
REdFVChtX3BvcHVwLmdldCgpKSwgc3RkOjptYXgocmVjdC53aWR0aCgpLCByZXF1aXNpdGlvbi53
aWR0aCksIC0xKTsKIAotICAgIEdMaXN0KiBjaGlsZHJlbiA9IEdUS19NRU5VX1NIRUxMKG1fcG9w
dXApLT5jaGlsZHJlbjsKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBHVEtfTUVOVV9TSEVMTChtX3Bv
cHVwLmdldCgpKS0+Y2hpbGRyZW47CiAgICAgaWYgKHNpemUpCiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaSA+IGluZGV4KQpAQCAtMTAz
LDE4ICsxMDAsMTcgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwg
RnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICBtX21lbnVQb3NpdGlvbi5z
ZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5oZWlnaHQpOwogCiAgICAg
ICAgICAgICBjaGlsZHJlbiA9IGdfbGlzdF9uZXh0KGNoaWxkcmVuKTsKLSAgICAgICAgfQotICAg
IGVsc2UKLSAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgdGhlIGVtcHR5IHBvcHVwIGluIHRo
ZSBjb21ibyBib3ggYXJlYQotICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0
aW9uLnkoKSAtIHJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBh
cmVhCisgICAgICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAt
IHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAotICAgIGd0a19tZW51X3BvcHVwKG1fcG9wdXAsIE5VTEws
IE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9u
RnVuY3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsKKyAgICBn
dGtfbWVudV9wb3B1cChtX3BvcHVwLmdldCgpLCAwLCAwLCByZWludGVycHJldF9jYXN0PEd0a01l
bnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgMCwgZ3RrX2dldF9j
dXJyZW50X2V2ZW50X3RpbWUoKSk7CiB9CiAKIHZvaWQgUG9wdXBNZW51OjpoaWRlKCkKIHsKICAg
ICBBU1NFUlQobV9wb3B1cCk7Ci0gICAgZ3RrX21lbnVfcG9wZG93bihtX3BvcHVwKTsKKyAgICBn
dGtfbWVudV9wb3Bkb3duKG1fcG9wdXAuZ2V0KCkpOwogfQogCiB2b2lkIFBvcHVwTWVudTo6dXBk
YXRlRnJvbUVsZW1lbnQoKQpAQCAtMTUwLDcgKzE0Niw3IEBAIHZvaWQgUG9wdXBNZW51OjptZW51
UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1
c2hJCiB2b2lkIFBvcHVwTWVudTo6bWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiB3aWRnZXQsIFBv
cHVwTWVudSogdGhhdCkKIHsKICAgICBBU1NFUlQodGhhdC0+bV9wb3B1cCk7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUih0aGF0LT5tX3BvcHVwKSwgd2lkZ2V0KTsKKyAg
ICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXAuZ2V0KCkp
LCB3aWRnZXQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDBhMjY2NWMuLjI4YzgzZDUgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMDktMTItMTYgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0dUS10gV2ViS2l0IEdUSyBuZWVkcyBhIHdyYXBwZXIgZm9yIHJlZiBjb3VudGVkIGds
aWIvZ29iamVjdCBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5OQorCisgICAgICAgIENvbnZlcnQgYSB1c2Ugb2YgR093blB0ciBmb3Ig
YSByZWZlcmVuY2UgY291bnRlZCB0eXBlIHRvIEdSZWZQdHIuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorCiAyMDA5LTEyLTEzICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
aW5kZXggMGVhYTdjOC4uYTJlM2NhNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJHT3duUHRy
LmgiCisjaW5jbHVkZSAiR1JlZlB0ci5oIgogI2luY2x1ZGUgIkd0a1BsdWdpbldpZGdldC5oIgog
I2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCkBAIC00NDAsNyArNDQxLDcgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgSFQKICAgICBDU3Ry
aW5nIG1pbWVUeXBlU3RyaW5nID0gbWltZVR5cGUudXRmOCgpOwogCiAgICAgQVNTRVJUKHBhcmFt
TmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7Ci0gICAgR093blB0cjxHSGFzaFRh
YmxlPiBoYXNoKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwg
Z19mcmVlLCBnX2ZyZWUpKTsKKyAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGhhc2ggPSBhZG9wdEdS
ZWYoZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUs
IGdfZnJlZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoaGFzaC5nZXQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYXJhbU5hbWVzW2ldLnV0ZjgoKS5kYXRh
KCkpLAotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45065</attachid>
            <date>2009-12-17 07:23:06 -0800</date>
            <delta_ts>2009-12-17 09:44:19 -0800</delta_ts>
            <desc>Patch with missing GHashTable specialization</desc>
            <filename>0001-Initial-GRefPtr-implementation.patch</filename>
            <type>text/plain</type>
            <size>21827</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBlZDEyMGQ2YjI4ZmY0MzM5NWQ4MjUxNTc4OWU4N2U2MzQ3ZGI4YTY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IEZyaSwgNCBEZWMgMjAwOSAwMDoxMzowNCAtMDgwMApTdWJqZWN0
OiBbUEFUQ0hdIEluaXRpYWwgR1JlZlB0ciBpbXBsZW1lbnRhdGlvbi4KCi0tLQogSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsrKysKIEph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr
CiBKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3BwICAgICAgICAgICAgICAgICB8ICAg
IDcgLQogSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HUmVmUHRyLmNwcCAgICAgICAgICAgICAgICAg
fCAgIDM2ICsrKysKIEphdmFTY3JpcHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5oICAgICAgICAgICAg
ICAgICAgIHwgIDE5NyArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICsrKwogV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvcGxh
dGZvcm0vUG9wdXBNZW51LmggICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgICAgICAgICAgICAgICAgfCAgIDU0ICsrKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oICAgICAgICAgICAgICAgICAgfCAg
IDM5ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgICAgICAgICAg
ICAgIHwgICAzNCArKy0tCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTIgKysKIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwIHwgICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwgNDIxIGluc2VydGlv
bnMoKyksIDI4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3Jl
L3d0Zi9ndGsvR1JlZlB0ci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS93
dGYvZ3RrL0dSZWZQdHIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5oCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJmNjM1NmYuLjJiYTg4NzAgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzOCBAQAorMjAwOS0xMi0xNyAgTWFydGluIFJvYmluc29uICA8bWFydGluLmph
bWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVm
IGNvdW50ZWQgZ2xpYi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgSW1wbGVtZW50IEdSZWZQdHIs
IGEgc21hcnQgcG9pbnRlciBmb3IgcmVmZXJlbmNlIGNvdW50ZWQgR09iamVjdCB0eXBlcy4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHd0Zi9ndGsvR093blB0ci5jcHA6
CisgICAgICAgIChXVEY6OkdEaXIpOgorICAgICAgICAqIHd0Zi9ndGsvR1JlZlB0ci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6KToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6R1JlZlB0cik6Cisg
ICAgICAgIChXVEY6OkdSZWZQdHI6On5HUmVmUHRyKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpnZXQpOgorICAgICAgICAoV1RGOjpHUmVm
UHRyOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvci0+KToKKyAg
ICAgICAgKFdURjo6R1JlZlB0cjo6b3BlcmF0b3IhKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Omhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Ojo6b3BlcmF0b3IpOgorICAgICAg
ICAoV1RGOjo6OnN3YXApOgorICAgICAgICAoV1RGOjpzd2FwKToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpzdGF0
aWNfcG9pbnRlcl9jYXN0KToKKyAgICAgICAgKFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0KToKKyAg
ICAgICAgKFdURjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAg
KFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisKIDIwMDktMTItMTcg
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4ZXMgZm9yIG1ha2UgZGlzdGNoZWNrLgpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5hbQppbmRleCBhNGQ2MmEyLi4wNjI2MzRiIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMjkxLDYgKzI5MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3JUcmFpdHMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL2d0
ay9HT3duUHRyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9HT3duUHRyLmggXAorCUph
dmFTY3JpcHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9n
dGsvR1JlZlB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3Bw
IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvZ3RrL1RocmVhZGluZ0d0ay5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL0NvbGxhdG9yLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3RmL2d0ay9HT3duUHRyLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvR093blB0ci5j
cHAKaW5kZXggODk5OTk2Mi4uMWExNTFiOSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3Rm
L2d0ay9HT3duUHRyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dPd25QdHIuY3Bw
CkBAIC01NywxMSArNTcsNCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R0Rpcj4o
R0RpciogcHRyKQogICAgIGlmIChwdHIpCiAgICAgICAgIGdfZGlyX2Nsb3NlKHB0cik7CiB9Ci0K
LXRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHSGFzaFRhYmxlPihHSGFzaFRhYmxlKiBw
dHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ19oYXNoX3RhYmxlX3VucmVmKHB0cik7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0
ay9HUmVmUHRyLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjNDU5MQotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUmVmUHRyLmgi
CisKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBH
SGFzaFRhYmxlKiByZWZHUHRyKEdIYXNoVGFibGUqIHB0cikKK3sKKyAgICBnX2hhc2hfdGFibGVf
cmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdIYXNoVGFibGUqIHB0
cikKK3sKKyAgICBnX2hhc2hfdGFibGVfdW5yZWYocHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL0dSZWZQdHIuaCBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9ndGsvR1JlZlB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjViNjA4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3Rr
L0dSZWZQdHIuaApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBN
YXJ0aW4gUm9iaW5zb24KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV1RGX0dSZWZQdHJfaAorI2Rl
ZmluZSBXVEZfR1JlZlB0cl9oCisKKyNpbmNsdWRlICJBbHdheXNJbmxpbmUuaCIKKyNpbmNsdWRl
IDxhbGdvcml0aG0+CisKK3R5cGVkZWYgc3RydWN0IF9HSGFzaFRhYmxlIEdIYXNoVGFibGU7CisK
K25hbWVzcGFjZSBXVEYgeworCitlbnVtIEdSZWZQdHJBZG9wdFR5cGUgeyBHUmVmUHRyQWRvcHQg
fTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogcmVmR1B0cihUKik7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgZGVyZWZHUHRyKFQqKTsKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBHUmVmUHRyOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEdSZWZQdHI8VD4g
YWRvcHRHUmVmKFQqKTsKK3RlbXBsYXRlIDw+IEdIYXNoVGFibGUqIHJlZkdQdHIoR0hhc2hUYWJs
ZSogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdIYXNoVGFibGUqIHB0cik7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHUmVmUHRyIHsKK3B1YmxpYzoKKyAgICBHUmVm
UHRyKCkgOiBtX3B0cigwKSB7IH0KKyAgICBHUmVmUHRyKFQqIHB0cikgOiBtX3B0cihwdHIpIHsg
aWYgKHB0cikgcmVmR1B0cihwdHIpOyB9CisgICAgR1JlZlB0cihjb25zdCBHUmVmUHRyJiBvKSA6
IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSByZWZHUHRyKHB0cik7IH0KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gR1JlZlB0cihjb25zdCBHUmVmUHRyPFU+JiBvKSA6IG1f
cHRyKG8uZ2V0KCkpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSByZWZHUHRyKHB0cik7IH0KKworICAg
IH5HUmVmUHRyKCkgeyBpZiAoVCogcHRyID0gbV9wdHIpIGRlcmVmR1B0cihwdHIpOyB9CisKKyAg
ICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChUKiBwdHIgPSBtX3B0cikKKyAgICAg
ICAgICAgIGRlcmVmR1B0cihwdHIpOworICAgICAgICBtX3B0ciA9IDA7CisgICAgfQorCisgICAg
VCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBUJiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiAqbV9wdHI7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFQqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBtX3B0cjsgfQorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9wdHI7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3Mg
aW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBl
cy4KKyAgICB0eXBlZGVmIFQqIEdSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOworICAgIG9w
ZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA/ICZHUmVm
UHRyOjptX3B0ciA6IDA7IH0KKworICAgIEdSZWZQdHImIG9wZXJhdG9yPShjb25zdCBHUmVmUHRy
Jik7CisgICAgR1JlZlB0ciYgb3BlcmF0b3I9KFQqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4gR1JlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IEdSZWZQdHI8VT4mKTsKKworICAgIHZvaWQgc3dh
cChHUmVmUHRyJik7CisgICAgZnJpZW5kIEdSZWZQdHIgYWRvcHRHUmVmPFQ+KFQqKTsKKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9CisgICAgLy8gQWRvcHRpbmcgY29uc3RydWN0b3IuCisg
ICAgR1JlZlB0cihUKiBwdHIsIEdSZWZQdHJBZG9wdFR5cGUpIDogbV9wdHIocHRyKSB7fQorCisg
ICAgVCogbV9wdHI7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEdSZWZQdHI8
VD4mIEdSZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBHUmVmUHRyPFQ+JiBvKQoreworICAgIFQq
IG9wdHIgPSBvLmdldCgpOworICAgIGlmIChvcHRyKQorICAgICAgICByZWZHUHRyKG9wdHIpOwor
ICAgIFQqIHB0ciA9IG1fcHRyOworICAgIG1fcHRyID0gb3B0cjsKKyAgICBpZiAocHRyKQorICAg
ICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQ
dHI8VD46Om9wZXJhdG9yPShjb25zdCBHUmVmUHRyPFU+JiBvKQoreworICAgIFQqIG9wdHIgPSBv
LmdldCgpOworICAgIGlmIChvcHRyKQorICAgICAgICByZWZHUHRyKG9wdHIpOworICAgIFQqIHB0
ciA9IG1fcHRyOworICAgIG1fcHRyID0gb3B0cjsKKyAgICBpZiAocHRyKQorICAgICAgICBkZXJl
ZkdQdHIocHRyKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0cjxUPjo6b3BlcmF0b3I9KFQqIG9wdHIpCit7Cisg
ICAgVCogcHRyID0gbV9wdHI7CisgICAgbV9wdHIgPSBvcHRyOworICAgIGlmIChwdHIpCisgICAg
ICAgIGRlcmVmR1B0cihwdHIpOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGUgPGNs
YXNzIFQ+IGlubGluZSB2b2lkIEdSZWZQdHI8VD46OnN3YXAoR1JlZlB0cjxUPiYgbykKK3sKKyAg
ICBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIHZvaWQgc3dhcChHUmVmUHRyPFQ+JiBhLCBHUmVmUHRyPFQ+JiBiKQoreworICAgIGEuc3dh
cChiKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKK3sK
KyAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHUmVmUHRyPFQ+JiBh
LCBVKiBiKQoreworICAgIHJldHVybiBhLmdldCgpID09IGI7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IEdS
ZWZQdHI8VT4mIGIpCit7CisgICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR1Jl
ZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAh
PSBiLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHUmVmUHRyPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVy
biBhLmdldCgpICE9IGI7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IEdSZWZQdHI8VT4mIGIpCit7CisgICAg
cmV0dXJuIGEgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBHUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgR1JlZlB0cjxV
PiYgcCkKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxUPihzdGF0aWNfY2FzdDxUKj4ocC5nZXQoKSkp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8
VD4gY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IEdSZWZQdHI8VT4mIHApCit7CisgICAgcmV0dXJu
IEdSZWZQdHI8VD4oY29uc3RfY2FzdDxUKj4ocC5nZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0cihjb25zdCBHUmVmUHRyPFQ+JiBwKQoreworICAgIHJl
dHVybiBwLmdldCgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gR1JlZlB0cjxUPiBhZG9w
dEdSZWYoVCogcCkKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxUPihwLCBHUmVmUHRyQWRvcHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJlZkdQdHIoVCogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKHB0cik7CisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGRlcmVmR1B0cihU
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHRyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6R1JlZlB0cjsKK3VzaW5nIFdURjo6
cmVmR1B0cjsKK3VzaW5nIFdURjo6ZGVyZWZHUHRyOwordXNpbmcgV1RGOjphZG9wdEdSZWY7Cit1
c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7Cit1c2luZyBXVEY6OmNvbnN0X3BvaW50ZXJf
Y2FzdDsKKworI2VuZGlmIC8vIFdURl9HUmVmUHRyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWYxMDI2NC4uOTk2YzcwNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOCBAQAorMjAwOS0xMi0xNyAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmlu
c29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEgd3JhcHBlciBmb3IgcmVmIGNvdW50ZWQg
Z2xpYi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgQWRkIEdSZWZQdHIgc3VwcG9ydCBmb3IgR1RL
IHR5cGVzIHRvIFdlYkNvcmUsIGFzIEpTQyBkb2VzIG5vdCBsaW5rIGFnYWluc3QKKyAgICAgICAg
R1RLKy4gQWxzbyBjb252ZXJ0IFBvcHVwTWVudTo6bV9wb3VwIGZyb20gYSByYXcgcG9pbnRlciB0
byBhIEdSZWZQdHIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIGZ1bmN0aW9uYWxpdHkgaGFz
IG5vdCBjaGFuZ2VkLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxh
dGZvcm0vUG9wdXBNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1
cE1lbnU6OlBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6On5Qb3B1cE1l
bnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTWVudTo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6Om1lbnVS
ZW1vdmVJdGVtKToKKwogMjAwOS0xMi0xNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMTYw
ZmU5My4uYTVlZmRiNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTgxLDYgKzE5ODEsOCBAQCB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAgXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVDaG9vc2VyR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJH
dGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a1BsdWdpbldpZGdldC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9Qb3B1cE1lbnUuaAppbmRleCBkYmQyYzkzLi40NDlkNDc1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51
LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgUXRBYnN0cmFjdFdlYlBvcHVwOwogdHlwZWRlZiBz
dHJ1Y3QgX0d0a01lbnUgR3RrTWVudTsKIHR5cGVkZWYgc3RydWN0IF9HdGtNZW51SXRlbSBHdGtN
ZW51SXRlbTsKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OworI2luY2x1ZGUg
IkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPGdsaWIu
aD4KICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAtMTczLDcgKzE3NCw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3dQb3B1cDsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJbnRQb2ludCBtX21l
bnVQb3NpdGlvbjsKLSAgICBHdGtNZW51KiBtX3BvcHVwOworICAgIEdSZWZQdHI8R3RrTWVudT4g
bV9wb3B1cDsKICAgICBIYXNoTWFwPEd0a1dpZGdldCosIGludD4gbV9pbmRleE1hcDsKICAgICBz
dGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlbSogaXRlbSwgUG9wdXBNZW51
Kik7CiAgICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVudSop
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42NjQ3Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR1JlZlB0ckd0ay5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmlu
c29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IEd0a1RhcmdldExp
c3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGd0a190YXJnZXRfbGlzdF9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikK
KyAgICAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdk
a0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBnZGtfY3Vyc29yX3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdka19jdXJzb3JfdW5yZWYocHRyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTQxZjUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR1JlZlB0ckd0
a19oCisjZGVmaW5lIEdSZWZQdHJHdGtfaAorCisjaW5jbHVkZSAiR1JlZlB0ci5oIgorCit0eXBl
ZGVmIHN0cnVjdCBfR3RrVGFyZ2V0TGlzdCBHdGtUYXJnZXRMaXN0OwordHlwZWRlZiBzdHJ1Y3Qg
X0dka0N1cnNvciBHZGtDdXJzb3I7CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBH
dGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOworCit0ZW1wbGF0ZSA8PiBHZGtDdXJz
b3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIo
R2RrQ3Vyc29yKiBwdHIpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVu
dUd0ay5jcHAKaW5kZXggM2Y2YjAyYS4uMDM2M2FjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1
cE1lbnVHdGsuY3BwCkBAIC0zNSwxNiArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
b3B1cE1lbnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKICAgICA6IG1fcG9w
dXBDbGllbnQoY2xpZW50KQotICAgICwgbV9wb3B1cCgwKQogewogfQogCiBQb3B1cE1lbnU6On5Q
b3B1cE1lbnUoKQogewogICAgIGlmIChtX3BvcHVwKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fcG9wdXAuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMp
OwogICAgICAgICBoaWRlKCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fcG9wdXApOwogICAg
IH0KIH0KIApAQCAtNTQsMTAgKzUyLDkgQEAgdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50
UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAKICAgICBpZiAoIW1fcG9w
dXApIHsKICAgICAgICAgbV9wb3B1cCA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKLSAgICAg
ICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QobV9wb3B1cCkpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcG9wdXAsICJ1bm1hcCIsIEdfQ0FMTEJBQ0sobWVudVVubWFwcGVkKSwgdGhp
cyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgInVubWFwIiwgR19D
QUxMQkFDSyhtZW51VW5tYXBwZWQpLCB0aGlzKTsKICAgICB9IGVsc2UKLSAgICAgICAgZ3RrX2Nv
bnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9wb3B1cCksIHJlaW50ZXJwcmV0X2Nhc3Q8
R3RrQ2FsbGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7CisgICAgICAgIGd0a19jb250YWlu
ZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpLCByZWludGVycHJldF9jYXN0
PEd0a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMpOwogCiAgICAgaW50IHgsIHk7CiAg
ICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKEdUS19XSURHRVQodmlldy0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSktPndpbmRvdywgJngsICZ5KTsKQEAgLTc4LDIwICs3NSwyMCBA
QCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZp
ZXcsIGludCBpbmRleCkKIAogICAgICAgICAvLyBGSVhNRTogQXBwbHkgdGhlIFBvcHVwTWVudVN0
eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHlsZShpKQogICAgICAgICBndGtfd2lkZ2V0X3NldF9z
ZW5zaXRpdmUoaXRlbSwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQoaSkpOwotICAgICAgICBndGtf
bWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cCksIGl0ZW0pOworICAgICAg
ICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIGl0
ZW0pOwogICAgICAgICBndGtfd2lkZ2V0X3Nob3coaXRlbSk7CiAgICAgfQogCi0gICAgZ3RrX21l
bnVfc2V0X2FjdGl2ZShtX3BvcHVwLCBpbmRleCk7CisgICAgZ3RrX21lbnVfc2V0X2FjdGl2ZSht
X3BvcHVwLmdldCgpLCBpbmRleCk7CiAKIAogICAgIC8vIFRoZSBzaXplIGNhbGxzIGFyZSBkaXJl
Y3RseSBjb3BpZWQgZnJvbSBndGtjb21ib2JveC5jIHdoaWNoIGlzIExHUEwKICAgICBHdGtSZXF1
aXNpdGlvbiByZXF1aXNpdGlvbjsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RL
X1dJREdFVChtX3BvcHVwKSwgLTEsIC0xKTsKLSAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChH
VEtfV0lER0VUKG1fcG9wdXApLCAmcmVxdWlzaXRpb24pOwotICAgIGd0a193aWRnZXRfc2V0X3Np
emVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXApLCBNQVgocmVjdC53aWR0aCgpLCByZXF1aXNp
dGlvbi53aWR0aCksIC0xKTsKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJ
REdFVChtX3BvcHVwLmdldCgpKSwgLTEsIC0xKTsKKyAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVz
dChHVEtfV0lER0VUKG1fcG9wdXAuZ2V0KCkpLCAmcmVxdWlzaXRpb24pOworICAgIGd0a193aWRn
ZXRfc2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXAuZ2V0KCkpLCBzdGQ6Om1heChy
ZWN0LndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRoKSwgLTEpOwogCi0gICAgR0xpc3QqIGNoaWxk
cmVuID0gR1RLX01FTlVfU0hFTEwobV9wb3B1cCktPmNoaWxkcmVuOworICAgIEdMaXN0KiBjaGls
ZHJlbiA9IEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLT5jaGlsZHJlbjsKICAgICBpZiAo
c2l6ZSkKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAg
ICAgIGlmIChpID4gaW5kZXgpCkBAIC0xMDMsMTggKzEwMCwxNyBAQCB2b2lkIFBvcHVwTWVudTo6
c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAg
ICAgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gaXRlbVJl
cXVpc2l0aW9uLmhlaWdodCk7CiAKICAgICAgICAgICAgIGNoaWxkcmVuID0gZ19saXN0X25leHQo
Y2hpbGRyZW4pOwotICAgICAgICB9Ci0gICAgZWxzZQotICAgICAgICAvLyBDZW50ZXIgdmVydGlj
YWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBhcmVhCi0gICAgICAgIG1fbWVu
dVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gcmVjdC5oZWlnaHQoKSAvIDIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5IHRoZSBlbXB0
eSBwb3B1cCBpbiB0aGUgY29tYm8gYm94IGFyZWEKKyAgICAgICAgICAgIG1fbWVudVBvc2l0aW9u
LnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gcmVjdC5oZWlnaHQoKSAvIDIpOwogCi0gICAgZ3Rr
X21lbnVfcG9wdXAobV9wb3B1cCwgTlVMTCwgTlVMTCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51
UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGd0a19nZXRfY3Vy
cmVudF9ldmVudF90aW1lKCkpOworICAgIGd0a19tZW51X3BvcHVwKG1fcG9wdXAuZ2V0KCksIDAs
IDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVu
Y3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsKIH0KIAogdm9p
ZCBQb3B1cE1lbnU6OmhpZGUoKQogewogICAgIEFTU0VSVChtX3BvcHVwKTsKLSAgICBndGtfbWVu
dV9wb3Bkb3duKG1fcG9wdXApOworICAgIGd0a19tZW51X3BvcGRvd24obV9wb3B1cC5nZXQoKSk7
CiB9CiAKIHZvaWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpCkBAIC0xNTAsNyArMTQ2
LDcgQEAgdm9pZCBQb3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50
KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEkKIHZvaWQgUG9wdXBNZW51OjptZW51UmVtb3Zl
SXRlbShHdGtXaWRnZXQqIHdpZGdldCwgUG9wdXBNZW51KiB0aGF0KQogewogICAgIEFTU0VSVCh0
aGF0LT5tX3BvcHVwKTsKLSAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHRo
YXQtPm1fcG9wdXApLCB3aWRnZXQpOworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIodGhhdC0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggY2YxM2M3
Zi4uYzJmMzFmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0xNyAgTWFydGluIFJvYmlu
c29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBXZWJLaXQgR1RLIG5lZWRzIGEg
d3JhcHBlciBmb3IgcmVmIGNvdW50ZWQgZ2xpYi9nb2JqZWN0IHN0cnVjdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk5CisKKyAgICAgICAgQ29u
dmVydCBhIHVzZSBvZiBHT3duUHRyIGZvciBhIHJlZmVyZW5jZSBjb3VudGVkIHR5cGUgdG8gR1Jl
ZlB0ci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisK
IDIwMDktMTItMTYgIERhbiBXaW5zaGlwICA8ZGFud0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCAwZWFhN2M4Li5hMmUzY2E3
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJHUmVmUHRy
LmgiCiAjaW5jbHVkZSAiR3RrUGx1Z2luV2lkZ2V0LmgiCiAjaW5jbHVkZSAiSFRNTEFwcGxldEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAgLTQ0MCw3ICs0NDEsNyBA
QCBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25z
dCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVAogICAgIENTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSBt
aW1lVHlwZS51dGY4KCk7CiAKICAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1W
YWx1ZXMuc2l6ZSgpKTsKLSAgICBHT3duUHRyPEdIYXNoVGFibGU+IGhhc2goZ19oYXNoX3RhYmxl
X25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfZnJlZSkpOworICAg
IEdSZWZQdHI8R0hhc2hUYWJsZT4gaGFzaCA9IGFkb3B0R1JlZihnX2hhc2hfdGFibGVfbmV3X2Z1
bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19mcmVlKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtTmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgZ19o
YXNoX3RhYmxlX2luc2VydChoYXNoLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfc3RyZHVwKHBhcmFtTmFtZXNbaV0udXRmOCgpLmRhdGEoKSksCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>